@scriptc/compiler 0.4.0 → 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 (866) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +617 -83
  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 +10 -0
  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 +7 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/link-plan-core.d.ts +2 -0
  16. package/dist/backend/link-plan-core.js +2 -0
  17. package/dist/backend/link-plan-core.js.map +1 -1
  18. package/dist/backend/link-plan.d.ts +1 -0
  19. package/dist/backend/link-plan.js +1 -0
  20. package/dist/backend/link-plan.js.map +1 -1
  21. package/dist/backend/llvm/alloc.d.ts +7 -3
  22. package/dist/backend/llvm/alloc.js +7 -4
  23. package/dist/backend/llvm/alloc.js.map +1 -1
  24. package/dist/backend/llvm/array-search.js +4 -1
  25. package/dist/backend/llvm/array-search.js.map +1 -1
  26. package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
  27. package/dist/backend/llvm/bytes-loop-versions.js +115 -19
  28. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  29. package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
  30. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  31. package/dist/backend/llvm/classes.d.ts +99 -2
  32. package/dist/backend/llvm/classes.js +436 -57
  33. package/dist/backend/llvm/classes.js.map +1 -1
  34. package/dist/backend/llvm/classes.test.js +235 -16
  35. package/dist/backend/llvm/classes.test.js.map +1 -1
  36. package/dist/backend/llvm/common.d.ts +21 -5
  37. package/dist/backend/llvm/common.js +50 -5
  38. package/dist/backend/llvm/common.js.map +1 -1
  39. package/dist/backend/llvm/constant-callbacks.js +8 -4
  40. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  41. package/dist/backend/llvm/constant-callbacks.test.js +4 -4
  42. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  43. package/dist/backend/llvm/counted-loops.d.ts +4 -1
  44. package/dist/backend/llvm/counted-loops.js +62 -23
  45. package/dist/backend/llvm/counted-loops.js.map +1 -1
  46. package/dist/backend/llvm/dense-array-access.d.ts +3 -1
  47. package/dist/backend/llvm/dense-array-access.js +61 -38
  48. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  49. package/dist/backend/llvm/dense-array-access.test.js +4 -0
  50. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  51. package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
  52. package/dist/backend/llvm/dense-array-loops.js +49 -13
  53. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  54. package/dist/backend/llvm/dense-array-loops.test.js +50 -14
  55. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  56. package/dist/backend/llvm/dyn.d.ts +34 -1
  57. package/dist/backend/llvm/dyn.js +393 -14
  58. package/dist/backend/llvm/dyn.js.map +1 -1
  59. package/dist/backend/llvm/emit-function.js +27 -8
  60. package/dist/backend/llvm/emit-function.js.map +1 -1
  61. package/dist/backend/llvm/emit-module.js +67 -39
  62. package/dist/backend/llvm/emit-module.js.map +1 -1
  63. package/dist/backend/llvm/emit-statements.d.ts +3 -25
  64. package/dist/backend/llvm/emit-statements.js +414 -37
  65. package/dist/backend/llvm/emit-statements.js.map +1 -1
  66. package/dist/backend/llvm/emitter.d.ts +159 -22
  67. package/dist/backend/llvm/emitter.js +573 -89
  68. package/dist/backend/llvm/emitter.js.map +1 -1
  69. package/dist/backend/llvm/expr-async.js +19 -0
  70. package/dist/backend/llvm/expr-async.js.map +1 -1
  71. package/dist/backend/llvm/expr-bytes.d.ts +5 -2
  72. package/dist/backend/llvm/expr-bytes.js +110 -40
  73. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  74. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  75. package/dist/backend/llvm/expr-calls.js +51 -26
  76. package/dist/backend/llvm/expr-calls.js.map +1 -1
  77. package/dist/backend/llvm/expr-containers.js +27 -14
  78. package/dist/backend/llvm/expr-containers.js.map +1 -1
  79. package/dist/backend/llvm/expr-control.js +2 -3
  80. package/dist/backend/llvm/expr-control.js.map +1 -1
  81. package/dist/backend/llvm/expr-dynamic.js +95 -5
  82. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  83. package/dist/backend/llvm/expr-primitives.js +29 -11
  84. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  85. package/dist/backend/llvm/expr-primitives.test.js +55 -0
  86. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  87. package/dist/backend/llvm/expr-stream-bridges.js +48 -20
  88. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  89. package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
  90. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  91. package/dist/backend/llvm/integer-clones.js +3 -3
  92. package/dist/backend/llvm/integer-clones.js.map +1 -1
  93. package/dist/backend/llvm/js-ic.d.ts +18 -0
  94. package/dist/backend/llvm/js-ic.js +712 -0
  95. package/dist/backend/llvm/js-ic.js.map +1 -0
  96. package/dist/backend/llvm/jsval.js +139 -11
  97. package/dist/backend/llvm/jsval.js.map +1 -1
  98. package/dist/backend/llvm/lib-dispatch.js +10 -0
  99. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  100. package/dist/backend/llvm/lib-filesystem.js +61 -0
  101. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  102. package/dist/backend/llvm/lib-http2.d.ts +4 -0
  103. package/dist/backend/llvm/lib-http2.js +20 -17
  104. package/dist/backend/llvm/lib-http2.js.map +1 -1
  105. package/dist/backend/llvm/lib-process.js +69 -17
  106. package/dist/backend/llvm/lib-process.js.map +1 -1
  107. package/dist/backend/llvm/lib-shared.js +75 -1
  108. package/dist/backend/llvm/lib-shared.js.map +1 -1
  109. package/dist/backend/llvm/lib-stream.js +65 -28
  110. package/dist/backend/llvm/lib-stream.js.map +1 -1
  111. package/dist/backend/llvm/lib-tls.js +23 -0
  112. package/dist/backend/llvm/lib-tls.js.map +1 -1
  113. package/dist/backend/llvm/local-array-reads.js +91 -61
  114. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  115. package/dist/backend/llvm/local-array-reads.test.js +14 -0
  116. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  117. package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
  118. package/dist/backend/llvm/map-number-lookup.js +43 -7
  119. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  120. package/dist/backend/llvm/narrow-guards.js +64 -0
  121. package/dist/backend/llvm/narrow-guards.js.map +1 -1
  122. package/dist/backend/llvm/publish.d.ts +11 -1
  123. package/dist/backend/llvm/publish.js +80 -22
  124. package/dist/backend/llvm/publish.js.map +1 -1
  125. package/dist/backend/llvm/publish.test.js +3 -0
  126. package/dist/backend/llvm/publish.test.js.map +1 -1
  127. package/dist/backend/llvm/receivers.js +1 -1
  128. package/dist/backend/llvm/receivers.js.map +1 -1
  129. package/dist/backend/llvm/reference-writes.js +2 -0
  130. package/dist/backend/llvm/reference-writes.js.map +1 -1
  131. package/dist/backend/llvm/regex-matchers.js +161 -14
  132. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  133. package/dist/backend/llvm/regex-matchers.test.js +18 -0
  134. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  135. package/dist/backend/llvm/regions.js +2 -2
  136. package/dist/backend/llvm/regions.js.map +1 -1
  137. package/dist/backend/llvm/regions.test.js +7 -1
  138. package/dist/backend/llvm/regions.test.js.map +1 -1
  139. package/dist/backend/llvm/shapes.d.ts +17 -9
  140. package/dist/backend/llvm/shapes.js +21 -17
  141. package/dist/backend/llvm/shapes.js.map +1 -1
  142. package/dist/backend/llvm/speculative-integers.d.ts +20 -1
  143. package/dist/backend/llvm/speculative-integers.js +94 -6
  144. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  145. package/dist/backend/llvm/speculative-integers.test.js +55 -1
  146. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  147. package/dist/backend/llvm/string-lifetimes.test.js +2 -1
  148. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  149. package/dist/backend/llvm/string-reads.d.ts +4 -1
  150. package/dist/backend/llvm/string-reads.js +88 -4
  151. package/dist/backend/llvm/string-reads.js.map +1 -1
  152. package/dist/backend/llvm/thread-slots.test.js +5 -4
  153. package/dist/backend/llvm/thread-slots.test.js.map +1 -1
  154. package/dist/backend/llvm/wasm-modules.d.ts +6 -5
  155. package/dist/backend/llvm/wasm-modules.js +32 -9
  156. package/dist/backend/llvm/wasm-modules.js.map +1 -1
  157. package/dist/backend/mangle.d.ts +8 -0
  158. package/dist/backend/mangle.js +12 -0
  159. package/dist/backend/mangle.js.map +1 -1
  160. package/dist/backend/native/contracts.d.ts +40 -2
  161. package/dist/backend/native/executable.js +40 -7
  162. package/dist/backend/native/executable.js.map +1 -1
  163. package/dist/backend/native/library.js +3 -1
  164. package/dist/backend/native/library.js.map +1 -1
  165. package/dist/backend/native-codegen.d.ts +17 -6
  166. package/dist/backend/native-codegen.js +55 -9
  167. package/dist/backend/native-codegen.js.map +1 -1
  168. package/dist/backend/native-codegen.test.js +18 -14
  169. package/dist/backend/native-codegen.test.js.map +1 -1
  170. package/dist/backend/native-link-info-core.d.ts +30 -2
  171. package/dist/backend/native-link-info-core.js.map +1 -1
  172. package/dist/backend/native-profile.d.ts +32 -0
  173. package/dist/backend/native-profile.js +39 -0
  174. package/dist/backend/native-profile.js.map +1 -0
  175. package/dist/backend/native-profile.test.d.ts +1 -0
  176. package/dist/backend/native-profile.test.js +58 -0
  177. package/dist/backend/native-profile.test.js.map +1 -0
  178. package/dist/backend/native-tools.d.ts +14 -0
  179. package/dist/backend/native-tools.js +13 -0
  180. package/dist/backend/native-tools.js.map +1 -1
  181. package/dist/backend/optimization.d.ts +2 -2
  182. package/dist/backend/runtime-abi.d.ts +2 -2
  183. package/dist/backend/runtime-abi.js +2 -2
  184. package/dist/backend/runtime-pack-core.d.ts +4 -0
  185. package/dist/backend/runtime-pack-core.js +4 -0
  186. package/dist/backend/runtime-pack-core.js.map +1 -1
  187. package/dist/backend/runtime-pack-targets.test.js +7 -1
  188. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  189. package/dist/backend/runtime-pack.d.ts +0 -21
  190. package/dist/backend/runtime-pack.js +0 -29
  191. package/dist/backend/runtime-pack.js.map +1 -1
  192. package/dist/backend/runtime-pack.test.js +12 -69
  193. package/dist/backend/runtime-pack.test.js.map +1 -1
  194. package/dist/backend/target-diagnostics.js +38 -1
  195. package/dist/backend/target-diagnostics.js.map +1 -1
  196. package/dist/backend/warm-cache.js +6 -0
  197. package/dist/backend/warm-cache.js.map +1 -1
  198. package/dist/cli/command.js +89 -7
  199. package/dist/cli/command.js.map +1 -1
  200. package/dist/cli/host.d.ts +3 -0
  201. package/dist/cli/output-options.d.ts +2 -0
  202. package/dist/cli/output-options.js +9 -0
  203. package/dist/cli/output-options.js.map +1 -1
  204. package/dist/cli/usage.d.ts +15 -1
  205. package/dist/cli/usage.js +30 -2
  206. package/dist/cli/usage.js.map +1 -1
  207. package/dist/compile-types.d.ts +9 -0
  208. package/dist/contracts/check.js +2 -3
  209. package/dist/contracts/check.js.map +1 -1
  210. package/dist/coverage/report.d.ts +7 -2
  211. package/dist/coverage/report.js +18 -0
  212. package/dist/coverage/report.js.map +1 -1
  213. package/dist/coverage/verdict-cache.d.ts +1 -0
  214. package/dist/coverage/verdict-cache.js +4 -0
  215. package/dist/coverage/verdict-cache.js.map +1 -1
  216. package/dist/coverage/verdict-semantic.js +4 -0
  217. package/dist/coverage/verdict-semantic.js.map +1 -1
  218. package/dist/diagnostics/diagnostic.js.map +1 -1
  219. package/dist/diagnostics/dynamic-tier.d.ts +40 -0
  220. package/dist/diagnostics/dynamic-tier.js +57 -0
  221. package/dist/diagnostics/dynamic-tier.js.map +1 -0
  222. package/dist/diagnostics/envelope.d.ts +2 -1
  223. package/dist/diagnostics/envelope.js +5 -2
  224. package/dist/diagnostics/envelope.js.map +1 -1
  225. package/dist/executable/executable-cache.d.ts +32 -0
  226. package/dist/executable/executable-cache.js +65 -7
  227. package/dist/executable/executable-cache.js.map +1 -1
  228. package/dist/executable/executable-cache.test.js +50 -3
  229. package/dist/executable/executable-cache.test.js.map +1 -1
  230. package/dist/executable/prepare.js +3 -1
  231. package/dist/executable/prepare.js.map +1 -1
  232. package/dist/frontend/analysis.js +1 -0
  233. package/dist/frontend/analysis.js.map +1 -1
  234. package/dist/frontend/arguments-usage.d.ts +8 -0
  235. package/dist/frontend/arguments-usage.js +98 -0
  236. package/dist/frontend/arguments-usage.js.map +1 -1
  237. package/dist/frontend/arguments-usage.test.d.ts +1 -0
  238. package/dist/frontend/arguments-usage.test.js +32 -0
  239. package/dist/frontend/arguments-usage.test.js.map +1 -0
  240. package/dist/frontend/builtin-package-aliases.d.ts +24 -0
  241. package/dist/frontend/builtin-package-aliases.js +133 -0
  242. package/dist/frontend/builtin-package-aliases.js.map +1 -0
  243. package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
  244. package/dist/frontend/builtin-package-aliases.test.js +48 -0
  245. package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
  246. package/dist/frontend/dispose-hook.d.ts +2 -0
  247. package/dist/frontend/dispose-hook.js +14 -0
  248. package/dist/frontend/dispose-hook.js.map +1 -0
  249. package/dist/frontend/dts-paths.d.ts +4 -0
  250. package/dist/frontend/dts-paths.js +9 -1
  251. package/dist/frontend/dts-paths.js.map +1 -1
  252. package/dist/frontend/jsx-entities.d.ts +4 -0
  253. package/dist/frontend/jsx-entities.js +259 -0
  254. package/dist/frontend/jsx-entities.js.map +1 -0
  255. package/dist/frontend/jsx-source.d.ts +71 -0
  256. package/dist/frontend/jsx-source.js +781 -0
  257. package/dist/frontend/jsx-source.js.map +1 -0
  258. package/dist/frontend/jsx-source.test.d.ts +1 -0
  259. package/dist/frontend/jsx-source.test.js +200 -0
  260. package/dist/frontend/jsx-source.test.js.map +1 -0
  261. package/dist/frontend/literal-values.test.js +8 -9
  262. package/dist/frontend/literal-values.test.js.map +1 -1
  263. package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
  264. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  265. package/dist/frontend/lowering/array-values.js +3 -2
  266. package/dist/frontend/lowering/array-values.js.map +1 -1
  267. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  268. package/dist/frontend/lowering/binding-analysis.js +2 -2
  269. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  270. package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
  271. package/dist/frontend/lowering/builtins/arguments.js +30 -15
  272. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  273. package/dist/frontend/lowering/builtins/atomics.js +10 -6
  274. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  275. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +8 -0
  276. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +50 -1
  277. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -1
  278. package/dist/frontend/lowering/builtins/callable-aliases.js +3 -2
  279. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  280. package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
  281. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  282. package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
  283. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  284. package/dist/frontend/lowering/builtins/crypto.d.ts +7 -2
  285. package/dist/frontend/lowering/builtins/crypto.js +63 -4
  286. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  287. package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
  288. package/dist/frontend/lowering/builtins/date-classes.js +477 -0
  289. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
  290. package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
  291. package/dist/frontend/lowering/builtins/dates.js +55 -26
  292. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  293. package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
  294. package/dist/frontend/lowering/builtins/dh.js +151 -0
  295. package/dist/frontend/lowering/builtins/dh.js.map +1 -0
  296. package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
  297. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  298. package/dist/frontend/lowering/builtins/ecdh.d.ts +21 -0
  299. package/dist/frontend/lowering/builtins/ecdh.js +208 -0
  300. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
  301. package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
  302. package/dist/frontend/lowering/builtins/errors.js +110 -0
  303. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  304. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
  305. package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
  306. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  307. package/dist/frontend/lowering/builtins/filesystem.js +6 -4
  308. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  309. package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
  310. package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
  311. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
  312. package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
  313. package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
  314. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
  315. package/dist/frontend/lowering/builtins/json.js +54 -1
  316. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  317. package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
  318. package/dist/frontend/lowering/builtins/key-object.js +20 -7
  319. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  320. package/dist/frontend/lowering/builtins/module-calls.js +11 -4
  321. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  322. package/dist/frontend/lowering/builtins/numbers.js +9 -5
  323. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  324. package/dist/frontend/lowering/builtins/operating-system.js +4 -3
  325. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  326. package/dist/frontend/lowering/builtins/performance.js +3 -2
  327. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  328. package/dist/frontend/lowering/builtins/process.d.ts +9 -0
  329. package/dist/frontend/lowering/builtins/process.js +47 -2
  330. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  331. package/dist/frontend/lowering/builtins/promises.js +3 -2
  332. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  333. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +3 -0
  334. package/dist/frontend/lowering/builtins/promisify-callback.js +23 -4
  335. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  336. package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
  337. package/dist/frontend/lowering/builtins/readline.js +23 -6
  338. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  339. package/dist/frontend/lowering/builtins/reflection.js +26 -0
  340. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  341. package/dist/frontend/lowering/builtins/strings.js +13 -5
  342. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  343. package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
  344. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  345. package/dist/frontend/lowering/builtins/timers.js +6 -2
  346. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  347. package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
  348. package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
  349. package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
  350. package/dist/frontend/lowering/builtins/url.js +4 -3
  351. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  352. package/dist/frontend/lowering/builtins/v8.js +2 -1
  353. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  354. package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
  355. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
  356. package/dist/frontend/lowering/call-arguments.js +2 -1
  357. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  358. package/dist/frontend/lowering/call-signatures.d.ts +4 -0
  359. package/dist/frontend/lowering/call-signatures.js +137 -13
  360. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  361. package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
  362. package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
  363. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
  364. package/dist/frontend/lowering/cjs-exports-object.js +34 -1
  365. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  366. package/dist/frontend/lowering/class-assertions.js +3 -2
  367. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  368. package/dist/frontend/lowering/class-construction.d.ts +2 -1
  369. package/dist/frontend/lowering/class-construction.js +8 -13
  370. package/dist/frontend/lowering/class-construction.js.map +1 -1
  371. package/dist/frontend/lowering/class-descriptors.js +1 -1
  372. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  373. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
  374. package/dist/frontend/lowering/class-dynamic-dispatch.js +577 -152
  375. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  376. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
  377. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  378. package/dist/frontend/lowering/class-method-mutations.js +3 -0
  379. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  380. package/dist/frontend/lowering/class-method-values.js +1 -1
  381. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  382. package/dist/frontend/lowering/class-protocols.d.ts +17 -0
  383. package/dist/frontend/lowering/class-protocols.js +117 -7
  384. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  385. package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
  386. package/dist/frontend/lowering/class-prototypes.js +42 -4
  387. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  388. package/dist/frontend/lowering/class-to-primitive.d.ts +2 -2
  389. package/dist/frontend/lowering/class-to-primitive.js +31 -8
  390. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  391. package/dist/frontend/lowering/class-unions.js +2 -1
  392. package/dist/frontend/lowering/class-unions.js.map +1 -1
  393. package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
  394. package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
  395. package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
  396. package/dist/frontend/lowering/coercions/function-adapters.js +105 -75
  397. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  398. package/dist/frontend/lowering/coercions/structural.js +8 -7
  399. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  400. package/dist/frontend/lowering/coercions/unions.js +8 -7
  401. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  402. package/dist/frontend/lowering/collection-ingestion.js +2 -1
  403. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  404. package/dist/frontend/lowering/containers/array-callbacks.d.ts +15 -0
  405. package/dist/frontend/lowering/containers/array-callbacks.js +36 -32
  406. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  407. package/dist/frontend/lowering/containers/array-concat.js +2 -1
  408. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  409. package/dist/frontend/lowering/containers/array-construction.js +32 -4
  410. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  411. package/dist/frontend/lowering/containers/array-methods.js +11 -5
  412. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  413. package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
  414. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  415. package/dist/frontend/lowering/containers/bytes.d.ts +10 -1
  416. package/dist/frontend/lowering/containers/bytes.js +601 -24
  417. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  418. package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
  419. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  420. package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
  421. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  422. package/dist/frontend/lowering/containers/collection-methods.js +80 -10
  423. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  424. package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
  425. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  426. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
  427. package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
  428. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  429. package/dist/frontend/lowering/containers/string-and-regexp.js +85 -22
  430. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  431. package/dist/frontend/lowering/containers/string-replacement.js +2 -1
  432. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  433. package/dist/frontend/lowering/cycle-initialization.d.ts +26 -10
  434. package/dist/frontend/lowering/cycle-initialization.js +177 -39
  435. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  436. package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
  437. package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
  438. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  439. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  440. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  441. package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
  442. package/dist/frontend/lowering/dispatch-sites.js +204 -0
  443. package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
  444. package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
  445. package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
  446. package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
  447. package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
  448. package/dist/frontend/lowering/dyn-streams.js +1 -1
  449. package/dist/frontend/lowering/dyn-streams.js.map +1 -1
  450. package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
  451. package/dist/frontend/lowering/dynamic-tier.js +327 -0
  452. package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
  453. package/dist/frontend/lowering/error-methods.js +4 -0
  454. package/dist/frontend/lowering/error-methods.js.map +1 -1
  455. package/dist/frontend/lowering/expressions/array-literals.js +48 -13
  456. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  457. package/dist/frontend/lowering/expressions/binary.js +124 -8
  458. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  459. package/dist/frontend/lowering/expressions/element-access.js +30 -7
  460. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  461. package/dist/frontend/lowering/expressions/identifiers.js +46 -7
  462. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  463. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +14 -2
  464. package/dist/frontend/lowering/expressions/keyed-field-targets.js +91 -10
  465. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
  466. package/dist/frontend/lowering/expressions/narrowing.js +52 -7
  467. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  468. package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
  469. package/dist/frontend/lowering/expressions/object-literals.js +75 -7
  470. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  471. package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
  472. package/dist/frontend/lowering/expressions/optional-chains.js +17 -8
  473. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  474. package/dist/frontend/lowering/expressions/property-access.d.ts +5 -4
  475. package/dist/frontend/lowering/expressions/property-access.js +351 -16
  476. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  477. package/dist/frontend/lowering/expressions/relational.js +112 -9
  478. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  479. package/dist/frontend/lowering/expressions/typeof.js +13 -0
  480. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  481. package/dist/frontend/lowering/expressions/updates.js +64 -10
  482. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  483. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  484. package/dist/frontend/lowering/generator-delegation.js +191 -1
  485. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  486. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
  487. package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
  488. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  489. package/dist/frontend/lowering/generic-functions.d.ts +46 -1
  490. package/dist/frontend/lowering/generic-functions.js +660 -73
  491. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  492. package/dist/frontend/lowering/handle-properties.d.ts +24 -0
  493. package/dist/frontend/lowering/handle-properties.js +281 -0
  494. package/dist/frontend/lowering/handle-properties.js.map +1 -0
  495. package/dist/frontend/lowering/intern-tables.js +2 -1
  496. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  497. package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
  498. package/dist/frontend/lowering/iterable-spelling.js +38 -0
  499. package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
  500. package/dist/frontend/lowering/iterator-adapters.js +9 -8
  501. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  502. package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
  503. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
  504. package/dist/frontend/lowering/json-require.js +2 -1
  505. package/dist/frontend/lowering/json-require.js.map +1 -1
  506. package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
  507. package/dist/frontend/lowering/key-order-witness.js +21 -4
  508. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  509. package/dist/frontend/lowering/key-order-witness.test.js +38 -2
  510. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  511. package/dist/frontend/lowering/lifetime-regions.js +2 -1
  512. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  513. package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
  514. package/dist/frontend/lowering/lower-array-sort.js +117 -21
  515. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  516. package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
  517. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  518. package/dist/frontend/lowering/lower-assert.js +6 -5
  519. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  520. package/dist/frontend/lowering/lower-async-iteration.js +3 -1
  521. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  522. package/dist/frontend/lowering/lower-builtin-values.js +1 -0
  523. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  524. package/dist/frontend/lowering/lower-calls.d.ts +4 -0
  525. package/dist/frontend/lowering/lower-calls.js +504 -97
  526. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  527. package/dist/frontend/lowering/lower-classes.d.ts +22 -0
  528. package/dist/frontend/lowering/lower-classes.js +339 -32
  529. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  530. package/dist/frontend/lowering/lower-dgram.js +65 -15
  531. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  532. package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
  533. package/dist/frontend/lowering/lower-event-emitter.js +267 -20
  534. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  535. package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
  536. package/dist/frontend/lowering/lower-exprs.js +148 -12
  537. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  538. package/dist/frontend/lowering/lower-functions.js +308 -72
  539. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  540. package/dist/frontend/lowering/lower-generators.js +10 -4
  541. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  542. package/dist/frontend/lowering/lower-inspect.js +578 -16
  543. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  544. package/dist/frontend/lowering/lower-mixins.js +2 -1
  545. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  546. package/dist/frontend/lowering/lower-mock.js +2 -1
  547. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  548. package/dist/frontend/lowering/lower-modules.d.ts +11 -3
  549. package/dist/frontend/lowering/lower-modules.js +227 -72
  550. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  551. package/dist/frontend/lowering/lower-modules.test.js +2 -2
  552. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  553. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
  554. package/dist/frontend/lowering/lower-namespaces.js +24 -3
  555. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  556. package/dist/frontend/lowering/lower-server.d.ts +10 -0
  557. package/dist/frontend/lowering/lower-server.js +263 -60
  558. package/dist/frontend/lowering/lower-server.js.map +1 -1
  559. package/dist/frontend/lowering/lower-stdlib.js +39 -18
  560. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  561. package/dist/frontend/lowering/lower-stmts.d.ts +7 -10
  562. package/dist/frontend/lowering/lower-stmts.js +584 -69
  563. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  564. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  565. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  566. package/dist/frontend/lowering/lower-stream.js +575 -165
  567. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  568. package/dist/frontend/lowering/lower-timers.js +21 -4
  569. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  570. package/dist/frontend/lowering/lowerer.d.ts +151 -30
  571. package/dist/frontend/lowering/lowerer.js +725 -84
  572. package/dist/frontend/lowering/lowerer.js.map +1 -1
  573. package/dist/frontend/lowering/lowerer.test.js +21 -9
  574. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  575. package/dist/frontend/lowering/narrowing-stability.js +5 -0
  576. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  577. package/dist/frontend/lowering/native-ffi.js +1 -1
  578. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  579. package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
  580. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  581. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  582. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  583. package/dist/frontend/lowering/private-brands.d.ts +9 -0
  584. package/dist/frontend/lowering/private-brands.js +66 -15
  585. package/dist/frontend/lowering/private-brands.js.map +1 -1
  586. package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
  587. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  588. package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
  589. package/dist/frontend/lowering/rebindable-functions.js +54 -0
  590. package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
  591. package/dist/frontend/lowering/require-initialization.js +2 -1
  592. package/dist/frontend/lowering/require-initialization.js.map +1 -1
  593. package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
  594. package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
  595. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  596. package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
  597. package/dist/frontend/lowering/runtime-optional-records.js +18 -5
  598. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  599. package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
  600. package/dist/frontend/lowering/site-dependencies.js +84 -0
  601. package/dist/frontend/lowering/site-dependencies.js.map +1 -0
  602. package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
  603. package/dist/frontend/lowering/site-dependencies.test.js +53 -0
  604. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
  605. package/dist/frontend/lowering/stable-names.d.ts +11 -0
  606. package/dist/frontend/lowering/stable-names.js +35 -0
  607. package/dist/frontend/lowering/stable-names.js.map +1 -0
  608. package/dist/frontend/lowering/static-typeof.d.ts +26 -0
  609. package/dist/frontend/lowering/static-typeof.js +172 -0
  610. package/dist/frontend/lowering/static-typeof.js.map +1 -0
  611. package/dist/frontend/lowering/strict-equality.js +2 -1
  612. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  613. package/dist/frontend/lowering/string-index-bounds.js +3 -2
  614. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  615. package/dist/frontend/lowering/structural-positions.d.ts +32 -0
  616. package/dist/frontend/lowering/structural-positions.js +108 -0
  617. package/dist/frontend/lowering/structural-positions.js.map +1 -0
  618. package/dist/frontend/lowering/surfaces.js +72 -30
  619. package/dist/frontend/lowering/surfaces.js.map +1 -1
  620. package/dist/frontend/lowering/thenables.d.ts +16 -0
  621. package/dist/frontend/lowering/thenables.js +124 -0
  622. package/dist/frontend/lowering/thenables.js.map +1 -0
  623. package/dist/frontend/lowering/var-hoisting.js +37 -3
  624. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  625. package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
  626. package/dist/frontend/npm-static-builtin-aliases.js +65 -0
  627. package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
  628. package/dist/frontend/npm-static-bundled-chunks.d.ts +8 -1
  629. package/dist/frontend/npm-static-bundled-chunks.js +173 -2
  630. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  631. package/dist/frontend/npm-static-bundled-chunks.test.js +112 -0
  632. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  633. package/dist/frontend/npm-static-bundled-esm.js +224 -4
  634. package/dist/frontend/npm-static-bundled-esm.js.map +1 -1
  635. package/dist/frontend/npm-static-bundled-esm.test.js +129 -0
  636. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -1
  637. package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
  638. package/dist/frontend/npm-static-enum-iife.js +280 -0
  639. package/dist/frontend/npm-static-enum-iife.js.map +1 -0
  640. package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
  641. package/dist/frontend/npm-static-enum-iife.test.js +116 -0
  642. package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
  643. package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
  644. package/dist/frontend/npm-static-tsc-helpers.js +106 -0
  645. package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
  646. package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
  647. package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
  648. package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
  649. package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
  650. package/dist/frontend/npm-static-type-exports-host.js +214 -0
  651. package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
  652. package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
  653. package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
  654. package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
  655. package/dist/frontend/npm-static-type-exports.d.ts +52 -0
  656. package/dist/frontend/npm-static-type-exports.js +261 -0
  657. package/dist/frontend/npm-static-type-exports.js.map +1 -0
  658. package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
  659. package/dist/frontend/npm-static-type-exports.test.js +103 -0
  660. package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
  661. package/dist/frontend/npm-static-umd.d.ts +6 -0
  662. package/dist/frontend/npm-static-umd.js +203 -0
  663. package/dist/frontend/npm-static-umd.js.map +1 -0
  664. package/dist/frontend/npm-static-umd.test.d.ts +1 -0
  665. package/dist/frontend/npm-static-umd.test.js +105 -0
  666. package/dist/frontend/npm-static-umd.test.js.map +1 -0
  667. package/dist/frontend/npm-static.d.ts +16 -0
  668. package/dist/frontend/npm-static.js +93 -3
  669. package/dist/frontend/npm-static.js.map +1 -1
  670. package/dist/frontend/npm.js +13 -0
  671. package/dist/frontend/npm.js.map +1 -1
  672. package/dist/frontend/package-shims.d.ts +47 -0
  673. package/dist/frontend/package-shims.js +300 -0
  674. package/dist/frontend/package-shims.js.map +1 -0
  675. package/dist/frontend/pipeline.js +67 -1
  676. package/dist/frontend/pipeline.js.map +1 -1
  677. package/dist/frontend/program.d.ts +21 -0
  678. package/dist/frontend/program.js +174 -14
  679. package/dist/frontend/program.js.map +1 -1
  680. package/dist/frontend/program.test.js +1 -1
  681. package/dist/frontend/program.test.js.map +1 -1
  682. package/dist/frontend/resolve.js +13 -0
  683. package/dist/frontend/resolve.js.map +1 -1
  684. package/dist/frontend/services.d.ts +12 -0
  685. package/dist/frontend/services.js +37 -0
  686. package/dist/frontend/services.js.map +1 -1
  687. package/dist/frontend/ts7/ast-node.d.ts +21 -7
  688. package/dist/frontend/ts7/ast-node.js +131 -29
  689. package/dist/frontend/ts7/ast-node.js.map +1 -1
  690. package/dist/frontend/ts7/ast-node.test.js +60 -0
  691. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  692. package/dist/frontend/ts7/ast-wire.d.ts +27 -2
  693. package/dist/frontend/ts7/ast-wire.js +124 -21
  694. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  695. package/dist/frontend/ts7/ast.d.ts +23 -2
  696. package/dist/frontend/ts7/ast.js +143 -2
  697. package/dist/frontend/ts7/ast.js.map +1 -1
  698. package/dist/frontend/ts7/checker.d.ts +13 -1
  699. package/dist/frontend/ts7/checker.js +75 -1
  700. package/dist/frontend/ts7/checker.js.map +1 -1
  701. package/dist/frontend/ts7/checker.test.js +9 -6
  702. package/dist/frontend/ts7/checker.test.js.map +1 -1
  703. package/dist/frontend/ts7/enums.d.ts +3 -3
  704. package/dist/frontend/ts7/enums.generated.d.ts +10 -0
  705. package/dist/frontend/ts7/enums.generated.js +21 -0
  706. package/dist/frontend/ts7/enums.generated.js.map +1 -1
  707. package/dist/frontend/ts7/enums.js +19 -0
  708. package/dist/frontend/ts7/enums.js.map +1 -1
  709. package/dist/frontend/ts7/program-host.d.ts +6 -5
  710. package/dist/frontend/ts7/program-host.js +12 -2
  711. package/dist/frontend/ts7/program-host.js.map +1 -1
  712. package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
  713. package/dist/frontend/ts7/semantic-checker.js +25 -20
  714. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  715. package/dist/frontend/ts7/semantic-json.d.ts +13 -0
  716. package/dist/frontend/ts7/semantic-json.js +146 -0
  717. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  718. package/dist/frontend/ts7/semantic-json.test.js +57 -1
  719. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  720. package/dist/frontend/ts7/semantic-model.d.ts +18 -0
  721. package/dist/frontend/ts7/semantic-model.js +90 -16
  722. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  723. package/dist/frontend/ts7/semantic-model.test.js +3 -2
  724. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  725. package/dist/frontend/ts7/session.d.ts +19 -4
  726. package/dist/frontend/ts7/session.js +1 -1
  727. package/dist/frontend/ts7/session.js.map +1 -1
  728. package/dist/frontend/tsc-codes.d.ts +1 -1
  729. package/dist/frontend/tsc-codes.js +7 -0
  730. package/dist/frontend/tsc-codes.js.map +1 -1
  731. package/dist/frontend/type-mapper.d.ts +38 -6
  732. package/dist/frontend/type-mapper.js +466 -47
  733. package/dist/frontend/type-mapper.js.map +1 -1
  734. package/dist/frontend/type-mapper.test.js +1 -1
  735. package/dist/frontend/type-mapper.test.js.map +1 -1
  736. package/dist/frontend-process-args.d.ts +4 -0
  737. package/dist/frontend-process-args.js +52 -0
  738. package/dist/frontend-process-args.js.map +1 -0
  739. package/dist/frontend-process-args.test.d.ts +1 -0
  740. package/dist/frontend-process-args.test.js +47 -0
  741. package/dist/frontend-process-args.test.js.map +1 -0
  742. package/dist/frontend-process.d.ts +1 -0
  743. package/dist/frontend-process.js +23 -0
  744. package/dist/frontend-process.js.map +1 -0
  745. package/dist/heap-collection.d.ts +16 -0
  746. package/dist/heap-collection.js +42 -0
  747. package/dist/heap-collection.js.map +1 -0
  748. package/dist/heap-collection.test.d.ts +1 -0
  749. package/dist/heap-collection.test.js +59 -0
  750. package/dist/heap-collection.test.js.map +1 -0
  751. package/dist/heap-pressure.d.ts +2 -0
  752. package/dist/heap-pressure.js +12 -0
  753. package/dist/heap-pressure.js.map +1 -0
  754. package/dist/index.d.ts +8 -0
  755. package/dist/index.js +453 -85
  756. package/dist/index.js.map +1 -1
  757. package/dist/ir/array-length-stability.d.ts +3 -2
  758. package/dist/ir/array-length-stability.js +22 -2
  759. package/dist/ir/array-length-stability.js.map +1 -1
  760. package/dist/ir/array-length-stability.test.js +47 -1
  761. package/dist/ir/array-length-stability.test.js.map +1 -1
  762. package/dist/ir/builtin-effects.js +41 -0
  763. package/dist/ir/builtin-effects.js.map +1 -1
  764. package/dist/ir/builtin-signatures.d.ts +5 -1
  765. package/dist/ir/builtin-signatures.js +187 -16
  766. package/dist/ir/builtin-signatures.js.map +1 -1
  767. package/dist/ir/final-fields.d.ts +2 -1
  768. package/dist/ir/final-fields.js +2 -2
  769. package/dist/ir/final-fields.js.map +1 -1
  770. package/dist/ir/function-references.test.js +2 -0
  771. package/dist/ir/function-references.test.js.map +1 -1
  772. package/dist/ir/int32-slots.d.ts +13 -5
  773. package/dist/ir/int32-slots.js +112 -115
  774. package/dist/ir/int32-slots.js.map +1 -1
  775. package/dist/ir/int32-slots.test.js +3 -1
  776. package/dist/ir/int32-slots.test.js.map +1 -1
  777. package/dist/ir/integer-loop-facts.d.ts +14 -4
  778. package/dist/ir/integer-loop-facts.js +172 -32
  779. package/dist/ir/integer-loop-facts.js.map +1 -1
  780. package/dist/ir/integer-loops.d.ts +49 -0
  781. package/dist/ir/integer-loops.js +193 -39
  782. package/dist/ir/integer-loops.js.map +1 -1
  783. package/dist/ir/integer-loops.test.js +201 -1
  784. package/dist/ir/integer-loops.test.js.map +1 -1
  785. package/dist/ir/integer-ranges.d.ts +10 -1
  786. package/dist/ir/integer-ranges.js +122 -25
  787. package/dist/ir/integer-ranges.js.map +1 -1
  788. package/dist/ir/integer-ranges.test.js +255 -1
  789. package/dist/ir/integer-ranges.test.js.map +1 -1
  790. package/dist/ir/ir.d.ts +17 -2
  791. package/dist/ir/ir.js +11 -1
  792. package/dist/ir/ir.js.map +1 -1
  793. package/dist/ir/js-ic.d.ts +52 -0
  794. package/dist/ir/js-ic.js +199 -0
  795. package/dist/ir/js-ic.js.map +1 -0
  796. package/dist/ir/js-ic.test.d.ts +1 -0
  797. package/dist/ir/js-ic.test.js +148 -0
  798. package/dist/ir/js-ic.test.js.map +1 -0
  799. package/dist/ir/jsval.js +38 -4
  800. package/dist/ir/jsval.js.map +1 -1
  801. package/dist/ir/runtime-features.d.ts +64 -5
  802. package/dist/ir/runtime-features.js +358 -101
  803. package/dist/ir/runtime-features.js.map +1 -1
  804. package/dist/ir/tiers.js +1 -0
  805. package/dist/ir/tiers.js.map +1 -1
  806. package/dist/ir/traverse.d.ts +2 -0
  807. package/dist/ir/traverse.js +124 -70
  808. package/dist/ir/traverse.js.map +1 -1
  809. package/dist/ir/validate.js +77 -24
  810. package/dist/ir/validate.js.map +1 -1
  811. package/dist/ir/validate.test.js +15 -2
  812. package/dist/ir/validate.test.js.map +1 -1
  813. package/dist/library/ir-policy.js +11 -0
  814. package/dist/library/ir-policy.js.map +1 -1
  815. package/dist/library/library-cache.d.ts +2 -0
  816. package/dist/library/library-cache.js.map +1 -1
  817. package/dist/library/prepare.js +2 -0
  818. package/dist/library/prepare.js.map +1 -1
  819. package/dist/native/cli.js +22 -0
  820. package/dist/native/cli.js.map +1 -1
  821. package/dist/native/compiler.js +33 -4
  822. package/dist/native/compiler.js.map +1 -1
  823. package/dist/native/executable-cache.js +3 -0
  824. package/dist/native/executable-cache.js.map +1 -1
  825. package/dist/native/prepare.js +8 -1
  826. package/dist/native/prepare.js.map +1 -1
  827. package/dist/native/sanitizer.test.js +10 -0
  828. package/dist/native/sanitizer.test.js.map +1 -1
  829. package/dist/startup-cache.d.ts +1 -0
  830. package/dist/startup-cache.js +1 -0
  831. package/dist/startup-cache.js.map +1 -1
  832. package/dist/text-parts.d.ts +7 -0
  833. package/dist/text-parts.js +44 -0
  834. package/dist/text-parts.js.map +1 -1
  835. package/dist/text-parts.test.d.ts +1 -0
  836. package/dist/text-parts.test.js +46 -0
  837. package/dist/text-parts.test.js.map +1 -0
  838. package/dist/timing.d.ts +9 -2
  839. package/dist/timing.js +7 -4
  840. package/dist/timing.js.map +1 -1
  841. package/dist/wasm/translate.d.ts +4 -0
  842. package/dist/wasm/translate.js +2 -2
  843. package/dist/wasm/translate.js.map +1 -1
  844. package/package.json +22 -21
  845. package/shims/fs-extra/core/api.ts +1192 -0
  846. package/shims/fs-extra/index.ts +9 -0
  847. package/shims/undici/core/agent.ts +163 -0
  848. package/shims/undici/core/api.ts +93 -0
  849. package/shims/undici/core/client.ts +1304 -0
  850. package/shims/undici/core/connector.ts +157 -0
  851. package/shims/undici/core/diagnostics-types.ts +68 -0
  852. package/shims/undici/core/diagnostics.ts +16 -0
  853. package/shims/undici/core/dispatcher.ts +574 -0
  854. package/shims/undici/core/errors-v5.ts +22 -0
  855. package/shims/undici/core/errors-v7.ts +25 -0
  856. package/shims/undici/core/errors.ts +255 -0
  857. package/shims/undici/core/fetch.ts +635 -0
  858. package/shims/undici/core/pool.ts +280 -0
  859. package/shims/undici/core/readable.ts +268 -0
  860. package/shims/undici/core/request.ts +313 -0
  861. package/shims/undici/core/timers.ts +80 -0
  862. package/shims/undici/core/types.ts +167 -0
  863. package/shims/undici/core/util.ts +67 -0
  864. package/shims/undici/v5.ts +119 -0
  865. package/shims/undici/v7.ts +119 -0
  866. package/surface-manifest.json +20 -52
package/dist/index.js CHANGED
@@ -10,21 +10,28 @@ 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 { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
13
+ import { frontendProcessExecArgv } from "./frontend-process-args.js";
14
+ import { spawn } from "node:child_process";
15
+ import { createHash } from "node:crypto";
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";
14
19
  import { basename, dirname, join, resolve } from "node:path";
20
+ import { fileURLToPath } from "node:url";
15
21
  import { clearCcCaches, configuredTargetPlatform, } from "./backend/native-toolchain.js";
16
22
  import { buildCacheRoot, prepareBuildCacheRoot, pruneBuildCache } from "./backend/build-cache.js";
17
23
  import { CcCompileError, compileExternalC, compileExternalCLibrary, executableNativeEnvironmentFingerprint, mobileLibraryTarget, mobileTargetRefusal, resolveCc, } from "./backend/external-c.js";
18
- import { emitLlvmModuleSource, LlvmUnsupportedError } from "./backend/llvm/emitter.js";
24
+ import { emitLlvmModuleSource, LlvmUnsupportedError, lowRegionTarget, } from "./backend/llvm/emitter.js";
19
25
  import { inlineRcOption } from "./backend/llvm/shapes.js";
20
- import { emitNativeArtifact, NativeCodegenError, writeLlvmSource, } from "./backend/native-codegen.js";
26
+ import { emitNativeArtifact, isLlvmFile, llvmInputBytes, NativeCodegenError, writeLlvmSource, } from "./backend/native-codegen.js";
21
27
  import { nativePartitionPaths, nativeProgramPartitions } from "./backend/native-codegen-core.js";
22
28
  import { privateSiblingPath } from "./backend/build-cache.js";
23
29
  import { nativeCodegenTarget, nativeCodegenTargetRefusal } from "./backend/targets.js";
24
30
  import { windowsSubsystemLinkerArgs } from "./backend/targets.js";
25
31
  import { createNativeLinkInfo } from "./backend/native-link-info.js";
26
- import { RuntimePackError, loadRuntimeBitcode } from "./backend/runtime-pack.js";
32
+ import { RuntimePackError } from "./backend/runtime-pack.js";
27
33
  import { createNativeLinkPlan } from "./backend/link-plan.js";
34
+ import { nativeProfileKey, nativeProfileRefusal, } from "./backend/native-profile.js";
28
35
  import { executableLinkerEnvironmentFingerprint, linkNativeExecutable, platformLinkerSupportsPersistentCache, resolvePlatformLinker, } from "./backend/linker.js";
29
36
  import { splitLlvmLibraryProgram, splitLlvmProgram } from "./backend/llvm/split.js";
30
37
  import { emitLibraryIdentityLines, replaceLibraryIdentity, stripLibraryIdentity, } from "./backend/library-identity-markers.js";
@@ -35,24 +42,27 @@ import { canonicalModuleGraph, clearSidecarCaches, compilerReleaseVersion, libra
35
42
  import {} from "./ir/ir.js";
36
43
  import { moduleRuntimeFeatures } from "./ir/runtime-features.js";
37
44
  import { serializeModuleParts } from "./ir/serialize.js";
38
- import { writeTextParts } from "./text-parts.js";
45
+ import { readTextParts, writeTextParts } from "./text-parts.js";
39
46
  import { validateModule } from "./ir/validate.js";
40
47
  import { loadProgram } from "./frontend/program-node.js";
41
48
  import { runFrontend } from "./frontend/pipeline.js";
42
- import { provenanceSources } from "./frontend/provenance-registry.js";
49
+ import { provenanceSources, setProvenanceSources, } from "./frontend/provenance-registry.js";
43
50
  import { clearResolveCaches } from "./frontend/resolve.js";
44
51
  import { loadFfiProfile } from "./ffi/ffi-manifest.js";
45
52
  import { executableLinkFeatures } from "./backend/executable-features.js";
46
53
  import { youngNurseryRequested } from "./backend/young-nursery.js";
47
- import { FrontendInputTracker, trackedReadFile } from "./frontend/input-tracker.js";
54
+ import { FrontendInputTracker, trackedReadFile, } from "./frontend/input-tracker.js";
48
55
  import { libraryFrontendImplementationFingerprint, publishEarlyLibraryCache, readEarlyLibraryCache, readSemanticLibraryCache, } from "./library/library-cache.js";
49
- import { publishEarlyExecutableCache, publishEarlyExecutableRoute, readEarlyExecutableCache, } from "./executable/executable-cache.js";
56
+ import { hasEarlyExecutableNativeBuild, publishEarlyExecutableCache, publishEarlyExecutableRoute, readEarlyExecutableCache, recordEarlyExecutableNativeBuild, } from "./executable/executable-cache.js";
50
57
  import { compilerImplementationIdentity } from "./library/compiler-self-identity.js";
58
+ import { isPerformanceCode } from "./diagnostics/dynamic-tier.js";
51
59
  export const VERSION = "0.0.1";
52
60
  export { EXTERNAL_OBJECT_ABI_STABILITY, RUNTIME_ABI_MARKER, RUNTIME_ABI_VERSION, } from "./backend/runtime-abi.js";
53
61
  export { InternalCompilerError } from "./errors.js";
54
62
  export { compileExternalC as compileC, compileExternalC, runtimeSrcDir, } from "./backend/external-c.js";
55
63
  export { warmNativeCaches } from "./backend/warm-cache.js";
64
+ export { mergeNativeProfiles as mergeProfiles } from "./backend/native-codegen.js";
65
+ export { collectGarbageUnderHeapPressure } from "./heap-collection.js";
56
66
  export { ANDROID_MIN_API, IPHONEOS_MIN_VERSION, isAndroidTarget, isIosTarget, isMobileTarget, mobileLibraryTarget, mobileTargetRefusal, } from "./backend/external-c.js";
57
67
  export { emitLlvmModule } from "./backend/llvm/emitter.js";
58
68
  export { renderDiagnostics, renderDiagnostics as renderAll, renderDiagnostic, } from "./diagnostics/render.js";
@@ -143,8 +153,21 @@ export async function compile(entryPath, opts) {
143
153
  clearCompileSessionCaches();
144
154
  const frontendInputs = new FrontendInputTracker();
145
155
  const warnings = { warnings: [], sourceTexts: null };
146
- const result = await frontendInputs.run(() => compileTracked(entryPath, opts, frontendInputs, warnings));
147
- 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 };
148
171
  }
149
172
  function withCompileWarnings(result, sink) {
150
173
  if (!result.ok || sink.warnings.length === 0)
@@ -176,7 +199,10 @@ function executableNativeFeatures(mod, backend, optimization) {
176
199
  ...executableLinkFeatures(mod),
177
200
  };
178
201
  }
179
- async function compileExecutableNative(features, llvmPath, outPath, sanitize, ffi, windowsSubsystem, strip, programSplit = null, programObjectDependencies = [], onArtifactReady, programPartitions = []) {
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) {
180
206
  const programIsObject = /\.(?:o|obj)$/.test(llvmPath);
181
207
  const runtimePackTarget = programIsObject && !sanitize ? nativeCodegenTarget() : null;
182
208
  if (runtimePackTarget !== null) {
@@ -190,6 +216,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
190
216
  optimization: features.optimization ?? "release",
191
217
  ...(strip ? { strip: true } : {}),
192
218
  ...(windowsSubsystem === undefined ? {} : { windowsSubsystem }),
219
+ ...(profileGenerate ? { profileGenerate: true } : {}),
193
220
  programObjectDependencies,
194
221
  });
195
222
  const cacheableLinker = onArtifactReady !== undefined &&
@@ -212,7 +239,9 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
212
239
  if (programIsObject)
213
240
  throw new InternalCompilerError("program objects must link against a precompiled runtime pack");
214
241
  await compileExternalC({
215
- cPath: llvmPath,
242
+ ...(llvmVisiblePath === undefined || llvmVisiblePath === llvmPath
243
+ ? { cPath: llvmPath }
244
+ : { cPath: llvmVisiblePath, cSourcePath: llvmPath }),
216
245
  outPath,
217
246
  cacheIdentity: "scriptc-generated-v1",
218
247
  ...optimizationField(features.optimization),
@@ -242,13 +271,18 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
242
271
  dynAsync: features.dynAsync,
243
272
  ...(features.dynTier ? { dynTier: true } : {}),
244
273
  ...(features.streamDyn ? { streamDyn: true } : {}),
274
+ ...(features.handleProps ? { handleProps: true } : {}),
275
+ ...(features.dynForAwait ? { dynForAwait: true } : {}),
245
276
  ...(features.eventsOnceSignal ? { eventsOnceSignal: true } : {}),
277
+ ...(features.dynBuffer ? { dynBuffer: true } : {}),
278
+ ...(features.builtinValues ? { builtinValues: true } : {}),
246
279
  events: features.events,
247
280
  emitter: features.emitter,
248
281
  symbol: features.symbol,
249
282
  bigint: features.bigint,
250
283
  searchParams: features.searchParams,
251
284
  qs: features.qs,
285
+ utilPromisify: features.utilPromisify,
252
286
  dynBuiltinClass: features.dynBuiltinClass,
253
287
  dynBuiltinStream: features.dynBuiltinStream,
254
288
  parseArgs: features.parseArgs,
@@ -258,6 +292,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
258
292
  http2: features.http2,
259
293
  dgram: features.dgram,
260
294
  dnsPromises: features.dnsPromises,
295
+ dgramDyn: features.dgramDyn,
261
296
  watch: features.watch,
262
297
  foreignFfi: features.foreignFfi,
263
298
  ...(features.workers ? { workers: true } : {}),
@@ -266,6 +301,10 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
266
301
  tls: features.tls,
267
302
  tlsCa: features.tlsCa,
268
303
  cipher: features.cipher,
304
+ ecdh: features.ecdh,
305
+ dh: features.dh,
306
+ pki: features.pki,
307
+ ed25519: features.ed25519,
269
308
  webcrypto: features.webcrypto,
270
309
  perfLoop: features.perfLoop,
271
310
  ...(onArtifactReady === undefined ? {} : { onArtifactReady }),
@@ -278,7 +317,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
278
317
  }),
279
318
  });
280
319
  }
281
- async function emitNativeProgramObject(entryPath, opts, llvm, features) {
320
+ async function emitNativeProgramObject(entryPath, opts, llvm, profile) {
282
321
  const stem = basename(entryPath).replace(/\.(ts|mts|cts|js|mjs|cjs)$/, "");
283
322
  const artifactPath = join(opts.outDir, `${stem}.helper.o`);
284
323
  // compileExecutableNative recognizes object inputs by suffix. The random
@@ -287,25 +326,8 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features) {
287
326
  const linkPath = `${privateSiblingPath(artifactPath, "native-program-object")}.o`;
288
327
  // The validated program-object artifact is a single object by contract.
289
328
  const target = nativeCodegenTarget();
290
- const llvmBytes = (typeof llvm === "string" ? [llvm] : llvm).reduce((bytes, part) => bytes + Buffer.byteLength(part), 0);
329
+ const llvmBytes = llvmInputBytes(llvm);
291
330
  const partitions = opts.nativeProgramObject === true || target === null ? 1 : nativeProgramPartitions(llvmBytes);
292
- // Optimized programs import small runtime functions from the bitcode of
293
- // the exact runtime units they link, so LLVM can inline across the
294
- // boundary. Release units ship only the bodies that need none of their
295
- // unit-local state, which keeps the import cheap; speed units promote
296
- // that state and offer more. Every partition reads the bitcode again, so
297
- // release imports only into programs small enough for one partition: in
298
- // larger ones the build-time and size cost outgrows the gain.
299
- const runtimeBitcode = opts.sanitize !== true &&
300
- target !== null &&
301
- (opts.optimization === "speed" ||
302
- (opts.optimization !== "dev" && nativeProgramPartitions(llvmBytes) === 1))
303
- ? await loadRuntimeBitcode({
304
- target,
305
- features,
306
- optimization: opts.optimization === "speed" ? "speed" : "release",
307
- })
308
- : null;
309
331
  try {
310
332
  const artifact = await emitNativeArtifact({
311
333
  outputPath: linkPath,
@@ -315,15 +337,13 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features) {
315
337
  optimization: opts.optimization === "dev" ? "0" : "2",
316
338
  ...(opts.sanitize === undefined ? {} : { sanitize: opts.sanitize }),
317
339
  partitions,
318
- ...(runtimeBitcode === null
319
- ? {}
320
- : { importBitcode: { paths: runtimeBitcode.paths, digests: runtimeBitcode.digests } }),
340
+ ...(profile === undefined ? {} : { profile }),
321
341
  });
322
342
  return {
323
343
  linkPath,
324
344
  partitionPaths: artifact.outputPaths.slice(1),
325
345
  artifactPath,
326
- dependencies: [...artifact.dependencies, ...(runtimeBitcode?.dependencies ?? [])],
346
+ dependencies: artifact.dependencies,
327
347
  };
328
348
  }
329
349
  catch (error) {
@@ -334,6 +354,23 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features) {
334
354
  async function removeNativeProgramObject(linkPath, partitionPaths) {
335
355
  await Promise.all([linkPath, ...partitionPaths].map((path) => rm(path, { force: true }).catch(() => undefined)));
336
356
  }
357
+ /** The request's profile. An indexed profile is read here so every cache keys
358
+ * its bytes. */
359
+ async function readNativeProfile(opts) {
360
+ if (opts.profileGenerate !== undefined)
361
+ return { generate: opts.profileGenerate };
362
+ if (opts.profileUse === undefined)
363
+ return undefined;
364
+ const path = resolve(opts.profileUse);
365
+ let bytes;
366
+ try {
367
+ bytes = await readFile(path);
368
+ }
369
+ catch (err) {
370
+ throw new Error(`cannot read --profile-use file ${path}: ${err instanceof Error ? err.message : String(err)}`);
371
+ }
372
+ return { use: { path, digest: createHash("sha256").update(bytes).digest("hex") } };
373
+ }
337
374
  function usesPrecompiledRuntimePack(opts, backend) {
338
375
  if (backend !== "llvm" || opts.sanitize === true)
339
376
  return false;
@@ -375,6 +412,7 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
375
412
  wasi: buildPlatform === "wasi",
376
413
  runtimeAbiMarker: outputKind === "obj",
377
414
  objectAudit: opts.sanitize === true,
415
+ lowRegion: lowRegionTarget(buildPlatform, opts.sanitize === true),
378
416
  ...(opts.sanitize === true ? { wasmBoundsChecks: true } : {}),
379
417
  ...inlineRcOption(opts.optimization, opts.sanitize === true),
380
418
  });
@@ -433,6 +471,8 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
433
471
  }
434
472
  await mkdir(opts.outDir, { recursive: true });
435
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`;
436
476
  const backend = "llvm";
437
477
  const useRuntimePack = opts.nativeProgramObject === true || usesPrecompiledRuntimePack(opts, backend);
438
478
  let llvmSource;
@@ -444,6 +484,7 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
444
484
  wasi: buildPlatform === "wasi",
445
485
  runtimeAbiMarker: useRuntimePack,
446
486
  objectAudit: opts.sanitize === true,
487
+ lowRegion: lowRegionTarget(buildPlatform, opts.sanitize === true),
447
488
  ...(opts.sanitize === true ? { wasmBoundsChecks: true } : {}),
448
489
  ...inlineRcOption(opts.optimization, opts.sanitize === true),
449
490
  ...(opts.detachedExit === true ? { detachedExit: true } : {}),
@@ -455,12 +496,14 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
455
496
  return { ok: false, diagnostics: [llvmRefusalDiag(err, entryPath)], sourceTexts };
456
497
  }
457
498
  timing("llvm-emit");
458
- await writeLlvmSource(llvmPath, llvmSource);
499
+ await writeLlvmSource(llvmSourcePath, llvmSource);
459
500
  timing("llvm-write");
460
501
  let irPath;
502
+ let irSourcePath;
461
503
  if (opts.emitIr) {
462
504
  irPath = defaultSourcePaths.ir;
463
- await writeTextParts(irPath, serializeModuleParts(mod));
505
+ irSourcePath = privateSiblingPath(irPath, "ir");
506
+ await writeTextParts(irSourcePath, serializeModuleParts(mod));
464
507
  }
465
508
  const nativeFeatures = executableNativeFeatures(mod, backend, opts.optimization ?? "release");
466
509
  timing("link-features");
@@ -472,10 +515,243 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
472
515
  ? splitLlvmProgram(llvmSource)
473
516
  : null;
474
517
  timing("llvm-split");
475
- 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));
476
596
  }
477
- 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) {
478
753
  const timing = compilationTiming();
754
+ const timingStart = Date.now();
479
755
  entryPath = resolve(entryPath);
480
756
  const outputKind = opts.outputKind ?? "exe";
481
757
  if ((opts.backend !== undefined && opts.backend !== "llvm") ||
@@ -650,22 +926,35 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
650
926
  sourceTexts: new Map(),
651
927
  };
652
928
  }
929
+ const profileRefusal = nativeProfileRefusal({
930
+ ...opts,
931
+ outputKind,
932
+ optimization: opts.optimization ?? "release",
933
+ sanitize: opts.sanitize ?? false,
934
+ platform: buildPlatform,
935
+ });
936
+ let profile;
937
+ try {
938
+ if (profileRefusal !== null)
939
+ throw new Error(profileRefusal);
940
+ profile = await readNativeProfile(opts);
941
+ }
942
+ catch (err) {
943
+ return {
944
+ ok: false,
945
+ diagnostics: [
946
+ nativeCodegenDiag("SC3002", err instanceof Error ? err.message : String(err), entryPath),
947
+ ],
948
+ sourceTexts: new Map(),
949
+ };
950
+ }
653
951
  const cacheRoot = outputKind === "exe" && provenanceSources() === null
654
952
  ? await prepareBuildCacheRoot(buildCacheRoot())
655
953
  : null;
656
954
  let earlyCacheOptions = null;
657
955
  if (outputKind === "exe") {
658
956
  const helperObjectRoute = opts.nativeProgramObject === true || usesPrecompiledRuntimePack(opts, "llvm");
659
- // Package content and native driver discovery are independent inputs to
660
- // the same cache key. Start both before waiting so edits do not pay their
661
- // filesystem and subprocess latency serially.
662
- const [implementation, nativeEnvironment] = await Promise.all([
663
- compilerImplementationIdentity(),
664
- helperObjectRoute
665
- ? executableLinkerEnvironmentFingerprint(process.env, nativeCodegenTarget()?.defaultLinker)
666
- : executableNativeEnvironmentFingerprint(),
667
- ]);
668
- earlyCacheOptions = {
957
+ const routeOptions = {
669
958
  entryPath,
670
959
  outDir: opts.outDir,
671
960
  outPath: opts.outPath,
@@ -676,6 +965,7 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
676
965
  ...(opts.strip ? { strip: true } : {}),
677
966
  ...(opts.windowsSubsystem === "gui" ? { windowsSubsystem: "gui" } : {}),
678
967
  ...(opts.detachedExit === true ? { detachedExit: true } : {}),
968
+ ...(profile === undefined ? {} : { profile: nativeProfileKey(profile) }),
679
969
  ...checkerField(),
680
970
  ...(youngNurseryRequested() ? { youngNursery: true } : {}),
681
971
  npmStatic: opts.npmStatic ?? null,
@@ -692,8 +982,25 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
692
982
  ? resolvePlatformLinker(process.env, nativeCodegenTarget()?.defaultLinker)
693
983
  : (process.env["SCRIPTC_CC"] ?? "clang"),
694
984
  ],
695
- nativeEnvironment,
696
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,
697
1004
  implementation: implementation.digest,
698
1005
  implementationDependencies: implementation.dependencies,
699
1006
  };
@@ -706,6 +1013,12 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
706
1013
  if (earlyCacheOptions === null) {
707
1014
  throw new InternalCompilerError("executable cache hit without executable cache options");
708
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
+ }
709
1022
  const executableCacheOptions = earlyCacheOptions;
710
1023
  // Route/proof metadata is independently evictable. A full-compiler
711
1024
  // fallback that still finds the validated payload repairs that lightweight
@@ -728,39 +1041,64 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
728
1041
  ...(earlyHit.irPath === undefined ? {} : { irPath: earlyHit.irPath }),
729
1042
  };
730
1043
  }
731
- 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;
732
1057
  let nativeProgramObject = null;
733
1058
  const useRuntimePack = opts.nativeProgramObject === true ||
734
1059
  usesPrecompiledRuntimePack(opts, earlyHit.native.backend);
735
- if (useRuntimePack) {
736
- if (earlyHit.native.backend !== "llvm") {
737
- throw new InternalCompilerError("native program-object cache hit restored a non-LLVM translation unit");
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
+ }
738
1081
  }
739
- try {
740
- nativeProgramObject = await emitNativeProgramObject(entryPath, opts, await readFile(earlyHit.llvmPath, "utf8"), earlyHit.native);
741
- nativeInputPath = nativeProgramObject.linkPath;
1082
+ else {
1083
+ const staged = await stageDriverBuildSources(hitSources);
1084
+ stagedDir = staged.dir;
1085
+ nativeSources = staged.sources;
1086
+ nativeInputPath = nativeSources.llvmSourcePath;
742
1087
  }
743
- catch (err) {
744
- if (!(err instanceof NativeCodegenError))
745
- throw err;
746
- return {
747
- ok: false,
748
- diagnostics: [nativeCodegenDiag(err.diagnosticCode, err.message, entryPath)],
749
- sourceTexts: new Map(),
750
- };
751
- }
752
- }
753
- try {
754
1088
  await compileExecutableNative(earlyHit.native, nativeInputPath, opts.outPath, opts.sanitize ?? false, ffi, opts.windowsSubsystem, opts.strip, null, nativeProgramObject?.dependencies, opts.nativeProgramObject === true
755
1089
  ? undefined
756
1090
  : async ({ dependencies }) => {
757
1091
  await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
758
1092
  ...earlyHit,
1093
+ llvmPath: nativeSources.llvmSourcePath,
1094
+ ...(nativeSources.irSourcePath === undefined
1095
+ ? {}
1096
+ : { irPath: nativeSources.irSourcePath }),
759
1097
  executableRestored: true,
760
1098
  nativeDependencies: dependencies,
761
1099
  frontend: earlyHit.frontend,
762
1100
  });
763
- }, nativeProgramObject?.partitionPaths);
1101
+ }, nativeProgramObject?.partitionPaths, profile?.generate !== undefined, hitSources.llvmPath);
764
1102
  if (nativeProgramObject !== null && opts.nativeProgramObject === true) {
765
1103
  await rename(nativeProgramObject.linkPath, nativeProgramObject.artifactPath);
766
1104
  }
@@ -788,6 +1126,10 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
788
1126
  if (nativeProgramObject !== null) {
789
1127
  await removeNativeProgramObject(nativeProgramObject.linkPath, nativeProgramObject.partitionPaths);
790
1128
  }
1129
+ if (stagedDir === null)
1130
+ await installBuildSources(hitSources);
1131
+ else
1132
+ await rm(stagedDir, { recursive: true, force: true });
791
1133
  }
792
1134
  await pruneBuildCache(cacheRoot);
793
1135
  return {
@@ -805,10 +1147,22 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
805
1147
  };
806
1148
  }
807
1149
  timing("executable-cache-miss");
808
- 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);
809
1153
  if ("ok" in prepared)
810
1154
  return prepared;
811
- 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;
812
1166
  const backend = "llvm";
813
1167
  await mkdir(dirname(opts.outPath), { recursive: true });
814
1168
  if (earlyCacheOptions === null) {
@@ -824,8 +1178,9 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
824
1178
  throw new InternalCompilerError("native program-object validation requires the LLVM backend");
825
1179
  }
826
1180
  try {
827
- nativeProgramObject = await emitNativeProgramObject(entryPath, opts, llvmSource, nativeFeatures);
1181
+ nativeProgramObject = await emitNativeProgramObject(entryPath, opts, llvmSource, profile);
828
1182
  timing("native-object");
1183
+ await recordEarlyExecutableNativeBuild(cacheRoot, executableCacheOptions).catch(() => undefined);
829
1184
  }
830
1185
  catch (err) {
831
1186
  if (!(err instanceof NativeCodegenError))
@@ -837,23 +1192,39 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
837
1192
  };
838
1193
  }
839
1194
  }
840
- 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
841
1201
  ? undefined
842
1202
  : async ({ dependencies }) => {
843
1203
  await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
844
- llvmPath,
1204
+ llvmPath: llvmSourcePath,
845
1205
  native: nativeFeatures,
846
1206
  executableRestored: true,
847
1207
  nativeDependencies: dependencies,
848
1208
  frontend: frontendInputs.snapshot(),
849
- ...(irPath === undefined ? {} : { irPath }),
1209
+ ...(irSourcePath === undefined ? {} : { irPath: irSourcePath }),
1210
+ ...performanceWarnings(warningSink),
850
1211
  });
851
1212
  publishedExecutable = true;
852
- }, nativeProgramObject?.partitionPaths);
1213
+ }, nativeProgramObject?.partitionPaths, profile?.generate !== undefined, llvmPath);
853
1214
  timing("native-link");
854
1215
  if (nativeProgramObject !== null && opts.nativeProgramObject === true) {
855
1216
  await rename(nativeProgramObject.linkPath, nativeProgramObject.artifactPath);
856
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
+ }
857
1228
  }
858
1229
  catch (err) {
859
1230
  if (err instanceof RuntimePackError) {
@@ -874,15 +1245,10 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
874
1245
  if (nativeProgramObject !== null) {
875
1246
  await removeNativeProgramObject(nativeProgramObject.linkPath, nativeProgramObject.partitionPaths);
876
1247
  }
877
- }
878
- if (!publishedExecutable) {
879
- await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
880
- llvmPath,
881
- native: nativeFeatures,
882
- executableRestored: false,
883
- frontend: frontendInputs.snapshot(),
884
- ...(irPath === undefined ? {} : { irPath }),
885
- }).catch(() => undefined);
1248
+ if (stagedDir === null)
1249
+ await installBuildSources(buildSources);
1250
+ else
1251
+ await rm(stagedDir, { recursive: true, force: true });
886
1252
  }
887
1253
  await pruneBuildCache(cacheRoot);
888
1254
  timing("complete");
@@ -922,6 +1288,7 @@ function libraryNativeFeatures(mod, backend) {
922
1288
  copying: features.copying,
923
1289
  textDecoderLegacy: features.legacyTextDecoder,
924
1290
  dynInvoke: features.dynInvoke,
1291
+ ...(features.dynBuffer ? { dynBuffer: true } : {}),
925
1292
  ...(features.dynTier ? { dynTier: true } : {}),
926
1293
  ...(mod.lib?.identity !== undefined ? { buildId: mod.lib.identity.buildId } : {}),
927
1294
  };
@@ -996,6 +1363,7 @@ async function compileLibraryNative(profile, llvmPath, archivePath, sanitize, fe
996
1363
  copying: features.copying,
997
1364
  textDecoderLegacy: features.textDecoderLegacy,
998
1365
  dynInvoke: features.dynInvoke,
1366
+ ...(features.dynBuffer === true ? { dynBuffer: true } : {}),
999
1367
  ...(features.dynTier === true ? { dynTier: true } : {}),
1000
1368
  };
1001
1369
  if (packTarget !== null)