@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 @@
1
+ {"version":3,"file":"lanes.js","sourceRoot":"","sources":["../../../src/backend/llvm/lanes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,402 @@
1
+ /* Lane loop emission (planning rules are in ir/lane-plans.test.ts, behavior is
2
+ * in tests/harness/lane-loops.test.ts): a planned loop gets a vector entry
3
+ * guard and a lane loop ahead of the scalar loop, the vector width comes from
4
+ * the target, and a build without the plan flag emits neither. */
5
+ import { createHash } from "node:crypto";
6
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
7
+ import { join } from "node:path";
8
+ import { afterEach, expect, test } from "vitest";
9
+ import { compile } from "@scriptc/compiler";
10
+ const repoRoot = join(import.meta.dirname, "../../../..");
11
+ const cacheDir = join(repoRoot, "node_modules/.cache/scriptc-tests");
12
+ const saved = { plan: process.env["SCRIPTC_LANES_PLAN"], cache: process.env["SCRIPTC_NO_CACHE"] };
13
+ afterEach(() => {
14
+ for (const [key, value] of [
15
+ ["SCRIPTC_LANES_PLAN", saved.plan],
16
+ ["SCRIPTC_NO_CACHE", saved.cache],
17
+ ]) {
18
+ if (value === undefined)
19
+ delete process.env[key];
20
+ else
21
+ process.env[key] = value;
22
+ }
23
+ });
24
+ async function emittedLlvm(name, source, options = {}) {
25
+ if (options.plan === undefined)
26
+ delete process.env["SCRIPTC_LANES_PLAN"];
27
+ else
28
+ process.env["SCRIPTC_LANES_PLAN"] = options.plan;
29
+ process.env["SCRIPTC_NO_CACHE"] = "1";
30
+ const key = createHash("sha256")
31
+ .update(`${options.plan}\0${options.targetCpu}\0${source}`)
32
+ .digest("hex")
33
+ .slice(0, 16);
34
+ const outDir = join(cacheDir, `lanes-${key}`);
35
+ mkdirSync(outDir, { recursive: true });
36
+ const file = join(outDir, `${name}.ts`);
37
+ writeFileSync(file, source);
38
+ const result = await compile(file, {
39
+ outPath: join(outDir, name),
40
+ outDir,
41
+ backend: "llvm",
42
+ ...(options.targetCpu === undefined ? {} : { targetCpu: options.targetCpu }),
43
+ });
44
+ if (!result.ok)
45
+ throw new Error(result.diagnostics.map((d) => `${d.code}: ${d.message}`).join("\n"));
46
+ return readFileSync(result.llvmPath, "utf8");
47
+ }
48
+ function body(llvm, name) {
49
+ const start = llvm.search(new RegExp(`^define internal [^\\n]*@${name}[.(]`, "m"));
50
+ expect(start).toBeGreaterThanOrEqual(0);
51
+ return llvm.slice(start, llvm.indexOf("\n}\n", start));
52
+ }
53
+ const SOURCE = `type Numbers = Uint8Array | Uint16Array;
54
+
55
+ function sum(a: Numbers): number {
56
+ let t = 0;
57
+ for (let i = 0; i < a.length; i++) t += a[i]!;
58
+ return t;
59
+ }
60
+
61
+ function count(a: Numbers, limit: number): number {
62
+ let c = 0;
63
+ for (let i = 0; i < a.length; i++) if (a[i]! >= limit) c++;
64
+ return c;
65
+ }
66
+
67
+ const a: Numbers = new Uint16Array(8);
68
+ console.log(sum(a), count(a, 3));
69
+ `;
70
+ test("a planned sum loads vectors and widens them to i64 lanes", async () => {
71
+ const llvm = await emittedLlvm("sum", SOURCE, { plan: "sum" });
72
+ const fn = body(llvm, "sc_bf_sum");
73
+ // One arm per element type, both arm copies get a lane loop.
74
+ expect(fn).toMatch(/load <4 x i8>, ptr [^,]+, align 1/);
75
+ expect(fn).toMatch(/load <4 x i16>, ptr [^,]+, align 1/);
76
+ expect(fn).toMatch(/zext <4 x i8> [^ ]+ to <4 x i64>/);
77
+ expect(fn).toMatch(/zext <4 x i16> [^ ]+ to <4 x i64>/);
78
+ expect(fn).toMatch(/add <4 x i64> [^ ]+, [^ ]+/);
79
+ expect(fn).toMatch(/store <4 x i64> [^,]+, ptr %s\d+/);
80
+ });
81
+ test("the sum's entry guard bounds the element count by the element width", async () => {
82
+ const llvm = await emittedLlvm("bounds", SOURCE, { plan: "sum" });
83
+ const fn = body(llvm, "sc_bf_sum");
84
+ // 2^45 elements of u8, 2^37 of u16: every partial sum stays below 2^53.
85
+ expect(fn).toMatch(/icmp ult i64 [^,]+, 35184372088832/);
86
+ expect(fn).toMatch(/icmp ult i64 [^,]+, 137438953472/);
87
+ expect(fn).not.toMatch(/icmp ult i64 [^,]+, 2097152/);
88
+ });
89
+ test("the guard asks the run-time toggle and needs one whole vector", async () => {
90
+ const llvm = await emittedLlvm("guard", SOURCE, { plan: "sum" });
91
+ const fn = body(llvm, "sc_bf_sum");
92
+ expect(fn).toMatch(/load i32, ptr @sc_lanes/);
93
+ expect(fn).toMatch(/icmp ne i32 [^,]+, 0/);
94
+ expect(fn).toMatch(/icmp uge i64 [^,]+, 4/);
95
+ expect(fn).toMatch(/and i64 [^,]+, -4/);
96
+ });
97
+ test("the lane loop leaves the counter at its limit for the scalar loop", async () => {
98
+ const llvm = await emittedLlvm("limit", SOURCE, { plan: "sum" });
99
+ const fn = body(llvm, "sc_bf_sum");
100
+ // The header loads the counter, the body advances it by one vector, and the
101
+ // exit adds the lanes to the accumulator's slot and branches on.
102
+ expect(fn).toMatch(/lane\.b\d*:/);
103
+ expect(fn).toMatch(/add nuw i64 [^,]+, 4/);
104
+ // The reduction reads the lane accumulator after the last group: the exit
105
+ // block loads the slot, not a value from the loop's head.
106
+ const exit = fn.match(/\nlane\.x\d*:\n([\s\S]*?)\n(?=[A-Za-z_.][\w.]*:|\})/)[1];
107
+ expect(exit).toMatch(/load <4 x i64>, ptr %s\d+/);
108
+ expect(exit.match(/extractelement <4 x i64>/g)).toHaveLength(4);
109
+ expect(exit).toMatch(/sitofp i64 [^ ]+ to double/);
110
+ expect(exit).toMatch(/fadd double %t\d+, %t\d+/);
111
+ expect(exit).toMatch(/store double [^,]+, ptr %sc_l_t_0/);
112
+ });
113
+ test("a planned count compares lanes against a splat and widens the mask", async () => {
114
+ const llvm = await emittedLlvm("count", SOURCE, { plan: "count" });
115
+ const fn = body(llvm, "sc_bf_count");
116
+ expect(fn).toMatch(/insertelement <4 x i8> poison, i8 [^,]+, i32 0/);
117
+ expect(fn).toMatch(/shufflevector <4 x i8> [^,]+, <4 x i8> poison, <4 x i32> zeroinitializer/);
118
+ expect(fn).toMatch(/insertelement <4 x i16> poison, i16 [^,]+, i32 0/);
119
+ // u8 and u16 are unsigned, so the element test is unsigned.
120
+ expect(fn).toMatch(/icmp uge <4 x i8> [^,]+, %t\d+/);
121
+ expect(fn).toMatch(/icmp uge <4 x i16> [^,]+, %t\d+/);
122
+ expect(fn).toMatch(/zext <4 x i1> [^ ]+ to <4 x i64>/);
123
+ });
124
+ test("a count's limit must be an exact integer in the element range", async () => {
125
+ const llvm = await emittedLlvm("exact", SOURCE, { plan: "count" });
126
+ const fn = body(llvm, "sc_bf_count");
127
+ expect(fn).toMatch(/fcmp oge double [^,]+, 0\.0/);
128
+ expect(fn).toMatch(/fcmp olt double [^,]+, 256\.0/);
129
+ expect(fn).toMatch(/fcmp olt double [^,]+, 65536\.0/);
130
+ expect(fn).toMatch(/fptosi double [^ ]+ to i64/);
131
+ expect(fn).toMatch(/fcmp oeq double [^,]+, %[A-Za-z_.][\w.]*/);
132
+ });
133
+ test("the target's vector width decides the lane count", async () => {
134
+ const v3 = await emittedLlvm("v3", SOURCE, { plan: "sum", targetCpu: "x86-64-v3" });
135
+ expect(body(v3, "sc_bf_sum")).toMatch(/load <8 x i16>, ptr [^,]+, align 1/);
136
+ const v4 = await emittedLlvm("v4", SOURCE, { plan: "sum", targetCpu: "x86-64-v4" });
137
+ expect(body(v4, "sc_bf_sum")).toMatch(/load <16 x i16>, ptr [^,]+, align 1/);
138
+ const v2 = await emittedLlvm("v2", SOURCE, { plan: "sum", targetCpu: "x86-64-v2" });
139
+ expect(body(v2, "sc_bf_sum")).toMatch(/load <4 x i16>, ptr [^,]+, align 1/);
140
+ });
141
+ test("a build without the plan flag emits no lane code and no toggle", async () => {
142
+ const llvm = await emittedLlvm("plain", SOURCE);
143
+ expect(llvm).not.toMatch(/@sc_lanes/);
144
+ expect(llvm).not.toMatch(/lane\./);
145
+ expect(llvm).not.toMatch(/<(4|8|16) x i(8|16|32|64)>/);
146
+ });
147
+ test("only the shapes the plan flag names are lowered", async () => {
148
+ const sums = await emittedLlvm("sum-only", SOURCE, { plan: "sum" });
149
+ expect(body(sums, "sc_bf_sum")).toMatch(/load <4 x i16>/);
150
+ expect(body(sums, "sc_bf_count")).not.toMatch(/load <4 x i16>/);
151
+ const counts = await emittedLlvm("count-only", SOURCE, { plan: "count" });
152
+ expect(body(counts, "sc_bf_sum")).not.toMatch(/load <4 x i16>/);
153
+ expect(body(counts, "sc_bf_count")).toMatch(/load <4 x i16>/);
154
+ });
155
+ const STORE_SOURCE = `type Bytes3 = Uint8Array | Uint8ClampedArray | Int8Array;
156
+ type Halves = Uint16Array | Int16Array;
157
+
158
+ function fill(a: Bytes3, v: number): void {
159
+ for (let i = 0; i < a.length; i++) a[i] = v;
160
+ }
161
+
162
+ function ramp(a: Bytes3): void {
163
+ for (let i = 0; i < a.length; i++) a[i] = i * 2;
164
+ }
165
+
166
+ function shift(a: Halves): void {
167
+ for (let i = 0; i < a.length; i++) a[i] = i + 70000;
168
+ }
169
+
170
+ function scale(a: Bytes3, k: number): void {
171
+ for (let i = 0; i < a.length; i++) a[i] = a[i]! * k;
172
+ }
173
+
174
+ function narrow(a: Float32Array, k: number): void {
175
+ for (let i = 0; i < a.length; i++) a[i] = a[i]! * k;
176
+ }
177
+
178
+ function clamp(a: Uint8ClampedArray, k: number): void {
179
+ for (let i = 0; i < a.length; i++) a[i] = a[i]! * k;
180
+ }
181
+
182
+ function ratio(a: Bytes3, k: number): void {
183
+ for (let i = 0; i < a.length; i++) a[i] = a[i]! / k;
184
+ }
185
+
186
+ function frac(a: Bytes3): void {
187
+ for (let i = 0; i < a.length; i++) a[i] = a[i]! * 2.5;
188
+ }
189
+
190
+ function square(a: Bytes3, n: number): void {
191
+ const k = n | 0;
192
+ for (let i = 0; i < a.length; i++) a[i] = k * k;
193
+ }
194
+
195
+ const b = new Uint8Array(8);
196
+ fill(b, 1);
197
+ ramp(b);
198
+ scale(b, 2);
199
+ const h = new Uint16Array(8);
200
+ shift(h);
201
+ const f = new Float32Array(8);
202
+ narrow(f, 0.5);
203
+ const c = new Uint8ClampedArray(8);
204
+ clamp(c, 2);
205
+ ratio(b, 2);
206
+ frac(b);
207
+ square(b, 3);
208
+ console.log(b[0], h[0], f[0], c[0]);
209
+ `;
210
+ test("a planned store writes whole vectors and advances the counter", async () => {
211
+ const llvm = await emittedLlvm("store", STORE_SOURCE, { plan: "store" });
212
+ const fn = body(llvm, "sc_bf_fill");
213
+ expect(fn).toMatch(/lane\.b\d*:/);
214
+ expect(fn).toMatch(/store <4 x i8> [^,]+, ptr [^,]+, align 1/);
215
+ expect(fn).toMatch(/add nuw i64 [^,]+, 4/);
216
+ // The lane loop's exit falls through to the loop's own copies, which write
217
+ // the elements the lanes left.
218
+ expect(fn).toMatch(/store i8 [^,]+, ptr %\w+/);
219
+ });
220
+ test("an exact integer value is stored from its integer lanes", async () => {
221
+ const llvm = await emittedLlvm("store-int", STORE_SOURCE, { plan: "store" });
222
+ // `i * 2`: the counter and the literal are exact integers, so the lanes
223
+ // multiply them and truncate to the element. The entry test bounds the
224
+ // value below 2^53, where the integer and the double are the same number.
225
+ const ramp = body(llvm, "sc_bf_ramp");
226
+ expect(ramp).toMatch(/mul nsw <4 x i64> [^,]+, [^,]+/);
227
+ expect(ramp).toMatch(/trunc <4 x i64> [^ ]+ to <4 x i8>/);
228
+ expect(ramp).toMatch(/uitofp i64 [^ ]+ to double/);
229
+ expect(ramp).toMatch(/fmul double %\w+, %\w+/);
230
+ expect(ramp).toMatch(/fcmp olt double %\w+, 9007199254740992\.0/);
231
+ // `i + 70000`: the sum is exact below the same bound.
232
+ const shift = body(llvm, "sc_bf_shift");
233
+ expect(shift).toMatch(/add nsw <4 x i64> [^,]+, [^,]+/);
234
+ expect(shift).toMatch(/trunc <4 x i64> [^ ]+ to <4 x i16>/);
235
+ expect(shift).toMatch(/fcmp olt double %\w+, 9007199254740992\.0/);
236
+ });
237
+ test("exact integer lanes whose product can pass 2^53 stay scalar", async () => {
238
+ const llvm = await emittedLlvm("store-square", STORE_SOURCE, { plan: "store" });
239
+ // `k * k`: both operands are exact integers, so the lanes compute the exact
240
+ // product, while the scalar body above 2^53 stores the rounded double's low
241
+ // bits. The lanes are kept only where the entry test bounds the product.
242
+ const fn = body(llvm, "sc_bf_square");
243
+ expect(fn).toMatch(/mul nsw <4 x i64> [^,]+, [^,]+/);
244
+ expect(fn).toMatch(/fmul double %\w+, %\w+/);
245
+ expect(fn).toMatch(/fcmp olt double %\w+, 9007199254740992\.0/);
246
+ });
247
+ test("an element's product takes ToUint32's direct lanes", async () => {
248
+ const llvm = await emittedLlvm("store-scale", STORE_SOURCE, { plan: "store" });
249
+ const fn = body(llvm, "sc_bf_scale");
250
+ expect(fn).toMatch(/load <4 x i8>, ptr [^,]+, align 1/);
251
+ expect(fn).toMatch(/fmul <4 x double> [^,]+, [^,]+/);
252
+ // The entry test bounds the value by the element's widest and the factor's
253
+ // magnitude; below 2^63 the lanes convert directly, with no per-vector
254
+ // range test and no bit path.
255
+ expect(fn).toMatch(/fneg double [^ ]+/);
256
+ expect(fn).toMatch(/fmul double (?:128\.0, %\w+|%\w+, 128\.0)/);
257
+ expect(fn).toMatch(/fcmp olt double [^,]+, 9223372036854775808\.0/);
258
+ expect(fn).toMatch(/fptosi <4 x double> [^ ]+ to <4 x i64>/);
259
+ expect(fn).toMatch(/trunc <4 x i64> [^ ]+ to <4 x i32>/);
260
+ expect(fn).not.toMatch(/bitcast <4 x i1>/);
261
+ expect(fn).not.toMatch(/shl <4 x i64>/);
262
+ });
263
+ test("a fractional literal keeps the double route", async () => {
264
+ const llvm = await emittedLlvm("store-frac", STORE_SOURCE, { plan: "store" });
265
+ const fn = body(llvm, "sc_bf_frac");
266
+ expect(fn).toMatch(/fmul <4 x double> [^,]+, [^,]+/);
267
+ // 2.5 is not an exact integer, so the value is not built from the integer
268
+ // lanes; the lanes convert the product directly, below the entry bound.
269
+ expect(fn).toMatch(/fptosi <4 x double> [^ ]+ to <4 x i64>/);
270
+ expect(fn).not.toMatch(/i64 2\.5/);
271
+ });
272
+ test("a clamped element rounds and clamps the lanes", async () => {
273
+ const llvm = await emittedLlvm("store-clamp", STORE_SOURCE, { plan: "store" });
274
+ const fn = body(llvm, "sc_bf_clamp");
275
+ expect(fn).toMatch(/fcmp ogt <4 x double> [^,]+, splat \(double 0\.0\)/);
276
+ expect(fn).toMatch(/fcmp oge <4 x double> [^,]+, splat \(double 255\.0\)/);
277
+ expect(fn).toMatch(/fadd <4 x double> [^,]+, splat \(double 4503599627370496\.0\)/);
278
+ expect(fn).toMatch(/fptoui <4 x double> [^ ]+ to <4 x i32>/);
279
+ expect(fn).toMatch(/trunc <4 x i32> [^ ]+ to <4 x i8>/);
280
+ });
281
+ test("a float store narrows the lanes and leaves the double alone", async () => {
282
+ const llvm = await emittedLlvm("store-float", STORE_SOURCE, { plan: "store" });
283
+ const narrow = body(llvm, "sc_bf_narrow");
284
+ expect(narrow).toMatch(/fptrunc <4 x double> [^ ]+ to <4 x float>/);
285
+ expect(narrow).toMatch(/store <4 x float> [^,]+, ptr [^,]+, align 1/);
286
+ expect(narrow).not.toMatch(/fptosi/);
287
+ });
288
+ test("a store the lanes cannot reproduce keeps its scalar loop", async () => {
289
+ const llvm = await emittedLlvm("store-refused", STORE_SOURCE, { plan: "store" });
290
+ const fn = body(llvm, "sc_bf_ratio");
291
+ expect(fn).not.toMatch(/lane\./);
292
+ expect(fn).not.toMatch(/store <4 x i8>/);
293
+ });
294
+ test("the store shape alone does not lower a sum or a count", async () => {
295
+ const llvm = await emittedLlvm("store-only", STORE_SOURCE, { plan: "store" });
296
+ expect(body(llvm, "sc_bf_fill")).toMatch(/store <4 x i8>/);
297
+ // No loop here reduces, so no lane accumulator is ever reduced out: the
298
+ // reduction's vector load from the slot is the sum's and the count's mark.
299
+ expect(llvm).not.toMatch(/load <4 x i64>, ptr %s/);
300
+ });
301
+ const DENSE_SOURCE = `function total(a: number[]): number {
302
+ let t = 0;
303
+ for (let i = 0; i < a.length; i++) t += a[i]!;
304
+ return t;
305
+ }
306
+
307
+ function below(a: number[]): number {
308
+ let c = 0;
309
+ for (let i = 0; i < a.length; i++) if (a[i]! < 3) c++;
310
+ // A non-integer write after the loop keeps the count in a double slot,
311
+ // which is the slot the lane body folds into.
312
+ c = Math.sqrt(c);
313
+ return c;
314
+ }
315
+
316
+ function plain(a: number[]): number {
317
+ let c = 0;
318
+ for (let i = 0; i < a.length; i++) if (a[i]! < 3) c++;
319
+ return c;
320
+ }
321
+
322
+ function ramp(dst: number[]): void {
323
+ for (let i = 0; i < dst.length; i++) dst[i] = i * 2;
324
+ }
325
+
326
+ function fillIt(dst: number[], v: number): void {
327
+ for (let i = 0; i < dst.length; i++) dst[i] = v;
328
+ }
329
+
330
+ function twice(dst: number[]): void {
331
+ for (let i = 0; i < dst.length; i++) dst[i] = dst[i]! * 2;
332
+ }
333
+
334
+ function halves(dst: number[], k: number): void {
335
+ for (let i = 0; i < dst.length; i++) dst[i] = dst[i]! / k;
336
+ }
337
+
338
+ const a = [1, 2, 3, 4, 5];
339
+ console.log(total(a), below(a), plain(a));
340
+ const d: number[] = new Array(8).fill(0);
341
+ fillIt(d, 3);
342
+ ramp(d);
343
+ twice(d);
344
+ halves(d, 2);
345
+ console.log(d.join(" "));
346
+ `;
347
+ test("a dense sum lanes the int32 slots of a number array", async () => {
348
+ const llvm = await emittedLlvm("dense-sum", DENSE_SOURCE, { plan: "sum" });
349
+ const fn = body(llvm, "sc_bf_total");
350
+ // The storage kind is checked once: only int32 slots hold values an
351
+ // integer sum is exact over.
352
+ expect(fn).toMatch(/icmp eq i8 [^,]+, 7/);
353
+ expect(fn).toMatch(/icmp ule i64 [^,]+, %t\d+/);
354
+ expect(fn).toMatch(/icmp ult i64 [^,]+, 4194304/);
355
+ expect(fn).toMatch(/load <4 x i32>, ptr [^,]+, align 1/);
356
+ expect(fn).toMatch(/sext <4 x i32> [^ ]+ to <4 x i64>/);
357
+ });
358
+ test("a dense count compares int32 lanes against the exact limit", async () => {
359
+ const llvm = await emittedLlvm("dense-count", DENSE_SOURCE, { plan: "count" });
360
+ const fn = body(llvm, "sc_bf_below");
361
+ expect(fn).toMatch(/icmp eq i8 [^,]+, 7/);
362
+ expect(fn).toMatch(/fptosi double [^ ]+ to i64/);
363
+ expect(fn).toMatch(/icmp slt <4 x i32> [^,]+, %t\d+/);
364
+ expect(fn).toMatch(/zext <4 x i1> [^ ]+ to <4 x i64>/);
365
+ });
366
+ test("a count the integer locals hold keeps its scalar loop", async () => {
367
+ const llvm = await emittedLlvm("dense-count-slot", DENSE_SOURCE, { plan: "count" });
368
+ // The lane body stores a double count into the accumulator's slot; the
369
+ // integer copies keep an int32 there, so their loops stay scalar.
370
+ const fn = body(llvm, "sc_bf_plain");
371
+ expect(fn).toMatch(/alloca i32 ; c/);
372
+ expect(fn).not.toMatch(/lane\./);
373
+ });
374
+ test("a dense store writes whole vectors of doubles", async () => {
375
+ const llvm = await emittedLlvm("dense-store", DENSE_SOURCE, { plan: "store" });
376
+ const ramp = body(llvm, "sc_bf_ramp");
377
+ // Double slots, checked once at the entry: the stored value is the
378
+ // scalar body's own double.
379
+ expect(ramp).toMatch(/icmp eq i8 [^,]+, 0/);
380
+ expect(ramp).toMatch(/store <4 x double> [^,]+, ptr [^,]+, align 1/);
381
+ expect(ramp).not.toMatch(/mul nsw <4 x i64>/);
382
+ const twice = body(llvm, "sc_bf_twice");
383
+ expect(twice).toMatch(/load <4 x double>, ptr [^,]+, align 1/);
384
+ expect(twice).toMatch(/fmul <4 x double> [^,]+, [^,]+/);
385
+ expect(twice).toMatch(/store <4 x double> [^,]+, ptr [^,]+, align 1/);
386
+ // An invariant value is splatted from its own double slot.
387
+ const fill = body(llvm, "sc_bf_fillIt");
388
+ expect(fill).toMatch(/store <4 x double> [^,]+, ptr [^,]+, align 1/);
389
+ });
390
+ test("a dense store the lanes cannot reproduce keeps its scalar loop", async () => {
391
+ const llvm = await emittedLlvm("dense-refused", DENSE_SOURCE, { plan: "store" });
392
+ expect(body(llvm, "sc_bf_halves")).not.toMatch(/lane\./);
393
+ });
394
+ test("the toggle is read once at start-up, not per loop", async () => {
395
+ const llvm = await emittedLlvm("toggle", SOURCE, { plan: "sum" });
396
+ expect(llvm).toMatch(/@sc_lanes = internal global i32 1/);
397
+ expect(llvm).toMatch(/define internal void @sc_lanes_init\(\)/);
398
+ expect(llvm).toMatch(/declare ptr @getenv\(ptr\)/);
399
+ expect(llvm).toMatch(/= call ptr @getenv\(ptr @sc_lanes_env\)/);
400
+ expect(llvm.match(/call void @sc_lanes_init\(\)/g)).toHaveLength(1);
401
+ });
402
+ //# sourceMappingURL=lanes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lanes.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/lanes.test.ts"],"names":[],"mappings":"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"}
@@ -152,10 +152,11 @@ export function emitIoLibCall(host, e) {
152
152
  B.line(`call void @scr_rl_terminal(double ${args[0].name}, double ${args[1].name}, i1 zeroext ${args[2].name}, ptr ${args[3].name}, i1 zeroext ${args[4].name}, ptr ${inspect})`);
153
153
  return { name: "", type: e.type };
154
154
  }
155
- if (e.fn === "rl.on") {
155
+ if (e.fn === "rl.on" || e.fn === "rl.onFirst") {
156
156
  // The listener MOVES into the interface's registry; the adapter is
157
157
  // picked by event and parameter count ('line': the text, 'error': the
158
- // error, 'history': the history array, the rest none).
158
+ // error, 'history': the history array, the rest none). onFirst is
159
+ // prependListener's registration, at the front of the same list.
159
160
  host.usesTimers = true;
160
161
  const cbT = e.args[2].type;
161
162
  const evArg = e.args[1];
@@ -180,8 +181,9 @@ export function emitIoLibCall(host, e) {
180
181
  host.declare(`declare void @${name}(ptr, ptr)`);
181
182
  adapter = `@${name}`;
182
183
  }
183
- host.declare(`declare void @scr_rl_on(double, double, ptr, ptr, i1)`);
184
- B.line(`call void @scr_rl_on(double ${id.name}, double ${ev.name}, ptr ${cb.name}, ptr ${adapter}, i1 ${once.name})`);
184
+ const target = e.fn === "rl.on" ? "scr_rl_on" : "scr_rl_on_first";
185
+ host.declare(`declare void @${target}(double, double, ptr, ptr, i1)`);
186
+ B.line(`call void @${target}(double ${id.name}, double ${ev.name}, ptr ${cb.name}, ptr ${adapter}, i1 ${once.name})`);
185
187
  return { name: "", type: e.type };
186
188
  }
187
189
  return host.emitGenericLibCall(e);
@@ -1304,6 +1306,9 @@ export function emitLibCall(host, e) {
1304
1306
  // Primitive wrapper objects (scr_js_wrapper.c).
1305
1307
  case "wrapper":
1306
1308
  return host.emitGenericLibCall(e);
1309
+ // Own properties JavaScript adds to runtime handles
1310
+ // (scr_dyn_handle_props.c).
1311
+ case "handle":
1307
1312
  // %Iterator% and %Iterator.prototype% (scr_js_iterator.c).
1308
1313
  case "iterator":
1309
1314
  return host.emitGenericLibCall(e);