@scriptc/compiler 0.4.1 → 0.4.2

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 (680) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +582 -78
  2. package/dist/backend/cycle-analysis.d.ts +2 -1
  3. package/dist/backend/cycle-analysis.js +4 -4
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-mutability.d.ts +2 -1
  6. package/dist/backend/cycle-mutability.js +2 -2
  7. package/dist/backend/cycle-mutability.js.map +1 -1
  8. package/dist/backend/executable-features.js +4 -1
  9. package/dist/backend/executable-features.js.map +1 -1
  10. package/dist/backend/immutability.d.ts +2 -1
  11. package/dist/backend/immutability.js +2 -2
  12. package/dist/backend/immutability.js.map +1 -1
  13. package/dist/backend/library-pack.js +4 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +7 -3
  16. package/dist/backend/llvm/alloc.js +7 -4
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/array-search.js +2 -1
  19. package/dist/backend/llvm/array-search.js.map +1 -1
  20. package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
  21. package/dist/backend/llvm/bytes-loop-versions.js +115 -19
  22. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  23. package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
  24. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  25. package/dist/backend/llvm/classes.d.ts +72 -1
  26. package/dist/backend/llvm/classes.js +331 -45
  27. package/dist/backend/llvm/classes.js.map +1 -1
  28. package/dist/backend/llvm/classes.test.js +223 -16
  29. package/dist/backend/llvm/classes.test.js.map +1 -1
  30. package/dist/backend/llvm/common.d.ts +1 -3
  31. package/dist/backend/llvm/common.js +1 -3
  32. package/dist/backend/llvm/common.js.map +1 -1
  33. package/dist/backend/llvm/constant-callbacks.js +8 -4
  34. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  35. package/dist/backend/llvm/constant-callbacks.test.js +4 -4
  36. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  37. package/dist/backend/llvm/counted-loops.d.ts +4 -1
  38. package/dist/backend/llvm/counted-loops.js +62 -23
  39. package/dist/backend/llvm/counted-loops.js.map +1 -1
  40. package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
  41. package/dist/backend/llvm/dense-array-loops.js +46 -10
  42. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  43. package/dist/backend/llvm/dense-array-loops.test.js +50 -14
  44. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  45. package/dist/backend/llvm/dyn.d.ts +25 -1
  46. package/dist/backend/llvm/dyn.js +331 -8
  47. package/dist/backend/llvm/dyn.js.map +1 -1
  48. package/dist/backend/llvm/emit-function.js +22 -6
  49. package/dist/backend/llvm/emit-function.js.map +1 -1
  50. package/dist/backend/llvm/emit-module.js +17 -11
  51. package/dist/backend/llvm/emit-module.js.map +1 -1
  52. package/dist/backend/llvm/emit-statements.d.ts +0 -23
  53. package/dist/backend/llvm/emit-statements.js +325 -25
  54. package/dist/backend/llvm/emit-statements.js.map +1 -1
  55. package/dist/backend/llvm/emitter.d.ts +141 -15
  56. package/dist/backend/llvm/emitter.js +537 -64
  57. package/dist/backend/llvm/emitter.js.map +1 -1
  58. package/dist/backend/llvm/expr-async.js +19 -0
  59. package/dist/backend/llvm/expr-async.js.map +1 -1
  60. package/dist/backend/llvm/expr-bytes.d.ts +5 -2
  61. package/dist/backend/llvm/expr-bytes.js +110 -40
  62. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  63. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  64. package/dist/backend/llvm/expr-calls.js +34 -22
  65. package/dist/backend/llvm/expr-calls.js.map +1 -1
  66. package/dist/backend/llvm/expr-containers.js +21 -5
  67. package/dist/backend/llvm/expr-containers.js.map +1 -1
  68. package/dist/backend/llvm/expr-control.js +2 -3
  69. package/dist/backend/llvm/expr-control.js.map +1 -1
  70. package/dist/backend/llvm/expr-dynamic.js +54 -6
  71. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  72. package/dist/backend/llvm/expr-primitives.js +26 -8
  73. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  74. package/dist/backend/llvm/expr-stream-bridges.js +38 -6
  75. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  76. package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
  77. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  78. package/dist/backend/llvm/lib-dispatch.js +10 -0
  79. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  80. package/dist/backend/llvm/lib-filesystem.js +61 -0
  81. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  82. package/dist/backend/llvm/lib-http2.d.ts +4 -0
  83. package/dist/backend/llvm/lib-http2.js +20 -17
  84. package/dist/backend/llvm/lib-http2.js.map +1 -1
  85. package/dist/backend/llvm/lib-process.js +65 -14
  86. package/dist/backend/llvm/lib-process.js.map +1 -1
  87. package/dist/backend/llvm/lib-shared.js +53 -1
  88. package/dist/backend/llvm/lib-shared.js.map +1 -1
  89. package/dist/backend/llvm/lib-stream.js +65 -28
  90. package/dist/backend/llvm/lib-stream.js.map +1 -1
  91. package/dist/backend/llvm/lib-tls.js +23 -0
  92. package/dist/backend/llvm/lib-tls.js.map +1 -1
  93. package/dist/backend/llvm/local-array-reads.js +66 -45
  94. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  95. package/dist/backend/llvm/local-array-reads.test.js +14 -0
  96. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  97. package/dist/backend/llvm/publish.d.ts +8 -1
  98. package/dist/backend/llvm/publish.js +64 -25
  99. package/dist/backend/llvm/publish.js.map +1 -1
  100. package/dist/backend/llvm/publish.test.js +3 -0
  101. package/dist/backend/llvm/publish.test.js.map +1 -1
  102. package/dist/backend/llvm/receivers.js +1 -1
  103. package/dist/backend/llvm/receivers.js.map +1 -1
  104. package/dist/backend/llvm/reference-writes.js +2 -0
  105. package/dist/backend/llvm/reference-writes.js.map +1 -1
  106. package/dist/backend/llvm/regex-matchers.js +161 -14
  107. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  108. package/dist/backend/llvm/regex-matchers.test.js +18 -0
  109. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  110. package/dist/backend/llvm/shapes.d.ts +9 -7
  111. package/dist/backend/llvm/shapes.js +12 -10
  112. package/dist/backend/llvm/shapes.js.map +1 -1
  113. package/dist/backend/llvm/string-lifetimes.test.js +2 -1
  114. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  115. package/dist/backend/llvm/string-reads.d.ts +3 -0
  116. package/dist/backend/llvm/string-reads.js +84 -0
  117. package/dist/backend/llvm/string-reads.js.map +1 -1
  118. package/dist/backend/llvm/wasm-modules.d.ts +6 -5
  119. package/dist/backend/llvm/wasm-modules.js +32 -9
  120. package/dist/backend/llvm/wasm-modules.js.map +1 -1
  121. package/dist/backend/mangle.d.ts +3 -0
  122. package/dist/backend/mangle.js +5 -0
  123. package/dist/backend/mangle.js.map +1 -1
  124. package/dist/backend/native/contracts.d.ts +22 -4
  125. package/dist/backend/native/executable.js +24 -8
  126. package/dist/backend/native/executable.js.map +1 -1
  127. package/dist/backend/native/library.js +1 -0
  128. package/dist/backend/native/library.js.map +1 -1
  129. package/dist/backend/native-codegen.d.ts +11 -6
  130. package/dist/backend/native-codegen.js +36 -9
  131. package/dist/backend/native-codegen.js.map +1 -1
  132. package/dist/backend/native-codegen.test.js +0 -23
  133. package/dist/backend/native-codegen.test.js.map +1 -1
  134. package/dist/backend/native-link-info-core.d.ts +14 -4
  135. package/dist/backend/native-link-info-core.js.map +1 -1
  136. package/dist/backend/optimization.d.ts +2 -2
  137. package/dist/backend/runtime-abi.d.ts +2 -2
  138. package/dist/backend/runtime-abi.js +2 -2
  139. package/dist/backend/runtime-pack-core.d.ts +1 -1
  140. package/dist/backend/runtime-pack-core.js +1 -1
  141. package/dist/backend/runtime-pack-core.js.map +1 -1
  142. package/dist/backend/runtime-pack-targets.test.js +4 -1
  143. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  144. package/dist/backend/runtime-pack.d.ts +0 -21
  145. package/dist/backend/runtime-pack.js +0 -29
  146. package/dist/backend/runtime-pack.js.map +1 -1
  147. package/dist/backend/runtime-pack.test.js +9 -69
  148. package/dist/backend/runtime-pack.test.js.map +1 -1
  149. package/dist/backend/target-diagnostics.js +31 -1
  150. package/dist/backend/target-diagnostics.js.map +1 -1
  151. package/dist/backend/warm-cache.js +3 -0
  152. package/dist/backend/warm-cache.js.map +1 -1
  153. package/dist/cli/command.js +26 -6
  154. package/dist/cli/command.js.map +1 -1
  155. package/dist/cli/usage.d.ts +5 -1
  156. package/dist/cli/usage.js +7 -2
  157. package/dist/cli/usage.js.map +1 -1
  158. package/dist/contracts/check.js +1 -1
  159. package/dist/contracts/check.js.map +1 -1
  160. package/dist/coverage/report.d.ts +7 -2
  161. package/dist/coverage/report.js +18 -0
  162. package/dist/coverage/report.js.map +1 -1
  163. package/dist/coverage/verdict-cache.d.ts +1 -0
  164. package/dist/coverage/verdict-cache.js +4 -0
  165. package/dist/coverage/verdict-cache.js.map +1 -1
  166. package/dist/coverage/verdict-semantic.js +4 -0
  167. package/dist/coverage/verdict-semantic.js.map +1 -1
  168. package/dist/diagnostics/diagnostic.js.map +1 -1
  169. package/dist/diagnostics/dynamic-tier.d.ts +40 -0
  170. package/dist/diagnostics/dynamic-tier.js +57 -0
  171. package/dist/diagnostics/dynamic-tier.js.map +1 -0
  172. package/dist/diagnostics/envelope.d.ts +2 -1
  173. package/dist/diagnostics/envelope.js +5 -2
  174. package/dist/diagnostics/envelope.js.map +1 -1
  175. package/dist/executable/executable-cache.d.ts +23 -1
  176. package/dist/executable/executable-cache.js +59 -7
  177. package/dist/executable/executable-cache.js.map +1 -1
  178. package/dist/executable/executable-cache.test.js +45 -3
  179. package/dist/executable/executable-cache.test.js.map +1 -1
  180. package/dist/executable/prepare.js +3 -1
  181. package/dist/executable/prepare.js.map +1 -1
  182. package/dist/frontend/analysis.js +1 -0
  183. package/dist/frontend/analysis.js.map +1 -1
  184. package/dist/frontend/dispose-hook.d.ts +2 -0
  185. package/dist/frontend/dispose-hook.js +14 -0
  186. package/dist/frontend/dispose-hook.js.map +1 -0
  187. package/dist/frontend/jsx-entities.d.ts +4 -0
  188. package/dist/frontend/jsx-entities.js +259 -0
  189. package/dist/frontend/jsx-entities.js.map +1 -0
  190. package/dist/frontend/jsx-source.d.ts +71 -0
  191. package/dist/frontend/jsx-source.js +781 -0
  192. package/dist/frontend/jsx-source.js.map +1 -0
  193. package/dist/frontend/jsx-source.test.d.ts +1 -0
  194. package/dist/frontend/jsx-source.test.js +200 -0
  195. package/dist/frontend/jsx-source.test.js.map +1 -0
  196. package/dist/frontend/literal-values.test.js +8 -9
  197. package/dist/frontend/literal-values.test.js.map +1 -1
  198. package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
  199. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  200. package/dist/frontend/lowering/array-values.js +3 -2
  201. package/dist/frontend/lowering/array-values.js.map +1 -1
  202. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  203. package/dist/frontend/lowering/binding-analysis.js +2 -2
  204. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  205. package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
  206. package/dist/frontend/lowering/builtins/arguments.js +30 -15
  207. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  208. package/dist/frontend/lowering/builtins/atomics.js +10 -6
  209. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  210. package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
  211. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  212. package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
  213. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  214. package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
  215. package/dist/frontend/lowering/builtins/crypto.js +59 -3
  216. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  217. package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
  218. package/dist/frontend/lowering/builtins/date-classes.js +477 -0
  219. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
  220. package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
  221. package/dist/frontend/lowering/builtins/dates.js +55 -26
  222. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  223. package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
  224. package/dist/frontend/lowering/builtins/dh.js +151 -0
  225. package/dist/frontend/lowering/builtins/dh.js.map +1 -0
  226. package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
  227. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  228. package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
  229. package/dist/frontend/lowering/builtins/ecdh.js +7 -7
  230. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
  231. package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
  232. package/dist/frontend/lowering/builtins/errors.js +110 -0
  233. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  234. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
  235. package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
  236. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  237. package/dist/frontend/lowering/builtins/filesystem.js +6 -4
  238. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  239. package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
  240. package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
  241. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
  242. package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
  243. package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
  244. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
  245. package/dist/frontend/lowering/builtins/json.js +2 -1
  246. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  247. package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
  248. package/dist/frontend/lowering/builtins/key-object.js +20 -7
  249. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  250. package/dist/frontend/lowering/builtins/module-calls.js +11 -4
  251. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  252. package/dist/frontend/lowering/builtins/numbers.js +9 -5
  253. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  254. package/dist/frontend/lowering/builtins/operating-system.js +4 -3
  255. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  256. package/dist/frontend/lowering/builtins/performance.js +3 -2
  257. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  258. package/dist/frontend/lowering/builtins/process.js +3 -2
  259. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  260. package/dist/frontend/lowering/builtins/promises.js +3 -2
  261. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  262. package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
  263. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  264. package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
  265. package/dist/frontend/lowering/builtins/readline.js +23 -6
  266. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  267. package/dist/frontend/lowering/builtins/strings.js +13 -5
  268. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  269. package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
  270. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  271. package/dist/frontend/lowering/builtins/timers.js +1 -1
  272. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  273. package/dist/frontend/lowering/builtins/url.js +4 -3
  274. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  275. package/dist/frontend/lowering/builtins/v8.js +2 -1
  276. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  277. package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
  278. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
  279. package/dist/frontend/lowering/call-arguments.js +2 -1
  280. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  281. package/dist/frontend/lowering/call-signatures.js +13 -6
  282. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  283. package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
  284. package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
  285. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
  286. package/dist/frontend/lowering/class-assertions.js +3 -2
  287. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  288. package/dist/frontend/lowering/class-construction.d.ts +2 -1
  289. package/dist/frontend/lowering/class-construction.js +8 -13
  290. package/dist/frontend/lowering/class-construction.js.map +1 -1
  291. package/dist/frontend/lowering/class-descriptors.js +1 -1
  292. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  293. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
  294. package/dist/frontend/lowering/class-dynamic-dispatch.js +568 -151
  295. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  296. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
  297. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  298. package/dist/frontend/lowering/class-method-mutations.js +3 -0
  299. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  300. package/dist/frontend/lowering/class-method-values.js +1 -1
  301. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  302. package/dist/frontend/lowering/class-protocols.d.ts +7 -0
  303. package/dist/frontend/lowering/class-protocols.js +64 -4
  304. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  305. package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
  306. package/dist/frontend/lowering/class-prototypes.js +36 -3
  307. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  308. package/dist/frontend/lowering/class-to-primitive.js +25 -5
  309. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  310. package/dist/frontend/lowering/class-unions.js +2 -1
  311. package/dist/frontend/lowering/class-unions.js.map +1 -1
  312. package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
  313. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  314. package/dist/frontend/lowering/coercions/structural.js +8 -7
  315. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  316. package/dist/frontend/lowering/coercions/unions.js +8 -7
  317. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  318. package/dist/frontend/lowering/collection-ingestion.js +2 -1
  319. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  320. package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
  321. package/dist/frontend/lowering/containers/array-callbacks.js +14 -13
  322. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  323. package/dist/frontend/lowering/containers/array-concat.js +2 -1
  324. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  325. package/dist/frontend/lowering/containers/array-construction.js +25 -4
  326. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  327. package/dist/frontend/lowering/containers/array-methods.js +6 -5
  328. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  329. package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
  330. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  331. package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
  332. package/dist/frontend/lowering/containers/bytes.js +129 -28
  333. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  334. package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
  335. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  336. package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
  337. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  338. package/dist/frontend/lowering/containers/collection-methods.js +8 -7
  339. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  340. package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
  341. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  342. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
  343. package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
  344. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  345. package/dist/frontend/lowering/containers/string-and-regexp.js +36 -9
  346. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  347. package/dist/frontend/lowering/containers/string-replacement.js +2 -1
  348. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  349. package/dist/frontend/lowering/cycle-initialization.js +25 -4
  350. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  351. package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
  352. package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
  353. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  354. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  355. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  356. package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
  357. package/dist/frontend/lowering/dispatch-sites.js +204 -0
  358. package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
  359. package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
  360. package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
  361. package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
  362. package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
  363. package/dist/frontend/lowering/dyn-streams.js +1 -1
  364. package/dist/frontend/lowering/dyn-streams.js.map +1 -1
  365. package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
  366. package/dist/frontend/lowering/dynamic-tier.js +327 -0
  367. package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
  368. package/dist/frontend/lowering/error-methods.js +4 -0
  369. package/dist/frontend/lowering/error-methods.js.map +1 -1
  370. package/dist/frontend/lowering/expressions/array-literals.js +15 -0
  371. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  372. package/dist/frontend/lowering/expressions/binary.js +45 -3
  373. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  374. package/dist/frontend/lowering/expressions/element-access.js +17 -1
  375. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  376. package/dist/frontend/lowering/expressions/identifiers.js +46 -7
  377. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  378. package/dist/frontend/lowering/expressions/narrowing.js +35 -5
  379. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  380. package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
  381. package/dist/frontend/lowering/expressions/object-literals.js +27 -6
  382. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  383. package/dist/frontend/lowering/expressions/optional-chains.js +5 -5
  384. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  385. package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
  386. package/dist/frontend/lowering/expressions/property-access.js +99 -7
  387. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  388. package/dist/frontend/lowering/expressions/relational.js +63 -5
  389. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  390. package/dist/frontend/lowering/expressions/updates.js +63 -9
  391. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  392. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
  393. package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
  394. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  395. package/dist/frontend/lowering/generic-functions.d.ts +42 -1
  396. package/dist/frontend/lowering/generic-functions.js +448 -18
  397. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  398. package/dist/frontend/lowering/intern-tables.js +2 -1
  399. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  400. package/dist/frontend/lowering/iterator-adapters.js +9 -8
  401. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  402. package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
  403. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
  404. package/dist/frontend/lowering/json-require.js +2 -1
  405. package/dist/frontend/lowering/json-require.js.map +1 -1
  406. package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
  407. package/dist/frontend/lowering/key-order-witness.js +21 -4
  408. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  409. package/dist/frontend/lowering/key-order-witness.test.js +38 -2
  410. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  411. package/dist/frontend/lowering/lifetime-regions.js +2 -1
  412. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  413. package/dist/frontend/lowering/lower-assert.js +6 -5
  414. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  415. package/dist/frontend/lowering/lower-async-iteration.js +3 -1
  416. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  417. package/dist/frontend/lowering/lower-calls.d.ts +4 -0
  418. package/dist/frontend/lowering/lower-calls.js +339 -91
  419. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  420. package/dist/frontend/lowering/lower-classes.d.ts +18 -0
  421. package/dist/frontend/lowering/lower-classes.js +280 -25
  422. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  423. package/dist/frontend/lowering/lower-dgram.js +3 -2
  424. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  425. package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
  426. package/dist/frontend/lowering/lower-event-emitter.js +267 -20
  427. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  428. package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
  429. package/dist/frontend/lowering/lower-exprs.js +116 -11
  430. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  431. package/dist/frontend/lowering/lower-functions.js +304 -72
  432. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  433. package/dist/frontend/lowering/lower-inspect.js +10 -6
  434. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  435. package/dist/frontend/lowering/lower-mixins.js +2 -1
  436. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  437. package/dist/frontend/lowering/lower-mock.js +2 -1
  438. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  439. package/dist/frontend/lowering/lower-modules.js +15 -5
  440. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  441. package/dist/frontend/lowering/lower-modules.test.js +2 -2
  442. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  443. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
  444. package/dist/frontend/lowering/lower-namespaces.js +4 -3
  445. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  446. package/dist/frontend/lowering/lower-server.d.ts +10 -0
  447. package/dist/frontend/lowering/lower-server.js +237 -59
  448. package/dist/frontend/lowering/lower-server.js.map +1 -1
  449. package/dist/frontend/lowering/lower-stdlib.js +12 -10
  450. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  451. package/dist/frontend/lowering/lower-stmts.js +168 -20
  452. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  453. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  454. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  455. package/dist/frontend/lowering/lower-stream.js +575 -165
  456. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  457. package/dist/frontend/lowering/lower-timers.js +4 -3
  458. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  459. package/dist/frontend/lowering/lowerer.d.ts +125 -28
  460. package/dist/frontend/lowering/lowerer.js +557 -63
  461. package/dist/frontend/lowering/lowerer.js.map +1 -1
  462. package/dist/frontend/lowering/lowerer.test.js +21 -9
  463. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  464. package/dist/frontend/lowering/narrowing-stability.js +5 -0
  465. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  466. package/dist/frontend/lowering/native-ffi.js +1 -1
  467. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  468. package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
  469. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  470. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  471. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  472. package/dist/frontend/lowering/private-brands.d.ts +9 -0
  473. package/dist/frontend/lowering/private-brands.js +66 -15
  474. package/dist/frontend/lowering/private-brands.js.map +1 -1
  475. package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
  476. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  477. package/dist/frontend/lowering/require-initialization.js +2 -1
  478. package/dist/frontend/lowering/require-initialization.js.map +1 -1
  479. package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
  480. package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
  481. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  482. package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
  483. package/dist/frontend/lowering/runtime-optional-records.js +18 -5
  484. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  485. package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
  486. package/dist/frontend/lowering/site-dependencies.js +84 -0
  487. package/dist/frontend/lowering/site-dependencies.js.map +1 -0
  488. package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
  489. package/dist/frontend/lowering/site-dependencies.test.js +53 -0
  490. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
  491. package/dist/frontend/lowering/stable-names.d.ts +11 -0
  492. package/dist/frontend/lowering/stable-names.js +35 -0
  493. package/dist/frontend/lowering/stable-names.js.map +1 -0
  494. package/dist/frontend/lowering/static-typeof.d.ts +2 -2
  495. package/dist/frontend/lowering/static-typeof.js +42 -3
  496. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  497. package/dist/frontend/lowering/strict-equality.js +2 -1
  498. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  499. package/dist/frontend/lowering/structural-positions.d.ts +32 -0
  500. package/dist/frontend/lowering/structural-positions.js +108 -0
  501. package/dist/frontend/lowering/structural-positions.js.map +1 -0
  502. package/dist/frontend/lowering/surfaces.js +42 -26
  503. package/dist/frontend/lowering/surfaces.js.map +1 -1
  504. package/dist/frontend/lowering/var-hoisting.js +37 -3
  505. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  506. package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
  507. package/dist/frontend/npm-static-tsc-helpers.js +106 -0
  508. package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
  509. package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
  510. package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
  511. package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
  512. package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
  513. package/dist/frontend/npm-static-type-exports-host.js +214 -0
  514. package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
  515. package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
  516. package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
  517. package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
  518. package/dist/frontend/npm-static-type-exports.d.ts +52 -0
  519. package/dist/frontend/npm-static-type-exports.js +261 -0
  520. package/dist/frontend/npm-static-type-exports.js.map +1 -0
  521. package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
  522. package/dist/frontend/npm-static-type-exports.test.js +103 -0
  523. package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
  524. package/dist/frontend/npm-static-umd.d.ts +6 -0
  525. package/dist/frontend/npm-static-umd.js +203 -0
  526. package/dist/frontend/npm-static-umd.js.map +1 -0
  527. package/dist/frontend/npm-static-umd.test.d.ts +1 -0
  528. package/dist/frontend/npm-static-umd.test.js +105 -0
  529. package/dist/frontend/npm-static-umd.test.js.map +1 -0
  530. package/dist/frontend/npm-static.d.ts +8 -0
  531. package/dist/frontend/npm-static.js +47 -2
  532. package/dist/frontend/npm-static.js.map +1 -1
  533. package/dist/frontend/program.d.ts +13 -0
  534. package/dist/frontend/program.js +103 -6
  535. package/dist/frontend/program.js.map +1 -1
  536. package/dist/frontend/program.test.js +1 -1
  537. package/dist/frontend/program.test.js.map +1 -1
  538. package/dist/frontend/services.d.ts +6 -0
  539. package/dist/frontend/services.js +18 -0
  540. package/dist/frontend/services.js.map +1 -1
  541. package/dist/frontend/ts7/ast-node.d.ts +21 -7
  542. package/dist/frontend/ts7/ast-node.js +131 -29
  543. package/dist/frontend/ts7/ast-node.js.map +1 -1
  544. package/dist/frontend/ts7/ast-node.test.js +60 -0
  545. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  546. package/dist/frontend/ts7/ast-wire.d.ts +27 -2
  547. package/dist/frontend/ts7/ast-wire.js +124 -21
  548. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  549. package/dist/frontend/ts7/ast.d.ts +23 -2
  550. package/dist/frontend/ts7/ast.js +143 -2
  551. package/dist/frontend/ts7/ast.js.map +1 -1
  552. package/dist/frontend/ts7/checker.d.ts +13 -1
  553. package/dist/frontend/ts7/checker.js +75 -1
  554. package/dist/frontend/ts7/checker.js.map +1 -1
  555. package/dist/frontend/ts7/checker.test.js +9 -6
  556. package/dist/frontend/ts7/checker.test.js.map +1 -1
  557. package/dist/frontend/ts7/enums.d.ts +3 -3
  558. package/dist/frontend/ts7/enums.generated.d.ts +10 -0
  559. package/dist/frontend/ts7/enums.generated.js +21 -0
  560. package/dist/frontend/ts7/enums.generated.js.map +1 -1
  561. package/dist/frontend/ts7/enums.js +19 -0
  562. package/dist/frontend/ts7/enums.js.map +1 -1
  563. package/dist/frontend/ts7/program-host.js +5 -2
  564. package/dist/frontend/ts7/program-host.js.map +1 -1
  565. package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
  566. package/dist/frontend/ts7/semantic-checker.js +25 -20
  567. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  568. package/dist/frontend/ts7/semantic-json.d.ts +13 -0
  569. package/dist/frontend/ts7/semantic-json.js +146 -0
  570. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  571. package/dist/frontend/ts7/semantic-json.test.js +57 -1
  572. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  573. package/dist/frontend/ts7/semantic-model.d.ts +15 -0
  574. package/dist/frontend/ts7/semantic-model.js +67 -19
  575. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  576. package/dist/frontend/ts7/semantic-model.test.js +3 -2
  577. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  578. package/dist/frontend/ts7/session.js +1 -1
  579. package/dist/frontend/ts7/session.js.map +1 -1
  580. package/dist/frontend/tsc-codes.d.ts +1 -1
  581. package/dist/frontend/tsc-codes.js +7 -0
  582. package/dist/frontend/tsc-codes.js.map +1 -1
  583. package/dist/frontend/type-mapper.d.ts +38 -6
  584. package/dist/frontend/type-mapper.js +265 -32
  585. package/dist/frontend/type-mapper.js.map +1 -1
  586. package/dist/frontend/type-mapper.test.js +1 -1
  587. package/dist/frontend/type-mapper.test.js.map +1 -1
  588. package/dist/frontend-process-args.d.ts +4 -0
  589. package/dist/frontend-process-args.js +52 -0
  590. package/dist/frontend-process-args.js.map +1 -0
  591. package/dist/frontend-process-args.test.d.ts +1 -0
  592. package/dist/frontend-process-args.test.js +47 -0
  593. package/dist/frontend-process-args.test.js.map +1 -0
  594. package/dist/frontend-process.d.ts +1 -0
  595. package/dist/frontend-process.js +23 -0
  596. package/dist/frontend-process.js.map +1 -0
  597. package/dist/heap-collection.d.ts +16 -0
  598. package/dist/heap-collection.js +42 -0
  599. package/dist/heap-collection.js.map +1 -0
  600. package/dist/heap-collection.test.d.ts +1 -0
  601. package/dist/heap-collection.test.js +59 -0
  602. package/dist/heap-collection.test.js.map +1 -0
  603. package/dist/heap-pressure.d.ts +2 -0
  604. package/dist/heap-pressure.js +12 -0
  605. package/dist/heap-pressure.js.map +1 -0
  606. package/dist/index.d.ts +7 -0
  607. package/dist/index.js +402 -86
  608. package/dist/index.js.map +1 -1
  609. package/dist/ir/array-length-stability.js +7 -0
  610. package/dist/ir/array-length-stability.js.map +1 -1
  611. package/dist/ir/array-length-stability.test.js +25 -0
  612. package/dist/ir/array-length-stability.test.js.map +1 -1
  613. package/dist/ir/builtin-effects.js +28 -0
  614. package/dist/ir/builtin-effects.js.map +1 -1
  615. package/dist/ir/builtin-signatures.d.ts +5 -1
  616. package/dist/ir/builtin-signatures.js +141 -12
  617. package/dist/ir/builtin-signatures.js.map +1 -1
  618. package/dist/ir/final-fields.d.ts +2 -1
  619. package/dist/ir/final-fields.js +2 -2
  620. package/dist/ir/final-fields.js.map +1 -1
  621. package/dist/ir/function-references.test.js +2 -0
  622. package/dist/ir/function-references.test.js.map +1 -1
  623. package/dist/ir/int32-slots.d.ts +13 -5
  624. package/dist/ir/int32-slots.js +112 -115
  625. package/dist/ir/int32-slots.js.map +1 -1
  626. package/dist/ir/int32-slots.test.js +3 -1
  627. package/dist/ir/int32-slots.test.js.map +1 -1
  628. package/dist/ir/integer-loop-facts.d.ts +9 -4
  629. package/dist/ir/integer-loop-facts.js +93 -18
  630. package/dist/ir/integer-loop-facts.js.map +1 -1
  631. package/dist/ir/integer-loops.d.ts +49 -0
  632. package/dist/ir/integer-loops.js +193 -39
  633. package/dist/ir/integer-loops.js.map +1 -1
  634. package/dist/ir/integer-loops.test.js +201 -1
  635. package/dist/ir/integer-loops.test.js.map +1 -1
  636. package/dist/ir/integer-ranges.test.js +64 -0
  637. package/dist/ir/integer-ranges.test.js.map +1 -1
  638. package/dist/ir/ir.d.ts +17 -2
  639. package/dist/ir/ir.js +3 -1
  640. package/dist/ir/ir.js.map +1 -1
  641. package/dist/ir/runtime-features.d.ts +31 -7
  642. package/dist/ir/runtime-features.js +138 -11
  643. package/dist/ir/runtime-features.js.map +1 -1
  644. package/dist/ir/tiers.js +1 -0
  645. package/dist/ir/tiers.js.map +1 -1
  646. package/dist/ir/traverse.d.ts +2 -0
  647. package/dist/ir/traverse.js +14 -2
  648. package/dist/ir/traverse.js.map +1 -1
  649. package/dist/ir/validate.js +56 -16
  650. package/dist/ir/validate.js.map +1 -1
  651. package/dist/library/ir-policy.js +10 -0
  652. package/dist/library/ir-policy.js.map +1 -1
  653. package/dist/library/library-cache.d.ts +2 -0
  654. package/dist/library/library-cache.js.map +1 -1
  655. package/dist/library/prepare.js +2 -0
  656. package/dist/library/prepare.js.map +1 -1
  657. package/dist/native/cli.js +5 -0
  658. package/dist/native/cli.js.map +1 -1
  659. package/dist/native/prepare.js +5 -1
  660. package/dist/native/prepare.js.map +1 -1
  661. package/dist/native/sanitizer.test.js +4 -1
  662. package/dist/native/sanitizer.test.js.map +1 -1
  663. package/dist/startup-cache.d.ts +1 -0
  664. package/dist/startup-cache.js +1 -0
  665. package/dist/startup-cache.js.map +1 -1
  666. package/dist/text-parts.d.ts +7 -0
  667. package/dist/text-parts.js +44 -0
  668. package/dist/text-parts.js.map +1 -1
  669. package/dist/text-parts.test.d.ts +1 -0
  670. package/dist/text-parts.test.js +46 -0
  671. package/dist/text-parts.test.js.map +1 -0
  672. package/dist/timing.d.ts +9 -2
  673. package/dist/timing.js +7 -4
  674. package/dist/timing.js.map +1 -1
  675. package/dist/wasm/translate.d.ts +4 -0
  676. package/dist/wasm/translate.js +2 -2
  677. package/dist/wasm/translate.js.map +1 -1
  678. package/package.json +21 -21
  679. package/shims/undici/core/client.ts +4 -4
  680. package/surface-manifest.json +19 -49
package/dist/index.js CHANGED
@@ -10,21 +10,26 @@ import { commentOnlyReplay } from "./coverage/verdict-semantic.js";
10
10
  import { llvmRefusalDiag, targetRefusalDiag } from "./backend/target-diagnostics.js";
11
11
  import { compilePackedLibrary } from "./backend/library-pack.js";
12
12
  import { InternalCompilerError } from "./errors.js";
13
+ import { frontendProcessExecArgv } from "./frontend-process-args.js";
14
+ import { spawn } from "node:child_process";
13
15
  import { createHash } from "node:crypto";
14
- import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
16
+ import { existsSync } from "node:fs";
17
+ import { copyFile, mkdir, mkdtemp, readFile, rename, rm, writeFile } from "node:fs/promises";
18
+ import { tmpdir } from "node:os";
15
19
  import { basename, dirname, join, resolve } from "node:path";
20
+ import { fileURLToPath } from "node:url";
16
21
  import { clearCcCaches, configuredTargetPlatform, } from "./backend/native-toolchain.js";
17
22
  import { buildCacheRoot, prepareBuildCacheRoot, pruneBuildCache } from "./backend/build-cache.js";
18
23
  import { CcCompileError, compileExternalC, compileExternalCLibrary, executableNativeEnvironmentFingerprint, mobileLibraryTarget, mobileTargetRefusal, resolveCc, } from "./backend/external-c.js";
19
- import { emitLlvmModuleSource, LlvmUnsupportedError } from "./backend/llvm/emitter.js";
24
+ import { emitLlvmModuleSource, LlvmUnsupportedError, lowRegionTarget, } from "./backend/llvm/emitter.js";
20
25
  import { inlineRcOption } from "./backend/llvm/shapes.js";
21
- import { emitNativeArtifact, NativeCodegenError, writeLlvmSource, } from "./backend/native-codegen.js";
26
+ import { emitNativeArtifact, isLlvmFile, llvmInputBytes, NativeCodegenError, writeLlvmSource, } from "./backend/native-codegen.js";
22
27
  import { nativePartitionPaths, nativeProgramPartitions } from "./backend/native-codegen-core.js";
23
28
  import { privateSiblingPath } from "./backend/build-cache.js";
24
29
  import { nativeCodegenTarget, nativeCodegenTargetRefusal } from "./backend/targets.js";
25
30
  import { windowsSubsystemLinkerArgs } from "./backend/targets.js";
26
31
  import { createNativeLinkInfo } from "./backend/native-link-info.js";
27
- import { RuntimePackError, loadRuntimeBitcode } from "./backend/runtime-pack.js";
32
+ import { RuntimePackError } from "./backend/runtime-pack.js";
28
33
  import { createNativeLinkPlan } from "./backend/link-plan.js";
29
34
  import { nativeProfileKey, nativeProfileRefusal, } from "./backend/native-profile.js";
30
35
  import { executableLinkerEnvironmentFingerprint, linkNativeExecutable, platformLinkerSupportsPersistentCache, resolvePlatformLinker, } from "./backend/linker.js";
@@ -37,25 +42,27 @@ import { canonicalModuleGraph, clearSidecarCaches, compilerReleaseVersion, libra
37
42
  import {} from "./ir/ir.js";
38
43
  import { moduleRuntimeFeatures } from "./ir/runtime-features.js";
39
44
  import { serializeModuleParts } from "./ir/serialize.js";
40
- import { writeTextParts } from "./text-parts.js";
45
+ import { readTextParts, writeTextParts } from "./text-parts.js";
41
46
  import { validateModule } from "./ir/validate.js";
42
47
  import { loadProgram } from "./frontend/program-node.js";
43
48
  import { runFrontend } from "./frontend/pipeline.js";
44
- import { provenanceSources } from "./frontend/provenance-registry.js";
49
+ import { provenanceSources, setProvenanceSources, } from "./frontend/provenance-registry.js";
45
50
  import { clearResolveCaches } from "./frontend/resolve.js";
46
51
  import { loadFfiProfile } from "./ffi/ffi-manifest.js";
47
52
  import { executableLinkFeatures } from "./backend/executable-features.js";
48
53
  import { youngNurseryRequested } from "./backend/young-nursery.js";
49
- import { FrontendInputTracker, trackedReadFile } from "./frontend/input-tracker.js";
54
+ import { FrontendInputTracker, trackedReadFile, } from "./frontend/input-tracker.js";
50
55
  import { libraryFrontendImplementationFingerprint, publishEarlyLibraryCache, readEarlyLibraryCache, readSemanticLibraryCache, } from "./library/library-cache.js";
51
- import { publishEarlyExecutableCache, publishEarlyExecutableRoute, readEarlyExecutableCache, } from "./executable/executable-cache.js";
56
+ import { hasEarlyExecutableNativeBuild, publishEarlyExecutableCache, publishEarlyExecutableRoute, readEarlyExecutableCache, recordEarlyExecutableNativeBuild, } from "./executable/executable-cache.js";
52
57
  import { compilerImplementationIdentity } from "./library/compiler-self-identity.js";
58
+ import { isPerformanceCode } from "./diagnostics/dynamic-tier.js";
53
59
  export const VERSION = "0.0.1";
54
60
  export { EXTERNAL_OBJECT_ABI_STABILITY, RUNTIME_ABI_MARKER, RUNTIME_ABI_VERSION, } from "./backend/runtime-abi.js";
55
61
  export { InternalCompilerError } from "./errors.js";
56
62
  export { compileExternalC as compileC, compileExternalC, runtimeSrcDir, } from "./backend/external-c.js";
57
63
  export { warmNativeCaches } from "./backend/warm-cache.js";
58
64
  export { mergeNativeProfiles as mergeProfiles } from "./backend/native-codegen.js";
65
+ export { collectGarbageUnderHeapPressure } from "./heap-collection.js";
59
66
  export { ANDROID_MIN_API, IPHONEOS_MIN_VERSION, isAndroidTarget, isIosTarget, isMobileTarget, mobileLibraryTarget, mobileTargetRefusal, } from "./backend/external-c.js";
60
67
  export { emitLlvmModule } from "./backend/llvm/emitter.js";
61
68
  export { renderDiagnostics, renderDiagnostics as renderAll, renderDiagnostic, } from "./diagnostics/render.js";
@@ -146,8 +153,21 @@ export async function compile(entryPath, opts) {
146
153
  clearCompileSessionCaches();
147
154
  const frontendInputs = new FrontendInputTracker();
148
155
  const warnings = { warnings: [], sourceTexts: null };
149
- const result = await frontendInputs.run(() => compileTracked(entryPath, opts, frontendInputs, warnings));
150
- return withCompileWarnings(result, warnings);
156
+ // compileTracked starts it for a build with no earlier build of the same invocation.
157
+ const frontendProcess = preparesInChildProcess(opts) ? new FrontendProcess() : undefined;
158
+ try {
159
+ const result = await frontendInputs.run(() => compileTracked(entryPath, opts, frontendInputs, warnings, frontendProcess));
160
+ return withCompileWarnings(result, warnings);
161
+ }
162
+ finally {
163
+ frontendProcess?.release();
164
+ }
165
+ }
166
+ /** The build's performance warnings (SC61xx), stored with its cache entry
167
+ * so a cache hit repeats them. */
168
+ function performanceWarnings(sink) {
169
+ const performance = (sink?.warnings ?? []).filter((d) => isPerformanceCode(d.code));
170
+ return performance.length === 0 ? {} : { performance };
151
171
  }
152
172
  function withCompileWarnings(result, sink) {
153
173
  if (!result.ok || sink.warnings.length === 0)
@@ -179,7 +199,10 @@ function executableNativeFeatures(mod, backend, optimization) {
179
199
  ...executableLinkFeatures(mod),
180
200
  };
181
201
  }
182
- async function compileExecutableNative(features, llvmPath, outPath, sanitize, ffi, windowsSubsystem, strip, programSplit = null, programObjectDependencies = [], onArtifactReady, programPartitions = [], profileGenerate = false) {
202
+ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ffi, windowsSubsystem, strip, programSplit = null, programObjectDependencies = [], onArtifactReady, programPartitions = [], profileGenerate = false,
203
+ /** The kept LLVM text's shared name, when `llvmPath` is the build's private copy of it
204
+ * (BuildSources): the spelling clang sees and native cache keys name. */
205
+ llvmVisiblePath) {
183
206
  const programIsObject = /\.(?:o|obj)$/.test(llvmPath);
184
207
  const runtimePackTarget = programIsObject && !sanitize ? nativeCodegenTarget() : null;
185
208
  if (runtimePackTarget !== null) {
@@ -216,7 +239,9 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
216
239
  if (programIsObject)
217
240
  throw new InternalCompilerError("program objects must link against a precompiled runtime pack");
218
241
  await compileExternalC({
219
- cPath: llvmPath,
242
+ ...(llvmVisiblePath === undefined || llvmVisiblePath === llvmPath
243
+ ? { cPath: llvmPath }
244
+ : { cPath: llvmVisiblePath, cSourcePath: llvmPath }),
220
245
  outPath,
221
246
  cacheIdentity: "scriptc-generated-v1",
222
247
  ...optimizationField(features.optimization),
@@ -249,7 +274,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
249
274
  ...(features.handleProps ? { handleProps: true } : {}),
250
275
  ...(features.dynForAwait ? { dynForAwait: true } : {}),
251
276
  ...(features.eventsOnceSignal ? { eventsOnceSignal: true } : {}),
252
- ...(features.dynBufferNum ? { dynBufferNum: true } : {}),
277
+ ...(features.dynBuffer ? { dynBuffer: true } : {}),
253
278
  ...(features.builtinValues ? { builtinValues: true } : {}),
254
279
  events: features.events,
255
280
  emitter: features.emitter,
@@ -277,6 +302,9 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
277
302
  tlsCa: features.tlsCa,
278
303
  cipher: features.cipher,
279
304
  ecdh: features.ecdh,
305
+ dh: features.dh,
306
+ pki: features.pki,
307
+ ed25519: features.ed25519,
280
308
  webcrypto: features.webcrypto,
281
309
  perfLoop: features.perfLoop,
282
310
  ...(onArtifactReady === undefined ? {} : { onArtifactReady }),
@@ -289,7 +317,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
289
317
  }),
290
318
  });
291
319
  }
292
- async function emitNativeProgramObject(entryPath, opts, llvm, features, profile) {
320
+ async function emitNativeProgramObject(entryPath, opts, llvm, profile) {
293
321
  const stem = basename(entryPath).replace(/\.(ts|mts|cts|js|mjs|cjs)$/, "");
294
322
  const artifactPath = join(opts.outDir, `${stem}.helper.o`);
295
323
  // compileExecutableNative recognizes object inputs by suffix. The random
@@ -298,25 +326,8 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features, profile)
298
326
  const linkPath = `${privateSiblingPath(artifactPath, "native-program-object")}.o`;
299
327
  // The validated program-object artifact is a single object by contract.
300
328
  const target = nativeCodegenTarget();
301
- const llvmBytes = (typeof llvm === "string" ? [llvm] : llvm).reduce((bytes, part) => bytes + Buffer.byteLength(part), 0);
329
+ const llvmBytes = llvmInputBytes(llvm);
302
330
  const partitions = opts.nativeProgramObject === true || target === null ? 1 : nativeProgramPartitions(llvmBytes);
303
- // Optimized programs import small runtime functions from the bitcode of
304
- // the exact runtime units they link, so LLVM can inline across the
305
- // boundary. Release units ship only the bodies that need none of their
306
- // unit-local state, which keeps the import cheap; speed units promote
307
- // that state and offer more. Every partition reads the bitcode again, so
308
- // release imports only into programs small enough for one partition: in
309
- // larger ones the build-time and size cost outgrows the gain.
310
- const runtimeBitcode = opts.sanitize !== true &&
311
- target !== null &&
312
- (opts.optimization === "speed" ||
313
- (opts.optimization !== "dev" && nativeProgramPartitions(llvmBytes) === 1))
314
- ? await loadRuntimeBitcode({
315
- target,
316
- features,
317
- optimization: opts.optimization === "speed" ? "speed" : "release",
318
- })
319
- : null;
320
331
  try {
321
332
  const artifact = await emitNativeArtifact({
322
333
  outputPath: linkPath,
@@ -326,16 +337,13 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features, profile)
326
337
  optimization: opts.optimization === "dev" ? "0" : "2",
327
338
  ...(opts.sanitize === undefined ? {} : { sanitize: opts.sanitize }),
328
339
  partitions,
329
- ...(runtimeBitcode === null
330
- ? {}
331
- : { importBitcode: { paths: runtimeBitcode.paths, digests: runtimeBitcode.digests } }),
332
340
  ...(profile === undefined ? {} : { profile }),
333
341
  });
334
342
  return {
335
343
  linkPath,
336
344
  partitionPaths: artifact.outputPaths.slice(1),
337
345
  artifactPath,
338
- dependencies: [...artifact.dependencies, ...(runtimeBitcode?.dependencies ?? [])],
346
+ dependencies: artifact.dependencies,
339
347
  };
340
348
  }
341
349
  catch (error) {
@@ -404,6 +412,7 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
404
412
  wasi: buildPlatform === "wasi",
405
413
  runtimeAbiMarker: outputKind === "obj",
406
414
  objectAudit: opts.sanitize === true,
415
+ lowRegion: lowRegionTarget(buildPlatform, opts.sanitize === true),
407
416
  ...(opts.sanitize === true ? { wasmBoundsChecks: true } : {}),
408
417
  ...inlineRcOption(opts.optimization, opts.sanitize === true),
409
418
  });
@@ -462,6 +471,8 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
462
471
  }
463
472
  await mkdir(opts.outDir, { recursive: true });
464
473
  const llvmPath = defaultSourcePaths.llvm;
474
+ // The extension keeps clang reading the copy as LLVM IR rather than as a linker input.
475
+ const llvmSourcePath = `${privateSiblingPath(llvmPath, "llvm")}.ll`;
465
476
  const backend = "llvm";
466
477
  const useRuntimePack = opts.nativeProgramObject === true || usesPrecompiledRuntimePack(opts, backend);
467
478
  let llvmSource;
@@ -473,6 +484,7 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
473
484
  wasi: buildPlatform === "wasi",
474
485
  runtimeAbiMarker: useRuntimePack,
475
486
  objectAudit: opts.sanitize === true,
487
+ lowRegion: lowRegionTarget(buildPlatform, opts.sanitize === true),
476
488
  ...(opts.sanitize === true ? { wasmBoundsChecks: true } : {}),
477
489
  ...inlineRcOption(opts.optimization, opts.sanitize === true),
478
490
  ...(opts.detachedExit === true ? { detachedExit: true } : {}),
@@ -484,12 +496,14 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
484
496
  return { ok: false, diagnostics: [llvmRefusalDiag(err, entryPath)], sourceTexts };
485
497
  }
486
498
  timing("llvm-emit");
487
- await writeLlvmSource(llvmPath, llvmSource);
499
+ await writeLlvmSource(llvmSourcePath, llvmSource);
488
500
  timing("llvm-write");
489
501
  let irPath;
502
+ let irSourcePath;
490
503
  if (opts.emitIr) {
491
504
  irPath = defaultSourcePaths.ir;
492
- await writeTextParts(irPath, serializeModuleParts(mod));
505
+ irSourcePath = privateSiblingPath(irPath, "ir");
506
+ await writeTextParts(irSourcePath, serializeModuleParts(mod));
493
507
  }
494
508
  const nativeFeatures = executableNativeFeatures(mod, backend, opts.optimization ?? "release");
495
509
  timing("link-features");
@@ -501,10 +515,243 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
501
515
  ? splitLlvmProgram(llvmSource)
502
516
  : null;
503
517
  timing("llvm-split");
504
- return { llvmSource, llvmPath, irPath, nativeFeatures, programSplit, sourceTexts };
518
+ return {
519
+ llvmSource,
520
+ llvmPath,
521
+ llvmSourcePath,
522
+ irPath,
523
+ irSourcePath,
524
+ nativeFeatures,
525
+ programSplit,
526
+ sourceTexts,
527
+ };
528
+ }
529
+ /** Moves a build's private copies to the shared names, or drops them when that fails. */
530
+ async function installBuildSources(sources) {
531
+ const install = async (source, destination, current) => {
532
+ if (source === undefined || destination === undefined || source === destination)
533
+ return;
534
+ if (current === true)
535
+ await rm(source, { force: true });
536
+ else
537
+ await rename(source, destination).catch(() => rm(source, { force: true }));
538
+ };
539
+ await Promise.all([
540
+ install(sources.llvmSourcePath, sources.llvmPath, sources.llvmPathCurrent),
541
+ install(sources.irSourcePath, sources.irPath, sources.irPathCurrent),
542
+ ]);
543
+ }
544
+ /**
545
+ * A build that compiles the LLVM text with the C driver (no precompiled runtime pack) records the
546
+ * output directory in its native cache proofs, so that directory has to be in its final state before
547
+ * the native build starts. The build therefore installs the shared names first and compiles and
548
+ * caches copies in a private directory outside the output directory. Returns that directory and the
549
+ * copies.
550
+ */
551
+ async function stageDriverBuildSources(sources) {
552
+ const dir = await mkdtemp(join(tmpdir(), "scriptc-program-"));
553
+ const llvmSourcePath = join(dir, basename(sources.llvmPath));
554
+ const irSourcePath = sources.irPath === undefined || sources.irSourcePath === undefined
555
+ ? undefined
556
+ : join(dir, basename(sources.irPath));
557
+ try {
558
+ await Promise.all([
559
+ copyFile(sources.llvmSourcePath, llvmSourcePath),
560
+ irSourcePath === undefined || sources.irSourcePath === undefined
561
+ ? undefined
562
+ : copyFile(sources.irSourcePath, irSourcePath),
563
+ ]);
564
+ }
565
+ catch (err) {
566
+ await rm(dir, { recursive: true, force: true });
567
+ throw err;
568
+ }
569
+ await installBuildSources(sources);
570
+ return {
571
+ dir,
572
+ sources: { llvmPath: sources.llvmPath, llvmSourcePath, irPath: sources.irPath, irSourcePath },
573
+ };
574
+ }
575
+ /**
576
+ * The child process that prepares an executable build's input: frontend, lowering and LLVM emission
577
+ * (`runFrontendProcess`). Node's heap keeps the pages a build's frontend used for the life of the
578
+ * process, so running them in a process of their own leaves the native helper the memory they took.
579
+ */
580
+ const frontendProcessEntry = fileURLToPath(new URL("./frontend-process.js", import.meta.url));
581
+ /**
582
+ * Whether `prepareExecutableInputInChild` may prepare this build: optimized executables, when the
583
+ * compiler runs from its built files. Development builds split the LLVM text in this process, and
584
+ * SCRIPTC_FRONTEND_PROCESS=0 keeps the frontend in-process.
585
+ *
586
+ * compileTracked starts the process only when no earlier build of the same invocation emitted its
587
+ * native program object (`hasEarlyExecutableNativeBuild`). A rebuild finds most native partitions
588
+ * in the helper's cache, so its memory peaks in the frontend, and the parent process would add to
589
+ * that peak.
590
+ */
591
+ function preparesInChildProcess(opts) {
592
+ return (process.env["SCRIPTC_FRONTEND_PROCESS"] !== "0" &&
593
+ (opts.outputKind ?? "exe") === "exe" &&
594
+ (opts.optimization ?? "release") !== "dev" &&
595
+ existsSync(frontendProcessEntry));
505
596
  }
506
- async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
597
+ /**
598
+ * The frontend process (frontend-process.ts) of one compile. `start` launches it; it then waits on
599
+ * its stdin for the paths of a request and its result (`run`), and exits once its stdin closes
600
+ * without them (`release`).
601
+ */
602
+ class FrontendProcess {
603
+ child;
604
+ exited;
605
+ sent = false;
606
+ /** Whether `start` launched the process. */
607
+ get started() {
608
+ return this.child !== undefined;
609
+ }
610
+ start() {
611
+ if (this.child !== undefined)
612
+ return;
613
+ const execArgv = frontendProcessExecArgv(process.execArgv);
614
+ const child = spawn(process.execPath, [...execArgv, frontendProcessEntry], {
615
+ stdio: ["pipe", "inherit", "inherit"],
616
+ });
617
+ this.exited = new Promise((resolveExit) => {
618
+ child.on("error", () => resolveExit(null));
619
+ child.on("exit", (code) => resolveExit(code));
620
+ });
621
+ // A failed start surfaces as a failed run; the build then prepares its input in-process.
622
+ child.stdin.on("error", () => undefined);
623
+ this.child = child;
624
+ }
625
+ /** Sends the request at `requestPath`; resolves with the process's exit code. */
626
+ run(requestPath, resultPath) {
627
+ if (this.child === undefined || this.exited === undefined || this.sent)
628
+ return Promise.resolve(null);
629
+ this.sent = true;
630
+ this.child.stdin.end(`${requestPath}\n${resultPath}\n`);
631
+ return this.exited;
632
+ }
633
+ /** Lets the process exit if no request was sent. */
634
+ release() {
635
+ if (this.child === undefined || this.sent)
636
+ return;
637
+ this.sent = true;
638
+ this.child.stdin.end();
639
+ // The build is done with it: this process need not wait for it to exit.
640
+ this.child.unref();
641
+ this.child.stdin.unref?.();
642
+ }
643
+ }
644
+ /**
645
+ * `prepareExecutableInput` in the frontend process, with the LLVM text passed on as its file. The
646
+ * process's frontend inputs join `frontendInputs` and its warnings `warningSink`. If it fails, the
647
+ * input is prepared here, so the build reports the same errors.
648
+ */
649
+ async function prepareExecutableInputInChild(frontendProcess, entryPath, opts, ffi, buildPlatform, timing, timingClock, frontendInputs, warningSink) {
650
+ await mkdir(opts.outDir, { recursive: true });
651
+ const requestPath = privateSiblingPath(join(opts.outDir, "frontend-request.json"), "frontend");
652
+ const resultPath = privateSiblingPath(join(opts.outDir, "frontend-result.json"), "frontend");
653
+ let result = { kind: "failed" };
654
+ try {
655
+ const request = {
656
+ entryPath,
657
+ opts,
658
+ buildPlatform,
659
+ timing: timingClock,
660
+ provenance: provenanceSources(),
661
+ };
662
+ await writeFile(requestPath, JSON.stringify(request), { mode: 0o600 });
663
+ const exitCode = await frontendProcess.run(requestPath, resultPath);
664
+ if (exitCode === 0)
665
+ result = JSON.parse(await readFile(resultPath, "utf8"));
666
+ }
667
+ catch {
668
+ result = { kind: "failed" };
669
+ }
670
+ finally {
671
+ await rm(requestPath, { force: true });
672
+ await rm(resultPath, { force: true });
673
+ }
674
+ if (result.kind === "failed")
675
+ return prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timing, warningSink);
676
+ timing("frontend-process");
677
+ for (const probe of result.frontend.probes)
678
+ frontendInputs.record(probe);
679
+ if (!result.frontend.stable)
680
+ frontendInputs.markUnstable();
681
+ const sourceTexts = new Map(result.sourceTexts);
682
+ if (warningSink !== undefined && result.warnings.length > 0) {
683
+ warningSink.warnings = result.warnings;
684
+ warningSink.sourceTexts = sourceTexts;
685
+ }
686
+ if (result.kind === "diagnostics")
687
+ return { ok: false, diagnostics: result.diagnostics, sourceTexts };
688
+ return {
689
+ llvmSource: { file: result.nativeInputPath, bytes: result.llvmBytes },
690
+ llvmPath: result.llvmPath,
691
+ llvmSourcePath: result.nativeInputPath,
692
+ irPath: result.irPath,
693
+ irSourcePath: result.irSourcePath,
694
+ nativeFeatures: result.nativeFeatures,
695
+ programSplit: null,
696
+ sourceTexts,
697
+ };
698
+ }
699
+ /**
700
+ * The frontend process (frontend-process.ts): prepares the executable input of the request at
701
+ * `requestPath` as `compileTracked` would in-process, and writes what it prepared, without the LLVM
702
+ * text, to `resultPath`.
703
+ */
704
+ export async function runFrontendProcess(requestPath, resultPath) {
705
+ const request = JSON.parse(await readFile(requestPath, "utf8"));
706
+ clearCompileSessionCaches();
707
+ setProvenanceSources(request.provenance);
708
+ const frontendInputs = new FrontendInputTracker();
709
+ const warnings = { warnings: [], sourceTexts: null };
710
+ let result = { kind: "failed" };
711
+ try {
712
+ let ffi = null;
713
+ if (request.opts.ffiProfilePath !== undefined) {
714
+ const loaded = loadFfiProfile(resolve(request.opts.ffiProfilePath));
715
+ if (!loaded.ok)
716
+ throw new InternalCompilerError("the FFI profile could not be reloaded");
717
+ ffi = loaded.profile;
718
+ }
719
+ const prepared = await frontendInputs.run(() => prepareExecutableInput(request.entryPath, request.opts, ffi, request.buildPlatform, compilationTiming(request.timing), warnings));
720
+ const frontend = frontendInputs.snapshot();
721
+ if (!("ok" in prepared)) {
722
+ if (isLlvmFile(prepared.llvmSource))
723
+ throw new InternalCompilerError("in-process preparation returned LLVM text as a file");
724
+ result = {
725
+ kind: "prepared",
726
+ llvmPath: prepared.llvmPath,
727
+ nativeInputPath: prepared.llvmSourcePath,
728
+ llvmBytes: llvmInputBytes(prepared.llvmSource),
729
+ irPath: prepared.irPath,
730
+ irSourcePath: prepared.irSourcePath,
731
+ nativeFeatures: prepared.nativeFeatures,
732
+ sourceTexts: [...prepared.sourceTexts],
733
+ warnings: warnings.warnings,
734
+ frontend,
735
+ };
736
+ }
737
+ else if (!prepared.ok) {
738
+ result = {
739
+ kind: "diagnostics",
740
+ diagnostics: prepared.diagnostics,
741
+ sourceTexts: [...prepared.sourceTexts],
742
+ warnings: warnings.warnings,
743
+ frontend,
744
+ };
745
+ }
746
+ }
747
+ catch {
748
+ result = { kind: "failed" };
749
+ }
750
+ await writeFile(resultPath, JSON.stringify(result), { mode: 0o600 });
751
+ }
752
+ async function compileTracked(entryPath, opts, frontendInputs, warningSink, frontendProcess) {
507
753
  const timing = compilationTiming();
754
+ const timingStart = Date.now();
508
755
  entryPath = resolve(entryPath);
509
756
  const outputKind = opts.outputKind ?? "exe";
510
757
  if ((opts.backend !== undefined && opts.backend !== "llvm") ||
@@ -707,16 +954,7 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
707
954
  let earlyCacheOptions = null;
708
955
  if (outputKind === "exe") {
709
956
  const helperObjectRoute = opts.nativeProgramObject === true || usesPrecompiledRuntimePack(opts, "llvm");
710
- // Package content and native driver discovery are independent inputs to
711
- // the same cache key. Start both before waiting so edits do not pay their
712
- // filesystem and subprocess latency serially.
713
- const [implementation, nativeEnvironment] = await Promise.all([
714
- compilerImplementationIdentity(),
715
- helperObjectRoute
716
- ? executableLinkerEnvironmentFingerprint(process.env, nativeCodegenTarget()?.defaultLinker)
717
- : executableNativeEnvironmentFingerprint(),
718
- ]);
719
- earlyCacheOptions = {
957
+ const routeOptions = {
720
958
  entryPath,
721
959
  outDir: opts.outDir,
722
960
  outPath: opts.outPath,
@@ -744,8 +982,25 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
744
982
  ? resolvePlatformLinker(process.env, nativeCodegenTarget()?.defaultLinker)
745
983
  : (process.env["SCRIPTC_CC"] ?? "clang"),
746
984
  ],
747
- nativeEnvironment,
748
985
  nodeVersion: process.version,
986
+ };
987
+ // The frontend process prepares the first build of an invocation (preparesInChildProcess).
988
+ // Started here, it loads the compiler while this process computes the rest of the cache key.
989
+ if (frontendProcess !== undefined &&
990
+ !(await hasEarlyExecutableNativeBuild(cacheRoot, routeOptions)))
991
+ frontendProcess.start();
992
+ // Package content and native driver discovery are independent inputs to
993
+ // the same cache key. Start both before waiting so edits do not pay their
994
+ // filesystem and subprocess latency serially.
995
+ const [implementation, nativeEnvironment] = await Promise.all([
996
+ compilerImplementationIdentity(),
997
+ helperObjectRoute
998
+ ? executableLinkerEnvironmentFingerprint(process.env, nativeCodegenTarget()?.defaultLinker)
999
+ : executableNativeEnvironmentFingerprint(),
1000
+ ]);
1001
+ earlyCacheOptions = {
1002
+ ...routeOptions,
1003
+ nativeEnvironment,
749
1004
  implementation: implementation.digest,
750
1005
  implementationDependencies: implementation.dependencies,
751
1006
  };
@@ -758,6 +1013,12 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
758
1013
  if (earlyCacheOptions === null) {
759
1014
  throw new InternalCompilerError("executable cache hit without executable cache options");
760
1015
  }
1016
+ // A cached build repeats its performance warning (SC6101): the code it
1017
+ // names is just as untyped as when it was built.
1018
+ if (warningSink !== undefined && earlyHit.performance !== undefined) {
1019
+ warningSink.warnings = earlyHit.performance;
1020
+ warningSink.sourceTexts = new Map();
1021
+ }
761
1022
  const executableCacheOptions = earlyCacheOptions;
762
1023
  // Route/proof metadata is independently evictable. A full-compiler
763
1024
  // fallback that still finds the validated payload repairs that lightweight
@@ -780,39 +1041,64 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
780
1041
  ...(earlyHit.irPath === undefined ? {} : { irPath: earlyHit.irPath }),
781
1042
  };
782
1043
  }
783
- let nativeInputPath = earlyHit.llvmPath;
1044
+ // The build's private copies of the cached LLVM text and IR (BuildSources).
1045
+ const hitSources = {
1046
+ llvmPath: earlyHit.llvmPath,
1047
+ llvmSourcePath: earlyHit.llvmSourcePath ?? earlyHit.llvmPath,
1048
+ irPath: earlyHit.irPath,
1049
+ irSourcePath: earlyHit.irSourcePath,
1050
+ llvmPathCurrent: earlyHit.llvmPathCurrent,
1051
+ irPathCurrent: earlyHit.irPathCurrent,
1052
+ };
1053
+ // What the native build compiles and the cache publishes: hitSources, or their staged copies.
1054
+ let nativeSources = hitSources;
1055
+ let stagedDir = null;
1056
+ let nativeInputPath = hitSources.llvmSourcePath;
784
1057
  let nativeProgramObject = null;
785
1058
  const useRuntimePack = opts.nativeProgramObject === true ||
786
1059
  usesPrecompiledRuntimePack(opts, earlyHit.native.backend);
787
- if (useRuntimePack) {
788
- if (earlyHit.native.backend !== "llvm") {
789
- throw new InternalCompilerError("native program-object cache hit restored a non-LLVM translation unit");
790
- }
791
- try {
792
- nativeProgramObject = await emitNativeProgramObject(entryPath, opts, await readFile(earlyHit.llvmPath, "utf8"), earlyHit.native, profile);
793
- nativeInputPath = nativeProgramObject.linkPath;
1060
+ try {
1061
+ if (useRuntimePack) {
1062
+ if (earlyHit.native.backend !== "llvm") {
1063
+ throw new InternalCompilerError("native program-object cache hit restored a non-LLVM translation unit");
1064
+ }
1065
+ try {
1066
+ nativeProgramObject = await emitNativeProgramObject(entryPath, opts,
1067
+ // A large program's LLVM exceeds the engine's string limit as one
1068
+ // string; the emitter takes it in parts, as on a cold build.
1069
+ await readTextParts(hitSources.llvmSourcePath), profile);
1070
+ nativeInputPath = nativeProgramObject.linkPath;
1071
+ }
1072
+ catch (err) {
1073
+ if (!(err instanceof NativeCodegenError))
1074
+ throw err;
1075
+ return {
1076
+ ok: false,
1077
+ diagnostics: [nativeCodegenDiag(err.diagnosticCode, err.message, entryPath)],
1078
+ sourceTexts: new Map(),
1079
+ };
1080
+ }
794
1081
  }
795
- catch (err) {
796
- if (!(err instanceof NativeCodegenError))
797
- throw err;
798
- return {
799
- ok: false,
800
- diagnostics: [nativeCodegenDiag(err.diagnosticCode, err.message, entryPath)],
801
- sourceTexts: new Map(),
802
- };
1082
+ else {
1083
+ const staged = await stageDriverBuildSources(hitSources);
1084
+ stagedDir = staged.dir;
1085
+ nativeSources = staged.sources;
1086
+ nativeInputPath = nativeSources.llvmSourcePath;
803
1087
  }
804
- }
805
- try {
806
1088
  await compileExecutableNative(earlyHit.native, nativeInputPath, opts.outPath, opts.sanitize ?? false, ffi, opts.windowsSubsystem, opts.strip, null, nativeProgramObject?.dependencies, opts.nativeProgramObject === true
807
1089
  ? undefined
808
1090
  : async ({ dependencies }) => {
809
1091
  await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
810
1092
  ...earlyHit,
1093
+ llvmPath: nativeSources.llvmSourcePath,
1094
+ ...(nativeSources.irSourcePath === undefined
1095
+ ? {}
1096
+ : { irPath: nativeSources.irSourcePath }),
811
1097
  executableRestored: true,
812
1098
  nativeDependencies: dependencies,
813
1099
  frontend: earlyHit.frontend,
814
1100
  });
815
- }, nativeProgramObject?.partitionPaths, profile?.generate !== undefined);
1101
+ }, nativeProgramObject?.partitionPaths, profile?.generate !== undefined, hitSources.llvmPath);
816
1102
  if (nativeProgramObject !== null && opts.nativeProgramObject === true) {
817
1103
  await rename(nativeProgramObject.linkPath, nativeProgramObject.artifactPath);
818
1104
  }
@@ -840,6 +1126,10 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
840
1126
  if (nativeProgramObject !== null) {
841
1127
  await removeNativeProgramObject(nativeProgramObject.linkPath, nativeProgramObject.partitionPaths);
842
1128
  }
1129
+ if (stagedDir === null)
1130
+ await installBuildSources(hitSources);
1131
+ else
1132
+ await rm(stagedDir, { recursive: true, force: true });
843
1133
  }
844
1134
  await pruneBuildCache(cacheRoot);
845
1135
  return {
@@ -857,10 +1147,22 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
857
1147
  };
858
1148
  }
859
1149
  timing("executable-cache-miss");
860
- const prepared = await prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timing, warningSink);
1150
+ const prepared = frontendProcess?.started === true
1151
+ ? await prepareExecutableInputInChild(frontendProcess, entryPath, opts, ffi, buildPlatform, timing, { start: timingStart, previous: Date.now() }, frontendInputs, warningSink)
1152
+ : await prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timing, warningSink);
861
1153
  if ("ok" in prepared)
862
1154
  return prepared;
863
- const { llvmSource, llvmPath, irPath, nativeFeatures, programSplit, sourceTexts } = prepared;
1155
+ const buildSources = {
1156
+ llvmPath: prepared.llvmPath,
1157
+ llvmSourcePath: prepared.llvmSourcePath,
1158
+ irPath: prepared.irPath,
1159
+ irSourcePath: prepared.irSourcePath,
1160
+ };
1161
+ const { llvmSource, llvmPath, irPath } = prepared;
1162
+ const { nativeFeatures, programSplit, sourceTexts } = prepared;
1163
+ // What the native build compiles and the cache publishes: buildSources, or their staged copies.
1164
+ let { llvmSourcePath, irSourcePath } = buildSources;
1165
+ let stagedDir = null;
864
1166
  const backend = "llvm";
865
1167
  await mkdir(dirname(opts.outPath), { recursive: true });
866
1168
  if (earlyCacheOptions === null) {
@@ -876,8 +1178,9 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
876
1178
  throw new InternalCompilerError("native program-object validation requires the LLVM backend");
877
1179
  }
878
1180
  try {
879
- nativeProgramObject = await emitNativeProgramObject(entryPath, opts, llvmSource, nativeFeatures, profile);
1181
+ nativeProgramObject = await emitNativeProgramObject(entryPath, opts, llvmSource, profile);
880
1182
  timing("native-object");
1183
+ await recordEarlyExecutableNativeBuild(cacheRoot, executableCacheOptions).catch(() => undefined);
881
1184
  }
882
1185
  catch (err) {
883
1186
  if (!(err instanceof NativeCodegenError))
@@ -889,23 +1192,39 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
889
1192
  };
890
1193
  }
891
1194
  }
892
- await compileExecutableNative(nativeFeatures, nativeProgramObject?.linkPath ?? llvmPath, opts.outPath, opts.sanitize ?? false, ffi, opts.windowsSubsystem, opts.strip, programSplit, nativeProgramObject?.dependencies, opts.nativeProgramObject === true
1195
+ else {
1196
+ const staged = await stageDriverBuildSources(buildSources);
1197
+ stagedDir = staged.dir;
1198
+ ({ llvmSourcePath, irSourcePath } = staged.sources);
1199
+ }
1200
+ await compileExecutableNative(nativeFeatures, nativeProgramObject?.linkPath ?? llvmSourcePath, opts.outPath, opts.sanitize ?? false, ffi, opts.windowsSubsystem, opts.strip, programSplit, nativeProgramObject?.dependencies, opts.nativeProgramObject === true
893
1201
  ? undefined
894
1202
  : async ({ dependencies }) => {
895
1203
  await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
896
- llvmPath,
1204
+ llvmPath: llvmSourcePath,
897
1205
  native: nativeFeatures,
898
1206
  executableRestored: true,
899
1207
  nativeDependencies: dependencies,
900
1208
  frontend: frontendInputs.snapshot(),
901
- ...(irPath === undefined ? {} : { irPath }),
1209
+ ...(irSourcePath === undefined ? {} : { irPath: irSourcePath }),
1210
+ ...performanceWarnings(warningSink),
902
1211
  });
903
1212
  publishedExecutable = true;
904
- }, nativeProgramObject?.partitionPaths, profile?.generate !== undefined);
1213
+ }, nativeProgramObject?.partitionPaths, profile?.generate !== undefined, llvmPath);
905
1214
  timing("native-link");
906
1215
  if (nativeProgramObject !== null && opts.nativeProgramObject === true) {
907
1216
  await rename(nativeProgramObject.linkPath, nativeProgramObject.artifactPath);
908
1217
  }
1218
+ if (!publishedExecutable) {
1219
+ await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
1220
+ llvmPath: llvmSourcePath,
1221
+ native: nativeFeatures,
1222
+ executableRestored: false,
1223
+ frontend: frontendInputs.snapshot(),
1224
+ ...(irSourcePath === undefined ? {} : { irPath: irSourcePath }),
1225
+ ...performanceWarnings(warningSink),
1226
+ }).catch(() => undefined);
1227
+ }
909
1228
  }
910
1229
  catch (err) {
911
1230
  if (err instanceof RuntimePackError) {
@@ -926,15 +1245,10 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
926
1245
  if (nativeProgramObject !== null) {
927
1246
  await removeNativeProgramObject(nativeProgramObject.linkPath, nativeProgramObject.partitionPaths);
928
1247
  }
929
- }
930
- if (!publishedExecutable) {
931
- await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
932
- llvmPath,
933
- native: nativeFeatures,
934
- executableRestored: false,
935
- frontend: frontendInputs.snapshot(),
936
- ...(irPath === undefined ? {} : { irPath }),
937
- }).catch(() => undefined);
1248
+ if (stagedDir === null)
1249
+ await installBuildSources(buildSources);
1250
+ else
1251
+ await rm(stagedDir, { recursive: true, force: true });
938
1252
  }
939
1253
  await pruneBuildCache(cacheRoot);
940
1254
  timing("complete");
@@ -974,6 +1288,7 @@ function libraryNativeFeatures(mod, backend) {
974
1288
  copying: features.copying,
975
1289
  textDecoderLegacy: features.legacyTextDecoder,
976
1290
  dynInvoke: features.dynInvoke,
1291
+ ...(features.dynBuffer ? { dynBuffer: true } : {}),
977
1292
  ...(features.dynTier ? { dynTier: true } : {}),
978
1293
  ...(mod.lib?.identity !== undefined ? { buildId: mod.lib.identity.buildId } : {}),
979
1294
  };
@@ -1048,6 +1363,7 @@ async function compileLibraryNative(profile, llvmPath, archivePath, sanitize, fe
1048
1363
  copying: features.copying,
1049
1364
  textDecoderLegacy: features.textDecoderLegacy,
1050
1365
  dynInvoke: features.dynInvoke,
1366
+ ...(features.dynBuffer === true ? { dynBuffer: true } : {}),
1051
1367
  ...(features.dynTier === true ? { dynTier: true } : {}),
1052
1368
  };
1053
1369
  if (packTarget !== null)