@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
@@ -11,7 +11,7 @@ import { allocateLocalUnion, storeLocalUnion } from "./local-union-storage.js";
11
11
  import { boxAccess, boxNewCall, elemAccess } from "./shapes.js";
12
12
  import { dynHoleRead } from "./loop-array-borrows.js";
13
13
  import { endsWithJump, matchStringSelfConcat } from "../../ir/analysis.js";
14
- import { charAtUnitRead, emitDiscardedSplice } from "./expr-containers.js";
14
+ import { charAtUnitRead, emitBorrowedMapGet, emitDiscardedSplice } from "./expr-containers.js";
15
15
  import { InternalCompilerError } from "../../errors.js";
16
16
  import { emitDenseArrayGet, emitDenseArrayPop, emitDenseArraySet, SCR_ELEM_I32, } from "./dense-array-access.js";
17
17
  import { emitBorrowedInput } from "./borrowed-inputs.js";
@@ -22,7 +22,7 @@ import { resultSlotStore } from "../result-slots.js";
22
22
  import { matchIntegerArrayForLoop, matchIntegerBytesForLoop, matchIntegerCountedForLoop, matchIntegerPairedForLoop, } from "../../ir/integer-loops.js";
23
23
  import { emitByteWindowGuard, matchByteWindow } from "./byte-windows.js";
24
24
  import { countedDenseShape, emitDenseLoopGuard, matchDenseArrayLoop, pairedDenseShape, } from "./dense-array-loops.js";
25
- import { emitCountedLoopLimit, emitCountedLoopSafety, emitPairedLoopSafety, } from "./counted-loops.js";
25
+ import { emitCountedLoopLimit, emitCountedLoopSafety, emitCountedStart, emitPairedLoopSafety, } from "./counted-loops.js";
26
26
  import { emitBytesLoopVersionGuard } from "./bytes-loop-versions.js";
27
27
  import { bytesHeaderAlias } from "./bytes-alias.js";
28
28
  import { mangleLocal } from "../mangle.js";
@@ -35,6 +35,7 @@ import { SPECULATIVE_RANGE, emitSafeIntegerCheck, emitSpeculativeInteger, planPr
35
35
  import { emitConcatInputs, emitMixedConcat, numberPart, stringParts, } from "./string-construction.js";
36
36
  import { emitStringInputs } from "./string-lifetimes.js";
37
37
  import { LOOPS } from "./loop-state.js";
38
+ import { loopAccessesTypedArrays } from "../loop-polls.js";
38
39
  /** A callback loop version copies the loop; keep the copies small. */
39
40
  const MAX_CALLBACK_VERSION_COST = 400;
40
41
  export function emitStmtBody(emitter, s) {
@@ -47,6 +48,17 @@ export function emitStmtBody(emitter, s) {
47
48
  break;
48
49
  }
49
50
  const b = emitter.binding(s.localId);
51
+ if (emitter.borrowedMapGets.has(s.localId) &&
52
+ b.kind === "local" &&
53
+ s.init?.kind === "mapIntrinsic") {
54
+ // The map entry's own reference: no retain now, no release at scope
55
+ // exit (findMapReadBorrows).
56
+ const borrowed = emitBorrowedMapGet(emitter, s.init);
57
+ if (borrowed) {
58
+ B.line(`store ptr ${borrowed.name}, ptr ${b.slot}`);
59
+ break;
60
+ }
61
+ }
50
62
  if (emitter.walkBorrows.has(s.localId) && b.kind === "local") {
51
63
  // A borrowed walk pointer: no retain now, no release at scope exit.
52
64
  const v = s.init === null ? "null" : emitter.emitReadReceiver(s.init).name;
@@ -396,6 +408,10 @@ export function emitStmtBody(emitter, s) {
396
408
  s.length.value === 0 &&
397
409
  emitter.publishedTypes?.containerGuarded(s.arr.type) !== true)
398
410
  break;
411
+ // The literal it follows was constructed with this capacity
412
+ // (reservedArrayLength).
413
+ if (emitter.consumedReserves.delete(s))
414
+ break;
399
415
  const arr = emitBorrowedInput(emitter, s.arr);
400
416
  const length = emitter.emitExpr(s.length);
401
417
  if (s.arr.type.kind !== "array")
@@ -480,7 +496,7 @@ export function emitStmtBody(emitter, s) {
480
496
  const v = emitter.emitExpr(s.value);
481
497
  if (s.arr.type.kind !== "bytes")
482
498
  throw new InternalCompilerError("llvm emitter bug: bytesSet on non-bytes");
483
- emitter.emitBytesSet(s.arr.type.elem, arr.name, idx, v, s.index, s.value, emitter.bytesBounds.has(s), emitter.bytesOwned.has(s));
499
+ emitter.emitBytesSet(s.arr.type.elem, arr.name, idx, v, s.index, s.value, emitter.bytesBounds.has(s), emitter.bytesOwned.has(s), emitter.bytesAliasScopes.get(s));
484
500
  break;
485
501
  }
486
502
  case "fieldSet":
@@ -871,7 +887,7 @@ export function emitStmtBody(emitter, s) {
871
887
  LOOPS.of(emitter).denseLoopsEnabled = false;
872
888
  try {
873
889
  B.startBlock(slow);
874
- emitter.emitStmt(s);
890
+ emitSlowCopy(emitter, s);
875
891
  B.br(done);
876
892
  B.startBlock(fast);
877
893
  LOOPS.of(emitter).denseLoop = dense;
@@ -893,7 +909,7 @@ export function emitStmtBody(emitter, s) {
893
909
  LOOPS.of(emitter).byteWindowsEnabled = false;
894
910
  try {
895
911
  B.startBlock(slow);
896
- emitter.emitStmt(s);
912
+ emitSlowCopy(emitter, s);
897
913
  B.br(done);
898
914
  B.startBlock(fast);
899
915
  emitter.integerRanges = window.ranges;
@@ -939,7 +955,7 @@ export function emitStmtBody(emitter, s) {
939
955
  B.condBr(safe, fast, slow);
940
956
  B.startBlock(slow);
941
957
  LOOPS.of(emitter).countedLoopsEnabled = false;
942
- emitter.emitStmt(s);
958
+ emitSlowCopy(emitter, s);
943
959
  LOOPS.of(emitter).countedLoopsEnabled = true;
944
960
  B.br(countedJoin);
945
961
  B.startBlock(fast);
@@ -975,9 +991,7 @@ export function emitStmtBody(emitter, s) {
975
991
  else if (countedLoop) {
976
992
  integerSlot = B.slot();
977
993
  B.entryAllocas.push(`${integerSlot} = alloca i64 ; integer induction ${emitter.currentLocals.get(countedLoop.localId).name}`);
978
- const startNumber = emitter.emitExpr(countedLoop.start);
979
- const start = B.tmp();
980
- B.line(`${start} = fptosi double ${startNumber.name} to i64`);
994
+ const start = emitCountedStart(emitter, countedLoop.start);
981
995
  B.line(`store i64 ${start}, ptr ${integerSlot}`);
982
996
  emitter.integerLoopBindings.set(countedLoop.localId, {
983
997
  slot: integerSlot,
@@ -990,9 +1004,7 @@ export function emitStmtBody(emitter, s) {
990
1004
  for (const follower of countedLoop.followers) {
991
1005
  const slot = B.slot();
992
1006
  B.entryAllocas.push(`${slot} = alloca i64 ; integer induction ${emitter.currentLocals.get(follower.localId).name}`);
993
- const value = emitter.emitExpr(follower.start);
994
- const followerStart = B.tmp();
995
- B.line(`${followerStart} = fptosi double ${value.name} to i64`);
1007
+ const followerStart = emitCountedStart(emitter, follower.start);
996
1008
  B.line(`store i64 ${followerStart}, ptr ${slot}`);
997
1009
  followerSlots.push(slot);
998
1010
  emitter.integerLoopBindings.set(follower.localId, {
@@ -1008,9 +1020,7 @@ export function emitStmtBody(emitter, s) {
1008
1020
  for (const counter of [pairedLoop.low, pairedLoop.high]) {
1009
1021
  const slot = B.slot();
1010
1022
  B.entryAllocas.push(`${slot} = alloca i64 ; integer induction ${emitter.currentLocals.get(counter.localId).name}`);
1011
- const value = emitter.emitExpr(counter.start);
1012
- const start = B.tmp();
1013
- B.line(`${start} = fptosi double ${value.name} to i64`);
1023
+ const start = emitCountedStart(emitter, counter.start);
1014
1024
  B.line(`store i64 ${start}, ptr ${slot}`);
1015
1025
  pairedSlots.push(slot);
1016
1026
  const dense = LOOPS.of(emitter).denseLoop;
@@ -1057,9 +1067,61 @@ export function emitStmtBody(emitter, s) {
1057
1067
  B.line(`store ptr ${fresh}, ptr ${slot}`);
1058
1068
  }
1059
1069
  };
1060
- const workerBudget = emitter.workerLoopBudget(s);
1070
+ // A counted loop over typed arrays, or a loop to a typed array's
1071
+ // length, polls between blocks of WORKER_POLL_BLOCK iterations instead
1072
+ // of counting a budget in its body: the inner loop over a block then
1073
+ // has no exit besides its own bound, which LLVM can vectorize. A typed
1074
+ // array's length is fixed, so each block can take it as its limit when
1075
+ // the loop does not assign the array's binding.
1076
+ const stripMined = capturedLets.length === 0 &&
1077
+ integerSlot !== null &&
1078
+ ((countedLoop !== null &&
1079
+ countedLimit !== null &&
1080
+ Math.abs(countedLoop.step) * WORKER_POLL_BLOCK <= 2 ** 52) ||
1081
+ (integerLoop !== null && integerArrayLoop === null && integerLoop.stableReceiver)) &&
1082
+ emitter.workerLoopPolls(s) &&
1083
+ loopAccessesTypedArrays(s);
1084
+ const workerBudget = stripMined ? null : emitter.workerLoopBudget(s);
1085
+ // One slot for every copy of the loop: a speculative copy resumes an
1086
+ // iteration in another copy's body, which then reads this bound.
1087
+ let blockBound = null;
1088
+ if (stripMined) {
1089
+ blockBound = B.slot();
1090
+ B.entryAllocas.push(`${blockBound} = alloca ${countedLoop ? "i64" : emitter.sizeType} ; cancellation poll block bound`);
1091
+ }
1061
1092
  freshenBindings();
1062
1093
  emitter.emitLoopCopies(s, capturedLets.length === 0, le, (exit) => {
1094
+ if (stripMined) {
1095
+ const counter = countedLoop
1096
+ ? {
1097
+ slot: integerSlot,
1098
+ type: "i64",
1099
+ signed: true,
1100
+ step: countedLoop.step,
1101
+ followers: countedLoop.followers.map((f, i) => ({
1102
+ slot: followerSlots[i],
1103
+ step: f.step,
1104
+ })),
1105
+ limit: () => countedLimit,
1106
+ }
1107
+ : {
1108
+ slot: integerSlot,
1109
+ type: emitter.sizeType,
1110
+ signed: false,
1111
+ step: 1,
1112
+ followers: [],
1113
+ limit: () => {
1114
+ const receiver = emitter.emitStableReceiver(integerLoop.limitReceiver, []);
1115
+ const lenPtr = B.tmp();
1116
+ const len = B.tmp();
1117
+ B.line(`${lenPtr} = getelementptr inbounds %ScrBytes, ptr ${receiver.name}, i64 0, i32 1`);
1118
+ B.line(`${len} = load ${emitter.sizeType}, ptr ${lenPtr}${bytesHeaderAlias(emitter)}`);
1119
+ return len;
1120
+ },
1121
+ };
1122
+ emitStripMinedCountedLoop(emitter, s, counter, blockBound, exit);
1123
+ return;
1124
+ }
1063
1125
  const lc = B.newLabel("loop.c");
1064
1126
  const lb = B.newLabel("loop.b");
1065
1127
  const lu = s.update || capturedLets.length > 0 || workerBudget !== null ? B.newLabel("loop.u") : lc;
@@ -1906,7 +1968,7 @@ function emitCallbackVersionedLoop(emitter, s, bindings) {
1906
1968
  emitter.callbackVersioning.add(s);
1907
1969
  try {
1908
1970
  B.startBlock(slow);
1909
- emitter.emitStmt(s);
1971
+ emitSlowCopy(emitter, s);
1910
1972
  B.br(done);
1911
1973
  B.startBlock(fast);
1912
1974
  for (const { ref } of bindings)
@@ -1921,41 +1983,144 @@ function emitCallbackVersionedLoop(emitter, s, bindings) {
1921
1983
  }
1922
1984
  B.startBlock(done);
1923
1985
  }
1986
+ /** The copy of a versioned loop that runs when its guard fails. Its loops
1987
+ * get no speculative or int32 kind copies, which would emit each loop again
1988
+ * for a path that rarely runs. Proven integer loops, which emit one copy,
1989
+ * are kept. A typed-array version whose guard requires thread-owned
1990
+ * storage does not use it (emitVersionedLoop). */
1991
+ function emitSlowCopy(emitter, s) {
1992
+ const copies = emitter.loopCopiesEnabled;
1993
+ emitter.loopCopiesEnabled = false;
1994
+ try {
1995
+ emitter.emitStmt(s);
1996
+ }
1997
+ finally {
1998
+ emitter.loopCopiesEnabled = copies;
1999
+ }
2000
+ }
1924
2001
  /** Entries in a row whose fast copy bailed before a speculative loop site
1925
2002
  * stops trying it. */
1926
2003
  const SPECULATION_BAILS = 8;
2004
+ /** The attachment of each scoped access in a version's fast copy: the
2005
+ * scope of its own view, and no alias with the scopes of the other views,
2006
+ * whose bytes the guard proved disjoint. The scopes are named after the
2007
+ * function and the version, so every copy of a loop has its own, and
2008
+ * written inline (string-named scopes need no numbered metadata). Also
2009
+ * the scopes, which each fast copy declares on entry (declareAliasScopes). */
2010
+ function bytesAliasScopes(emitter, scopes) {
2011
+ const version = emitter.aliasScopedVersions++;
2012
+ const name = emitter.currentFunctionName.replace(/[^A-Za-z0-9_.$%]/g, "_");
2013
+ const domain = '!{!"scriptc typed-array views"}';
2014
+ const scope = (receiver) => `!{!"${name}.${version}.${receiver}", ${domain}}`;
2015
+ const attachments = new Map();
2016
+ for (const receiver of scopes.receivers) {
2017
+ const others = scopes.receivers.filter((other) => other !== receiver).map(scope);
2018
+ attachments.set(receiver, `, !alias.scope !{${scope(receiver)}}, !noalias !{${others.join(", ")}}`);
2019
+ }
2020
+ const result = new Map();
2021
+ for (const [node, receiver] of scopes.nodes)
2022
+ result.set(node, attachments.get(receiver));
2023
+ return { attachments: result, scopes: scopes.receivers.map(scope) };
2024
+ }
2025
+ /** Declares a version's scopes where a fast copy starts. The guard proves
2026
+ * the views disjoint for this entry only: an enclosing loop may pass other
2027
+ * views on its next pass (`[cur, next] = [next, cur]`). A declared scope
2028
+ * holds from its declaration, and LLVM gives each copy of the declaration
2029
+ * its own scopes when it unrolls or duplicates the enclosing code, so the
2030
+ * no-alias facts of one entry never apply to the accesses of another. */
2031
+ function declareAliasScopes(emitter, scopes) {
2032
+ if (scopes.length === 0)
2033
+ return;
2034
+ emitter.declare("declare void @llvm.experimental.noalias.scope.decl(metadata)");
2035
+ for (const scope of scopes)
2036
+ emitter.B.line(`call void @llvm.experimental.noalias.scope.decl(metadata !{${scope}})`);
2037
+ }
1927
2038
  /** Emit a loop's condition, body and update through `emitCopy`, twice
1928
2039
  * when speculative-integers.ts plans a fast integer copy. Both copies
1929
2040
  * share the loop's setup and exit; the ordinary copy comes first so the
1930
2041
  * fast copy is only emitted when every resume point exists. */
1931
2042
  /** A typed-array loop version: the guard, then the checked copy, which
1932
2043
  * runs whenever the guard fails, and the copy whose accesses the guard
1933
- * proves in bounds (or thread-owned). */
2044
+ * proves in bounds (or thread-owned). In worker programs a version that
2045
+ * proves both also has a copy for views with shared storage, in bounds but
2046
+ * not owned. */
1934
2047
  function emitVersionedLoop(emitter, s, version) {
1935
2048
  const B = emitter.B;
1936
2049
  const fast = B.newLabel("bytes.version.fast"), slow = B.newLabel("bytes.version.slow"), done = B.newLabel("bytes.version.done");
1937
- emitBytesLoopVersionGuard(emitter, version, fast, slow);
1938
- const originalBounds = emitter.bytesBounds, originalOwned = emitter.bytesOwned, originalRanges = emitter.integerRanges;
2050
+ const unitsFast = version.unitsReceiver !== null ? B.newLabel("bytes.version.fast.units") : undefined;
2051
+ const sharedFast = version.sharedCopy && unitsFast === undefined
2052
+ ? B.newLabel("bytes.version.fast.shared")
2053
+ : undefined;
2054
+ const guard = emitBytesLoopVersionGuard(emitter, version, fast, slow, unitsFast, sharedFast);
2055
+ const units = guard?.units ?? null;
2056
+ const originalBounds = emitter.bytesBounds, originalOwned = emitter.bytesOwned, originalRanges = emitter.integerRanges, originalUnitReads = emitter.stringUnitReads, originalLengthReads = emitter.stringLengthReads, originalScopes = emitter.bytesAliasScopes;
1939
2057
  LOOPS.of(emitter).bytesLoopVersioning.add(s);
1940
2058
  try {
1941
2059
  B.startBlock(slow);
1942
- emitter.emitStmt(s);
2060
+ // A guard that requires thread-owned storage fails for every view of
2061
+ // shared memory, which worker programs pass routinely: that checked
2062
+ // copy keeps its loops' speculative and int32 kind copies.
2063
+ if (version.ownedReceivers.length > 0)
2064
+ emitter.emitStmt(s);
2065
+ else
2066
+ emitSlowCopy(emitter, s);
1943
2067
  B.br(done);
1944
- B.startBlock(fast);
1945
- emitter.bytesBounds = new Set([...originalBounds, ...version.bounds]);
1946
2068
  if (version.owned.size > 0)
1947
2069
  emitter.bytesOwned = new Set([...originalOwned, ...version.owned]);
1948
2070
  if (version.ranges.size > 0)
1949
2071
  emitter.integerRanges = new Map([...originalRanges, ...version.ranges]);
2072
+ // Both fast copies run under the guard's span test, so they share the
2073
+ // version's scopes, and each declares them on entry.
2074
+ const scoped = version.scopes && emitter.debug === null ? bytesAliasScopes(emitter, version.scopes) : null;
2075
+ if (scoped)
2076
+ emitter.bytesAliasScopes = new Map([...originalScopes, ...scoped.attachments]);
1950
2077
  if (version.counted?.guarded || version.paired?.loop.guarded)
1951
2078
  LOOPS.of(emitter).provenCountedGuards.add(s);
2079
+ B.startBlock(fast);
2080
+ declareAliasScopes(emitter, scoped?.scopes ?? []);
2081
+ emitter.bytesBounds = new Set([...originalBounds, ...version.bounds]);
2082
+ // Both fast copies read the string's length the guard took.
2083
+ const length = guard?.length;
2084
+ if (length != null && version.unitLengths.size > 0)
2085
+ emitter.stringLengthReads = new Map([
2086
+ ...originalLengthReads,
2087
+ ...[...version.unitLengths].map((node) => [node, length]),
2088
+ ]);
1952
2089
  emitter.emitStmt(s);
1953
2090
  B.br(done);
2091
+ if (sharedFast !== undefined) {
2092
+ // The bounds hold and a view has shared storage: the accesses skip
2093
+ // their bounds checks and stay shared-safe, without alias scopes
2094
+ // (which worker programs give only thread-owned views).
2095
+ B.startBlock(sharedFast);
2096
+ emitter.bytesOwned = originalOwned;
2097
+ emitter.bytesAliasScopes = originalScopes;
2098
+ emitter.emitStmt(s);
2099
+ B.br(done);
2100
+ }
2101
+ if (unitsFast !== undefined && units !== null) {
2102
+ // The string reads take the receiver's UTF-16 units.
2103
+ B.startBlock(unitsFast);
2104
+ declareAliasScopes(emitter, scoped?.scopes ?? []);
2105
+ emitter.bytesBounds = new Set([
2106
+ ...originalBounds,
2107
+ ...[...version.bounds].filter((node) => !version.stringReads.has(node)),
2108
+ ]);
2109
+ emitter.stringUnitReads = new Map([
2110
+ ...originalUnitReads,
2111
+ ...[...version.stringReads].map((node) => [node, units]),
2112
+ ]);
2113
+ emitter.emitStmt(s);
2114
+ B.br(done);
2115
+ }
1954
2116
  }
1955
2117
  finally {
1956
2118
  emitter.bytesBounds = originalBounds;
1957
2119
  emitter.bytesOwned = originalOwned;
1958
2120
  emitter.integerRanges = originalRanges;
2121
+ emitter.stringUnitReads = originalUnitReads;
2122
+ emitter.stringLengthReads = originalLengthReads;
2123
+ emitter.bytesAliasScopes = originalScopes;
1959
2124
  LOOPS.of(emitter).provenCountedGuards.delete(s);
1960
2125
  LOOPS.of(emitter).bytesLoopVersioning.delete(s);
1961
2126
  }
@@ -1964,6 +2129,7 @@ function emitVersionedLoop(emitter, s, version) {
1964
2129
  export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
1965
2130
  const plan = allowed &&
1966
2131
  emitter.speculativeLoopsEnabled &&
2132
+ emitter.loopCopiesEnabled &&
1967
2133
  emitter.speculation === null &&
1968
2134
  emitter.speculationResume === null
1969
2135
  ? planSpeculativeLoop(loop, (id) => emitter.speculativeLocal(id), (id) => emitter.integerLoopBindings.has(id) || emitter.int32Locals.has(id), (e) => {
@@ -1972,7 +2138,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
1972
2138
  range !== null &&
1973
2139
  range.min >= -Number.MAX_SAFE_INTEGER &&
1974
2140
  range.max <= Number.MAX_SAFE_INTEGER);
1975
- }, (id) => emitter.speculativeLocal(id) || emitter.speculativeInvariantGlobal(id))
2141
+ }, (id) => emitter.speculativeLocal(id) || emitter.speculativeInvariantGlobal(id), emitter.speculationContext())
1976
2142
  : null;
1977
2143
  if (!plan) {
1978
2144
  const ordinary = (exit) => {
@@ -1984,6 +2150,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
1984
2150
  };
1985
2151
  const kinds = allowed &&
1986
2152
  emitter.speculativeLoopsEnabled &&
2153
+ emitter.loopCopiesEnabled &&
1987
2154
  emitter.int32Slots.checkedInt32Arrays.size > 0 &&
1988
2155
  emitter.int32Kinds === null &&
1989
2156
  emitter.speculation === null &&
@@ -2030,6 +2197,18 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
2030
2197
  B.line(`${both} = and i1 ${ok}, ${trying}`);
2031
2198
  ok = both;
2032
2199
  }
2200
+ // Hoisted leaves live in locals of their own, which the resume copy of
2201
+ // their write reads (see SpeculativeValue).
2202
+ for (const { leaves } of plan.values.values())
2203
+ for (const leaf of leaves) {
2204
+ emitter.currentLocals.set(leaf.localId, {
2205
+ id: leaf.localId,
2206
+ name: "speculated leaf",
2207
+ type: leaf.expr.type,
2208
+ mutable: true,
2209
+ });
2210
+ B.entryAllocas.push(`${emitter.binding(leaf.localId).slot} = alloca double ; speculated leaf`);
2211
+ }
2033
2212
  const fast = B.newLabel("spec.fast"), slow = B.newLabel("spec.slow");
2034
2213
  B.condBr(ok, fast, slow);
2035
2214
  const resume = new Map();
@@ -2056,6 +2235,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
2056
2235
  throw new InternalCompilerError("llvm emitter bug: speculative loop copy without a header");
2057
2236
  B.startBlock(B.newLabel("spec.tail"));
2058
2237
  emitter.speculationResume = resume;
2238
+ emitter.speculationResumeValues = plan.values;
2059
2239
  emitter.speculationHeader = () => {
2060
2240
  B.br(header);
2061
2241
  B.startBlock(B.newLabel("spec.unused"));
@@ -2065,6 +2245,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
2065
2245
  }
2066
2246
  finally {
2067
2247
  emitter.speculationResume = null;
2248
+ emitter.speculationResumeValues = null;
2068
2249
  emitter.speculationHeader = null;
2069
2250
  }
2070
2251
  B.startBlock(fast);
@@ -2114,6 +2295,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
2114
2295
  deferred,
2115
2296
  bails,
2116
2297
  ran,
2298
+ values: plan.values,
2117
2299
  };
2118
2300
  try {
2119
2301
  const leave = B.newLabel("spec.leave");
@@ -2254,6 +2436,80 @@ function emitInt32KindLoop(emitter, plan, exit, ordinary) {
2254
2436
  }
2255
2437
  /** At the top of a loop copy's header: lets a speculative loop find its
2256
2438
  * ordinary copy's header, and keeps its third copy out of the loop. */
2439
+ /** Iterations between cancellation polls of a strip-mined counted loop. */
2440
+ const WORKER_POLL_BLOCK = 64;
2441
+ /** A counted `for` loop of a worker program as blocks of WORKER_POLL_BLOCK
2442
+ * iterations, with the cancellation poll between blocks: the outer header
2443
+ * tests the counter against the loop's limit, each block runs the body up
2444
+ * to the nearer of the limit and WORKER_POLL_BLOCK steps on, and the poll
2445
+ * follows the block. It polls as often as the budget it replaces, and the
2446
+ * inner loop's only exit besides `break` and `return` is its bound. */
2447
+ function emitStripMinedCountedLoop(emitter, s, counter, boundSlot, exit) {
2448
+ const B = emitter.B;
2449
+ const { slot, type, signed, step } = counter;
2450
+ const ascending = step > 0;
2451
+ const compare = !signed ? "ult" : ascending ? "slt" : "sgt";
2452
+ const saturating = `llvm.${signed ? "sadd" : "uadd"}.sat.${type}`;
2453
+ const nearer = `llvm.${!signed ? "umin" : ascending ? "smin" : "smax"}.${type}`;
2454
+ const wrap = signed ? "nsw" : "nuw";
2455
+ const lc = B.newLabel("loop.c");
2456
+ const block = B.newLabel("loop.block");
2457
+ const bc = B.newLabel("loop.bc");
2458
+ const lb = B.newLabel("loop.b");
2459
+ const lu = B.newLabel("loop.u");
2460
+ const poll = B.newLabel("loop.poll");
2461
+ emitter.declare(`declare ${type} @${saturating}(${type}, ${type})`);
2462
+ emitter.declare(`declare ${type} @${nearer}(${type}, ${type})`);
2463
+ B.br(lc);
2464
+ B.startBlock(lc);
2465
+ enterLoopHeader(emitter, lc);
2466
+ const start = B.tmp();
2467
+ const open = B.tmp();
2468
+ B.line(`${start} = load ${type}, ptr ${slot}`);
2469
+ const limit = counter.limit();
2470
+ B.line(`${open} = icmp ${compare} ${type} ${start}, ${limit}`);
2471
+ B.condBr(open, block, exit);
2472
+ B.startBlock(block);
2473
+ const stepped = B.tmp();
2474
+ const bound = B.tmp();
2475
+ B.line(`${stepped} = call ${type} @${saturating}(${type} ${start}, ${type} ${step * WORKER_POLL_BLOCK})`);
2476
+ B.line(`${bound} = call ${type} @${nearer}(${type} ${stepped}, ${type} ${limit})`);
2477
+ B.line(`store ${type} ${bound}, ptr ${boundSlot}`);
2478
+ B.br(bc);
2479
+ B.startBlock(bc);
2480
+ const index = B.tmp();
2481
+ const end = B.tmp();
2482
+ const inBlock = B.tmp();
2483
+ B.line(`${index} = load ${type}, ptr ${slot}`);
2484
+ B.line(`${end} = load ${type}, ptr ${boundSlot}`);
2485
+ B.line(`${inBlock} = icmp ${compare} ${type} ${index}, ${end}`);
2486
+ B.condBr(inBlock, lb, poll);
2487
+ B.startBlock(lb);
2488
+ emitter.jumpTargets.push({
2489
+ kind: "loop",
2490
+ brkLabel: exit,
2491
+ contLabel: lu,
2492
+ labels: s.labels,
2493
+ frameDepth: emitter.frames.length,
2494
+ scopeDepth: emitter.scopes.length,
2495
+ finallyDepth: emitter.finallyStack.length,
2496
+ });
2497
+ emitter.emitBlock(s.body);
2498
+ emitter.jumpTargets.pop();
2499
+ B.br(lu);
2500
+ B.startBlock(lu);
2501
+ for (const { slot: stepSlot, step: by } of [{ slot, step }, ...counter.followers]) {
2502
+ const old = B.tmp();
2503
+ const next = B.tmp();
2504
+ B.line(`${old} = load ${type}, ptr ${stepSlot}`);
2505
+ B.line(`${next} = add ${wrap} ${type} ${old}, ${by}`);
2506
+ B.line(`store ${type} ${next}, ptr ${stepSlot}`);
2507
+ }
2508
+ B.br(bc);
2509
+ B.startBlock(poll);
2510
+ emitter.emitWorkerPoll();
2511
+ B.br(lc);
2512
+ }
2257
2513
  function enterLoopHeader(emitter, header) {
2258
2514
  const dispatch = emitter.speculationHeader;
2259
2515
  emitter.speculationHeader = null;
@@ -2265,7 +2521,7 @@ function enterLoopHeader(emitter, header) {
2265
2521
  * where an exception leaves the function (no enclosing try or finally, no
2266
2522
  * coroutine frame), so no handler reads the stale double. */
2267
2523
  function planProvenLoop(emitter, loop) {
2268
- if (loop.kind !== "for" ||
2524
+ if (loop.kind === "doWhile" ||
2269
2525
  !emitter.speculativeLoopsEnabled ||
2270
2526
  emitter.speculation !== null ||
2271
2527
  emitter.speculationResume !== null ||
@@ -2341,9 +2597,22 @@ export function emitSpeculativeWrite(emitter, s, resume) {
2341
2597
  // at once: a bailing path then owns nothing, and reads have no effect
2342
2598
  // whose reordering before the arithmetic could be observed.
2343
2599
  const reads = new Map();
2344
- if (target.value !== null) {
2600
+ const rewritten = emitter.speculation.values?.get(s);
2601
+ const value = rewritten?.value ?? target.value;
2602
+ if (rewritten !== undefined) {
2603
+ // Hoisted leaves run first, in the write's order, and keep their
2604
+ // doubles for the resume copy.
2605
+ emitter.frames.push([]);
2606
+ for (const leaf of rewritten.leaves) {
2607
+ const evaluated = emitter.emitExpr(leaf.expr);
2608
+ B.line(`store double ${evaluated.name}, ptr ${emitter.binding(leaf.localId).slot}`);
2609
+ reads.set(leaf.ref, evaluated);
2610
+ }
2611
+ emitter.releaseTemps(emitter.frames.pop());
2612
+ }
2613
+ if (value !== null) {
2345
2614
  emitter.frames.push([]);
2346
- for (const read of speculativeReads(target.value))
2615
+ for (const read of speculativeReads(value))
2347
2616
  reads.set(read, emitter.emitExpr(read));
2348
2617
  emitter.releaseTemps(emitter.frames.pop());
2349
2618
  }
@@ -2360,7 +2629,7 @@ export function emitSpeculativeWrite(emitter, s, resume) {
2360
2629
  bail(outside);
2361
2630
  }
2362
2631
  else
2363
- result = emitSpeculativeInteger(emitter, target.value, bail, reads, resume === undefined);
2632
+ result = emitSpeculativeInteger(emitter, value, bail, reads, resume === undefined);
2364
2633
  // Speculable values read only numbers past this point.
2365
2634
  if (emitter.frames.pop().length > 0)
2366
2635
  throw new InternalCompilerError("llvm emitter bug: speculative write owns a temporary");