@scriptc/compiler 0.4.4 → 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 (775) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +198 -44
  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 +238 -20
  28. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  29. package/dist/backend/llvm/bytes-loop-versions.test.js +11 -4
  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 +70 -1
  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 +65 -8
  50. package/dist/backend/llvm/dyn.js +375 -40
  51. package/dist/backend/llvm/dyn.js.map +1 -1
  52. package/dist/backend/llvm/emit-function.js +28 -8
  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 +58 -23
  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 +134 -13
  63. package/dist/backend/llvm/emitter.js +514 -87
  64. package/dist/backend/llvm/emitter.js.map +1 -1
  65. package/dist/backend/llvm/expr-bytes.d.ts +6 -4
  66. package/dist/backend/llvm/expr-bytes.js +31 -8
  67. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  68. package/dist/backend/llvm/expr-calls.js +13 -11
  69. package/dist/backend/llvm/expr-calls.js.map +1 -1
  70. package/dist/backend/llvm/expr-containers.d.ts +11 -0
  71. package/dist/backend/llvm/expr-containers.js +87 -9
  72. package/dist/backend/llvm/expr-containers.js.map +1 -1
  73. package/dist/backend/llvm/expr-context.d.ts +3 -0
  74. package/dist/backend/llvm/expr-control.js +83 -0
  75. package/dist/backend/llvm/expr-control.js.map +1 -1
  76. package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
  77. package/dist/backend/llvm/expr-dynamic.js +22 -4
  78. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  79. package/dist/backend/llvm/expr-primitives.js +107 -9
  80. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  81. package/dist/backend/llvm/expr-stream-bridges.js +95 -22
  82. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  83. package/dist/backend/llvm/forked-analysis.d.ts +8 -0
  84. package/dist/backend/llvm/forked-analysis.js +43 -0
  85. package/dist/backend/llvm/forked-analysis.js.map +1 -0
  86. package/dist/backend/llvm/integer-values.d.ts +7 -0
  87. package/dist/backend/llvm/integer-values.js +42 -2
  88. package/dist/backend/llvm/integer-values.js.map +1 -1
  89. package/dist/backend/llvm/integer-views.d.ts +2 -1
  90. package/dist/backend/llvm/integer-views.js +12 -1
  91. package/dist/backend/llvm/integer-views.js.map +1 -1
  92. package/dist/backend/llvm/js-ic.d.ts +4 -0
  93. package/dist/backend/llvm/js-ic.js +133 -15
  94. package/dist/backend/llvm/js-ic.js.map +1 -1
  95. package/dist/backend/llvm/layouts.d.ts +1 -0
  96. package/dist/backend/llvm/layouts.js.map +1 -1
  97. package/dist/backend/llvm/lazy-captures.d.ts +6 -1
  98. package/dist/backend/llvm/lazy-captures.js +10 -5
  99. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  100. package/dist/backend/llvm/lib-abi.d.ts +5 -0
  101. package/dist/backend/llvm/lib-abi.js +19 -0
  102. package/dist/backend/llvm/lib-abi.js.map +1 -1
  103. package/dist/backend/llvm/lib-dispatch.js +128 -42
  104. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  105. package/dist/backend/llvm/lib-filesystem.d.ts +10 -0
  106. package/dist/backend/llvm/lib-filesystem.js +32 -0
  107. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  108. package/dist/backend/llvm/lib-http2.js +2 -2
  109. package/dist/backend/llvm/lib-http2.js.map +1 -1
  110. package/dist/backend/llvm/lib-network.js +2 -0
  111. package/dist/backend/llvm/lib-network.js.map +1 -1
  112. package/dist/backend/llvm/lib-process.js +11 -0
  113. package/dist/backend/llvm/lib-process.js.map +1 -1
  114. package/dist/backend/llvm/lib-shared.js +43 -0
  115. package/dist/backend/llvm/lib-shared.js.map +1 -1
  116. package/dist/backend/llvm/lib-tls.js +28 -3
  117. package/dist/backend/llvm/lib-tls.js.map +1 -1
  118. package/dist/backend/llvm/local-union-storage.test.js +2 -1
  119. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  120. package/dist/backend/llvm/loop-array-borrows.d.ts +4 -1
  121. package/dist/backend/llvm/loop-array-borrows.js +11 -5
  122. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  123. package/dist/backend/llvm/map-entry-fusion.d.ts +5 -3
  124. package/dist/backend/llvm/map-entry-fusion.js +20 -11
  125. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  126. package/dist/backend/llvm/map-entry-fusion.test.js +14 -6
  127. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -1
  128. package/dist/backend/llvm/map-number-lookup.d.ts +16 -6
  129. package/dist/backend/llvm/map-number-lookup.js +41 -9
  130. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  131. package/dist/backend/llvm/map-number-lookup.test.js +70 -2
  132. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  133. package/dist/backend/llvm/map-read-lifetimes.d.ts +25 -2
  134. package/dist/backend/llvm/map-read-lifetimes.js +136 -6
  135. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  136. package/dist/backend/llvm/map-read-lifetimes.test.js +8 -3
  137. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  138. package/dist/backend/llvm/nullable-unions.d.ts +5 -0
  139. package/dist/backend/llvm/nullable-unions.js +29 -2
  140. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  141. package/dist/backend/llvm/nullable-unions.test.js +25 -1
  142. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  143. package/dist/backend/llvm/record-union-keys.test.d.ts +1 -0
  144. package/dist/backend/llvm/record-union-keys.test.js +161 -0
  145. package/dist/backend/llvm/record-union-keys.test.js.map +1 -0
  146. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  147. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  148. package/dist/backend/llvm/shapes.d.ts +4 -5
  149. package/dist/backend/llvm/shapes.js +104 -51
  150. package/dist/backend/llvm/shapes.js.map +1 -1
  151. package/dist/backend/llvm/shapes.test.js +14 -2
  152. package/dist/backend/llvm/shapes.test.js.map +1 -1
  153. package/dist/backend/llvm/speculative-integers.d.ts +50 -3
  154. package/dist/backend/llvm/speculative-integers.js +411 -24
  155. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  156. package/dist/backend/llvm/speculative-integers.test.js +103 -1
  157. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  158. package/dist/backend/llvm/split.d.ts +10 -1
  159. package/dist/backend/llvm/split.js +243 -59
  160. package/dist/backend/llvm/split.js.map +1 -1
  161. package/dist/backend/llvm/split.test.js +92 -13
  162. package/dist/backend/llvm/split.test.js.map +1 -1
  163. package/dist/backend/llvm/stack-objects.test.js +3 -2
  164. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  165. package/dist/backend/llvm/string-lifetimes.test.js +1 -1
  166. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  167. package/dist/backend/llvm/string-reads.d.ts +13 -0
  168. package/dist/backend/llvm/string-reads.js +22 -0
  169. package/dist/backend/llvm/string-reads.js.map +1 -1
  170. package/dist/backend/llvm/string-slices.d.ts +36 -2
  171. package/dist/backend/llvm/string-slices.js +308 -12
  172. package/dist/backend/llvm/string-slices.js.map +1 -1
  173. package/dist/backend/llvm/string-slices.test.js +182 -3
  174. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  175. package/dist/backend/llvm/string-unit-versions.d.ts +11 -0
  176. package/dist/backend/llvm/string-unit-versions.js +191 -0
  177. package/dist/backend/llvm/string-unit-versions.js.map +1 -0
  178. package/dist/backend/llvm/string-unit-versions.test.d.ts +1 -0
  179. package/dist/backend/llvm/string-unit-versions.test.js +117 -0
  180. package/dist/backend/llvm/string-unit-versions.test.js.map +1 -0
  181. package/dist/backend/llvm/test-boxed-unions.d.ts +5 -2
  182. package/dist/backend/llvm/test-boxed-unions.js +24 -8
  183. package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
  184. package/dist/backend/llvm/unwind-abi.d.ts +52 -0
  185. package/dist/backend/llvm/unwind-abi.js +498 -0
  186. package/dist/backend/llvm/unwind-abi.js.map +1 -0
  187. package/dist/backend/llvm/unwind-abi.test.d.ts +1 -0
  188. package/dist/backend/llvm/unwind-abi.test.js +255 -0
  189. package/dist/backend/llvm/unwind-abi.test.js.map +1 -0
  190. package/dist/backend/llvm/wrapping-sums.d.ts +14 -10
  191. package/dist/backend/llvm/wrapping-sums.js +31 -14
  192. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  193. package/dist/backend/loop-polls.d.ts +6 -0
  194. package/dist/backend/loop-polls.js +24 -0
  195. package/dist/backend/loop-polls.js.map +1 -1
  196. package/dist/backend/may-throw.js +8 -8
  197. package/dist/backend/may-throw.js.map +1 -1
  198. package/dist/backend/native/contracts.d.ts +12 -2
  199. package/dist/backend/native/executable.js +48 -6
  200. package/dist/backend/native/executable.js.map +1 -1
  201. package/dist/backend/native/library.js +4 -3
  202. package/dist/backend/native/library.js.map +1 -1
  203. package/dist/backend/native/program-shards.d.ts +2 -2
  204. package/dist/backend/native/program-shards.js +2 -2
  205. package/dist/backend/native/program-shards.js.map +1 -1
  206. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  207. package/dist/backend/native/runtime-inputs.js +4 -1
  208. package/dist/backend/native/runtime-inputs.js.map +1 -1
  209. package/dist/backend/native/vendor.d.ts +1 -1
  210. package/dist/backend/native/vendor.js +1 -1
  211. package/dist/backend/native/vendor.js.map +1 -1
  212. package/dist/backend/native-codegen.d.ts +3 -1
  213. package/dist/backend/native-codegen.js +4 -3
  214. package/dist/backend/native-codegen.js.map +1 -1
  215. package/dist/backend/native-link-info-core.d.ts +8 -0
  216. package/dist/backend/native-link-info-core.js.map +1 -1
  217. package/dist/backend/native-profile.d.ts +14 -0
  218. package/dist/backend/native-profile.js +28 -0
  219. package/dist/backend/native-profile.js.map +1 -1
  220. package/dist/backend/native-profile.test.js +8 -1
  221. package/dist/backend/native-profile.test.js.map +1 -1
  222. package/dist/backend/native-toolchain.test.js +11 -11
  223. package/dist/backend/native-toolchain.test.js.map +1 -1
  224. package/dist/backend/runtime-abi.d.ts +2 -2
  225. package/dist/backend/runtime-abi.js +2 -2
  226. package/dist/backend/runtime-pack-core.d.ts +3 -1
  227. package/dist/backend/runtime-pack-core.js +2 -0
  228. package/dist/backend/runtime-pack-core.js.map +1 -1
  229. package/dist/backend/runtime-pack-native.d.ts +17 -5
  230. package/dist/backend/runtime-pack-native.js +186 -14
  231. package/dist/backend/runtime-pack-native.js.map +1 -1
  232. package/dist/backend/runtime-pack-native.test.js +160 -3
  233. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  234. package/dist/backend/runtime-pack-targets.test.js +2 -1
  235. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  236. package/dist/backend/runtime-pack.test.js +2 -1
  237. package/dist/backend/runtime-pack.test.js.map +1 -1
  238. package/dist/backend/vendor-archives.d.ts +4 -1
  239. package/dist/backend/vendor-archives.js +78 -4
  240. package/dist/backend/vendor-archives.js.map +1 -1
  241. package/dist/backend/vendor-inputs.d.ts +3 -1
  242. package/dist/backend/vendor-inputs.js +3 -1
  243. package/dist/backend/vendor-inputs.js.map +1 -1
  244. package/dist/backend/warm-cache.js +1 -0
  245. package/dist/backend/warm-cache.js.map +1 -1
  246. package/dist/cli/command.js +78 -11
  247. package/dist/cli/command.js.map +1 -1
  248. package/dist/cli/usage.d.ts +22 -1
  249. package/dist/cli/usage.js +33 -3
  250. package/dist/cli/usage.js.map +1 -1
  251. package/dist/compat/fetch-profile.d.ts +15 -6
  252. package/dist/compat/fetch-profile.js +519 -498
  253. package/dist/compat/fetch-profile.js.map +1 -1
  254. package/dist/compile-types.d.ts +7 -0
  255. package/dist/contracts/int32-elements.js +2 -1
  256. package/dist/contracts/int32-elements.js.map +1 -1
  257. package/dist/coverage/report.d.ts +14 -3
  258. package/dist/coverage/report.js +216 -0
  259. package/dist/coverage/report.js.map +1 -1
  260. package/dist/coverage/surface-manifest.js +25 -25
  261. package/dist/coverage/surface-manifest.js.map +1 -1
  262. package/dist/coverage/verdict-cache.d.ts +2 -0
  263. package/dist/coverage/verdict-cache.js +10 -1
  264. package/dist/coverage/verdict-cache.js.map +1 -1
  265. package/dist/diagnostics/diagnostic.d.ts +19 -0
  266. package/dist/diagnostics/diagnostic.js +52 -1
  267. package/dist/diagnostics/diagnostic.js.map +1 -1
  268. package/dist/diagnostics/envelope.d.ts +54 -0
  269. package/dist/diagnostics/envelope.js +7 -1
  270. package/dist/diagnostics/envelope.js.map +1 -1
  271. package/dist/diagnostics/render.d.ts +7 -0
  272. package/dist/diagnostics/render.js +15 -4
  273. package/dist/diagnostics/render.js.map +1 -1
  274. package/dist/executable/executable-cache.d.ts +3 -0
  275. package/dist/executable/executable-cache.js +1 -0
  276. package/dist/executable/executable-cache.js.map +1 -1
  277. package/dist/executable/executable-cache.test.js +1 -0
  278. package/dist/executable/executable-cache.test.js.map +1 -1
  279. package/dist/executable/prepare.js +5 -1
  280. package/dist/executable/prepare.js.map +1 -1
  281. package/dist/frontend/analysis.js +26 -2
  282. package/dist/frontend/analysis.js.map +1 -1
  283. package/dist/frontend/fork-target.js +67 -1
  284. package/dist/frontend/fork-target.js.map +1 -1
  285. package/dist/frontend/fork-target.test.js +43 -0
  286. package/dist/frontend/fork-target.test.js.map +1 -1
  287. package/dist/frontend/input-tracker.d.ts +4 -1
  288. package/dist/frontend/input-tracker.js +42 -4
  289. package/dist/frontend/input-tracker.js.map +1 -1
  290. package/dist/frontend/input-tracker.test.js +45 -0
  291. package/dist/frontend/input-tracker.test.js.map +1 -1
  292. package/dist/frontend/lowering/abstract-equality.js +38 -1
  293. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  294. package/dist/frontend/lowering/argument-counts.d.ts +36 -0
  295. package/dist/frontend/lowering/argument-counts.js +201 -0
  296. package/dist/frontend/lowering/argument-counts.js.map +1 -0
  297. package/dist/frontend/lowering/array-values.d.ts +27 -0
  298. package/dist/frontend/lowering/array-values.js +112 -0
  299. package/dist/frontend/lowering/array-values.js.map +1 -1
  300. package/dist/frontend/lowering/binding-analysis.d.ts +3 -0
  301. package/dist/frontend/lowering/binding-analysis.js +9 -3
  302. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  303. package/dist/frontend/lowering/builtin-namespaces.d.ts +13 -0
  304. package/dist/frontend/lowering/builtin-namespaces.js +238 -0
  305. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -0
  306. package/dist/frontend/lowering/builtins/compression.d.ts +4 -3
  307. package/dist/frontend/lowering/builtins/compression.js +86 -5
  308. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  309. package/dist/frontend/lowering/builtins/date-classes.js +17 -1
  310. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -1
  311. package/dist/frontend/lowering/builtins/dates.d.ts +19 -5
  312. package/dist/frontend/lowering/builtins/dates.js +159 -8
  313. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  314. package/dist/frontend/lowering/builtins/filesystem-calls.js +26 -1
  315. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  316. package/dist/frontend/lowering/builtins/fs-streams.d.ts +4 -0
  317. package/dist/frontend/lowering/builtins/fs-streams.js +24 -1
  318. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  319. package/dist/frontend/lowering/builtins/json.d.ts +4 -1
  320. package/dist/frontend/lowering/builtins/json.js +9 -3
  321. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  322. package/dist/frontend/lowering/builtins/module-bindings.d.ts +6 -0
  323. package/dist/frontend/lowering/builtins/module-bindings.js +23 -1
  324. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  325. package/dist/frontend/lowering/builtins/module-resolution.d.ts +5 -0
  326. package/dist/frontend/lowering/builtins/module-resolution.js +95 -4
  327. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  328. package/dist/frontend/lowering/builtins/promises.js +144 -1
  329. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  330. package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
  331. package/dist/frontend/lowering/builtins/readline.js +22 -11
  332. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  333. package/dist/frontend/lowering/builtins/reflection.d.ts +4 -1
  334. package/dist/frontend/lowering/builtins/reflection.js +41 -1
  335. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  336. package/dist/frontend/lowering/builtins/text-codecs.js +31 -2
  337. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  338. package/dist/frontend/lowering/builtins/webassembly.js +4 -1
  339. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  340. package/dist/frontend/lowering/builtins/x509.d.ts +33 -0
  341. package/dist/frontend/lowering/builtins/x509.js +431 -0
  342. package/dist/frontend/lowering/builtins/x509.js.map +1 -0
  343. package/dist/frontend/lowering/call-arguments.js +44 -0
  344. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  345. package/dist/frontend/lowering/call-signatures.js +1 -1
  346. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  347. package/dist/frontend/lowering/cjs-inline-require.js +1 -1
  348. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  349. package/dist/frontend/lowering/class-attributes.d.ts +7 -0
  350. package/dist/frontend/lowering/class-attributes.js +52 -10
  351. package/dist/frontend/lowering/class-attributes.js.map +1 -1
  352. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +13 -0
  353. package/dist/frontend/lowering/class-dynamic-dispatch.js +174 -9
  354. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  355. package/dist/frontend/lowering/class-method-mutations.js +43 -8
  356. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  357. package/dist/frontend/lowering/class-method-values.js +71 -1
  358. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  359. package/dist/frontend/lowering/class-prototypes.d.ts +8 -0
  360. package/dist/frontend/lowering/class-prototypes.js +83 -2
  361. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  362. package/dist/frontend/lowering/class-to-primitive.d.ts +5 -0
  363. package/dist/frontend/lowering/class-to-primitive.js +79 -7
  364. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  365. package/dist/frontend/lowering/coercions/state.d.ts +1 -0
  366. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  367. package/dist/frontend/lowering/coercions/structural.js +89 -10
  368. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  369. package/dist/frontend/lowering/coercions/unions.d.ts +4 -2
  370. package/dist/frontend/lowering/coercions/unions.js +13 -6
  371. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  372. package/dist/frontend/lowering/containers/array-callbacks.js +51 -15
  373. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  374. package/dist/frontend/lowering/containers/array-construction.d.ts +4 -1
  375. package/dist/frontend/lowering/containers/array-construction.js +102 -9
  376. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  377. package/dist/frontend/lowering/containers/array-methods.js +85 -5
  378. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  379. package/dist/frontend/lowering/containers/array-pipelines.js +346 -77
  380. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  381. package/dist/frontend/lowering/containers/callback-arguments.js +11 -1
  382. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  383. package/dist/frontend/lowering/containers/collection-methods.js +12 -0
  384. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  385. package/dist/frontend/lowering/containers/indexed-objects.js +73 -25
  386. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  387. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +4 -4
  388. package/dist/frontend/lowering/containers/iterator-helpers.js +8 -2
  389. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  390. package/dist/frontend/lowering/containers/replacer-params.d.ts +37 -0
  391. package/dist/frontend/lowering/containers/replacer-params.js +294 -0
  392. package/dist/frontend/lowering/containers/replacer-params.js.map +1 -0
  393. package/dist/frontend/lowering/containers/replacer-params.test.d.ts +1 -0
  394. package/dist/frontend/lowering/containers/replacer-params.test.js +61 -0
  395. package/dist/frontend/lowering/containers/replacer-params.test.js.map +1 -0
  396. package/dist/frontend/lowering/containers/string-and-regexp.js +2 -1
  397. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  398. package/dist/frontend/lowering/containers/string-replacement.js +7 -3
  399. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  400. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -2
  401. package/dist/frontend/lowering/cycle-initialization.js +4 -1
  402. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  403. package/dist/frontend/lowering/date-values.d.ts +9 -6
  404. package/dist/frontend/lowering/date-values.js +63 -16
  405. package/dist/frontend/lowering/date-values.js.map +1 -1
  406. package/dist/frontend/lowering/deferred-module-initializers.js +16 -8
  407. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  408. package/dist/frontend/lowering/deferred-module-initializers.test.js +22 -6
  409. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  410. package/dist/frontend/lowering/dispatch-sites.js +1 -0
  411. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  412. package/dist/frontend/lowering/expressions/array-literals.d.ts +0 -8
  413. package/dist/frontend/lowering/expressions/array-literals.js +119 -26
  414. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  415. package/dist/frontend/lowering/expressions/binary.js +38 -0
  416. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  417. package/dist/frontend/lowering/expressions/element-access.js +50 -6
  418. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  419. package/dist/frontend/lowering/expressions/identifiers.js +35 -3
  420. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  421. package/dist/frontend/lowering/expressions/narrowing.d.ts +2 -1
  422. package/dist/frontend/lowering/expressions/narrowing.js +8 -1
  423. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  424. package/dist/frontend/lowering/expressions/object-literals.js +8 -2
  425. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  426. package/dist/frontend/lowering/expressions/property-access.js +65 -34
  427. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  428. package/dist/frontend/lowering/expressions/relational.js +76 -11
  429. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  430. package/dist/frontend/lowering/expressions/typeof.js +6 -1
  431. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  432. package/dist/frontend/lowering/expressions/updates.js +20 -11
  433. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  434. package/dist/frontend/lowering/f64-handles.d.ts +8 -0
  435. package/dist/frontend/lowering/f64-handles.js +16 -0
  436. package/dist/frontend/lowering/f64-handles.js.map +1 -0
  437. package/dist/frontend/lowering/frozen-records.d.ts +5 -0
  438. package/dist/frontend/lowering/frozen-records.js +12 -4
  439. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  440. package/dist/frontend/lowering/function-context.d.ts +3 -0
  441. package/dist/frontend/lowering/function-context.js.map +1 -1
  442. package/dist/frontend/lowering/function-returns.js +15 -0
  443. package/dist/frontend/lowering/function-returns.js.map +1 -1
  444. package/dist/frontend/lowering/generic-functions.js +17 -6
  445. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  446. package/dist/frontend/lowering/instantiation-path.d.ts +3 -2
  447. package/dist/frontend/lowering/instantiation-path.js.map +1 -1
  448. package/dist/frontend/lowering/instantiation-path.test.js +6 -4
  449. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -1
  450. package/dist/frontend/lowering/iterator-adapters.d.ts +4 -2
  451. package/dist/frontend/lowering/iterator-adapters.js +26 -33
  452. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  453. package/dist/frontend/lowering/js-collection-types.d.ts +11 -0
  454. package/dist/frontend/lowering/js-collection-types.js +490 -0
  455. package/dist/frontend/lowering/js-collection-types.js.map +1 -0
  456. package/dist/frontend/lowering/lib-boundary.js +2 -2
  457. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  458. package/dist/frontend/lowering/lower-assert.d.ts +14 -0
  459. package/dist/frontend/lowering/lower-assert.js +283 -26
  460. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  461. package/dist/frontend/lowering/lower-builtin-values.js +3 -3
  462. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  463. package/dist/frontend/lowering/lower-calls.js +97 -7
  464. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  465. package/dist/frontend/lowering/lower-classes.d.ts +59 -7
  466. package/dist/frontend/lowering/lower-classes.js +647 -176
  467. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  468. package/dist/frontend/lowering/lower-console.js +2 -1
  469. package/dist/frontend/lowering/lower-console.js.map +1 -1
  470. package/dist/frontend/lowering/lower-exprs.d.ts +5 -0
  471. package/dist/frontend/lowering/lower-exprs.js +52 -5
  472. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  473. package/dist/frontend/lowering/lower-functions.js +7 -0
  474. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  475. package/dist/frontend/lowering/lower-generators.js +4 -3
  476. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  477. package/dist/frontend/lowering/lower-inspect.js +264 -46
  478. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  479. package/dist/frontend/lowering/lower-modules.js +28 -17
  480. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  481. package/dist/frontend/lowering/lower-namespaces.d.ts +3 -0
  482. package/dist/frontend/lowering/lower-namespaces.js +44 -1
  483. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  484. package/dist/frontend/lowering/lower-node-module.js +1 -1
  485. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  486. package/dist/frontend/lowering/lower-server.js +126 -32
  487. package/dist/frontend/lowering/lower-server.js.map +1 -1
  488. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -1
  489. package/dist/frontend/lowering/lower-stdlib.js +51 -37
  490. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  491. package/dist/frontend/lowering/lower-stmts.js +294 -46
  492. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  493. package/dist/frontend/lowering/lower-stream.js +515 -121
  494. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  495. package/dist/frontend/lowering/lowerer.d.ts +52 -10
  496. package/dist/frontend/lowering/lowerer.js +249 -37
  497. package/dist/frontend/lowering/lowerer.js.map +1 -1
  498. package/dist/frontend/lowering/lowerer.test.js +1 -1
  499. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  500. package/dist/frontend/lowering/module-namespace-elements.d.ts +13 -0
  501. package/dist/frontend/lowering/module-namespace-elements.js +118 -1
  502. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  503. package/dist/frontend/lowering/private-brands.d.ts +5 -0
  504. package/dist/frontend/lowering/private-brands.js +39 -0
  505. package/dist/frontend/lowering/private-brands.js.map +1 -1
  506. package/dist/frontend/lowering/runtime-optional-elements.d.ts +6 -0
  507. package/dist/frontend/lowering/runtime-optional-elements.js +14 -3
  508. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  509. package/dist/frontend/lowering/sanitize-class-types.js +2 -0
  510. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  511. package/dist/frontend/lowering/site-dependencies.d.ts +7 -2
  512. package/dist/frontend/lowering/site-dependencies.js +0 -15
  513. package/dist/frontend/lowering/site-dependencies.js.map +1 -1
  514. package/dist/frontend/lowering/site-dependencies.test.js +7 -5
  515. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -1
  516. package/dist/frontend/lowering/string-index-bounds.d.ts +7 -4
  517. package/dist/frontend/lowering/string-index-bounds.js +21 -7
  518. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  519. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  520. package/dist/frontend/lowering/surfaces.js +1576 -1539
  521. package/dist/frontend/lowering/surfaces.js.map +1 -1
  522. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  523. package/dist/frontend/lowering/symbol-fields.js +45 -2
  524. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  525. package/dist/frontend/lowering/union-narrow.d.ts +5 -2
  526. package/dist/frontend/lowering/union-narrow.js +6 -3
  527. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  528. package/dist/frontend/lowering/union-narrow.test.js +10 -0
  529. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  530. package/dist/frontend/npm-static-namespace-defaults.d.ts +6 -0
  531. package/dist/frontend/npm-static-namespace-defaults.js +163 -0
  532. package/dist/frontend/npm-static-namespace-defaults.js.map +1 -0
  533. package/dist/frontend/npm-static-namespace-defaults.test.d.ts +1 -0
  534. package/dist/frontend/npm-static-namespace-defaults.test.js +72 -0
  535. package/dist/frontend/npm-static-namespace-defaults.test.js.map +1 -0
  536. package/dist/frontend/npm-static-prune.js +152 -111
  537. package/dist/frontend/npm-static-prune.js.map +1 -1
  538. package/dist/frontend/npm-static.js +35 -32
  539. package/dist/frontend/npm-static.js.map +1 -1
  540. package/dist/frontend/package-shims.d.ts +7 -4
  541. package/dist/frontend/package-shims.js +39 -40
  542. package/dist/frontend/package-shims.js.map +1 -1
  543. package/dist/frontend/pipeline-native.d.ts +2 -2
  544. package/dist/frontend/pipeline-native.js +2 -2
  545. package/dist/frontend/pipeline-native.js.map +1 -1
  546. package/dist/frontend/pipeline.d.ts +19 -2
  547. package/dist/frontend/pipeline.js +102 -11
  548. package/dist/frontend/pipeline.js.map +1 -1
  549. package/dist/frontend/program-analysis.d.ts +2 -0
  550. package/dist/frontend/program-analysis.js +3 -0
  551. package/dist/frontend/program-analysis.js.map +1 -1
  552. package/dist/frontend/program.d.ts +15 -0
  553. package/dist/frontend/program.js +227 -64
  554. package/dist/frontend/program.js.map +1 -1
  555. package/dist/frontend/resolve.d.ts +2 -0
  556. package/dist/frontend/resolve.js +5 -0
  557. package/dist/frontend/resolve.js.map +1 -1
  558. package/dist/frontend/services.d.ts +3 -0
  559. package/dist/frontend/services.js +31 -4
  560. package/dist/frontend/services.js.map +1 -1
  561. package/dist/frontend/shape-inference/analyze.d.ts +93 -0
  562. package/dist/frontend/shape-inference/analyze.js +3138 -0
  563. package/dist/frontend/shape-inference/analyze.js.map +1 -0
  564. package/dist/frontend/shape-inference/constant-graphs.d.ts +54 -0
  565. package/dist/frontend/shape-inference/constant-graphs.js +357 -0
  566. package/dist/frontend/shape-inference/constant-graphs.js.map +1 -0
  567. package/dist/frontend/shape-inference/domain.d.ts +32 -0
  568. package/dist/frontend/shape-inference/domain.js +104 -0
  569. package/dist/frontend/shape-inference/domain.js.map +1 -0
  570. package/dist/frontend/shape-inference/index.d.ts +7 -0
  571. package/dist/frontend/shape-inference/index.js +19 -0
  572. package/dist/frontend/shape-inference/index.js.map +1 -0
  573. package/dist/frontend/shape-inference/report.d.ts +21 -0
  574. package/dist/frontend/shape-inference/report.js +348 -0
  575. package/dist/frontend/shape-inference/report.js.map +1 -0
  576. package/dist/frontend/token-equivalence.d.ts +6 -0
  577. package/dist/frontend/token-equivalence.js +66 -9
  578. package/dist/frontend/token-equivalence.js.map +1 -1
  579. package/dist/frontend/token-equivalence.test.js +33 -1
  580. package/dist/frontend/token-equivalence.test.js.map +1 -1
  581. package/dist/frontend/ts7/checker-features.d.ts +15 -0
  582. package/dist/frontend/ts7/checker-features.js +45 -0
  583. package/dist/frontend/ts7/checker-features.js.map +1 -0
  584. package/dist/frontend/ts7/checker-features.test.d.ts +1 -0
  585. package/dist/frontend/ts7/checker-features.test.js +40 -0
  586. package/dist/frontend/ts7/checker-features.test.js.map +1 -0
  587. package/dist/frontend/ts7/checker-server.d.ts +19 -0
  588. package/dist/frontend/ts7/checker-server.js +46 -0
  589. package/dist/frontend/ts7/checker-server.js.map +1 -0
  590. package/dist/frontend/ts7/checker-server.test.d.ts +1 -0
  591. package/dist/frontend/ts7/checker-server.test.js +38 -0
  592. package/dist/frontend/ts7/checker-server.test.js.map +1 -0
  593. package/dist/frontend/ts7/lib-diagnostics.js +39 -13
  594. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
  595. package/dist/frontend/ts7/lib-diagnostics.test.js +40 -0
  596. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
  597. package/dist/frontend/ts7/native-api.d.ts +1 -0
  598. package/dist/frontend/ts7/native-api.js +25 -2
  599. package/dist/frontend/ts7/native-api.js.map +1 -1
  600. package/dist/frontend/ts7/native-process.d.ts +9 -2
  601. package/dist/frontend/ts7/native-process.js +22 -4
  602. package/dist/frontend/ts7/native-process.js.map +1 -1
  603. package/dist/frontend/ts7/program-host.d.ts +11 -0
  604. package/dist/frontend/ts7/program-host.js +36 -22
  605. package/dist/frontend/ts7/program-host.js.map +1 -1
  606. package/dist/frontend/ts7/semantic-json.d.ts +9 -0
  607. package/dist/frontend/ts7/semantic-json.js +25 -5
  608. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  609. package/dist/frontend/ts7/semantic-model.js +3 -1
  610. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  611. package/dist/frontend/ts7/source-parser.js +3 -1
  612. package/dist/frontend/ts7/source-parser.js.map +1 -1
  613. package/dist/frontend/tsc-codes.js +10 -0
  614. package/dist/frontend/tsc-codes.js.map +1 -1
  615. package/dist/frontend/type-mapper.d.ts +18 -6
  616. package/dist/frontend/type-mapper.js +160 -28
  617. package/dist/frontend/type-mapper.js.map +1 -1
  618. package/dist/index.d.ts +44 -3
  619. package/dist/index.js +27 -8
  620. package/dist/index.js.map +1 -1
  621. package/dist/ir/builtin-effects.js +29 -0
  622. package/dist/ir/builtin-effects.js.map +1 -1
  623. package/dist/ir/builtin-signatures.d.ts +7 -2
  624. package/dist/ir/builtin-signatures.js +5104 -4950
  625. package/dist/ir/builtin-signatures.js.map +1 -1
  626. package/dist/ir/callback-specialization.d.ts +4 -2
  627. package/dist/ir/callback-specialization.js +24 -9
  628. package/dist/ir/callback-specialization.js.map +1 -1
  629. package/dist/ir/capture-values.js +4 -2
  630. package/dist/ir/capture-values.js.map +1 -1
  631. package/dist/ir/char-unit-locals.d.ts +12 -2
  632. package/dist/ir/char-unit-locals.js +400 -58
  633. package/dist/ir/char-unit-locals.js.map +1 -1
  634. package/dist/ir/char-unit-locals.test.js +111 -0
  635. package/dist/ir/char-unit-locals.test.js.map +1 -1
  636. package/dist/ir/constant-globals.js +18 -4
  637. package/dist/ir/constant-globals.js.map +1 -1
  638. package/dist/ir/expression-inlining.d.ts +15 -0
  639. package/dist/ir/expression-inlining.js +166 -0
  640. package/dist/ir/expression-inlining.js.map +1 -0
  641. package/dist/ir/expression-inlining.test.d.ts +1 -0
  642. package/dist/ir/expression-inlining.test.js +123 -0
  643. package/dist/ir/expression-inlining.test.js.map +1 -0
  644. package/dist/ir/function-references.js +2 -0
  645. package/dist/ir/function-references.js.map +1 -1
  646. package/dist/ir/function-references.test.js +6 -0
  647. package/dist/ir/function-references.test.js.map +1 -1
  648. package/dist/ir/int32-arrays.d.ts +27 -6
  649. package/dist/ir/int32-arrays.js +106 -18
  650. package/dist/ir/int32-arrays.js.map +1 -1
  651. package/dist/ir/int32-slots.d.ts +26 -1
  652. package/dist/ir/int32-slots.js +284 -5
  653. package/dist/ir/int32-slots.js.map +1 -1
  654. package/dist/ir/int32-slots.test.js +5 -0
  655. package/dist/ir/int32-slots.test.js.map +1 -1
  656. package/dist/ir/integer-loop-facts.d.ts +5 -0
  657. package/dist/ir/integer-loop-facts.js +90 -1
  658. package/dist/ir/integer-loop-facts.js.map +1 -1
  659. package/dist/ir/integer-loops.d.ts +14 -1
  660. package/dist/ir/integer-loops.js +93 -7
  661. package/dist/ir/integer-loops.js.map +1 -1
  662. package/dist/ir/integer-loops.test.js +70 -0
  663. package/dist/ir/integer-loops.test.js.map +1 -1
  664. package/dist/ir/integer-ranges.js +18 -2
  665. package/dist/ir/integer-ranges.js.map +1 -1
  666. package/dist/ir/integer-ranges.test.js +64 -4
  667. package/dist/ir/integer-ranges.test.js.map +1 -1
  668. package/dist/ir/ir.d.ts +50 -8
  669. package/dist/ir/ir.js +38 -12
  670. package/dist/ir/ir.js.map +1 -1
  671. package/dist/ir/js-ic.d.ts +25 -5
  672. package/dist/ir/js-ic.js +93 -13
  673. package/dist/ir/js-ic.js.map +1 -1
  674. package/dist/ir/js-ic.test.js +153 -0
  675. package/dist/ir/js-ic.test.js.map +1 -1
  676. package/dist/ir/node-index.d.ts +7 -0
  677. package/dist/ir/node-index.js +32 -0
  678. package/dist/ir/node-index.js.map +1 -1
  679. package/dist/ir/receiver-readers.d.ts +6 -1
  680. package/dist/ir/receiver-readers.js +53 -28
  681. package/dist/ir/receiver-readers.js.map +1 -1
  682. package/dist/ir/row-pairs.d.ts +15 -0
  683. package/dist/ir/row-pairs.js +373 -0
  684. package/dist/ir/row-pairs.js.map +1 -0
  685. package/dist/ir/row-pairs.test.d.ts +1 -0
  686. package/dist/ir/row-pairs.test.js +129 -0
  687. package/dist/ir/row-pairs.test.js.map +1 -0
  688. package/dist/ir/runtime-features.d.ts +17 -4
  689. package/dist/ir/runtime-features.js +69 -12
  690. package/dist/ir/runtime-features.js.map +1 -1
  691. package/dist/ir/scalar-records.d.ts +15 -0
  692. package/dist/ir/scalar-records.js +301 -1
  693. package/dist/ir/scalar-records.js.map +1 -1
  694. package/dist/ir/scalar-records.test.js +181 -1
  695. package/dist/ir/scalar-records.test.js.map +1 -1
  696. package/dist/ir/self-captures.js +8 -0
  697. package/dist/ir/self-captures.js.map +1 -1
  698. package/dist/ir/validate.js +37 -28
  699. package/dist/ir/validate.js.map +1 -1
  700. package/dist/library/fence-eval.js +4 -4
  701. package/dist/library/fence-eval.js.map +1 -1
  702. package/dist/library/ir-policy.js +4 -0
  703. package/dist/library/ir-policy.js.map +1 -1
  704. package/dist/library/library-cache.d.ts +1 -0
  705. package/dist/library/library-cache.js +1 -0
  706. package/dist/library/library-cache.js.map +1 -1
  707. package/dist/library/library-cache.test.js +13 -0
  708. package/dist/library/library-cache.test.js.map +1 -1
  709. package/dist/native/cache.d.ts +5 -1
  710. package/dist/native/cache.js +15 -3
  711. package/dist/native/cache.js.map +1 -1
  712. package/dist/native/cli.js +6 -0
  713. package/dist/native/cli.js.map +1 -1
  714. package/dist/native/compiler.d.ts +3 -0
  715. package/dist/native/compiler.js +72 -26
  716. package/dist/native/compiler.js.map +1 -1
  717. package/dist/native/compiler.test.js +87 -2
  718. package/dist/native/compiler.test.js.map +1 -1
  719. package/dist/native/executable-cache-open.test.d.ts +1 -0
  720. package/dist/native/executable-cache-open.test.js +80 -0
  721. package/dist/native/executable-cache-open.test.js.map +1 -0
  722. package/dist/native/executable-cache.d.ts +43 -3
  723. package/dist/native/executable-cache.js +177 -36
  724. package/dist/native/executable-cache.js.map +1 -1
  725. package/dist/native/executable-cache.test.js +103 -0
  726. package/dist/native/executable-cache.test.js.map +1 -1
  727. package/dist/native/prepare.js +38 -16
  728. package/dist/native/prepare.js.map +1 -1
  729. package/dist/native/prepare.test.js +51 -1
  730. package/dist/native/prepare.test.js.map +1 -1
  731. package/dist/native/sanitizer.d.ts +1 -1
  732. package/dist/native/sanitizer.js +17 -3
  733. package/dist/native/sanitizer.js.map +1 -1
  734. package/dist/native/sanitizer.test.js +4 -0
  735. package/dist/native/sanitizer.test.js.map +1 -1
  736. package/dist/node-islands/classify.d.ts +14 -0
  737. package/dist/node-islands/classify.js +114 -0
  738. package/dist/node-islands/classify.js.map +1 -0
  739. package/dist/node-islands/detect.d.ts +13 -0
  740. package/dist/node-islands/detect.js +805 -0
  741. package/dist/node-islands/detect.js.map +1 -0
  742. package/dist/node-islands/detect.test.d.ts +1 -0
  743. package/dist/node-islands/detect.test.js +136 -0
  744. package/dist/node-islands/detect.test.js.map +1 -0
  745. package/dist/node-islands/origin.d.ts +21 -0
  746. package/dist/node-islands/origin.js +60 -0
  747. package/dist/node-islands/origin.js.map +1 -0
  748. package/dist/node-islands/policy.d.ts +49 -0
  749. package/dist/node-islands/policy.js +130 -0
  750. package/dist/node-islands/policy.js.map +1 -0
  751. package/dist/node-islands/report.d.ts +22 -0
  752. package/dist/node-islands/report.js +326 -0
  753. package/dist/node-islands/report.js.map +1 -0
  754. package/dist/node-islands/report.test.d.ts +1 -0
  755. package/dist/node-islands/report.test.js +228 -0
  756. package/dist/node-islands/report.test.js.map +1 -0
  757. package/dist/node-islands/rules.d.ts +20 -0
  758. package/dist/node-islands/rules.js +91 -0
  759. package/dist/node-islands/rules.js.map +1 -0
  760. package/dist/node-islands/scan.d.ts +53 -0
  761. package/dist/node-islands/scan.js +104 -0
  762. package/dist/node-islands/scan.js.map +1 -0
  763. package/dist/node-islands/summary.d.ts +78 -0
  764. package/dist/node-islands/summary.js +26 -0
  765. package/dist/node-islands/summary.js.map +1 -0
  766. package/dist/project-config.d.ts +50 -0
  767. package/dist/project-config.js +372 -0
  768. package/dist/project-config.js.map +1 -0
  769. package/dist/project-config.test.d.ts +1 -0
  770. package/dist/project-config.test.js +154 -0
  771. package/dist/project-config.test.js.map +1 -0
  772. package/dist/wasm/discover.js +6 -31
  773. package/dist/wasm/discover.js.map +1 -1
  774. package/package.json +20 -20
  775. package/surface-manifest.json +20 -35
@@ -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 {};
@@ -0,0 +1,129 @@
1
+ import { expect, test } from "vitest";
2
+ import { BOOL, F64, VOID } from "./ir.js";
3
+ import { pairRowSums } from "./row-pairs.js";
4
+ const loc = { file: "row-pairs.ts", start: 0, end: 0 };
5
+ const BYTES = { kind: "bytes", elem: "f64" };
6
+ const num = (value) => ({ loc, kind: "numLit", value, type: F64 });
7
+ const ref = (localId) => ({ loc, kind: "varRef", localId, type: F64 });
8
+ const bytes = (localId) => ({
9
+ loc,
10
+ kind: "varRef",
11
+ localId,
12
+ type: BYTES,
13
+ });
14
+ const bin = (op, left, right) => ({
15
+ loc,
16
+ kind: "bin",
17
+ op,
18
+ left,
19
+ right,
20
+ type: op === "<" ? BOOL : F64,
21
+ });
22
+ const step = (id) => ({
23
+ loc,
24
+ kind: "assign",
25
+ localId: id,
26
+ value: bin("+", ref(id), num(1)),
27
+ });
28
+ const counted = (id, start, end, body) => ({
29
+ loc,
30
+ kind: "for",
31
+ init: { loc, kind: "varDecl", localId: id, init: start },
32
+ cond: bin("<", ref(id), end),
33
+ update: step(id),
34
+ body,
35
+ });
36
+ const get = (array, index) => ({
37
+ loc,
38
+ kind: "bytesIntrinsic",
39
+ method: "get",
40
+ receiver: bytes(array),
41
+ args: [index],
42
+ type: F64,
43
+ invalidNaN: true,
44
+ });
45
+ /** for (i = start; i < end; i++) { t = 0; for (j = 0; j < n; j++) t += u[j] / (i + j + 1); v[i] = t } */
46
+ function rowSum(term = bin("/", get("u", ref("j")), bin("+", bin("+", ref("i"), ref("j")), num(1)))) {
47
+ return counted("i", ref("start"), ref("end"), [
48
+ { loc, kind: "varDecl", localId: "t", init: num(0) },
49
+ counted("j", num(0), ref("n"), [
50
+ { loc, kind: "assign", localId: "t", value: bin("+", ref("t"), term) },
51
+ ]),
52
+ { loc, kind: "bytesSet", arr: bytes("v"), index: ref("i"), value: ref("t") },
53
+ ]);
54
+ }
55
+ const local = (id, type = F64) => ({ id, name: id, type, mutable: true });
56
+ function mod(body) {
57
+ const fn = {
58
+ loc,
59
+ name: "rows",
60
+ params: [],
61
+ locals: [
62
+ ...["i", "j", "t", "start", "end", "n"].map((id) => local(id)),
63
+ local("u", BYTES),
64
+ local("v", BYTES),
65
+ ],
66
+ returnType: VOID,
67
+ body,
68
+ };
69
+ return { irVersion: 17, sourceFile: "row-pairs.ts", entry: "rows", functions: [fn] };
70
+ }
71
+ test("a row-sum nest runs two rows per pass behind its bounds and overlap test", () => {
72
+ const result = pairRowSums(mod([rowSum()]));
73
+ const top = result.functions[0].body[0];
74
+ expect(top.kind).toBe("block");
75
+ const [go, from, branch, rest] = top.body;
76
+ // The test: int32 bounds, start <= end, and the stored array disjoint
77
+ // from the array the term reads.
78
+ expect(JSON.stringify(go.init)).toContain('"fn":"bytes.disjoint"');
79
+ expect(branch.else_).toBeNull();
80
+ const pairs = branch.then[0];
81
+ expect(pairs.body.filter((s) => s.kind === "bytesSet")).toHaveLength(2);
82
+ const inner = pairs.body[2];
83
+ // One read of u[j] for both rows, then the two sums.
84
+ expect(inner.body).toHaveLength(3);
85
+ expect(inner.body[0]).toMatchObject({ kind: "varDecl", init: { kind: "bytesIntrinsic" } });
86
+ // The second row's term reads `row + 1`.
87
+ const row = pairs.init?.kind === "varDecl" ? pairs.init.localId : "";
88
+ expect(inner.body[2].value).toMatchObject({
89
+ op: "+",
90
+ right: {
91
+ op: "/",
92
+ left: { kind: "varRef" },
93
+ right: {
94
+ op: "+",
95
+ left: {
96
+ op: "+",
97
+ left: { op: "+", left: { kind: "varRef", localId: row }, right: { value: 1 } },
98
+ },
99
+ },
100
+ },
101
+ });
102
+ // The loop as written runs from `end - ((end - start) & 1)` after the
103
+ // pairs, or from the start when the test failed: the nest's one other copy.
104
+ expect(from.init).toMatchObject({
105
+ kind: "ternary",
106
+ then: { op: "-" },
107
+ else_: { localId: "start" },
108
+ });
109
+ expect(rest.init).toMatchObject({
110
+ kind: "varDecl",
111
+ localId: "i",
112
+ init: { localId: from.localId },
113
+ });
114
+ expect(top.body).toHaveLength(4);
115
+ expect(result.functions[0].locals.map((l) => l.id).filter((id) => id.startsWith("%pair."))).toHaveLength(7);
116
+ });
117
+ test("nests whose term calls, writes or reads the sum keep their loops", () => {
118
+ const calls = { loc, kind: "call", callee: "f", args: [ref("j")], type: F64 };
119
+ const readsSum = bin("+", ref("t"), get("u", ref("j")));
120
+ for (const term of [calls, readsSum]) {
121
+ const m = mod([rowSum(term)]);
122
+ expect(pairRowSums(m)).toBe(m);
123
+ }
124
+ const stored = rowSum();
125
+ stored.body[2] = { loc, kind: "bytesSet", arr: bytes("v"), index: ref("j"), value: ref("t") };
126
+ const m = mod([stored]);
127
+ expect(pairRowSums(m)).toBe(m);
128
+ });
129
+ //# sourceMappingURL=row-pairs.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-pairs.test.js","sourceRoot":"","sources":["../../src/ir/row-pairs.test.ts"],"names":[],"mappings":"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"}
@@ -96,7 +96,7 @@ declare const RUNTIME_FEATURE_RULES: {
96
96
  * a boxed function or record that carries one): scr_dgram_dyn.c over
97
97
  * the dgram unit. */
98
98
  dgramDyn: RuntimeFeatureRule;
99
- /** A TextEncoder or TextDecoder record converts to or from an untyped
99
+ /** A TextEncoder, TextDecoder or StringDecoder record converts to or from an untyped
100
100
  * value (its handle box, or a boxed function, record or collection that
101
101
  * carries one): scr_text_codec_dyn.c. */
102
102
  textCodecDyn: RuntimeFeatureRule;
@@ -185,11 +185,15 @@ declare const RUNTIME_FEATURE_RULES: {
185
185
  /** scr_url_legacy.c parses and stringifies queries. */
186
186
  qs: RuntimeFeatureRule;
187
187
  /** scr_url_legacy.c lowercases and normalizes hostnames with the regex
188
- * unit's libunicode, NODE_DEBUG matching in scr_util_callable.c and
189
- * readline's terminal unit use the regex unit, and locale case mapping
190
- * runs its default conversion. */
188
+ * unit's libunicode, the WHATWG URL host parser runs UTS #46 through
189
+ * scr_idna.c (which links with the regex unit), NODE_DEBUG matching in
190
+ * scr_util_callable.c and readline's terminal unit use the regex unit,
191
+ * and locale case mapping runs its default conversion. */
191
192
  regex: RuntimeFeatureRule;
192
193
  searchParams: RuntimeFeatureRule;
194
+ /** URL programs install the IDNA unit's ToASCII for the WHATWG host
195
+ * parser (scr_url_idna_install). */
196
+ urlIdna: RuntimeFeatureRule;
193
197
  /** stdin setEncoding / string data listeners / stdio 'resize' events. A
194
198
  * typed string 'data' listener takes setEncoding-decoded chunks; the
195
199
  * process stream object's setEncoding and 'resize' members are reached
@@ -207,12 +211,21 @@ declare const RUNTIME_FEATURE_RULES: {
207
211
  utilPromisify: RuntimeFeatureRule;
208
212
  /** process.emitWarning is assigned (process.setEmitWarning). */
209
213
  warningReplace: RuntimeFeatureRule;
214
+ /** Module namespace objects as checked-dynamic values
215
+ * (scr_module_namespace.c). */
216
+ moduleNamespace: RuntimeFeatureRule;
210
217
  /** The WebAssembly API (scr_wasm.c). */
211
218
  wasm: RuntimeFeatureRule;
212
219
  /** crypto.subtle importKey/sign/verify/digest and CryptoKey:
213
220
  * scr_webcrypto.c. */
214
221
  webcrypto: RuntimeFeatureRule;
222
+ /** scr_x509.c: the X509Certificate fields beyond the validity window and
223
+ * fingerprint, which stay in scr_lib.c. */
224
+ x509: RuntimeFeatureRule;
215
225
  zlib: RuntimeFeatureRule;
226
+ /** node:zlib's Brotli forms: zlib.brotliInstall, which %main calls when
227
+ * the program uses Brotli (scr_brotli.c). */
228
+ brotli: RuntimeFeatureRule;
216
229
  };
217
230
  type RuntimeFeatureName = keyof typeof RUNTIME_FEATURE_RULES;
218
231
  export type RuntimeFeatures = Record<RuntimeFeatureName, boolean>;