@scriptc/compiler 0.4.3 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (852) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +270 -72
  2. package/ambient/scriptc-overrides.d.ts +21 -0
  3. package/dist/backend/executable-features.js +3 -0
  4. package/dist/backend/executable-features.js.map +1 -1
  5. package/dist/backend/library-pack.js +2 -1
  6. package/dist/backend/library-pack.js.map +1 -1
  7. package/dist/backend/linker.js +11 -1
  8. package/dist/backend/linker.js.map +1 -1
  9. package/dist/backend/lld.d.ts +9 -0
  10. package/dist/backend/lld.js +48 -0
  11. package/dist/backend/lld.js.map +1 -0
  12. package/dist/backend/lld.test.d.ts +1 -0
  13. package/dist/backend/lld.test.js +53 -0
  14. package/dist/backend/lld.test.js.map +1 -0
  15. package/dist/backend/llvm/appended-array-literals.d.ts +11 -1
  16. package/dist/backend/llvm/appended-array-literals.js +29 -0
  17. package/dist/backend/llvm/appended-array-literals.js.map +1 -1
  18. package/dist/backend/llvm/blocks.js +10 -1
  19. package/dist/backend/llvm/blocks.js.map +1 -1
  20. package/dist/backend/llvm/bytes-alias.d.ts +13 -4
  21. package/dist/backend/llvm/bytes-alias.js +16 -5
  22. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  23. package/dist/backend/llvm/bytes-bounds.d.ts +5 -1
  24. package/dist/backend/llvm/bytes-bounds.js +199 -2
  25. package/dist/backend/llvm/bytes-bounds.js.map +1 -1
  26. package/dist/backend/llvm/bytes-loop-versions.d.ts +45 -3
  27. package/dist/backend/llvm/bytes-loop-versions.js +244 -20
  28. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  29. package/dist/backend/llvm/bytes-loop-versions.test.js +18 -6
  30. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  31. package/dist/backend/llvm/call-lifetimes.d.ts +8 -2
  32. package/dist/backend/llvm/call-lifetimes.js +87 -18
  33. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  34. package/dist/backend/llvm/call-lifetimes.test.js +132 -0
  35. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  36. package/dist/backend/llvm/classes.d.ts +3 -2
  37. package/dist/backend/llvm/classes.js +4 -4
  38. package/dist/backend/llvm/classes.js.map +1 -1
  39. package/dist/backend/llvm/counted-loops.d.ts +14 -2
  40. package/dist/backend/llvm/counted-loops.js +54 -5
  41. package/dist/backend/llvm/counted-loops.js.map +1 -1
  42. package/dist/backend/llvm/debug-info.d.ts +42 -1
  43. package/dist/backend/llvm/debug-info.js +72 -6
  44. package/dist/backend/llvm/debug-info.js.map +1 -1
  45. package/dist/backend/llvm/dense-array-loops.js +2 -2
  46. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  47. package/dist/backend/llvm/dense-array-loops.test.js +1 -0
  48. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  49. package/dist/backend/llvm/dyn.d.ts +69 -8
  50. package/dist/backend/llvm/dyn.js +396 -49
  51. package/dist/backend/llvm/dyn.js.map +1 -1
  52. package/dist/backend/llvm/emit-function.js +30 -16
  53. package/dist/backend/llvm/emit-function.js.map +1 -1
  54. package/dist/backend/llvm/emit-journal.d.ts +8 -4
  55. package/dist/backend/llvm/emit-journal.js +75 -5
  56. package/dist/backend/llvm/emit-journal.js.map +1 -1
  57. package/dist/backend/llvm/emit-module.d.ts +4 -0
  58. package/dist/backend/llvm/emit-module.js +74 -29
  59. package/dist/backend/llvm/emit-module.js.map +1 -1
  60. package/dist/backend/llvm/emit-statements.js +297 -28
  61. package/dist/backend/llvm/emit-statements.js.map +1 -1
  62. package/dist/backend/llvm/emitter.d.ts +144 -13
  63. package/dist/backend/llvm/emitter.js +523 -92
  64. package/dist/backend/llvm/emitter.js.map +1 -1
  65. package/dist/backend/llvm/emitter.test.js +11 -2
  66. package/dist/backend/llvm/emitter.test.js.map +1 -1
  67. package/dist/backend/llvm/expr-async.js +11 -13
  68. package/dist/backend/llvm/expr-async.js.map +1 -1
  69. package/dist/backend/llvm/expr-bytes.d.ts +6 -4
  70. package/dist/backend/llvm/expr-bytes.js +45 -16
  71. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  72. package/dist/backend/llvm/expr-calls.js +13 -11
  73. package/dist/backend/llvm/expr-calls.js.map +1 -1
  74. package/dist/backend/llvm/expr-containers.d.ts +11 -0
  75. package/dist/backend/llvm/expr-containers.js +101 -9
  76. package/dist/backend/llvm/expr-containers.js.map +1 -1
  77. package/dist/backend/llvm/expr-context.d.ts +3 -0
  78. package/dist/backend/llvm/expr-control.js +83 -0
  79. package/dist/backend/llvm/expr-control.js.map +1 -1
  80. package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
  81. package/dist/backend/llvm/expr-dynamic.js +22 -4
  82. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  83. package/dist/backend/llvm/expr-primitives.js +121 -14
  84. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  85. package/dist/backend/llvm/expr-stream-bridges.js +111 -26
  86. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  87. package/dist/backend/llvm/forked-analysis.d.ts +8 -0
  88. package/dist/backend/llvm/forked-analysis.js +43 -0
  89. package/dist/backend/llvm/forked-analysis.js.map +1 -0
  90. package/dist/backend/llvm/integer-values.d.ts +12 -0
  91. package/dist/backend/llvm/integer-values.js +69 -5
  92. package/dist/backend/llvm/integer-values.js.map +1 -1
  93. package/dist/backend/llvm/integer-views.d.ts +2 -1
  94. package/dist/backend/llvm/integer-views.js +12 -1
  95. package/dist/backend/llvm/integer-views.js.map +1 -1
  96. package/dist/backend/llvm/js-ic.d.ts +4 -0
  97. package/dist/backend/llvm/js-ic.js +133 -15
  98. package/dist/backend/llvm/js-ic.js.map +1 -1
  99. package/dist/backend/llvm/layouts.d.ts +1 -0
  100. package/dist/backend/llvm/layouts.js.map +1 -1
  101. package/dist/backend/llvm/lazy-captures.d.ts +6 -1
  102. package/dist/backend/llvm/lazy-captures.js +10 -5
  103. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  104. package/dist/backend/llvm/lib-abi.d.ts +5 -0
  105. package/dist/backend/llvm/lib-abi.js +19 -0
  106. package/dist/backend/llvm/lib-abi.js.map +1 -1
  107. package/dist/backend/llvm/lib-dispatch.js +249 -33
  108. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  109. package/dist/backend/llvm/lib-filesystem.d.ts +10 -0
  110. package/dist/backend/llvm/lib-filesystem.js +32 -0
  111. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  112. package/dist/backend/llvm/lib-http2.js +2 -2
  113. package/dist/backend/llvm/lib-http2.js.map +1 -1
  114. package/dist/backend/llvm/lib-network.js +2 -0
  115. package/dist/backend/llvm/lib-network.js.map +1 -1
  116. package/dist/backend/llvm/lib-process.js +48 -1
  117. package/dist/backend/llvm/lib-process.js.map +1 -1
  118. package/dist/backend/llvm/lib-shared.js +64 -0
  119. package/dist/backend/llvm/lib-shared.js.map +1 -1
  120. package/dist/backend/llvm/lib-tls.js +28 -3
  121. package/dist/backend/llvm/lib-tls.js.map +1 -1
  122. package/dist/backend/llvm/local-union-storage.test.js +2 -1
  123. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  124. package/dist/backend/llvm/loop-array-borrows.d.ts +4 -1
  125. package/dist/backend/llvm/loop-array-borrows.js +11 -5
  126. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  127. package/dist/backend/llvm/map-entry-fusion.d.ts +5 -3
  128. package/dist/backend/llvm/map-entry-fusion.js +20 -11
  129. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  130. package/dist/backend/llvm/map-entry-fusion.test.js +14 -6
  131. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -1
  132. package/dist/backend/llvm/map-number-lookup.d.ts +16 -6
  133. package/dist/backend/llvm/map-number-lookup.js +41 -9
  134. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  135. package/dist/backend/llvm/map-number-lookup.test.js +70 -2
  136. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  137. package/dist/backend/llvm/map-read-lifetimes.d.ts +25 -2
  138. package/dist/backend/llvm/map-read-lifetimes.js +136 -6
  139. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  140. package/dist/backend/llvm/map-read-lifetimes.test.js +8 -3
  141. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  142. package/dist/backend/llvm/nullable-unions.d.ts +5 -0
  143. package/dist/backend/llvm/nullable-unions.js +29 -2
  144. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  145. package/dist/backend/llvm/nullable-unions.test.js +25 -1
  146. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  147. package/dist/backend/llvm/publish.js +3 -3
  148. package/dist/backend/llvm/publish.js.map +1 -1
  149. package/dist/backend/llvm/record-union-keys.test.d.ts +1 -0
  150. package/dist/backend/llvm/record-union-keys.test.js +161 -0
  151. package/dist/backend/llvm/record-union-keys.test.js.map +1 -0
  152. package/dist/backend/llvm/reference-effects.js +3 -0
  153. package/dist/backend/llvm/reference-effects.js.map +1 -1
  154. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  155. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  156. package/dist/backend/llvm/shapes.d.ts +4 -5
  157. package/dist/backend/llvm/shapes.js +106 -58
  158. package/dist/backend/llvm/shapes.js.map +1 -1
  159. package/dist/backend/llvm/shapes.test.js +14 -2
  160. package/dist/backend/llvm/shapes.test.js.map +1 -1
  161. package/dist/backend/llvm/speculative-integers.d.ts +50 -3
  162. package/dist/backend/llvm/speculative-integers.js +411 -24
  163. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  164. package/dist/backend/llvm/speculative-integers.test.js +103 -1
  165. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  166. package/dist/backend/llvm/split.d.ts +10 -1
  167. package/dist/backend/llvm/split.js +243 -59
  168. package/dist/backend/llvm/split.js.map +1 -1
  169. package/dist/backend/llvm/split.test.js +92 -13
  170. package/dist/backend/llvm/split.test.js.map +1 -1
  171. package/dist/backend/llvm/stack-captures.js +1 -5
  172. package/dist/backend/llvm/stack-captures.js.map +1 -1
  173. package/dist/backend/llvm/stack-objects.test.js +3 -2
  174. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  175. package/dist/backend/llvm/string-lifetimes.test.js +1 -1
  176. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  177. package/dist/backend/llvm/string-reads.d.ts +13 -0
  178. package/dist/backend/llvm/string-reads.js +22 -0
  179. package/dist/backend/llvm/string-reads.js.map +1 -1
  180. package/dist/backend/llvm/string-slices.d.ts +36 -2
  181. package/dist/backend/llvm/string-slices.js +308 -12
  182. package/dist/backend/llvm/string-slices.js.map +1 -1
  183. package/dist/backend/llvm/string-slices.test.js +182 -3
  184. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  185. package/dist/backend/llvm/string-unit-versions.d.ts +11 -0
  186. package/dist/backend/llvm/string-unit-versions.js +191 -0
  187. package/dist/backend/llvm/string-unit-versions.js.map +1 -0
  188. package/dist/backend/llvm/string-unit-versions.test.d.ts +1 -0
  189. package/dist/backend/llvm/string-unit-versions.test.js +117 -0
  190. package/dist/backend/llvm/string-unit-versions.test.js.map +1 -0
  191. package/dist/backend/llvm/test-boxed-unions.d.ts +5 -2
  192. package/dist/backend/llvm/test-boxed-unions.js +24 -8
  193. package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
  194. package/dist/backend/llvm/union-repr.d.ts +4 -3
  195. package/dist/backend/llvm/union-repr.js +6 -5
  196. package/dist/backend/llvm/union-repr.js.map +1 -1
  197. package/dist/backend/llvm/unwind-abi.d.ts +52 -0
  198. package/dist/backend/llvm/unwind-abi.js +498 -0
  199. package/dist/backend/llvm/unwind-abi.js.map +1 -0
  200. package/dist/backend/llvm/unwind-abi.test.d.ts +1 -0
  201. package/dist/backend/llvm/unwind-abi.test.js +255 -0
  202. package/dist/backend/llvm/unwind-abi.test.js.map +1 -0
  203. package/dist/backend/llvm/walkers.js +13 -0
  204. package/dist/backend/llvm/walkers.js.map +1 -1
  205. package/dist/backend/llvm/wrapping-sums.d.ts +14 -10
  206. package/dist/backend/llvm/wrapping-sums.js +31 -14
  207. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  208. package/dist/backend/loop-polls.d.ts +6 -0
  209. package/dist/backend/loop-polls.js +24 -0
  210. package/dist/backend/loop-polls.js.map +1 -1
  211. package/dist/backend/may-throw.js +8 -8
  212. package/dist/backend/may-throw.js.map +1 -1
  213. package/dist/backend/native/contracts.d.ts +12 -2
  214. package/dist/backend/native/executable.js +48 -6
  215. package/dist/backend/native/executable.js.map +1 -1
  216. package/dist/backend/native/library.js +4 -3
  217. package/dist/backend/native/library.js.map +1 -1
  218. package/dist/backend/native/program-shards.d.ts +2 -2
  219. package/dist/backend/native/program-shards.js +2 -2
  220. package/dist/backend/native/program-shards.js.map +1 -1
  221. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  222. package/dist/backend/native/runtime-inputs.js +4 -1
  223. package/dist/backend/native/runtime-inputs.js.map +1 -1
  224. package/dist/backend/native/vendor.d.ts +1 -1
  225. package/dist/backend/native/vendor.js +1 -1
  226. package/dist/backend/native/vendor.js.map +1 -1
  227. package/dist/backend/native-codegen-core.d.ts +5 -3
  228. package/dist/backend/native-codegen-core.js +13 -6
  229. package/dist/backend/native-codegen-core.js.map +1 -1
  230. package/dist/backend/native-codegen.d.ts +3 -1
  231. package/dist/backend/native-codegen.js +4 -3
  232. package/dist/backend/native-codegen.js.map +1 -1
  233. package/dist/backend/native-codegen.test.js +6 -4
  234. package/dist/backend/native-codegen.test.js.map +1 -1
  235. package/dist/backend/native-link-info-core.d.ts +8 -0
  236. package/dist/backend/native-link-info-core.js.map +1 -1
  237. package/dist/backend/native-profile.d.ts +14 -0
  238. package/dist/backend/native-profile.js +28 -0
  239. package/dist/backend/native-profile.js.map +1 -1
  240. package/dist/backend/native-profile.test.js +8 -1
  241. package/dist/backend/native-profile.test.js.map +1 -1
  242. package/dist/backend/native-toolchain.test.js +11 -11
  243. package/dist/backend/native-toolchain.test.js.map +1 -1
  244. package/dist/backend/runtime-abi.d.ts +2 -2
  245. package/dist/backend/runtime-abi.js +2 -2
  246. package/dist/backend/runtime-pack-core.d.ts +3 -1
  247. package/dist/backend/runtime-pack-core.js +2 -0
  248. package/dist/backend/runtime-pack-core.js.map +1 -1
  249. package/dist/backend/runtime-pack-native.d.ts +17 -5
  250. package/dist/backend/runtime-pack-native.js +186 -14
  251. package/dist/backend/runtime-pack-native.js.map +1 -1
  252. package/dist/backend/runtime-pack-native.test.js +160 -3
  253. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  254. package/dist/backend/runtime-pack-targets.test.js +2 -1
  255. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  256. package/dist/backend/runtime-pack.test.js +2 -1
  257. package/dist/backend/runtime-pack.test.js.map +1 -1
  258. package/dist/backend/target-cpu.d.ts +26 -0
  259. package/dist/backend/target-cpu.js +98 -0
  260. package/dist/backend/target-cpu.js.map +1 -0
  261. package/dist/backend/target-cpu.test.d.ts +1 -0
  262. package/dist/backend/target-cpu.test.js +38 -0
  263. package/dist/backend/target-cpu.test.js.map +1 -0
  264. package/dist/backend/vendor-archives.d.ts +4 -1
  265. package/dist/backend/vendor-archives.js +78 -4
  266. package/dist/backend/vendor-archives.js.map +1 -1
  267. package/dist/backend/vendor-inputs.d.ts +3 -1
  268. package/dist/backend/vendor-inputs.js +3 -1
  269. package/dist/backend/vendor-inputs.js.map +1 -1
  270. package/dist/backend/warm-cache.js +1 -0
  271. package/dist/backend/warm-cache.js.map +1 -1
  272. package/dist/cli/command.js +98 -12
  273. package/dist/cli/command.js.map +1 -1
  274. package/dist/cli/usage.d.ts +25 -1
  275. package/dist/cli/usage.js +40 -3
  276. package/dist/cli/usage.js.map +1 -1
  277. package/dist/compat/fetch-profile.d.ts +15 -6
  278. package/dist/compat/fetch-profile.js +519 -498
  279. package/dist/compat/fetch-profile.js.map +1 -1
  280. package/dist/compile-types.d.ts +14 -0
  281. package/dist/contracts/int32-elements.js +2 -1
  282. package/dist/contracts/int32-elements.js.map +1 -1
  283. package/dist/coverage/report.d.ts +14 -3
  284. package/dist/coverage/report.js +216 -0
  285. package/dist/coverage/report.js.map +1 -1
  286. package/dist/coverage/surface-manifest.js +25 -25
  287. package/dist/coverage/surface-manifest.js.map +1 -1
  288. package/dist/coverage/verdict-cache.d.ts +2 -0
  289. package/dist/coverage/verdict-cache.js +10 -1
  290. package/dist/coverage/verdict-cache.js.map +1 -1
  291. package/dist/diagnostics/diagnostic.d.ts +19 -0
  292. package/dist/diagnostics/diagnostic.js +53 -2
  293. package/dist/diagnostics/diagnostic.js.map +1 -1
  294. package/dist/diagnostics/envelope.d.ts +54 -0
  295. package/dist/diagnostics/envelope.js +7 -1
  296. package/dist/diagnostics/envelope.js.map +1 -1
  297. package/dist/diagnostics/render.d.ts +7 -0
  298. package/dist/diagnostics/render.js +15 -4
  299. package/dist/diagnostics/render.js.map +1 -1
  300. package/dist/executable/executable-cache.d.ts +6 -0
  301. package/dist/executable/executable-cache.js +5 -0
  302. package/dist/executable/executable-cache.js.map +1 -1
  303. package/dist/executable/executable-cache.test.js +3 -0
  304. package/dist/executable/executable-cache.test.js.map +1 -1
  305. package/dist/executable/prepare.js +5 -1
  306. package/dist/executable/prepare.js.map +1 -1
  307. package/dist/frontend/analysis.js +26 -2
  308. package/dist/frontend/analysis.js.map +1 -1
  309. package/dist/frontend/decl-projection.js +105 -10
  310. package/dist/frontend/decl-projection.js.map +1 -1
  311. package/dist/frontend/fork-target.js +67 -1
  312. package/dist/frontend/fork-target.js.map +1 -1
  313. package/dist/frontend/fork-target.test.js +43 -0
  314. package/dist/frontend/fork-target.test.js.map +1 -1
  315. package/dist/frontend/input-tracker.d.ts +4 -1
  316. package/dist/frontend/input-tracker.js +42 -4
  317. package/dist/frontend/input-tracker.js.map +1 -1
  318. package/dist/frontend/input-tracker.test.js +45 -0
  319. package/dist/frontend/input-tracker.test.js.map +1 -1
  320. package/dist/frontend/lowering/abstract-equality.js +38 -1
  321. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  322. package/dist/frontend/lowering/argument-counts.d.ts +36 -0
  323. package/dist/frontend/lowering/argument-counts.js +201 -0
  324. package/dist/frontend/lowering/argument-counts.js.map +1 -0
  325. package/dist/frontend/lowering/array-values.d.ts +27 -0
  326. package/dist/frontend/lowering/array-values.js +112 -0
  327. package/dist/frontend/lowering/array-values.js.map +1 -1
  328. package/dist/frontend/lowering/binding-analysis.d.ts +3 -0
  329. package/dist/frontend/lowering/binding-analysis.js +9 -3
  330. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  331. package/dist/frontend/lowering/builtin-namespaces.d.ts +13 -0
  332. package/dist/frontend/lowering/builtin-namespaces.js +238 -0
  333. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -0
  334. package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
  335. package/dist/frontend/lowering/builtins/async-context.js +62 -3
  336. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  337. package/dist/frontend/lowering/builtins/compression.d.ts +4 -3
  338. package/dist/frontend/lowering/builtins/compression.js +86 -5
  339. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  340. package/dist/frontend/lowering/builtins/crypto.js +3 -1
  341. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  342. package/dist/frontend/lowering/builtins/date-classes.js +17 -1
  343. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -1
  344. package/dist/frontend/lowering/builtins/dates.d.ts +19 -5
  345. package/dist/frontend/lowering/builtins/dates.js +163 -9
  346. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  347. package/dist/frontend/lowering/builtins/filesystem-calls.js +29 -4
  348. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  349. package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
  350. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  351. package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
  352. package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
  353. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
  354. package/dist/frontend/lowering/builtins/fs-streams.d.ts +4 -0
  355. package/dist/frontend/lowering/builtins/fs-streams.js +24 -1
  356. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  357. package/dist/frontend/lowering/builtins/json.d.ts +4 -1
  358. package/dist/frontend/lowering/builtins/json.js +9 -3
  359. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  360. package/dist/frontend/lowering/builtins/module-bindings.d.ts +6 -0
  361. package/dist/frontend/lowering/builtins/module-bindings.js +23 -1
  362. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  363. package/dist/frontend/lowering/builtins/module-calls.js +6 -3
  364. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  365. package/dist/frontend/lowering/builtins/module-resolution.d.ts +5 -0
  366. package/dist/frontend/lowering/builtins/module-resolution.js +95 -4
  367. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  368. package/dist/frontend/lowering/builtins/promises.d.ts +1 -1
  369. package/dist/frontend/lowering/builtins/promises.js +293 -139
  370. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  371. package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
  372. package/dist/frontend/lowering/builtins/readline.js +22 -11
  373. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  374. package/dist/frontend/lowering/builtins/reflection.d.ts +4 -1
  375. package/dist/frontend/lowering/builtins/reflection.js +41 -1
  376. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  377. package/dist/frontend/lowering/builtins/text-codecs.js +31 -2
  378. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  379. package/dist/frontend/lowering/builtins/webassembly.js +4 -1
  380. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  381. package/dist/frontend/lowering/builtins/x509.d.ts +33 -0
  382. package/dist/frontend/lowering/builtins/x509.js +431 -0
  383. package/dist/frontend/lowering/builtins/x509.js.map +1 -0
  384. package/dist/frontend/lowering/call-arguments.js +44 -0
  385. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  386. package/dist/frontend/lowering/call-signatures.js +1 -2
  387. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  388. package/dist/frontend/lowering/cjs-exports-object.js +1 -1
  389. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  390. package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
  391. package/dist/frontend/lowering/cjs-inline-require.js +308 -5
  392. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  393. package/dist/frontend/lowering/class-attributes.d.ts +7 -0
  394. package/dist/frontend/lowering/class-attributes.js +52 -10
  395. package/dist/frontend/lowering/class-attributes.js.map +1 -1
  396. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +23 -0
  397. package/dist/frontend/lowering/class-dynamic-dispatch.js +288 -9
  398. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  399. package/dist/frontend/lowering/class-method-mutations.js +97 -26
  400. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  401. package/dist/frontend/lowering/class-method-values.js +71 -1
  402. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  403. package/dist/frontend/lowering/class-protocols.d.ts +25 -0
  404. package/dist/frontend/lowering/class-protocols.js +183 -1
  405. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  406. package/dist/frontend/lowering/class-prototypes.d.ts +8 -0
  407. package/dist/frontend/lowering/class-prototypes.js +83 -2
  408. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  409. package/dist/frontend/lowering/class-to-primitive.d.ts +5 -0
  410. package/dist/frontend/lowering/class-to-primitive.js +79 -7
  411. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  412. package/dist/frontend/lowering/coercions/state.d.ts +1 -0
  413. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  414. package/dist/frontend/lowering/coercions/structural.js +89 -10
  415. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  416. package/dist/frontend/lowering/coercions/unions.d.ts +4 -2
  417. package/dist/frontend/lowering/coercions/unions.js +13 -6
  418. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  419. package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
  420. package/dist/frontend/lowering/completion-callbacks.js +146 -0
  421. package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
  422. package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
  423. package/dist/frontend/lowering/containers/array-callbacks.js +58 -21
  424. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  425. package/dist/frontend/lowering/containers/array-construction.d.ts +4 -1
  426. package/dist/frontend/lowering/containers/array-construction.js +107 -9
  427. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  428. package/dist/frontend/lowering/containers/array-methods.js +96 -8
  429. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  430. package/dist/frontend/lowering/containers/array-pipelines.js +346 -77
  431. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  432. package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
  433. package/dist/frontend/lowering/containers/bytes.js +453 -45
  434. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  435. package/dist/frontend/lowering/containers/callback-arguments.js +11 -1
  436. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  437. package/dist/frontend/lowering/containers/collection-methods.js +12 -0
  438. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  439. package/dist/frontend/lowering/containers/indexed-objects.js +73 -25
  440. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  441. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +4 -4
  442. package/dist/frontend/lowering/containers/iterator-helpers.js +8 -2
  443. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  444. package/dist/frontend/lowering/containers/replacer-params.d.ts +37 -0
  445. package/dist/frontend/lowering/containers/replacer-params.js +294 -0
  446. package/dist/frontend/lowering/containers/replacer-params.js.map +1 -0
  447. package/dist/frontend/lowering/containers/replacer-params.test.d.ts +1 -0
  448. package/dist/frontend/lowering/containers/replacer-params.test.js +61 -0
  449. package/dist/frontend/lowering/containers/replacer-params.test.js.map +1 -0
  450. package/dist/frontend/lowering/containers/string-and-regexp.js +2 -1
  451. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  452. package/dist/frontend/lowering/containers/string-replacement.js +7 -3
  453. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  454. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -2
  455. package/dist/frontend/lowering/cycle-initialization.js +4 -1
  456. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  457. package/dist/frontend/lowering/date-values.d.ts +14 -0
  458. package/dist/frontend/lowering/date-values.js +254 -0
  459. package/dist/frontend/lowering/date-values.js.map +1 -0
  460. package/dist/frontend/lowering/deferred-module-initializers.js +16 -8
  461. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  462. package/dist/frontend/lowering/deferred-module-initializers.test.js +22 -6
  463. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  464. package/dist/frontend/lowering/dispatch-sites.js +1 -0
  465. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  466. package/dist/frontend/lowering/expressions/array-literals.d.ts +0 -8
  467. package/dist/frontend/lowering/expressions/array-literals.js +125 -26
  468. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  469. package/dist/frontend/lowering/expressions/binary.js +102 -26
  470. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  471. package/dist/frontend/lowering/expressions/element-access.js +129 -6
  472. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  473. package/dist/frontend/lowering/expressions/identifiers.js +66 -4
  474. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  475. package/dist/frontend/lowering/expressions/narrowing.d.ts +2 -1
  476. package/dist/frontend/lowering/expressions/narrowing.js +8 -1
  477. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  478. package/dist/frontend/lowering/expressions/object-literals.js +8 -2
  479. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  480. package/dist/frontend/lowering/expressions/property-access.js +121 -34
  481. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  482. package/dist/frontend/lowering/expressions/relational.js +76 -11
  483. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  484. package/dist/frontend/lowering/expressions/typeof.js +12 -1
  485. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  486. package/dist/frontend/lowering/expressions/updates.js +37 -11
  487. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  488. package/dist/frontend/lowering/f64-handles.d.ts +8 -0
  489. package/dist/frontend/lowering/f64-handles.js +16 -0
  490. package/dist/frontend/lowering/f64-handles.js.map +1 -0
  491. package/dist/frontend/lowering/frozen-records.d.ts +5 -0
  492. package/dist/frontend/lowering/frozen-records.js +12 -4
  493. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  494. package/dist/frontend/lowering/function-context.d.ts +3 -0
  495. package/dist/frontend/lowering/function-context.js.map +1 -1
  496. package/dist/frontend/lowering/function-returns.js +30 -0
  497. package/dist/frontend/lowering/function-returns.js.map +1 -1
  498. package/dist/frontend/lowering/generic-functions.js +17 -6
  499. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  500. package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
  501. package/dist/frontend/lowering/indexed-unions.js +401 -0
  502. package/dist/frontend/lowering/indexed-unions.js.map +1 -0
  503. package/dist/frontend/lowering/instantiation-path.d.ts +3 -2
  504. package/dist/frontend/lowering/instantiation-path.js.map +1 -1
  505. package/dist/frontend/lowering/instantiation-path.test.js +6 -4
  506. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -1
  507. package/dist/frontend/lowering/iterator-adapters.d.ts +4 -2
  508. package/dist/frontend/lowering/iterator-adapters.js +26 -33
  509. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  510. package/dist/frontend/lowering/js-collection-types.d.ts +11 -0
  511. package/dist/frontend/lowering/js-collection-types.js +490 -0
  512. package/dist/frontend/lowering/js-collection-types.js.map +1 -0
  513. package/dist/frontend/lowering/key-order-witness.js +210 -32
  514. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  515. package/dist/frontend/lowering/key-order-witness.test.js +104 -4
  516. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  517. package/dist/frontend/lowering/lib-boundary.js +2 -2
  518. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  519. package/dist/frontend/lowering/lower-assert.d.ts +14 -0
  520. package/dist/frontend/lowering/lower-assert.js +298 -29
  521. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  522. package/dist/frontend/lowering/lower-builtin-values.js +3 -3
  523. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  524. package/dist/frontend/lowering/lower-calls.js +116 -10
  525. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  526. package/dist/frontend/lowering/lower-classes.d.ts +59 -7
  527. package/dist/frontend/lowering/lower-classes.js +668 -222
  528. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  529. package/dist/frontend/lowering/lower-console.js +2 -1
  530. package/dist/frontend/lowering/lower-console.js.map +1 -1
  531. package/dist/frontend/lowering/lower-exprs.d.ts +5 -0
  532. package/dist/frontend/lowering/lower-exprs.js +254 -3
  533. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  534. package/dist/frontend/lowering/lower-functions.js +7 -0
  535. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  536. package/dist/frontend/lowering/lower-generators.js +5 -4
  537. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  538. package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
  539. package/dist/frontend/lowering/lower-inspect.js +299 -57
  540. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  541. package/dist/frontend/lowering/lower-modules.js +49 -22
  542. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  543. package/dist/frontend/lowering/lower-namespaces.d.ts +3 -0
  544. package/dist/frontend/lowering/lower-namespaces.js +44 -1
  545. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  546. package/dist/frontend/lowering/lower-node-module.js +1 -1
  547. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  548. package/dist/frontend/lowering/lower-server.js +126 -32
  549. package/dist/frontend/lowering/lower-server.js.map +1 -1
  550. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -1
  551. package/dist/frontend/lowering/lower-stdlib.js +51 -37
  552. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  553. package/dist/frontend/lowering/lower-stmts.js +393 -79
  554. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  555. package/dist/frontend/lowering/lower-stream.js +515 -121
  556. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  557. package/dist/frontend/lowering/lowerer.d.ts +82 -12
  558. package/dist/frontend/lowering/lowerer.js +317 -44
  559. package/dist/frontend/lowering/lowerer.js.map +1 -1
  560. package/dist/frontend/lowering/lowerer.test.js +1 -1
  561. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  562. package/dist/frontend/lowering/module-namespace-elements.d.ts +13 -0
  563. package/dist/frontend/lowering/module-namespace-elements.js +118 -1
  564. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  565. package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
  566. package/dist/frontend/lowering/object-factory-new.js +20 -6
  567. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  568. package/dist/frontend/lowering/overload-choice.d.ts +33 -0
  569. package/dist/frontend/lowering/overload-choice.js +190 -0
  570. package/dist/frontend/lowering/overload-choice.js.map +1 -0
  571. package/dist/frontend/lowering/private-brands.d.ts +5 -0
  572. package/dist/frontend/lowering/private-brands.js +39 -0
  573. package/dist/frontend/lowering/private-brands.js.map +1 -1
  574. package/dist/frontend/lowering/runtime-optional-elements.d.ts +6 -0
  575. package/dist/frontend/lowering/runtime-optional-elements.js +14 -3
  576. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  577. package/dist/frontend/lowering/sanitize-class-types.js +2 -0
  578. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  579. package/dist/frontend/lowering/site-dependencies.d.ts +7 -2
  580. package/dist/frontend/lowering/site-dependencies.js +0 -15
  581. package/dist/frontend/lowering/site-dependencies.js.map +1 -1
  582. package/dist/frontend/lowering/site-dependencies.test.js +7 -5
  583. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -1
  584. package/dist/frontend/lowering/string-index-bounds.d.ts +7 -4
  585. package/dist/frontend/lowering/string-index-bounds.js +21 -7
  586. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  587. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  588. package/dist/frontend/lowering/surfaces.js +1630 -1540
  589. package/dist/frontend/lowering/surfaces.js.map +1 -1
  590. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  591. package/dist/frontend/lowering/symbol-fields.js +45 -2
  592. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  593. package/dist/frontend/lowering/union-narrow.d.ts +5 -2
  594. package/dist/frontend/lowering/union-narrow.js +6 -3
  595. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  596. package/dist/frontend/lowering/union-narrow.test.js +10 -0
  597. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  598. package/dist/frontend/npm-static-namespace-defaults.d.ts +6 -0
  599. package/dist/frontend/npm-static-namespace-defaults.js +163 -0
  600. package/dist/frontend/npm-static-namespace-defaults.js.map +1 -0
  601. package/dist/frontend/npm-static-namespace-defaults.test.d.ts +1 -0
  602. package/dist/frontend/npm-static-namespace-defaults.test.js +72 -0
  603. package/dist/frontend/npm-static-namespace-defaults.test.js.map +1 -0
  604. package/dist/frontend/npm-static-prune.js +152 -111
  605. package/dist/frontend/npm-static-prune.js.map +1 -1
  606. package/dist/frontend/npm-static.js +35 -32
  607. package/dist/frontend/npm-static.js.map +1 -1
  608. package/dist/frontend/package-shims.d.ts +7 -4
  609. package/dist/frontend/package-shims.js +39 -40
  610. package/dist/frontend/package-shims.js.map +1 -1
  611. package/dist/frontend/pipeline-native.d.ts +2 -2
  612. package/dist/frontend/pipeline-native.js +2 -2
  613. package/dist/frontend/pipeline-native.js.map +1 -1
  614. package/dist/frontend/pipeline.d.ts +19 -2
  615. package/dist/frontend/pipeline.js +103 -12
  616. package/dist/frontend/pipeline.js.map +1 -1
  617. package/dist/frontend/program-analysis.d.ts +7 -1
  618. package/dist/frontend/program-analysis.js +8 -0
  619. package/dist/frontend/program-analysis.js.map +1 -1
  620. package/dist/frontend/program.d.ts +28 -5
  621. package/dist/frontend/program.js +422 -76
  622. package/dist/frontend/program.js.map +1 -1
  623. package/dist/frontend/resolve.d.ts +2 -0
  624. package/dist/frontend/resolve.js +5 -0
  625. package/dist/frontend/resolve.js.map +1 -1
  626. package/dist/frontend/services.d.ts +3 -0
  627. package/dist/frontend/services.js +31 -4
  628. package/dist/frontend/services.js.map +1 -1
  629. package/dist/frontend/shape-inference/analyze.d.ts +93 -0
  630. package/dist/frontend/shape-inference/analyze.js +3138 -0
  631. package/dist/frontend/shape-inference/analyze.js.map +1 -0
  632. package/dist/frontend/shape-inference/constant-graphs.d.ts +54 -0
  633. package/dist/frontend/shape-inference/constant-graphs.js +357 -0
  634. package/dist/frontend/shape-inference/constant-graphs.js.map +1 -0
  635. package/dist/frontend/shape-inference/domain.d.ts +32 -0
  636. package/dist/frontend/shape-inference/domain.js +104 -0
  637. package/dist/frontend/shape-inference/domain.js.map +1 -0
  638. package/dist/frontend/shape-inference/index.d.ts +7 -0
  639. package/dist/frontend/shape-inference/index.js +19 -0
  640. package/dist/frontend/shape-inference/index.js.map +1 -0
  641. package/dist/frontend/shape-inference/report.d.ts +21 -0
  642. package/dist/frontend/shape-inference/report.js +348 -0
  643. package/dist/frontend/shape-inference/report.js.map +1 -0
  644. package/dist/frontend/token-equivalence.d.ts +6 -0
  645. package/dist/frontend/token-equivalence.js +66 -9
  646. package/dist/frontend/token-equivalence.js.map +1 -1
  647. package/dist/frontend/token-equivalence.test.js +33 -1
  648. package/dist/frontend/token-equivalence.test.js.map +1 -1
  649. package/dist/frontend/ts7/checker-features.d.ts +15 -0
  650. package/dist/frontend/ts7/checker-features.js +45 -0
  651. package/dist/frontend/ts7/checker-features.js.map +1 -0
  652. package/dist/frontend/ts7/checker-features.test.d.ts +1 -0
  653. package/dist/frontend/ts7/checker-features.test.js +40 -0
  654. package/dist/frontend/ts7/checker-features.test.js.map +1 -0
  655. package/dist/frontend/ts7/checker-server.d.ts +19 -0
  656. package/dist/frontend/ts7/checker-server.js +46 -0
  657. package/dist/frontend/ts7/checker-server.js.map +1 -0
  658. package/dist/frontend/ts7/checker-server.test.d.ts +1 -0
  659. package/dist/frontend/ts7/checker-server.test.js +38 -0
  660. package/dist/frontend/ts7/checker-server.test.js.map +1 -0
  661. package/dist/frontend/ts7/lib-diagnostics.js +39 -13
  662. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
  663. package/dist/frontend/ts7/lib-diagnostics.test.js +40 -0
  664. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
  665. package/dist/frontend/ts7/native-api.d.ts +1 -0
  666. package/dist/frontend/ts7/native-api.js +25 -2
  667. package/dist/frontend/ts7/native-api.js.map +1 -1
  668. package/dist/frontend/ts7/native-process.d.ts +9 -2
  669. package/dist/frontend/ts7/native-process.js +22 -4
  670. package/dist/frontend/ts7/native-process.js.map +1 -1
  671. package/dist/frontend/ts7/program-host.d.ts +11 -0
  672. package/dist/frontend/ts7/program-host.js +36 -22
  673. package/dist/frontend/ts7/program-host.js.map +1 -1
  674. package/dist/frontend/ts7/semantic-json.d.ts +9 -0
  675. package/dist/frontend/ts7/semantic-json.js +25 -5
  676. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  677. package/dist/frontend/ts7/semantic-model.d.ts +3 -0
  678. package/dist/frontend/ts7/semantic-model.js +8 -1
  679. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  680. package/dist/frontend/ts7/semantic-model.test.js +6 -1
  681. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  682. package/dist/frontend/ts7/semantic-types.d.ts +1 -1
  683. package/dist/frontend/ts7/semantic-types.js +1 -1
  684. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  685. package/dist/frontend/ts7/source-parser.js +3 -1
  686. package/dist/frontend/ts7/source-parser.js.map +1 -1
  687. package/dist/frontend/tsc-codes.js +10 -0
  688. package/dist/frontend/tsc-codes.js.map +1 -1
  689. package/dist/frontend/type-mapper.d.ts +18 -6
  690. package/dist/frontend/type-mapper.js +205 -44
  691. package/dist/frontend/type-mapper.js.map +1 -1
  692. package/dist/index.d.ts +44 -3
  693. package/dist/index.js +39 -8
  694. package/dist/index.js.map +1 -1
  695. package/dist/ir/builtin-effects.js +37 -0
  696. package/dist/ir/builtin-effects.js.map +1 -1
  697. package/dist/ir/builtin-signatures.d.ts +7 -2
  698. package/dist/ir/builtin-signatures.js +5104 -4894
  699. package/dist/ir/builtin-signatures.js.map +1 -1
  700. package/dist/ir/callback-specialization.d.ts +4 -2
  701. package/dist/ir/callback-specialization.js +24 -9
  702. package/dist/ir/callback-specialization.js.map +1 -1
  703. package/dist/ir/capture-values.js +4 -2
  704. package/dist/ir/capture-values.js.map +1 -1
  705. package/dist/ir/char-unit-locals.d.ts +12 -2
  706. package/dist/ir/char-unit-locals.js +400 -58
  707. package/dist/ir/char-unit-locals.js.map +1 -1
  708. package/dist/ir/char-unit-locals.test.js +111 -0
  709. package/dist/ir/char-unit-locals.test.js.map +1 -1
  710. package/dist/ir/constant-globals.js +18 -4
  711. package/dist/ir/constant-globals.js.map +1 -1
  712. package/dist/ir/expression-inlining.d.ts +15 -0
  713. package/dist/ir/expression-inlining.js +166 -0
  714. package/dist/ir/expression-inlining.js.map +1 -0
  715. package/dist/ir/expression-inlining.test.d.ts +1 -0
  716. package/dist/ir/expression-inlining.test.js +123 -0
  717. package/dist/ir/expression-inlining.test.js.map +1 -0
  718. package/dist/ir/function-references.js +2 -0
  719. package/dist/ir/function-references.js.map +1 -1
  720. package/dist/ir/function-references.test.js +6 -0
  721. package/dist/ir/function-references.test.js.map +1 -1
  722. package/dist/ir/int32-arrays.d.ts +27 -6
  723. package/dist/ir/int32-arrays.js +106 -18
  724. package/dist/ir/int32-arrays.js.map +1 -1
  725. package/dist/ir/int32-slots.d.ts +26 -1
  726. package/dist/ir/int32-slots.js +291 -5
  727. package/dist/ir/int32-slots.js.map +1 -1
  728. package/dist/ir/int32-slots.test.js +38 -0
  729. package/dist/ir/int32-slots.test.js.map +1 -1
  730. package/dist/ir/integer-loop-facts.d.ts +5 -0
  731. package/dist/ir/integer-loop-facts.js +90 -1
  732. package/dist/ir/integer-loop-facts.js.map +1 -1
  733. package/dist/ir/integer-loops.d.ts +14 -1
  734. package/dist/ir/integer-loops.js +107 -11
  735. package/dist/ir/integer-loops.js.map +1 -1
  736. package/dist/ir/integer-loops.test.js +70 -0
  737. package/dist/ir/integer-loops.test.js.map +1 -1
  738. package/dist/ir/integer-ranges.js +18 -2
  739. package/dist/ir/integer-ranges.js.map +1 -1
  740. package/dist/ir/integer-ranges.test.js +64 -4
  741. package/dist/ir/integer-ranges.test.js.map +1 -1
  742. package/dist/ir/ir.d.ts +63 -11
  743. package/dist/ir/ir.js +47 -7
  744. package/dist/ir/ir.js.map +1 -1
  745. package/dist/ir/ir.test.js +2 -1
  746. package/dist/ir/ir.test.js.map +1 -1
  747. package/dist/ir/js-ic.d.ts +10 -3
  748. package/dist/ir/js-ic.js +14 -2
  749. package/dist/ir/js-ic.js.map +1 -1
  750. package/dist/ir/js-ic.test.js +11 -0
  751. package/dist/ir/js-ic.test.js.map +1 -1
  752. package/dist/ir/node-index.d.ts +7 -0
  753. package/dist/ir/node-index.js +32 -0
  754. package/dist/ir/node-index.js.map +1 -1
  755. package/dist/ir/receiver-readers.d.ts +6 -1
  756. package/dist/ir/receiver-readers.js +53 -28
  757. package/dist/ir/receiver-readers.js.map +1 -1
  758. package/dist/ir/row-pairs.d.ts +15 -0
  759. package/dist/ir/row-pairs.js +373 -0
  760. package/dist/ir/row-pairs.js.map +1 -0
  761. package/dist/ir/row-pairs.test.d.ts +1 -0
  762. package/dist/ir/row-pairs.test.js +129 -0
  763. package/dist/ir/row-pairs.test.js.map +1 -0
  764. package/dist/ir/runtime-features.d.ts +17 -4
  765. package/dist/ir/runtime-features.js +94 -13
  766. package/dist/ir/runtime-features.js.map +1 -1
  767. package/dist/ir/scalar-records.d.ts +15 -0
  768. package/dist/ir/scalar-records.js +301 -1
  769. package/dist/ir/scalar-records.js.map +1 -1
  770. package/dist/ir/scalar-records.test.js +181 -1
  771. package/dist/ir/scalar-records.test.js.map +1 -1
  772. package/dist/ir/self-captures.js +8 -0
  773. package/dist/ir/self-captures.js.map +1 -1
  774. package/dist/ir/validate.js +78 -28
  775. package/dist/ir/validate.js.map +1 -1
  776. package/dist/library/fence-eval.js +4 -4
  777. package/dist/library/fence-eval.js.map +1 -1
  778. package/dist/library/ir-policy.js +5 -0
  779. package/dist/library/ir-policy.js.map +1 -1
  780. package/dist/library/library-cache.d.ts +1 -0
  781. package/dist/library/library-cache.js +1 -0
  782. package/dist/library/library-cache.js.map +1 -1
  783. package/dist/library/library-cache.test.js +13 -0
  784. package/dist/library/library-cache.test.js.map +1 -1
  785. package/dist/native/cache.d.ts +5 -1
  786. package/dist/native/cache.js +15 -3
  787. package/dist/native/cache.js.map +1 -1
  788. package/dist/native/cli.js +6 -0
  789. package/dist/native/cli.js.map +1 -1
  790. package/dist/native/compiler.d.ts +3 -0
  791. package/dist/native/compiler.js +72 -26
  792. package/dist/native/compiler.js.map +1 -1
  793. package/dist/native/compiler.test.js +87 -2
  794. package/dist/native/compiler.test.js.map +1 -1
  795. package/dist/native/executable-cache-open.test.d.ts +1 -0
  796. package/dist/native/executable-cache-open.test.js +80 -0
  797. package/dist/native/executable-cache-open.test.js.map +1 -0
  798. package/dist/native/executable-cache.d.ts +43 -3
  799. package/dist/native/executable-cache.js +177 -36
  800. package/dist/native/executable-cache.js.map +1 -1
  801. package/dist/native/executable-cache.test.js +103 -0
  802. package/dist/native/executable-cache.test.js.map +1 -1
  803. package/dist/native/prepare.d.ts +1 -1
  804. package/dist/native/prepare.js +49 -17
  805. package/dist/native/prepare.js.map +1 -1
  806. package/dist/native/prepare.test.js +69 -3
  807. package/dist/native/prepare.test.js.map +1 -1
  808. package/dist/native/sanitizer.d.ts +1 -1
  809. package/dist/native/sanitizer.js +17 -3
  810. package/dist/native/sanitizer.js.map +1 -1
  811. package/dist/native/sanitizer.test.js +4 -0
  812. package/dist/native/sanitizer.test.js.map +1 -1
  813. package/dist/node-islands/classify.d.ts +14 -0
  814. package/dist/node-islands/classify.js +114 -0
  815. package/dist/node-islands/classify.js.map +1 -0
  816. package/dist/node-islands/detect.d.ts +13 -0
  817. package/dist/node-islands/detect.js +805 -0
  818. package/dist/node-islands/detect.js.map +1 -0
  819. package/dist/node-islands/detect.test.d.ts +1 -0
  820. package/dist/node-islands/detect.test.js +136 -0
  821. package/dist/node-islands/detect.test.js.map +1 -0
  822. package/dist/node-islands/origin.d.ts +21 -0
  823. package/dist/node-islands/origin.js +60 -0
  824. package/dist/node-islands/origin.js.map +1 -0
  825. package/dist/node-islands/policy.d.ts +49 -0
  826. package/dist/node-islands/policy.js +130 -0
  827. package/dist/node-islands/policy.js.map +1 -0
  828. package/dist/node-islands/report.d.ts +22 -0
  829. package/dist/node-islands/report.js +326 -0
  830. package/dist/node-islands/report.js.map +1 -0
  831. package/dist/node-islands/report.test.d.ts +1 -0
  832. package/dist/node-islands/report.test.js +228 -0
  833. package/dist/node-islands/report.test.js.map +1 -0
  834. package/dist/node-islands/rules.d.ts +20 -0
  835. package/dist/node-islands/rules.js +91 -0
  836. package/dist/node-islands/rules.js.map +1 -0
  837. package/dist/node-islands/scan.d.ts +53 -0
  838. package/dist/node-islands/scan.js +104 -0
  839. package/dist/node-islands/scan.js.map +1 -0
  840. package/dist/node-islands/summary.d.ts +78 -0
  841. package/dist/node-islands/summary.js +26 -0
  842. package/dist/node-islands/summary.js.map +1 -0
  843. package/dist/project-config.d.ts +50 -0
  844. package/dist/project-config.js +372 -0
  845. package/dist/project-config.js.map +1 -0
  846. package/dist/project-config.test.d.ts +1 -0
  847. package/dist/project-config.test.js +154 -0
  848. package/dist/project-config.test.js.map +1 -0
  849. package/dist/wasm/discover.js +6 -31
  850. package/dist/wasm/discover.js.map +1 -1
  851. package/package.json +20 -20
  852. package/surface-manifest.json +21 -38
@@ -1,5 +1,5 @@
1
1
  import { isBorrowSafeMath } from "./analysis.js";
2
- import { everyStmtList } from "./traverse.js";
2
+ import { eachNodeOfKinds } from "./node-index.js";
3
3
  /** Expression kinds that run no user code of their own and never consult
4
4
  * the ambient receiver stack. Calls are admitted here and resolved through
5
5
  * the module call graph below; callValue brackets its own receiver. */
@@ -81,6 +81,21 @@ const RECEIVER_FREE_STMTS = new Set([
81
81
  // (scr_throw_error_msg_code).
82
82
  "runtimeFence",
83
83
  ]);
84
+ /** The kinds whose nodes the readers walk answers true for without looking
85
+ * at them: every receiver-free statement, and the receiver-free expressions
86
+ * other than calls, library calls, string conversions and data intrinsics. */
87
+ const TRIVIALLY_RECEIVER_FREE = new Set([
88
+ ...RECEIVER_FREE_STMTS,
89
+ ...[...RECEIVER_FREE_EXPRS].filter((kind) => kind !== "call" &&
90
+ kind !== "new" &&
91
+ kind !== "virtualCall" &&
92
+ kind !== "libCall" &&
93
+ kind !== "toString" &&
94
+ kind !== "arrIntrinsic" &&
95
+ kind !== "strIntrinsic" &&
96
+ kind !== "mapIntrinsic" &&
97
+ kind !== "setIntrinsic"),
98
+ ]);
84
99
  /** Runtime library calls beyond scalar Math that only compute or build and
85
100
  * park a native error: the f64[] folds behind Math.max/min(...xs),
86
101
  * `new Error(message)` (scr_error_new), and the checked-read TypeError
@@ -125,9 +140,13 @@ function opaqueOperand(e) {
125
140
  * this set needs no receiver bracket. */
126
141
  export class AmbientReceiverReaders {
127
142
  functions;
143
+ nodes;
128
144
  readers = null;
129
- constructor(functions) {
145
+ constructor(functions,
146
+ /** The module's node index, read instead of walking the bodies it holds. */
147
+ nodes) {
130
148
  this.functions = functions;
149
+ this.nodes = nodes;
131
150
  }
132
151
  ignores(fn) {
133
152
  if (fn.async || fn.generator)
@@ -149,6 +168,7 @@ export class AmbientReceiverReaders {
149
168
  }
150
169
  const readers = new Set();
151
170
  const callers = new Map();
171
+ const scan = this.nodes?.scanExcept(TRIVIALLY_RECEIVER_FREE);
152
172
  for (const fn of this.functions.values()) {
153
173
  const callees = new Set();
154
174
  let reads = fn.async === true || fn.generator !== undefined;
@@ -158,33 +178,38 @@ export class AmbientReceiverReaders {
158
178
  callees.add(name);
159
179
  return true;
160
180
  };
181
+ const expr = (expr) => {
182
+ if (!RECEIVER_FREE_EXPRS.has(expr.kind))
183
+ return false;
184
+ switch (expr.kind) {
185
+ case "call":
186
+ return edge(expr.callee);
187
+ case "new":
188
+ return edge(`%${expr.className}.constructor`);
189
+ case "virtualCall": {
190
+ // Any class's override may run: admit only when every
191
+ // same-named method is itself receiver-free.
192
+ const targets = byMethod.get(expr.method) ?? [];
193
+ return targets.length > 0 && targets.every(edge);
194
+ }
195
+ case "libCall":
196
+ return isBorrowSafeMath(expr.fn) || RECEIVER_FREE_LIB_FNS.has(expr.fn);
197
+ case "toString":
198
+ return !opaqueOperand(expr.operand);
199
+ default: {
200
+ const operands = dataIntrinsicOperands(expr);
201
+ return operands === null || !operands.some(opaqueOperand);
202
+ }
203
+ }
204
+ };
161
205
  if (!reads)
162
- reads = !everyStmtList(fn.body, {
163
- stmt: (stmt) => RECEIVER_FREE_STMTS.has(stmt.kind),
164
- expr: (expr) => {
165
- if (!RECEIVER_FREE_EXPRS.has(expr.kind))
166
- return false;
167
- switch (expr.kind) {
168
- case "call":
169
- return edge(expr.callee);
170
- case "new":
171
- return edge(`%${expr.className}.constructor`);
172
- case "virtualCall": {
173
- // Any class's override may run: admit only when every
174
- // same-named method is itself receiver-free.
175
- const targets = byMethod.get(expr.method) ?? [];
176
- return targets.length > 0 && targets.every(edge);
177
- }
178
- case "libCall":
179
- return isBorrowSafeMath(expr.fn) || RECEIVER_FREE_LIB_FNS.has(expr.fn);
180
- case "toString":
181
- return !opaqueOperand(expr.operand);
182
- default: {
183
- const operands = dataIntrinsicOperands(expr);
184
- return operands === null || !operands.some(opaqueOperand);
185
- }
186
- }
187
- },
206
+ eachNodeOfKinds(fn, scan, (node, statement) => {
207
+ const free = statement
208
+ ? RECEIVER_FREE_STMTS.has(node.kind)
209
+ : expr(node);
210
+ if (!free)
211
+ reads = true;
212
+ return free;
188
213
  });
189
214
  if (reads)
190
215
  readers.add(fn.name);
@@ -1 +1 @@
1
- {"version":3,"file":"receiver-readers.js","sourceRoot":"","sources":["../../src/ir/receiver-readers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"receiver-readers.js","sourceRoot":"","sources":["../../src/ir/receiver-readers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type IrModule } from "./ir.js";
2
+ /** Runs loop nests that sum one term per row (spectral-norm's `au`) two rows
3
+ * per pass.
4
+ *
5
+ * Each row's sum keeps its order of additions, so every sum has the bits
6
+ * the nest computes as written: the second row's term is the same
7
+ * expression of `row + 1`. The term only reads numbers, the counters and
8
+ * typed-array elements, so it runs no other code and cannot throw. The
9
+ * nest runs paired when both row bounds are int32 (so `row < end - 1` is
10
+ * `row + 1 < end`), there are at least two rows, and the array the rows
11
+ * store into shares no byte with any array the term reads, so no row reads
12
+ * another row's result. An odd row count runs its last row as written.
13
+ * Otherwise the nest runs as written. Two independent sums take turns in
14
+ * the inner loop, so neither waits on the other's addition. */
15
+ export declare function pairRowSums(mod: IrModule): IrModule;
@@ -0,0 +1,373 @@
1
+ import { BOOL, F64, } from "./ir.js";
2
+ import { everyExpr, everyExprChild, mapExprChildren, transformStmtList } from "./traverse.js";
3
+ /** Inner-loop expressions above this many nodes keep the loop as written. */
4
+ const MAX_TERM_NODES = 64;
5
+ /** The number operators a term may use: they run no other code and cannot
6
+ * throw. */
7
+ const PURE_BINARY = new Set([
8
+ "+",
9
+ "-",
10
+ "*",
11
+ "/",
12
+ "%",
13
+ "**",
14
+ "&",
15
+ "|",
16
+ "^",
17
+ "<<",
18
+ ">>",
19
+ ">>>",
20
+ ]);
21
+ function isRef(e, id) {
22
+ return e?.kind === "varRef" && e.localId === id;
23
+ }
24
+ /** `id = id + 1`, or `id++` as a statement. */
25
+ function unitStep(update, id) {
26
+ if (update?.kind === "exprStmt")
27
+ return update.expr.kind === "incDec" && update.expr.localId === id && update.expr.op === "+";
28
+ return (update?.kind === "assign" &&
29
+ update.localId === id &&
30
+ update.value.kind === "bin" &&
31
+ update.value.op === "+" &&
32
+ isRef(update.value.left, id) &&
33
+ update.value.right.kind === "numLit" &&
34
+ update.value.right.value === 1);
35
+ }
36
+ /** A plain number local: unboxed and outside the temporal dead zone. */
37
+ function plainNumber(locals, id) {
38
+ const local = locals.get(id);
39
+ return local !== undefined && local.type.kind === "f64" && !local.boxed && !local.tdz;
40
+ }
41
+ function readsLocal(e, id) {
42
+ return !everyExpr(e, { stmt: () => true, expr: (x) => !isRef(x, id) });
43
+ }
44
+ /** The row-sum shape of a `for` statement, or null. Bounds and receivers
45
+ * must be literals or locals the nest never writes. */
46
+ function matchRowSum(s, locals) {
47
+ if (s.labels?.length || s.init?.kind !== "varDecl" || !s.init.init)
48
+ return null;
49
+ const row = s.init.localId;
50
+ if (!plainNumber(locals, row) || !unitStep(s.update, row))
51
+ return null;
52
+ const cond = s.cond;
53
+ if (cond?.kind !== "bin" || cond.op !== "<" || !isRef(cond.left, row))
54
+ return null;
55
+ const start = s.init.init, end = cond.right;
56
+ if (s.body.length !== 3)
57
+ return null;
58
+ const [decl, inner, store] = s.body;
59
+ if (decl.kind !== "varDecl" || decl.init?.kind !== "numLit")
60
+ return null;
61
+ const sum = decl.localId;
62
+ if (!plainNumber(locals, sum))
63
+ return null;
64
+ if (inner.kind !== "for" || inner.labels?.length)
65
+ return null;
66
+ if (inner.init?.kind !== "varDecl" || !inner.init.init)
67
+ return null;
68
+ const column = inner.init.localId;
69
+ if (!plainNumber(locals, column) || !unitStep(inner.update, column))
70
+ return null;
71
+ const innerCond = inner.cond;
72
+ if (innerCond?.kind !== "bin" || innerCond.op !== "<" || !isRef(innerCond.left, column))
73
+ return null;
74
+ if (inner.body.length !== 1)
75
+ return null;
76
+ const add = inner.body[0];
77
+ if (add.kind !== "assign" ||
78
+ add.localId !== sum ||
79
+ add.value.kind !== "bin" ||
80
+ add.value.op !== "+" ||
81
+ !isRef(add.value.left, sum))
82
+ return null;
83
+ const term = add.value.right;
84
+ if (store.kind !== "bytesSet" ||
85
+ store.arr.kind !== "varRef" ||
86
+ store.arr.type.kind !== "bytes" ||
87
+ !isRef(store.index, row) ||
88
+ !isRef(store.value, sum))
89
+ return null;
90
+ const out = store.arr;
91
+ // Values the nest reads but never writes: the row counter, the column
92
+ // counter and the sum are its only writes.
93
+ const written = new Set([row, sum, column]);
94
+ // A typed array's length is fixed, so a stable receiver's length is
95
+ // stable too.
96
+ const stable = (e) => e.kind === "numLit" ||
97
+ (e.kind === "varRef" &&
98
+ !written.has(e.localId) &&
99
+ locals.get(e.localId) !== undefined &&
100
+ !locals.get(e.localId).boxed &&
101
+ !locals.get(e.localId).tdz) ||
102
+ (e.kind === "bytesIntrinsic" &&
103
+ e.method === "length" &&
104
+ e.args.length === 0 &&
105
+ e.receiver.kind === "varRef" &&
106
+ e.receiver.type.kind === "bytes" &&
107
+ stable(e.receiver));
108
+ if (!stable(start) || !stable(end) || !stable(out))
109
+ return null;
110
+ if (!stable(inner.init.init) || !stable(innerCond.right))
111
+ return null;
112
+ const reads = [];
113
+ let nodes = 0;
114
+ const pure = (e) => {
115
+ if (++nodes > MAX_TERM_NODES)
116
+ return false;
117
+ switch (e.kind) {
118
+ case "numLit":
119
+ return e.type.kind === "f64";
120
+ case "varRef":
121
+ return e.type.kind === "f64" && (e.localId === row || e.localId === column || stable(e));
122
+ case "bin":
123
+ return e.type.kind === "f64" && PURE_BINARY.has(e.op) && pure(e.left) && pure(e.right);
124
+ case "unary":
125
+ return e.type.kind === "f64" && (e.op === "-" || e.op === "~") && pure(e.operand);
126
+ case "bytesIntrinsic":
127
+ if (stable(e))
128
+ return true;
129
+ if (e.method !== "get" ||
130
+ e.args.length !== 1 ||
131
+ e.receiver.kind !== "varRef" ||
132
+ e.receiver.type.kind !== "bytes" ||
133
+ !stable(e.receiver))
134
+ return false;
135
+ reads.push(e.receiver);
136
+ return pure(e.args[0]);
137
+ default:
138
+ return false;
139
+ }
140
+ };
141
+ if (!pure(term) || readsLocal(term, sum))
142
+ return null;
143
+ return { row, start, end, sum, init: decl.init, inner, column, term, out, reads };
144
+ }
145
+ /** A fresh copy of `e` with `substitute` applied to its local reads and
146
+ * `replace` to the nodes it answers for. */
147
+ function copy(e, substitute, replace = () => null) {
148
+ const replaced = replace(e);
149
+ if (replaced !== null)
150
+ return replaced;
151
+ if (e.kind === "varRef")
152
+ return substitute(e);
153
+ return mapExprChildren({ ...e }, (child) => copy(child, substitute, replace), (stmt) => stmt);
154
+ }
155
+ const bin = (op, left, right, loc) => ({
156
+ kind: "bin",
157
+ op,
158
+ left,
159
+ right,
160
+ type: F64,
161
+ loc,
162
+ });
163
+ /** Runs the row sums of `match` two rows per pass when the test holds and
164
+ * as written otherwise. */
165
+ function pairRows(s, match, fresh, done) {
166
+ const loc = s.loc;
167
+ const ref = (id) => ({ kind: "varRef", localId: id, type: F64, loc });
168
+ const num = (value) => ({ kind: "numLit", value, type: F64, loc });
169
+ const again = (e) => copy(e, (r) => ({ ...r }));
170
+ const row = fresh("row"), sum = fresh("sum"), next = fresh("next"), column = fresh("column");
171
+ const atColumn = (r) => r.localId === match.column ? { ...r, localId: column } : { ...r };
172
+ // Element reads that do not depend on the row are read once per column
173
+ // and shared by both rows.
174
+ const shared = new Map();
175
+ const elements = [];
176
+ const collect = (e) => {
177
+ if (e.kind === "bytesIntrinsic" && e.method === "get" && !readsLocal(e, match.row)) {
178
+ const id = fresh("element");
179
+ shared.set(e, id);
180
+ elements.push({ kind: "varDecl", localId: id, init: copy(e, atColumn), loc });
181
+ return true;
182
+ }
183
+ return everyExprChild(e, collect, () => true);
184
+ };
185
+ collect(match.term);
186
+ // The second row's term reads `row + 1`, so its counter sums stay visible
187
+ // to the counted-loop analysis.
188
+ const termAt = (rowExpr) => copy(match.term, (r) => (r.localId === match.row ? rowExpr() : atColumn(r)), (node) => {
189
+ const id = shared.get(node);
190
+ return id === undefined ? null : { kind: "varRef", localId: id, type: node.type, loc };
191
+ });
192
+ const innerCond = match.inner.cond;
193
+ const pairs = {
194
+ kind: "for",
195
+ init: { kind: "varDecl", localId: row, init: again(match.start), loc },
196
+ cond: {
197
+ kind: "bin",
198
+ op: "<",
199
+ left: ref(row),
200
+ right: bin("-", again(match.end), num(1), loc),
201
+ type: BOOL,
202
+ loc,
203
+ },
204
+ update: { kind: "assign", localId: row, value: bin("+", ref(row), num(2), loc), loc },
205
+ body: [
206
+ { kind: "varDecl", localId: sum, init: { ...match.init }, loc },
207
+ { kind: "varDecl", localId: next, init: { ...match.init }, loc },
208
+ {
209
+ kind: "for",
210
+ init: {
211
+ kind: "varDecl",
212
+ localId: column,
213
+ init: again(match.inner.init.init),
214
+ loc,
215
+ },
216
+ cond: { ...innerCond, left: ref(column), right: again(innerCond.right) },
217
+ update: { kind: "assign", localId: column, value: bin("+", ref(column), num(1), loc), loc },
218
+ body: [
219
+ ...elements,
220
+ {
221
+ kind: "assign",
222
+ localId: sum,
223
+ value: bin("+", ref(sum), termAt(() => ref(row)), loc),
224
+ loc,
225
+ },
226
+ {
227
+ kind: "assign",
228
+ localId: next,
229
+ value: bin("+", ref(next), termAt(() => bin("+", ref(row), num(1), loc)), loc),
230
+ loc,
231
+ },
232
+ ],
233
+ loc,
234
+ },
235
+ { kind: "bytesSet", arr: { ...match.out }, index: ref(row), value: ref(sum), loc },
236
+ {
237
+ kind: "bytesSet",
238
+ arr: { ...match.out },
239
+ index: bin("+", ref(row), num(1), loc),
240
+ value: ref(next),
241
+ loc,
242
+ },
243
+ ],
244
+ loc,
245
+ };
246
+ // Both bounds are int32, so `row < end - 1` is `row + 1 < end`, and the
247
+ // nest has at least two rows. The overlap tests run only then, so they never
248
+ // read an array the program assigns only when there are rows. Rows are
249
+ // independent when the written array shares no byte with an array the
250
+ // term reads; an array that is not there answers false.
251
+ const int32 = (e) => ({
252
+ kind: "bin",
253
+ op: "===",
254
+ left: bin("|", again(e), num(0), loc),
255
+ right: again(e),
256
+ type: BOOL,
257
+ loc,
258
+ });
259
+ const tests = [
260
+ int32(match.start),
261
+ int32(match.end),
262
+ {
263
+ kind: "bin",
264
+ op: "<",
265
+ left: bin("+", again(match.start), num(1), loc),
266
+ right: again(match.end),
267
+ type: BOOL,
268
+ loc,
269
+ },
270
+ ...match.reads.map((read) => ({
271
+ kind: "libCall",
272
+ fn: "bytes.disjoint",
273
+ args: [{ ...match.out }, { ...read }],
274
+ type: BOOL,
275
+ loc,
276
+ })),
277
+ ];
278
+ const test = tests.reduce((left, right) => ({
279
+ kind: "logical",
280
+ op: "&&",
281
+ left,
282
+ right,
283
+ type: BOOL,
284
+ loc,
285
+ }));
286
+ // The loop as written then runs the rows the pairs left: the last one when
287
+ // the count is odd (from `end - ((end - start) & 1)`), or all of them when
288
+ // the test failed. It is the nest's only other copy.
289
+ const go = fresh("go"), from = fresh("from");
290
+ const paired = { kind: "bin", op: "===", left: ref(go), right: num(1), type: BOOL, loc };
291
+ const rest = {
292
+ ...s,
293
+ init: { kind: "varDecl", localId: match.row, init: ref(from), loc },
294
+ };
295
+ done.add(rest);
296
+ return {
297
+ kind: "block",
298
+ body: [
299
+ {
300
+ kind: "varDecl",
301
+ localId: go,
302
+ init: { kind: "ternary", cond: test, then: num(1), else_: num(0), type: F64, loc },
303
+ loc,
304
+ },
305
+ {
306
+ kind: "varDecl",
307
+ localId: from,
308
+ init: {
309
+ kind: "ternary",
310
+ cond: paired,
311
+ then: bin("-", again(match.end), bin("&", bin("-", again(match.end), again(match.start), loc), num(1), loc), loc),
312
+ else_: again(match.start),
313
+ type: F64,
314
+ loc,
315
+ },
316
+ loc,
317
+ },
318
+ { kind: "if", cond: { ...paired }, then: [pairs], else_: null, loc },
319
+ rest,
320
+ ],
321
+ loc,
322
+ };
323
+ }
324
+ /** Runs loop nests that sum one term per row (spectral-norm's `au`) two rows
325
+ * per pass.
326
+ *
327
+ * Each row's sum keeps its order of additions, so every sum has the bits
328
+ * the nest computes as written: the second row's term is the same
329
+ * expression of `row + 1`. The term only reads numbers, the counters and
330
+ * typed-array elements, so it runs no other code and cannot throw. The
331
+ * nest runs paired when both row bounds are int32 (so `row < end - 1` is
332
+ * `row + 1 < end`), there are at least two rows, and the array the rows
333
+ * store into shares no byte with any array the term reads, so no row reads
334
+ * another row's result. An odd row count runs its last row as written.
335
+ * Otherwise the nest runs as written. Two independent sums take turns in
336
+ * the inner loop, so neither waits on the other's addition. */
337
+ export function pairRowSums(mod) {
338
+ let changed = false;
339
+ const functions = mod.functions.map((fn) => {
340
+ if (fn.async || fn.generator)
341
+ return fn;
342
+ const locals = new Map(fn.locals.map((local) => [local.id, local]));
343
+ const added = [];
344
+ const ids = new Set(fn.locals.map((local) => local.id));
345
+ const fresh = (name) => {
346
+ let id = `%pair.${name}.${ids.size}`;
347
+ while (ids.has(id))
348
+ id += "_";
349
+ ids.add(id);
350
+ added.push({ id, name: `%pair.${name}`, type: F64, mutable: true });
351
+ return id;
352
+ };
353
+ const paired = new Set();
354
+ const body = transformStmtList(fn.body, {
355
+ expr: (e) => e,
356
+ stmt: (s) => {
357
+ if (s.kind !== "for" || paired.has(s))
358
+ return s;
359
+ const match = matchRowSum(s, locals);
360
+ if (match === null)
361
+ return s;
362
+ paired.add(s);
363
+ return pairRows(s, match, fresh, paired);
364
+ },
365
+ });
366
+ if (added.length === 0)
367
+ return fn;
368
+ changed = true;
369
+ return { ...fn, locals: [...fn.locals, ...added], body };
370
+ });
371
+ return changed ? { ...mod, functions } : mod;
372
+ }
373
+ //# sourceMappingURL=row-pairs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-pairs.js","sourceRoot":"","sources":["../../src/ir/row-pairs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};