@scriptc/compiler 0.4.8 → 0.4.9

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 (536) hide show
  1. package/ambient/node-fallback/buffer.d.ts +2 -0
  2. package/ambient/node-fallback/child_process.d.ts +9 -3
  3. package/ambient/node-fallback/dns-promises.d.ts +25 -0
  4. package/ambient/node-fallback/dns.d.ts +29 -0
  5. package/ambient/node-fallback/test.d.ts +7 -0
  6. package/ambient/scriptc-node-fallback.d.ts +145 -2
  7. package/ambient/scriptc-overrides.d.ts +22 -13
  8. package/dist/backend/build-cache.d.ts +1 -1
  9. package/dist/backend/build-cache.js +1 -1
  10. package/dist/backend/build-cache.js.map +1 -1
  11. package/dist/backend/cache-root.d.ts +7 -0
  12. package/dist/backend/cache-root.js +27 -0
  13. package/dist/backend/cache-root.js.map +1 -1
  14. package/dist/backend/executable-features.js +5 -1
  15. package/dist/backend/executable-features.js.map +1 -1
  16. package/dist/backend/link-plan.js +7 -1
  17. package/dist/backend/link-plan.js.map +1 -1
  18. package/dist/backend/llvm/bytes-loop-versions.d.ts +12 -1
  19. package/dist/backend/llvm/bytes-loop-versions.js +107 -30
  20. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  21. package/dist/backend/llvm/bytes-loop-versions.test.js +96 -0
  22. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  23. package/dist/backend/llvm/checked-value-lifetimes.js +1 -0
  24. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  25. package/dist/backend/llvm/classes.d.ts +16 -5
  26. package/dist/backend/llvm/classes.js +34 -6
  27. package/dist/backend/llvm/classes.js.map +1 -1
  28. package/dist/backend/llvm/classes.test.js +21 -2
  29. package/dist/backend/llvm/classes.test.js.map +1 -1
  30. package/dist/backend/llvm/common.d.ts +9 -0
  31. package/dist/backend/llvm/common.js +9 -0
  32. package/dist/backend/llvm/common.js.map +1 -1
  33. package/dist/backend/llvm/cpu-dispatch.d.ts +36 -2
  34. package/dist/backend/llvm/cpu-dispatch.js +96 -2
  35. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  36. package/dist/backend/llvm/dense-array-access.d.ts +5 -2
  37. package/dist/backend/llvm/dense-array-access.js +16 -12
  38. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  39. package/dist/backend/llvm/dense-array-access.test.js +3 -1
  40. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  41. package/dist/backend/llvm/dyn.d.ts +24 -0
  42. package/dist/backend/llvm/dyn.js +117 -3
  43. package/dist/backend/llvm/dyn.js.map +1 -1
  44. package/dist/backend/llvm/emit-function.js +6 -0
  45. package/dist/backend/llvm/emit-function.js.map +1 -1
  46. package/dist/backend/llvm/emit-journal.d.ts +1 -0
  47. package/dist/backend/llvm/emit-journal.js.map +1 -1
  48. package/dist/backend/llvm/emit-module.js +48 -5
  49. package/dist/backend/llvm/emit-module.js.map +1 -1
  50. package/dist/backend/llvm/emit-module.test.js +41 -0
  51. package/dist/backend/llvm/emit-module.test.js.map +1 -1
  52. package/dist/backend/llvm/emit-statements.js +11 -0
  53. package/dist/backend/llvm/emit-statements.js.map +1 -1
  54. package/dist/backend/llvm/emitter.d.ts +87 -7
  55. package/dist/backend/llvm/emitter.js +136 -15
  56. package/dist/backend/llvm/emitter.js.map +1 -1
  57. package/dist/backend/llvm/expr-async.js +28 -6
  58. package/dist/backend/llvm/expr-async.js.map +1 -1
  59. package/dist/backend/llvm/expr-containers.js +19 -5
  60. package/dist/backend/llvm/expr-containers.js.map +1 -1
  61. package/dist/backend/llvm/expr-dynamic.js +29 -1
  62. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  63. package/dist/backend/llvm/expr-primitives.js +104 -6
  64. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  65. package/dist/backend/llvm/expr-records.js +15 -1
  66. package/dist/backend/llvm/expr-records.js.map +1 -1
  67. package/dist/backend/llvm/expr-stream-bridges.js +53 -5
  68. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  69. package/dist/backend/llvm/inline-arrays.js +1 -1
  70. package/dist/backend/llvm/inline-arrays.js.map +1 -1
  71. package/dist/backend/llvm/js-ic.js +126 -2
  72. package/dist/backend/llvm/js-ic.js.map +1 -1
  73. package/dist/backend/llvm/lanes.d.ts +38 -0
  74. package/dist/backend/llvm/lanes.js +778 -0
  75. package/dist/backend/llvm/lanes.js.map +1 -0
  76. package/dist/backend/llvm/lanes.test.d.ts +1 -0
  77. package/dist/backend/llvm/lanes.test.js +402 -0
  78. package/dist/backend/llvm/lanes.test.js.map +1 -0
  79. package/dist/backend/llvm/lib-dispatch.js +9 -4
  80. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  81. package/dist/backend/llvm/lib-network.js +20 -0
  82. package/dist/backend/llvm/lib-network.js.map +1 -1
  83. package/dist/backend/llvm/lib-shared.js +27 -0
  84. package/dist/backend/llvm/lib-shared.js.map +1 -1
  85. package/dist/backend/llvm/lib-test.js +11 -0
  86. package/dist/backend/llvm/lib-test.js.map +1 -1
  87. package/dist/backend/llvm/local-array-reads.js +2 -2
  88. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  89. package/dist/backend/llvm/map-number-lookup.js +8 -2
  90. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  91. package/dist/backend/llvm/nullable-unions.js +5 -2
  92. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  93. package/dist/backend/llvm/publish.d.ts +3 -0
  94. package/dist/backend/llvm/publish.js +2 -2
  95. package/dist/backend/llvm/publish.js.map +1 -1
  96. package/dist/backend/llvm/reference-writes.js +1 -0
  97. package/dist/backend/llvm/reference-writes.js.map +1 -1
  98. package/dist/backend/llvm/region-groups.js +43 -4
  99. package/dist/backend/llvm/region-groups.js.map +1 -1
  100. package/dist/backend/llvm/region-groups.test.js +79 -0
  101. package/dist/backend/llvm/region-groups.test.js.map +1 -1
  102. package/dist/backend/llvm/runtime-registries.test.js +32 -1
  103. package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
  104. package/dist/backend/llvm/shapes.js +10 -1
  105. package/dist/backend/llvm/shapes.js.map +1 -1
  106. package/dist/backend/llvm/string-reads.d.ts +1 -1
  107. package/dist/backend/llvm/string-reads.js +1 -1
  108. package/dist/backend/llvm/string-reads.js.map +1 -1
  109. package/dist/backend/llvm/unwind-abi.js +24 -2
  110. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  111. package/dist/backend/llvm/unwind-abi.test.js +38 -0
  112. package/dist/backend/llvm/unwind-abi.test.js.map +1 -1
  113. package/dist/backend/llvm/walkers.d.ts +3 -0
  114. package/dist/backend/llvm/walkers.js +20 -2
  115. package/dist/backend/llvm/walkers.js.map +1 -1
  116. package/dist/backend/native/contracts.d.ts +15 -3
  117. package/dist/backend/native/executable.js +19 -5
  118. package/dist/backend/native/executable.js.map +1 -1
  119. package/dist/backend/native-codegen-core.d.ts +20 -0
  120. package/dist/backend/native-codegen-core.js +15 -0
  121. package/dist/backend/native-codegen-core.js.map +1 -1
  122. package/dist/backend/native-codegen.d.ts +5 -0
  123. package/dist/backend/native-codegen.js +62 -8
  124. package/dist/backend/native-codegen.js.map +1 -1
  125. package/dist/backend/native-codegen.test.js +48 -8
  126. package/dist/backend/native-codegen.test.js.map +1 -1
  127. package/dist/backend/native-link-info-core.d.ts +27 -3
  128. package/dist/backend/native-link-info-core.js.map +1 -1
  129. package/dist/backend/native-link-info.test.js +17 -1
  130. package/dist/backend/native-link-info.test.js.map +1 -1
  131. package/dist/backend/native-toolchain.d.ts +1 -1
  132. package/dist/backend/native-toolchain.js +1 -1
  133. package/dist/backend/native-toolchain.js.map +1 -1
  134. package/dist/backend/native-toolchain.test.js +14 -1
  135. package/dist/backend/native-toolchain.test.js.map +1 -1
  136. package/dist/backend/runtime-pack-core.d.ts +9 -3
  137. package/dist/backend/runtime-pack-core.js +6 -1
  138. package/dist/backend/runtime-pack-core.js.map +1 -1
  139. package/dist/backend/runtime-pack.test.js +32 -1
  140. package/dist/backend/runtime-pack.test.js.map +1 -1
  141. package/dist/backend/targets.d.ts +9 -1
  142. package/dist/backend/targets.js +11 -2
  143. package/dist/backend/targets.js.map +1 -1
  144. package/dist/backend/targets.test.js +6 -0
  145. package/dist/backend/targets.test.js.map +1 -1
  146. package/dist/cli/command.js +15 -1
  147. package/dist/cli/command.js.map +1 -1
  148. package/dist/cli/host.d.ts +6 -0
  149. package/dist/cli/mcp.d.ts +72 -0
  150. package/dist/cli/mcp.js +601 -0
  151. package/dist/cli/mcp.js.map +1 -0
  152. package/dist/cli/mcp.test.d.ts +1 -0
  153. package/dist/cli/mcp.test.js +380 -0
  154. package/dist/cli/mcp.test.js.map +1 -0
  155. package/dist/cli/output-options.d.ts +1 -0
  156. package/dist/cli/output-options.js +3 -0
  157. package/dist/cli/output-options.js.map +1 -1
  158. package/dist/cli/usage.d.ts +51 -1
  159. package/dist/cli/usage.js +709 -186
  160. package/dist/cli/usage.js.map +1 -1
  161. package/dist/compat/fetch-profile.js +9 -4
  162. package/dist/compat/fetch-profile.js.map +1 -1
  163. package/dist/compile-types.d.ts +17 -0
  164. package/dist/coverage/report.d.ts +5 -9
  165. package/dist/coverage/report.js.map +1 -1
  166. package/dist/executable/executable-cache.d.ts +17 -3
  167. package/dist/executable/executable-cache.js +17 -3
  168. package/dist/executable/executable-cache.js.map +1 -1
  169. package/dist/executable/prepare.js +87 -10
  170. package/dist/executable/prepare.js.map +1 -1
  171. package/dist/frontend/analysis.js +3 -2
  172. package/dist/frontend/analysis.js.map +1 -1
  173. package/dist/frontend/canon-map.js +13 -8
  174. package/dist/frontend/canon-map.js.map +1 -1
  175. package/dist/frontend/decl-projection.d.ts +18 -0
  176. package/dist/frontend/decl-projection.js +90 -22
  177. package/dist/frontend/decl-projection.js.map +1 -1
  178. package/dist/frontend/decl-projection.test.js +47 -1
  179. package/dist/frontend/decl-projection.test.js.map +1 -1
  180. package/dist/frontend/default-library.d.ts +10 -0
  181. package/dist/frontend/default-library.js +43 -0
  182. package/dist/frontend/default-library.js.map +1 -0
  183. package/dist/frontend/fork-target.js +54 -9
  184. package/dist/frontend/fork-target.js.map +1 -1
  185. package/dist/frontend/fork-target.test.js +82 -0
  186. package/dist/frontend/fork-target.test.js.map +1 -1
  187. package/dist/frontend/inferred-js-diagnostics.test.js +73 -0
  188. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  189. package/dist/frontend/lowering/abstract-equality.d.ts +2 -1
  190. package/dist/frontend/lowering/abstract-equality.js +7 -1
  191. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  192. package/dist/frontend/lowering/array-values.js +2 -2
  193. package/dist/frontend/lowering/array-values.js.map +1 -1
  194. package/dist/frontend/lowering/assertion-members.js +52 -2
  195. package/dist/frontend/lowering/assertion-members.js.map +1 -1
  196. package/dist/frontend/lowering/builtin-namespaces.d.ts +5 -0
  197. package/dist/frontend/lowering/builtin-namespaces.js +19 -12
  198. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  199. package/dist/frontend/lowering/builtins/callable-aliases.js +42 -6
  200. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  201. package/dist/frontend/lowering/builtins/child-process.d.ts +12 -11
  202. package/dist/frontend/lowering/builtins/child-process.js +235 -38
  203. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  204. package/dist/frontend/lowering/builtins/compression.d.ts +6 -1
  205. package/dist/frontend/lowering/builtins/compression.js +3 -3
  206. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  207. package/dist/frontend/lowering/builtins/constants.js +2 -2
  208. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  209. package/dist/frontend/lowering/builtins/crypto.d.ts +3 -1
  210. package/dist/frontend/lowering/builtins/crypto.js +9 -1
  211. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  212. package/dist/frontend/lowering/builtins/dates.js +26 -6
  213. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  214. package/dist/frontend/lowering/builtins/environment.d.ts +13 -1
  215. package/dist/frontend/lowering/builtins/environment.js +15 -4
  216. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  217. package/dist/frontend/lowering/builtins/module-bindings.d.ts +33 -0
  218. package/dist/frontend/lowering/builtins/module-bindings.js +213 -11
  219. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  220. package/dist/frontend/lowering/builtins/module-resolution.d.ts +9 -2
  221. package/dist/frontend/lowering/builtins/module-resolution.js +187 -19
  222. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  223. package/dist/frontend/lowering/builtins/performance.js +1 -1
  224. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  225. package/dist/frontend/lowering/builtins/process.js +40 -2
  226. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  227. package/dist/frontend/lowering/builtins/promises.js +33 -0
  228. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  229. package/dist/frontend/lowering/builtins/readline.d.ts +9 -5
  230. package/dist/frontend/lowering/builtins/readline.js +184 -75
  231. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  232. package/dist/frontend/lowering/builtins/url.d.ts +4 -0
  233. package/dist/frontend/lowering/builtins/url.js +6 -0
  234. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  235. package/dist/frontend/lowering/call-arguments.js +15 -0
  236. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  237. package/dist/frontend/lowering/callable-properties.d.ts +34 -0
  238. package/dist/frontend/lowering/callable-properties.js +210 -0
  239. package/dist/frontend/lowering/callable-properties.js.map +1 -0
  240. package/dist/frontend/lowering/cjs-inline-require.d.ts +16 -0
  241. package/dist/frontend/lowering/cjs-inline-require.js +105 -0
  242. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  243. package/dist/frontend/lowering/cjs-inline-require.test.d.ts +1 -0
  244. package/dist/frontend/lowering/cjs-inline-require.test.js +61 -0
  245. package/dist/frontend/lowering/cjs-inline-require.test.js.map +1 -0
  246. package/dist/frontend/lowering/class-dynamic-dispatch.js +82 -2
  247. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  248. package/dist/frontend/lowering/class-protocols.d.ts +57 -4
  249. package/dist/frontend/lowering/class-protocols.js +597 -30
  250. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  251. package/dist/frontend/lowering/class-unions.js +2 -2
  252. package/dist/frontend/lowering/class-unions.js.map +1 -1
  253. package/dist/frontend/lowering/coercions/function-adapters.d.ts +12 -0
  254. package/dist/frontend/lowering/coercions/function-adapters.js +62 -0
  255. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  256. package/dist/frontend/lowering/coercions/structural-plans.js +56 -1
  257. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  258. package/dist/frontend/lowering/coercions/structural.js +9 -4
  259. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  260. package/dist/frontend/lowering/collection-ingestion.d.ts +9 -0
  261. package/dist/frontend/lowering/collection-ingestion.js +115 -41
  262. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  263. package/dist/frontend/lowering/containers/array-callbacks.js +16 -0
  264. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  265. package/dist/frontend/lowering/containers/bytes.js +66 -10
  266. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  267. package/dist/frontend/lowering/containers/collection-methods.js +61 -5
  268. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  269. package/dist/frontend/lowering/containers/filter-predicates.js +11 -0
  270. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  271. package/dist/frontend/lowering/containers/indexed-objects.d.ts +15 -0
  272. package/dist/frontend/lowering/containers/indexed-objects.js +213 -30
  273. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  274. package/dist/frontend/lowering/error-name-order.d.ts +16 -0
  275. package/dist/frontend/lowering/error-name-order.js +61 -0
  276. package/dist/frontend/lowering/error-name-order.js.map +1 -1
  277. package/dist/frontend/lowering/expressions/asserted-receiver.d.ts +17 -0
  278. package/dist/frontend/lowering/expressions/asserted-receiver.js +123 -1
  279. package/dist/frontend/lowering/expressions/asserted-receiver.js.map +1 -1
  280. package/dist/frontend/lowering/expressions/binary.js +147 -20
  281. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  282. package/dist/frontend/lowering/expressions/element-access.js +63 -14
  283. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  284. package/dist/frontend/lowering/expressions/erased-delete.d.ts +59 -0
  285. package/dist/frontend/lowering/expressions/erased-delete.js +247 -0
  286. package/dist/frontend/lowering/expressions/erased-delete.js.map +1 -0
  287. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +10 -0
  288. package/dist/frontend/lowering/expressions/hosted-narrowing.js +48 -1
  289. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
  290. package/dist/frontend/lowering/expressions/identifiers.js +20 -0
  291. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  292. package/dist/frontend/lowering/expressions/narrowing.d.ts +7 -2
  293. package/dist/frontend/lowering/expressions/narrowing.js +77 -45
  294. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  295. package/dist/frontend/lowering/expressions/object-literals.js +62 -19
  296. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  297. package/dist/frontend/lowering/expressions/optional-chains.js +19 -0
  298. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  299. package/dist/frontend/lowering/expressions/property-access.d.ts +7 -7
  300. package/dist/frontend/lowering/expressions/property-access.js +247 -48
  301. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  302. package/dist/frontend/lowering/expressions/relational.d.ts +1 -0
  303. package/dist/frontend/lowering/expressions/relational.js +18 -8
  304. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  305. package/dist/frontend/lowering/expressions/union-fields.js +11 -5
  306. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  307. package/dist/frontend/lowering/expressions/updates.js +121 -11
  308. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  309. package/dist/frontend/lowering/function-context.d.ts +10 -0
  310. package/dist/frontend/lowering/function-context.js +36 -0
  311. package/dist/frontend/lowering/function-context.js.map +1 -1
  312. package/dist/frontend/lowering/function-returns.js +8 -8
  313. package/dist/frontend/lowering/function-returns.js.map +1 -1
  314. package/dist/frontend/lowering/handle-properties.d.ts +62 -3
  315. package/dist/frontend/lowering/handle-properties.js +674 -26
  316. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  317. package/dist/frontend/lowering/handle-properties.test.js +95 -2
  318. package/dist/frontend/lowering/handle-properties.test.js.map +1 -1
  319. package/dist/frontend/lowering/lower-builtin-values.d.ts +12 -0
  320. package/dist/frontend/lowering/lower-builtin-values.js +44 -0
  321. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  322. package/dist/frontend/lowering/lower-calls.js +328 -136
  323. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  324. package/dist/frontend/lowering/lower-classes.js +82 -17
  325. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  326. package/dist/frontend/lowering/lower-event-emitter.js +113 -9
  327. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  328. package/dist/frontend/lowering/lower-expando.d.ts +13 -21
  329. package/dist/frontend/lowering/lower-expando.js +90 -126
  330. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  331. package/dist/frontend/lowering/lower-exprs.js +2 -2
  332. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  333. package/dist/frontend/lowering/lower-functions.js +65 -0
  334. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  335. package/dist/frontend/lowering/lower-inspect.js +471 -0
  336. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  337. package/dist/frontend/lowering/lower-modules.js +36 -10
  338. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  339. package/dist/frontend/lowering/lower-node-island.js +28 -0
  340. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  341. package/dist/frontend/lowering/lower-server.d.ts +53 -7
  342. package/dist/frontend/lowering/lower-server.js +213 -42
  343. package/dist/frontend/lowering/lower-server.js.map +1 -1
  344. package/dist/frontend/lowering/lower-stdlib.js +50 -7
  345. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  346. package/dist/frontend/lowering/lower-stmts.d.ts +24 -0
  347. package/dist/frontend/lowering/lower-stmts.js +463 -220
  348. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  349. package/dist/frontend/lowering/lower-stream.js +2 -2
  350. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  351. package/dist/frontend/lowering/lower-test.js +71 -2
  352. package/dist/frontend/lowering/lower-test.js.map +1 -1
  353. package/dist/frontend/lowering/lowerer.d.ts +81 -10
  354. package/dist/frontend/lowering/lowerer.js +319 -72
  355. package/dist/frontend/lowering/lowerer.js.map +1 -1
  356. package/dist/frontend/lowering/new-target.js +10 -2
  357. package/dist/frontend/lowering/new-target.js.map +1 -1
  358. package/dist/frontend/lowering/nullish-empty-pattern.js +3 -3
  359. package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -1
  360. package/dist/frontend/lowering/partial-assertions.js +30 -5
  361. package/dist/frontend/lowering/partial-assertions.js.map +1 -1
  362. package/dist/frontend/lowering/primitive-throws.js +91 -1
  363. package/dist/frontend/lowering/primitive-throws.js.map +1 -1
  364. package/dist/frontend/lowering/primitive-wrappers.d.ts +9 -0
  365. package/dist/frontend/lowering/primitive-wrappers.js +2 -2
  366. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
  367. package/dist/frontend/lowering/promise-executor-adapter.js +5 -2
  368. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  369. package/dist/frontend/lowering/record-links.js +7 -2
  370. package/dist/frontend/lowering/record-links.js.map +1 -1
  371. package/dist/frontend/lowering/surfaces.d.ts +4 -0
  372. package/dist/frontend/lowering/surfaces.js +118 -2
  373. package/dist/frontend/lowering/surfaces.js.map +1 -1
  374. package/dist/frontend/lowering/surfaces.test.d.ts +1 -0
  375. package/dist/frontend/lowering/surfaces.test.js +31 -0
  376. package/dist/frontend/lowering/surfaces.test.js.map +1 -0
  377. package/dist/frontend/mock-shapes.js +3 -3
  378. package/dist/frontend/mock-shapes.js.map +1 -1
  379. package/dist/frontend/npm-static-ladder.d.ts +21 -0
  380. package/dist/frontend/npm-static-ladder.js +2 -0
  381. package/dist/frontend/npm-static-ladder.js.map +1 -0
  382. package/dist/frontend/npm-static-ladder.test.d.ts +1 -0
  383. package/dist/frontend/npm-static-ladder.test.js +138 -0
  384. package/dist/frontend/npm-static-ladder.test.js.map +1 -0
  385. package/dist/frontend/npm-static-status.d.ts +15 -0
  386. package/dist/frontend/npm-static-status.js +2 -0
  387. package/dist/frontend/npm-static-status.js.map +1 -0
  388. package/dist/frontend/package-shims.js +1 -1
  389. package/dist/frontend/package-shims.js.map +1 -1
  390. package/dist/frontend/pipeline.d.ts +1 -1
  391. package/dist/frontend/pipeline.js +222 -25
  392. package/dist/frontend/pipeline.js.map +1 -1
  393. package/dist/frontend/program-analysis.d.ts +4 -0
  394. package/dist/frontend/program-analysis.js +6 -0
  395. package/dist/frontend/program-analysis.js.map +1 -1
  396. package/dist/frontend/program.js +258 -32
  397. package/dist/frontend/program.js.map +1 -1
  398. package/dist/frontend/program.test.js +30 -0
  399. package/dist/frontend/program.test.js.map +1 -1
  400. package/dist/frontend/resolve.js +29 -5
  401. package/dist/frontend/resolve.js.map +1 -1
  402. package/dist/frontend/resolve.test.js +40 -0
  403. package/dist/frontend/resolve.test.js.map +1 -1
  404. package/dist/frontend/services.d.ts +8 -0
  405. package/dist/frontend/services.js +7 -0
  406. package/dist/frontend/services.js.map +1 -1
  407. package/dist/frontend/ts7/checker.d.ts +7 -0
  408. package/dist/frontend/ts7/checker.js +12 -0
  409. package/dist/frontend/ts7/checker.js.map +1 -1
  410. package/dist/frontend/ts7/checker.test.js +1 -0
  411. package/dist/frontend/ts7/checker.test.js.map +1 -1
  412. package/dist/frontend/ts7/program-host.d.ts +39 -2
  413. package/dist/frontend/ts7/program-host.js +62 -8
  414. package/dist/frontend/ts7/program-host.js.map +1 -1
  415. package/dist/frontend/ts7/program-host.test.js +33 -0
  416. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  417. package/dist/frontend/ts7/session-cache.d.ts +5 -1
  418. package/dist/frontend/ts7/session-cache.js +7 -1
  419. package/dist/frontend/ts7/session-cache.js.map +1 -1
  420. package/dist/frontend/ts7/session-cache.test.js +37 -0
  421. package/dist/frontend/ts7/session-cache.test.js.map +1 -1
  422. package/dist/frontend/ts7/session.js +19 -1
  423. package/dist/frontend/ts7/session.js.map +1 -1
  424. package/dist/frontend/ts7/source-parser.d.ts +17 -2
  425. package/dist/frontend/ts7/source-parser.js +61 -2
  426. package/dist/frontend/ts7/source-parser.js.map +1 -1
  427. package/dist/frontend/ts7/source-parser.test.js +55 -2
  428. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  429. package/dist/frontend/tsc-codes.d.ts +3 -2
  430. package/dist/frontend/tsc-codes.js +129 -22
  431. package/dist/frontend/tsc-codes.js.map +1 -1
  432. package/dist/frontend/type-mapper.d.ts +5 -11
  433. package/dist/frontend/type-mapper.js +380 -70
  434. package/dist/frontend/type-mapper.js.map +1 -1
  435. package/dist/index.d.ts +1 -1
  436. package/dist/index.js +67 -7
  437. package/dist/index.js.map +1 -1
  438. package/dist/ir/builtin-effects.js +29 -0
  439. package/dist/ir/builtin-effects.js.map +1 -1
  440. package/dist/ir/builtin-signatures.d.ts +1 -1
  441. package/dist/ir/builtin-signatures.js +72 -6
  442. package/dist/ir/builtin-signatures.js.map +1 -1
  443. package/dist/ir/codec.generated.d.ts +1 -1
  444. package/dist/ir/codec.generated.js +321 -263
  445. package/dist/ir/codec.generated.js.map +1 -1
  446. package/dist/ir/constant-length-clones.d.ts +26 -0
  447. package/dist/ir/constant-length-clones.js +589 -0
  448. package/dist/ir/constant-length-clones.js.map +1 -0
  449. package/dist/ir/constant-length-clones.test.d.ts +1 -0
  450. package/dist/ir/constant-length-clones.test.js +292 -0
  451. package/dist/ir/constant-length-clones.test.js.map +1 -0
  452. package/dist/ir/constant-tables.d.ts +10 -5
  453. package/dist/ir/constant-tables.js +83 -17
  454. package/dist/ir/constant-tables.js.map +1 -1
  455. package/dist/ir/constant-tables.test.js +58 -1
  456. package/dist/ir/constant-tables.test.js.map +1 -1
  457. package/dist/ir/fields.generated.js +5 -2
  458. package/dist/ir/fields.generated.js.map +1 -1
  459. package/dist/ir/function-references.js +2 -0
  460. package/dist/ir/function-references.js.map +1 -1
  461. package/dist/ir/function-references.test.js +13 -0
  462. package/dist/ir/function-references.test.js.map +1 -1
  463. package/dist/ir/integer-loops.js +1 -0
  464. package/dist/ir/integer-loops.js.map +1 -1
  465. package/dist/ir/integer-loops.test.js +16 -0
  466. package/dist/ir/integer-loops.test.js.map +1 -1
  467. package/dist/ir/ir.d.ts +50 -6
  468. package/dist/ir/ir.js +44 -2
  469. package/dist/ir/ir.js.map +1 -1
  470. package/dist/ir/ir.test.js +83 -1
  471. package/dist/ir/ir.test.js.map +1 -1
  472. package/dist/ir/js-groups.js +5 -1
  473. package/dist/ir/js-groups.js.map +1 -1
  474. package/dist/ir/js-ic.d.ts +20 -0
  475. package/dist/ir/js-ic.js +81 -4
  476. package/dist/ir/js-ic.js.map +1 -1
  477. package/dist/ir/js-ic.test.js +8 -1
  478. package/dist/ir/js-ic.test.js.map +1 -1
  479. package/dist/ir/lane-plans.d.ts +86 -0
  480. package/dist/ir/lane-plans.js +589 -0
  481. package/dist/ir/lane-plans.js.map +1 -0
  482. package/dist/ir/lane-plans.test.d.ts +1 -0
  483. package/dist/ir/lane-plans.test.js +549 -0
  484. package/dist/ir/lane-plans.test.js.map +1 -0
  485. package/dist/ir/runtime-features.d.ts +68 -10
  486. package/dist/ir/runtime-features.js +285 -17
  487. package/dist/ir/runtime-features.js.map +1 -1
  488. package/dist/ir/runtime-features.test.js +190 -1
  489. package/dist/ir/runtime-features.test.js.map +1 -1
  490. package/dist/ir/validate.js +61 -24
  491. package/dist/ir/validate.js.map +1 -1
  492. package/dist/native/cache.d.ts +5 -0
  493. package/dist/native/cache.js +23 -1
  494. package/dist/native/cache.js.map +1 -1
  495. package/dist/native/cache.test.js +29 -1
  496. package/dist/native/cache.test.js.map +1 -1
  497. package/dist/native/cli.js +4 -2
  498. package/dist/native/cli.js.map +1 -1
  499. package/dist/native/compiler.d.ts +11 -3
  500. package/dist/native/compiler.js +102 -16
  501. package/dist/native/compiler.js.map +1 -1
  502. package/dist/native/compiler.test.js +244 -2
  503. package/dist/native/compiler.test.js.map +1 -1
  504. package/dist/native/prepare.d.ts +14 -1
  505. package/dist/native/prepare.js +79 -29
  506. package/dist/native/prepare.js.map +1 -1
  507. package/dist/native/sanitizer.test.js +3 -0
  508. package/dist/native/sanitizer.test.js.map +1 -1
  509. package/dist/native/unchanged.d.ts +80 -0
  510. package/dist/native/unchanged.js +301 -0
  511. package/dist/native/unchanged.js.map +1 -0
  512. package/dist/native/unchanged.test.d.ts +1 -0
  513. package/dist/native/unchanged.test.js +249 -0
  514. package/dist/native/unchanged.test.js.map +1 -0
  515. package/dist/node-islands/boundary.d.ts +16 -0
  516. package/dist/node-islands/boundary.js +70 -7
  517. package/dist/node-islands/boundary.js.map +1 -1
  518. package/dist/node-islands/boundary.test.js +59 -14
  519. package/dist/node-islands/boundary.test.js.map +1 -1
  520. package/dist/node-islands/detect.js +203 -47
  521. package/dist/node-islands/detect.js.map +1 -1
  522. package/dist/node-islands/detect.test.js +45 -0
  523. package/dist/node-islands/detect.test.js.map +1 -1
  524. package/dist/node-islands/growth.js +4 -16
  525. package/dist/node-islands/growth.js.map +1 -1
  526. package/dist/node-islands/modules.d.ts +3 -0
  527. package/dist/node-islands/modules.js +143 -12
  528. package/dist/node-islands/modules.js.map +1 -1
  529. package/dist/node-islands/modules.test.js +125 -0
  530. package/dist/node-islands/modules.test.js.map +1 -1
  531. package/dist/node-islands/report.d.ts +1 -1
  532. package/dist/node-islands/report.js +2 -1
  533. package/dist/node-islands/report.js.map +1 -1
  534. package/package.json +20 -20
  535. package/shims/undici/core/request.ts +7 -1
  536. package/surface-manifest.json +380 -2
@@ -0,0 +1,26 @@
1
+ import type { IrModule } from "./ir.js";
2
+ import { type IrNodeIndex } from "./node-index.js";
3
+ /** Direct calls whose array argument is an array of one statically known
4
+ * length call a clone of the callee in which that parameter carries the
5
+ * length: an element-count read of the parameter is the length itself, any
6
+ * element index proven in range names a present slot, and constant locals that
7
+ * copy the length fold to it.
8
+ *
9
+ * A callee qualifies when an array parameter, and every local that holds the
10
+ * same array, is used only through element reads, presence tests,
11
+ * element-count reads and searches, `for…of` iteration and calls to callees
12
+ * whose matching parameter is proven the same way — never resized, stored,
13
+ * returned, compared, captured or spread — and the callee is an ordinary
14
+ * function of at most MAX_FUNCTION_NODES nodes with no captures. An argument
15
+ * qualifies when it is an array literal, a read-only local with one definition
16
+ * from one, or an immutable global with one such definition that no other code
17
+ * writes and no closure captures. The length and the hole-free prefix then
18
+ * never change between the call and any use inside it, so the clone needs no
19
+ * runtime test. Only calls inside a loop specialize: the fold pays on every
20
+ * pass of the callee, not once at a call that runs a single time.
21
+ *
22
+ * Code growth is bounded: at most MAX_CLONES_PER_FUNCTION clones per function
23
+ * and MIN_CLONED_NODES (or CLONED_NODE_FRACTION of the module) of cloned
24
+ * nodes module-wide. `symbolName` spells names after mangling, and `index`,
25
+ * an index of `mod`, gives node counts without walking bodies. */
26
+ export declare function specializeConstantArrayLengths(mod: IrModule, symbolName?: (name: string) => string, index?: IrNodeIndex): IrModule;
@@ -0,0 +1,589 @@
1
+ import { numLit } from "./build.js";
2
+ import { everyStmtList, mapExprChildren, mapStmtChildren, transformStmtList } from "./traverse.js";
3
+ import {} from "./node-index.js";
4
+ /** Largest body (IR nodes) a clone is made from. */
5
+ const MAX_FUNCTION_NODES = 800;
6
+ /** Clones of one function: one per array parameter and length. */
7
+ const MAX_CLONES_PER_FUNCTION = 2;
8
+ /** Module-wide cloned nodes: at least this many, or this share of the module. */
9
+ const MIN_CLONED_NODES = 4000;
10
+ const CLONED_NODE_FRACTION = 0.05;
11
+ /** Rounds of copying a literal through a chain of constant locals. */
12
+ const FOLD_ROUNDS = 4;
13
+ /** Array methods that read the array and nothing else: the receiver is not
14
+ * written, resized or stored, and an element argument is a separate value. */
15
+ const READING_METHODS = new Set([
16
+ "length",
17
+ "getNumber",
18
+ "indexEq",
19
+ "indexOf",
20
+ "includes",
21
+ "nextPresent",
22
+ ]);
23
+ /** Thrown when a use does not fit the read-only shape a proof needs. */
24
+ const REJECT = Symbol("not a constant length binding");
25
+ function reject() {
26
+ throw REJECT;
27
+ }
28
+ function countNodes(fn, index) {
29
+ const recorded = index?.nodeCount(fn);
30
+ if (recorded !== undefined)
31
+ return recorded;
32
+ let count = 0;
33
+ everyStmtList(fn.body, {
34
+ stmt: () => (++count, true),
35
+ expr: () => (++count, true),
36
+ });
37
+ return count;
38
+ }
39
+ /** The calls in `fn` that sit inside a loop. A call that repeats saves the
40
+ * callee's length reads on every pass; a call that runs once per program run
41
+ * saves a load and a compare and pays for a second copy of the callee. */
42
+ function callsInLoops(fn) {
43
+ const found = new Set();
44
+ const visitExpr = (node, loop) => {
45
+ if (loop && node.kind === "call")
46
+ found.add(node);
47
+ mapExprChildren(node, (child) => {
48
+ visitExpr(child, loop);
49
+ return child;
50
+ }, (statement) => {
51
+ visitStmt(statement, loop);
52
+ return statement;
53
+ });
54
+ };
55
+ const visitStmt = (statement, loop) => {
56
+ const inner = loop ||
57
+ statement.kind === "while" ||
58
+ statement.kind === "doWhile" ||
59
+ statement.kind === "for" ||
60
+ statement.kind === "forOf";
61
+ mapStmtChildren(statement, (child) => {
62
+ visitExpr(child, inner);
63
+ return child;
64
+ }, (child) => {
65
+ visitStmt(child, inner);
66
+ return child;
67
+ });
68
+ };
69
+ for (const statement of fn.body)
70
+ visitStmt(statement, false);
71
+ return found;
72
+ }
73
+ /** Calls `visit` on `node` and every expression below it. */
74
+ function walkExpr(node, visit) {
75
+ visit(node);
76
+ mapExprChildren(node, (child) => {
77
+ walkExpr(child, visit);
78
+ return child;
79
+ }, (statement) => {
80
+ walkStmt(statement, visit);
81
+ return statement;
82
+ });
83
+ }
84
+ function walkStmt(node, visit) {
85
+ mapStmtChildren(node, (child) => {
86
+ walkExpr(child, visit);
87
+ return child;
88
+ }, (child) => {
89
+ walkStmt(child, visit);
90
+ return child;
91
+ });
92
+ }
93
+ /** Every write to every binding the bodies hold, by binding local id. */
94
+ function collectWrites(bodies) {
95
+ const writes = new Map();
96
+ const note = (id, node, value) => {
97
+ const list = writes.get(id);
98
+ if (list === undefined)
99
+ writes.set(id, [{ node, value }]);
100
+ else
101
+ list.push({ node, value });
102
+ };
103
+ const scanExpr = (node) => {
104
+ if (node.kind === "assignExpr" || node.kind === "incDec")
105
+ note(node.localId, node, null);
106
+ mapExprChildren(node, (child) => {
107
+ scanExpr(child);
108
+ return child;
109
+ }, (child) => {
110
+ scan(child);
111
+ return child;
112
+ });
113
+ };
114
+ const scan = (statement) => {
115
+ if (statement.kind === "varDecl")
116
+ note(statement.localId, statement, statement.init);
117
+ else if (statement.kind === "assign")
118
+ note(statement.localId, statement, statement.value);
119
+ else if (statement.kind === "forOf")
120
+ note(statement.localId, statement, null);
121
+ else if (statement.kind === "tryCatch" && statement.catchLocalId !== null)
122
+ note(statement.catchLocalId, statement, null);
123
+ mapStmtChildren(statement, (child) => {
124
+ scanExpr(child);
125
+ return child;
126
+ }, (child) => {
127
+ scan(child);
128
+ return child;
129
+ });
130
+ };
131
+ for (const body of bodies)
132
+ for (const statement of body)
133
+ scan(statement);
134
+ return writes;
135
+ }
136
+ /** The locals of `fn` that hold the array `id` holds: the binding itself and
137
+ * every local whose every write copies one of them. A copy is how a `for…of`
138
+ * iterable or a cast reaches the array. A local a closure captures is left
139
+ * out: the closure can reach the binding from its own function. */
140
+ function arrayHolders(fn, id) {
141
+ const captured = new Set();
142
+ for (const statement of fn.body)
143
+ walkStmt(statement, (node) => {
144
+ if (node.kind === "closure")
145
+ for (const capture of node.captures)
146
+ captured.add(capture);
147
+ });
148
+ const writes = collectWrites([fn.body]);
149
+ const holders = new Set([id]);
150
+ const definitions = new Set();
151
+ for (let changed = true; changed;) {
152
+ changed = false;
153
+ for (const [candidate, list] of writes) {
154
+ if (holders.has(candidate) || captured.has(candidate))
155
+ continue;
156
+ const local = fn.locals.find((entry) => entry.id === candidate);
157
+ if (local === undefined || local.boxed || local.mutable)
158
+ continue;
159
+ if (!list.length)
160
+ continue;
161
+ if (!list.every((write) => write.value !== null &&
162
+ write.value.kind === "varRef" &&
163
+ holders.has(write.value.localId)))
164
+ continue;
165
+ holders.add(candidate);
166
+ for (const write of list)
167
+ definitions.add(write.node);
168
+ changed = true;
169
+ }
170
+ }
171
+ return { holders, definitions };
172
+ }
173
+ /** Whether every use of the array `holders` name is a read the proof keeps
174
+ * exact: an element read or presence test at an index, an element-count read
175
+ * or a search of a read-only method, a `for…of` iterable, or an argument that
176
+ * the callee's matching parameter is itself proven read-only for. Writes,
177
+ * stores into other values, returns, comparisons, spreads, enumerations and
178
+ * captures are not. `allow` names the statements that define the binding and
179
+ * its copies. */
180
+ function usesReadOnly(body, holders, allow, callAllowed) {
181
+ /** A receiver position: a name the binding reaches, or an expression that
182
+ * holds no such name. */
183
+ const receiver = (node) => {
184
+ if (node.kind === "varRef")
185
+ return;
186
+ expr(node);
187
+ };
188
+ const expr = (node) => {
189
+ switch (node.kind) {
190
+ case "varRef":
191
+ if (holders.has(node.localId))
192
+ reject();
193
+ return;
194
+ case "arrayGet":
195
+ case "arrayHas":
196
+ case "arrayState":
197
+ receiver(node.arr);
198
+ expr(node.index);
199
+ return;
200
+ case "arrIntrinsic":
201
+ if (READING_METHODS.has(node.method)) {
202
+ receiver(node.receiver);
203
+ for (const arg of node.args)
204
+ expr(arg);
205
+ }
206
+ else {
207
+ expr(node.receiver);
208
+ for (const arg of node.args)
209
+ expr(arg);
210
+ }
211
+ return;
212
+ case "call":
213
+ for (let index = 0; index < node.args.length; index++) {
214
+ const arg = node.args[index];
215
+ if (arg.kind === "varRef" && holders.has(arg.localId)) {
216
+ if (!callAllowed(node.callee, index))
217
+ reject();
218
+ }
219
+ else
220
+ expr(arg);
221
+ }
222
+ return;
223
+ case "closure":
224
+ // A nested function's body is a function of its own, which the
225
+ // module-wide scan covers; a capture reaches the binding from there.
226
+ if (node.captures.some((capture) => holders.has(capture)))
227
+ reject();
228
+ return;
229
+ default:
230
+ mapExprChildren(node, (child) => {
231
+ expr(child);
232
+ return child;
233
+ }, (child) => {
234
+ stmt(child);
235
+ return child;
236
+ });
237
+ return;
238
+ }
239
+ };
240
+ const stmt = (statement) => {
241
+ if (allow.has(statement))
242
+ return;
243
+ switch (statement.kind) {
244
+ case "varDecl":
245
+ if (holders.has(statement.localId))
246
+ reject();
247
+ if (statement.init !== null)
248
+ expr(statement.init);
249
+ return;
250
+ case "assign":
251
+ if (holders.has(statement.localId))
252
+ reject();
253
+ expr(statement.value);
254
+ return;
255
+ case "forOf":
256
+ receiver(statement.iterable);
257
+ for (const inner of statement.body)
258
+ stmt(inner);
259
+ return;
260
+ case "tryCatch":
261
+ if (statement.catchLocalId !== null && holders.has(statement.catchLocalId))
262
+ reject();
263
+ break;
264
+ default:
265
+ break;
266
+ }
267
+ mapStmtChildren(statement, (child) => {
268
+ expr(child);
269
+ return child;
270
+ }, (child) => {
271
+ stmt(child);
272
+ return child;
273
+ });
274
+ };
275
+ try {
276
+ for (const statement of body)
277
+ stmt(statement);
278
+ return true;
279
+ }
280
+ catch (error) {
281
+ if (error === REJECT)
282
+ return false;
283
+ throw error;
284
+ }
285
+ }
286
+ /** The body of `origin` with every element-count read of parameter `id`
287
+ * replaced by `length`, or null when the body reads none. */
288
+ function foldLengthReads(body, id, length) {
289
+ let folded = 0;
290
+ const next = transformStmtList(body, {
291
+ expr: (node) => {
292
+ if (node.kind === "arrIntrinsic" &&
293
+ node.method === "length" &&
294
+ node.receiver.kind === "varRef" &&
295
+ node.receiver.localId === id) {
296
+ folded++;
297
+ return numLit(length, node.loc);
298
+ }
299
+ return node;
300
+ },
301
+ stmt: (statement) => statement,
302
+ });
303
+ return folded === 0 ? null : next;
304
+ }
305
+ /** `body` with every constant local that holds a literal replaced by the
306
+ * literal, repeated so a copy of a constant local folds too. A local folds
307
+ * when it is never written but by one reading of a literal and no closure
308
+ * captures it. */
309
+ function foldConstantLocals(fn, body) {
310
+ let current = body;
311
+ for (let round = 0; round < FOLD_ROUNDS; round++) {
312
+ const writes = collectWrites([current]);
313
+ const literals = new Map();
314
+ for (const local of fn.locals) {
315
+ if (local.mutable || local.boxed || local.type.kind !== "f64")
316
+ continue;
317
+ const list = writes.get(local.id);
318
+ if (list?.length !== 1)
319
+ continue;
320
+ const write = list[0];
321
+ if (write.node.kind !== "varDecl" || write.value?.kind !== "numLit")
322
+ continue;
323
+ literals.set(local.id, write.value);
324
+ }
325
+ if (!literals.size)
326
+ return current;
327
+ current = transformStmtList(current, {
328
+ expr: (node) => {
329
+ if (node.kind !== "varRef")
330
+ return node;
331
+ const literal = literals.get(node.localId);
332
+ return literal === undefined ? node : { ...literal, loc: node.loc };
333
+ },
334
+ stmt: (statement) => statement,
335
+ });
336
+ }
337
+ return current;
338
+ }
339
+ /** A clone of `origin` in which array parameter `paramIndex` holds an array
340
+ * of exactly `length` present elements: every element-count read of the
341
+ * parameter is the length itself, and constant locals that copy one fold to
342
+ * it. Null when the body reads no element count of the parameter. */
343
+ function buildClone(origin, paramIndex, length) {
344
+ const param = origin.params[paramIndex];
345
+ const folded = foldLengthReads(origin.body, param.localId, length);
346
+ if (folded === null)
347
+ return null;
348
+ // The clone is reached by direct calls only, so it never surfaces as a
349
+ // function value and owns no prototype of its own.
350
+ const { ownsPrototype: _ownsPrototype, ...implementation } = origin;
351
+ return {
352
+ ...implementation,
353
+ name: "",
354
+ params: origin.params.map((candidate, index) => index === paramIndex ? { ...candidate, constLength: length } : candidate),
355
+ body: foldConstantLocals(origin, folded),
356
+ };
357
+ }
358
+ /** Direct calls whose array argument is an array of one statically known
359
+ * length call a clone of the callee in which that parameter carries the
360
+ * length: an element-count read of the parameter is the length itself, any
361
+ * element index proven in range names a present slot, and constant locals that
362
+ * copy the length fold to it.
363
+ *
364
+ * A callee qualifies when an array parameter, and every local that holds the
365
+ * same array, is used only through element reads, presence tests,
366
+ * element-count reads and searches, `for…of` iteration and calls to callees
367
+ * whose matching parameter is proven the same way — never resized, stored,
368
+ * returned, compared, captured or spread — and the callee is an ordinary
369
+ * function of at most MAX_FUNCTION_NODES nodes with no captures. An argument
370
+ * qualifies when it is an array literal, a read-only local with one definition
371
+ * from one, or an immutable global with one such definition that no other code
372
+ * writes and no closure captures. The length and the hole-free prefix then
373
+ * never change between the call and any use inside it, so the clone needs no
374
+ * runtime test. Only calls inside a loop specialize: the fold pays on every
375
+ * pass of the callee, not once at a call that runs a single time.
376
+ *
377
+ * Code growth is bounded: at most MAX_CLONES_PER_FUNCTION clones per function
378
+ * and MIN_CLONED_NODES (or CLONED_NODE_FRACTION of the module) of cloned
379
+ * nodes module-wide. `symbolName` spells names after mangling, and `index`,
380
+ * an index of `mod`, gives node counts without walking bodies. */
381
+ export function specializeConstantArrayLengths(mod, symbolName = (name) => name, index) {
382
+ if (mod.lib)
383
+ return mod;
384
+ const functions = new Map(mod.functions.map((fn) => [fn.name, fn]));
385
+ const globals = new Map((mod.globals ?? []).map((global) => [global.id, global]));
386
+ const names = new Set(mod.functions.map((fn) => symbolName(fn.name)));
387
+ let moduleNodes = 0;
388
+ for (const fn of mod.functions)
389
+ moduleNodes += countNodes(fn, index);
390
+ let budget = Math.max(MIN_CLONED_NODES, moduleNodes * CLONED_NODE_FRACTION);
391
+ const cloneCounts = new Map();
392
+ const clones = new Map();
393
+ const pending = [];
394
+ const readOnlyParams = new Map();
395
+ const proving = new Set();
396
+ const bindingLengths = new Map();
397
+ /** Whether `target` never writes parameter `paramIndex`, never lets it
398
+ * reach code that does, and never names it in a position that observes it. */
399
+ function paramReadOnly(target, paramIndex) {
400
+ const key = `${target.name}\0${paramIndex}`;
401
+ const known = readOnlyParams.get(key);
402
+ if (known !== undefined)
403
+ return known;
404
+ const param = target.params[paramIndex];
405
+ if (param === undefined || param.type.kind !== "array")
406
+ return false;
407
+ if (proving.has(key))
408
+ return false;
409
+ proving.add(key);
410
+ let result = false;
411
+ try {
412
+ const { holders, definitions } = arrayHolders(target, param.localId);
413
+ result =
414
+ (collectWrites([target.body]).get(param.localId) ?? []).length === 0 &&
415
+ usesReadOnly(target.body, holders, definitions, callAllowed);
416
+ }
417
+ finally {
418
+ proving.delete(key);
419
+ }
420
+ readOnlyParams.set(key, result);
421
+ return result;
422
+ }
423
+ /** Whether passing a holder of `id` at argument `argIndex` of `callee`
424
+ * keeps the array read-only. */
425
+ function callAllowed(callee, argIndex) {
426
+ const target = functions.get(callee);
427
+ if (!target)
428
+ return false;
429
+ return paramReadOnly(target, argIndex);
430
+ }
431
+ /** The length of the array `id` holds at every use, or null. */
432
+ function bindingLength(key, scope, id) {
433
+ const known = bindingLengths.get(key);
434
+ if (known !== undefined)
435
+ return known;
436
+ bindingLengths.set(key, null);
437
+ let result = null;
438
+ const writes = collectWrites(scope.map((fn) => fn.body)).get(id) ?? [];
439
+ if (writes.length === 1) {
440
+ const write = writes[0];
441
+ const value = write.value;
442
+ const defines = write.node.kind === "varDecl" || write.node.kind === "assign";
443
+ if (defines &&
444
+ value !== null &&
445
+ value.kind === "arrayLit" &&
446
+ value.spreads === undefined &&
447
+ value.elems.length > 0 &&
448
+ scope.every((fn) => {
449
+ const { holders, definitions } = arrayHolders(fn, id);
450
+ return usesReadOnly(fn.body, holders, new Set([...definitions, write.node]), callAllowed);
451
+ }))
452
+ result = value.elems.length;
453
+ }
454
+ bindingLengths.set(key, result);
455
+ return result;
456
+ }
457
+ /** The known length of the array `arg` holds, or null. */
458
+ function argumentLength(arg, caller) {
459
+ if (arg.kind === "arrayLit") {
460
+ if (arg.spreads !== undefined || arg.elems.length === 0)
461
+ return null;
462
+ return arg.elems.length;
463
+ }
464
+ if (arg.kind !== "varRef")
465
+ return null;
466
+ const id = arg.localId;
467
+ const param = caller.params.find((candidate) => candidate.localId === id);
468
+ if (param?.constLength !== undefined)
469
+ return param.constLength;
470
+ const local = caller.locals.find((candidate) => candidate.id === id);
471
+ if (local !== undefined) {
472
+ if (local.mutable || local.boxed)
473
+ return null;
474
+ return bindingLength(`local\0${caller.name}\0${id}`, [caller], id);
475
+ }
476
+ const global = globals.get(id);
477
+ if (global === undefined)
478
+ return null;
479
+ if (global.mutable || global.tdz === true || global.initFlag !== undefined)
480
+ return null;
481
+ return bindingLength(`global\0${id}`, mod.functions, id);
482
+ }
483
+ /** Whether the body reads the element count of parameter `id`, the read a
484
+ * clone folds. */
485
+ function readsLength(fn, id) {
486
+ let found = false;
487
+ everyStmtList(fn.body, {
488
+ stmt: () => true,
489
+ expr: (node) => {
490
+ if (node.kind === "arrIntrinsic" &&
491
+ node.method === "length" &&
492
+ node.receiver.kind === "varRef" &&
493
+ node.receiver.localId === id)
494
+ found = true;
495
+ return true;
496
+ },
497
+ });
498
+ return found;
499
+ }
500
+ function cloneFor(target, paramIndex, length) {
501
+ const key = `${target.name}\0${paramIndex}\0${length}`;
502
+ const known = clones.get(key);
503
+ if (known !== undefined)
504
+ return known;
505
+ let clone = null;
506
+ const count = cloneCounts.get(target.name) ?? 0;
507
+ if (count < MAX_CLONES_PER_FUNCTION &&
508
+ target !== functions.get(mod.entry) &&
509
+ !target.async &&
510
+ target.generator === undefined &&
511
+ target.captures === undefined &&
512
+ !target.classCaptures?.length &&
513
+ !target.fastRead &&
514
+ !target.speculativeDispatch) {
515
+ const candidate = buildClone(target, paramIndex, length);
516
+ if (candidate !== null) {
517
+ const size = countNodes(candidate, index);
518
+ if (size <= MAX_FUNCTION_NODES && size <= budget) {
519
+ budget -= size;
520
+ let name = `${target.name}.constLen`;
521
+ while (names.has(symbolName(name)))
522
+ name += "_";
523
+ names.add(symbolName(name));
524
+ clone = { ...candidate, name };
525
+ cloneCounts.set(target.name, count + 1);
526
+ functions.set(name, clone);
527
+ pending.push(clone);
528
+ }
529
+ }
530
+ }
531
+ clones.set(key, clone);
532
+ return clone;
533
+ }
534
+ /** The call with each qualifying array argument passing a clone of its
535
+ * callee, or the call unchanged. */
536
+ function specializeCall(call, caller) {
537
+ const target = functions.get(call.callee);
538
+ if (!target)
539
+ return call;
540
+ for (let paramIndex = 0; paramIndex < target.params.length; paramIndex++) {
541
+ const param = target.params[paramIndex];
542
+ if (param.type.kind !== "array" || param.owned || param.constLength !== undefined)
543
+ continue;
544
+ const arg = call.args[paramIndex];
545
+ if (arg === undefined)
546
+ continue;
547
+ const length = argumentLength(arg, caller);
548
+ if (length === null)
549
+ continue;
550
+ if (!readsLength(target, param.localId) || !paramReadOnly(target, paramIndex))
551
+ continue;
552
+ const clone = cloneFor(target, paramIndex, length);
553
+ if (clone === null)
554
+ continue;
555
+ return { ...call, callee: clone.name };
556
+ }
557
+ return call;
558
+ }
559
+ function rewriteFunction(fn) {
560
+ const candidates = [];
561
+ const looped = callsInLoops(fn);
562
+ everyStmtList(fn.body, {
563
+ stmt: () => true,
564
+ expr: (node) => {
565
+ if (node.kind === "call" && looped.has(node) && specializeCall(node, fn) !== node)
566
+ candidates.push(node);
567
+ return true;
568
+ },
569
+ });
570
+ if (!candidates.length)
571
+ return fn;
572
+ const byNode = new Map();
573
+ for (const call of candidates)
574
+ byNode.set(call, specializeCall(call, fn));
575
+ const body = transformStmtList(fn.body, {
576
+ expr: (node) => byNode.get(node) ?? node,
577
+ stmt: (statement) => statement,
578
+ });
579
+ return { ...fn, body };
580
+ }
581
+ const rewritten = mod.functions.map(rewriteFunction);
582
+ const additions = [];
583
+ for (let position = 0; position < pending.length; position++)
584
+ additions.push(rewriteFunction(pending[position]));
585
+ if (!additions.length)
586
+ return mod;
587
+ return { ...mod, functions: [...rewritten, ...additions] };
588
+ }
589
+ //# sourceMappingURL=constant-length-clones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant-length-clones.js","sourceRoot":"","sources":["../../src/ir/constant-length-clones.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};