@scriptc/compiler 0.4.7 → 0.4.8

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 (776) hide show
  1. package/ambient/node-fallback/child_process.d.ts +71 -22
  2. package/ambient/node-fallback/crypto.d.ts +15 -7
  3. package/ambient/node-fallback/events.d.ts +23 -5
  4. package/ambient/node-fallback/fs.d.ts +3 -2
  5. package/ambient/node-fallback/http.d.ts +23 -17
  6. package/ambient/node-fallback/https.d.ts +5 -2
  7. package/ambient/node-fallback/net.d.ts +6 -0
  8. package/ambient/node-fallback/os.d.ts +11 -1
  9. package/ambient/node-fallback/path-posix.d.ts +6 -0
  10. package/ambient/node-fallback/path-win32.d.ts +5 -0
  11. package/ambient/node-fallback/path.d.ts +2 -0
  12. package/ambient/node-fallback/zlib.d.ts +31 -2
  13. package/ambient/scriptc-node-fallback.d.ts +37 -7
  14. package/ambient/scriptc.d.ts +7 -2
  15. package/dist/backend/executable-features.js +11 -3
  16. package/dist/backend/executable-features.js.map +1 -1
  17. package/dist/backend/library-pack.d.ts +6 -0
  18. package/dist/backend/library-pack.js +17 -6
  19. package/dist/backend/library-pack.js.map +1 -1
  20. package/dist/backend/library-pack.test.d.ts +1 -0
  21. package/dist/backend/library-pack.test.js +28 -0
  22. package/dist/backend/library-pack.test.js.map +1 -0
  23. package/dist/backend/linker.d.ts +9 -2
  24. package/dist/backend/linker.js +190 -32
  25. package/dist/backend/linker.js.map +1 -1
  26. package/dist/backend/lld.d.ts +8 -4
  27. package/dist/backend/lld.js +19 -13
  28. package/dist/backend/lld.js.map +1 -1
  29. package/dist/backend/lld.test.js +3 -1
  30. package/dist/backend/lld.test.js.map +1 -1
  31. package/dist/backend/llvm/alloc.d.ts +15 -2
  32. package/dist/backend/llvm/alloc.js +172 -36
  33. package/dist/backend/llvm/alloc.js.map +1 -1
  34. package/dist/backend/llvm/alloc.test.js +69 -1
  35. package/dist/backend/llvm/alloc.test.js.map +1 -1
  36. package/dist/backend/llvm/arenas.d.ts +17 -4
  37. package/dist/backend/llvm/arenas.js +105 -10
  38. package/dist/backend/llvm/arenas.js.map +1 -1
  39. package/dist/backend/llvm/arenas.test.js +229 -0
  40. package/dist/backend/llvm/arenas.test.js.map +1 -1
  41. package/dist/backend/llvm/bytes-alias.js +10 -1
  42. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  43. package/dist/backend/llvm/bytes-headers.js +6 -0
  44. package/dist/backend/llvm/bytes-headers.js.map +1 -1
  45. package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
  46. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  47. package/dist/backend/llvm/call-lifetimes.js +10 -0
  48. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  49. package/dist/backend/llvm/classes.d.ts +16 -9
  50. package/dist/backend/llvm/classes.js +142 -37
  51. package/dist/backend/llvm/classes.js.map +1 -1
  52. package/dist/backend/llvm/classes.test.js +42 -0
  53. package/dist/backend/llvm/classes.test.js.map +1 -1
  54. package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
  55. package/dist/backend/llvm/cpu-dispatch.js +31 -7
  56. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  57. package/dist/backend/llvm/dyn.d.ts +12 -3
  58. package/dist/backend/llvm/dyn.js +31 -7
  59. package/dist/backend/llvm/dyn.js.map +1 -1
  60. package/dist/backend/llvm/emit-function.js +67 -4
  61. package/dist/backend/llvm/emit-function.js.map +1 -1
  62. package/dist/backend/llvm/emit-module.js +90 -39
  63. package/dist/backend/llvm/emit-module.js.map +1 -1
  64. package/dist/backend/llvm/emit-module.test.d.ts +1 -0
  65. package/dist/backend/llvm/emit-module.test.js +52 -0
  66. package/dist/backend/llvm/emit-module.test.js.map +1 -0
  67. package/dist/backend/llvm/emit-statements.js +99 -15
  68. package/dist/backend/llvm/emit-statements.js.map +1 -1
  69. package/dist/backend/llvm/emitter.d.ts +113 -8
  70. package/dist/backend/llvm/emitter.js +438 -67
  71. package/dist/backend/llvm/emitter.js.map +1 -1
  72. package/dist/backend/llvm/emitter.test.js +31 -3
  73. package/dist/backend/llvm/emitter.test.js.map +1 -1
  74. package/dist/backend/llvm/expr-async.js +19 -1
  75. package/dist/backend/llvm/expr-async.js.map +1 -1
  76. package/dist/backend/llvm/expr-bytes.js +16 -1
  77. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  78. package/dist/backend/llvm/expr-calls.js +18 -2
  79. package/dist/backend/llvm/expr-calls.js.map +1 -1
  80. package/dist/backend/llvm/expr-dynamic.js +31 -10
  81. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  82. package/dist/backend/llvm/expr-primitives.js +31 -3
  83. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  84. package/dist/backend/llvm/expr-records.d.ts +1 -1
  85. package/dist/backend/llvm/expr-records.js +124 -56
  86. package/dist/backend/llvm/expr-records.js.map +1 -1
  87. package/dist/backend/llvm/expr-stream-bridges.js +17 -0
  88. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  89. package/dist/backend/llvm/js-groups.d.ts +21 -0
  90. package/dist/backend/llvm/js-groups.js +277 -0
  91. package/dist/backend/llvm/js-groups.js.map +1 -0
  92. package/dist/backend/llvm/js-ic.d.ts +19 -1
  93. package/dist/backend/llvm/js-ic.js +96 -23
  94. package/dist/backend/llvm/js-ic.js.map +1 -1
  95. package/dist/backend/llvm/lib-dispatch.js +132 -1
  96. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  97. package/dist/backend/llvm/lib-network.js +33 -6
  98. package/dist/backend/llvm/lib-network.js.map +1 -1
  99. package/dist/backend/llvm/lib-process.js +44 -3
  100. package/dist/backend/llvm/lib-process.js.map +1 -1
  101. package/dist/backend/llvm/lib-shared.js +69 -2
  102. package/dist/backend/llvm/lib-shared.js.map +1 -1
  103. package/dist/backend/llvm/local-union-storage.test.js +32 -0
  104. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  105. package/dist/backend/llvm/loop-state.js +7 -2
  106. package/dist/backend/llvm/loop-state.js.map +1 -1
  107. package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
  108. package/dist/backend/llvm/map-entry-fusion.js +3 -3
  109. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  110. package/dist/backend/llvm/map-number-lookup.test.js +6 -6
  111. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  112. package/dist/backend/llvm/nullable-unions.js +7 -6
  113. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  114. package/dist/backend/llvm/nullable-unions.test.js +4 -1
  115. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  116. package/dist/backend/llvm/receivers.js +3 -0
  117. package/dist/backend/llvm/receivers.js.map +1 -1
  118. package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
  119. package/dist/backend/llvm/record-entry-fusion.js +217 -0
  120. package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
  121. package/dist/backend/llvm/record-results.d.ts +5 -2
  122. package/dist/backend/llvm/record-results.js +13 -12
  123. package/dist/backend/llvm/record-results.js.map +1 -1
  124. package/dist/backend/llvm/record-views.js +12 -6
  125. package/dist/backend/llvm/record-views.js.map +1 -1
  126. package/dist/backend/llvm/reference-effects.js +1 -0
  127. package/dist/backend/llvm/reference-effects.js.map +1 -1
  128. package/dist/backend/llvm/reference-writes.js +3 -0
  129. package/dist/backend/llvm/reference-writes.js.map +1 -1
  130. package/dist/backend/llvm/region-ir.js +1 -0
  131. package/dist/backend/llvm/region-ir.js.map +1 -1
  132. package/dist/backend/llvm/region-sites.d.ts +18 -0
  133. package/dist/backend/llvm/region-sites.js +79 -1
  134. package/dist/backend/llvm/region-sites.js.map +1 -1
  135. package/dist/backend/llvm/runtime-registries.test.js +53 -6
  136. package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
  137. package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
  138. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  139. package/dist/backend/llvm/shapes.d.ts +33 -3
  140. package/dist/backend/llvm/shapes.js +183 -13
  141. package/dist/backend/llvm/shapes.js.map +1 -1
  142. package/dist/backend/llvm/stack-objects.d.ts +1 -2
  143. package/dist/backend/llvm/stack-objects.js +8 -5
  144. package/dist/backend/llvm/stack-objects.js.map +1 -1
  145. package/dist/backend/llvm/walkers.d.ts +12 -0
  146. package/dist/backend/llvm/walkers.js +46 -2
  147. package/dist/backend/llvm/walkers.js.map +1 -1
  148. package/dist/backend/may-throw.js +12 -2
  149. package/dist/backend/may-throw.js.map +1 -1
  150. package/dist/backend/may-throw.test.js +13 -0
  151. package/dist/backend/may-throw.test.js.map +1 -1
  152. package/dist/backend/native/contracts.d.ts +48 -8
  153. package/dist/backend/native/executable.js +55 -13
  154. package/dist/backend/native/executable.js.map +1 -1
  155. package/dist/backend/native/helper-identity-record.d.ts +11 -0
  156. package/dist/backend/native/helper-identity-record.js +76 -0
  157. package/dist/backend/native/helper-identity-record.js.map +1 -0
  158. package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
  159. package/dist/backend/native/helper-identity-record.test.js +101 -0
  160. package/dist/backend/native/helper-identity-record.test.js.map +1 -0
  161. package/dist/backend/native/library.js +9 -1
  162. package/dist/backend/native/library.js.map +1 -1
  163. package/dist/backend/native/runtime-inputs.js +4 -1
  164. package/dist/backend/native/runtime-inputs.js.map +1 -1
  165. package/dist/backend/native/vendor.d.ts +1 -1
  166. package/dist/backend/native/vendor.js +1 -1
  167. package/dist/backend/native/vendor.js.map +1 -1
  168. package/dist/backend/native-codegen-core.d.ts +13 -10
  169. package/dist/backend/native-codegen-core.js +26 -13
  170. package/dist/backend/native-codegen-core.js.map +1 -1
  171. package/dist/backend/native-codegen.js +27 -8
  172. package/dist/backend/native-codegen.js.map +1 -1
  173. package/dist/backend/native-codegen.test.js +110 -14
  174. package/dist/backend/native-codegen.test.js.map +1 -1
  175. package/dist/backend/native-link-info-core.d.ts +37 -8
  176. package/dist/backend/native-link-info-core.js.map +1 -1
  177. package/dist/backend/runtime-pack-core.d.ts +17 -2
  178. package/dist/backend/runtime-pack-core.js +18 -3
  179. package/dist/backend/runtime-pack-core.js.map +1 -1
  180. package/dist/backend/runtime-pack-targets.test.js +1 -1
  181. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  182. package/dist/backend/runtime-pack.test.js +211 -2
  183. package/dist/backend/runtime-pack.test.js.map +1 -1
  184. package/dist/backend/tree-classes.d.ts +42 -0
  185. package/dist/backend/tree-classes.js +723 -0
  186. package/dist/backend/tree-classes.js.map +1 -0
  187. package/dist/backend/tree-classes.test.d.ts +1 -0
  188. package/dist/backend/tree-classes.test.js +338 -0
  189. package/dist/backend/tree-classes.test.js.map +1 -0
  190. package/dist/backend/vendor-archives.d.ts +5 -1
  191. package/dist/backend/vendor-archives.js +51 -7
  192. package/dist/backend/vendor-archives.js.map +1 -1
  193. package/dist/backend/vendor-inputs.d.ts +25 -4
  194. package/dist/backend/vendor-inputs.js +68 -4
  195. package/dist/backend/vendor-inputs.js.map +1 -1
  196. package/dist/backend/vendor-inputs.test.js +35 -1
  197. package/dist/backend/vendor-inputs.test.js.map +1 -1
  198. package/dist/backend/warm-cache.js +1 -1
  199. package/dist/backend/warm-cache.js.map +1 -1
  200. package/dist/compat/fetch-profile.js +2 -2
  201. package/dist/coverage/report.js +47 -0
  202. package/dist/coverage/report.js.map +1 -1
  203. package/dist/coverage/surface-manifest.js +1 -1
  204. package/dist/diagnostics/codes.d.ts +8 -0
  205. package/dist/diagnostics/codes.js +8 -0
  206. package/dist/diagnostics/codes.js.map +1 -1
  207. package/dist/diagnostics/diagnostic.d.ts +27 -9
  208. package/dist/diagnostics/diagnostic.js +60 -19
  209. package/dist/diagnostics/diagnostic.js.map +1 -1
  210. package/dist/diagnostics/envelope.d.ts +18 -0
  211. package/dist/diagnostics/envelope.js.map +1 -1
  212. package/dist/executable/executable-cache.d.ts +21 -2
  213. package/dist/executable/executable-cache.js +21 -1
  214. package/dist/executable/executable-cache.js.map +1 -1
  215. package/dist/executable/executable-cache.test.js +123 -1
  216. package/dist/executable/executable-cache.test.js.map +1 -1
  217. package/dist/executable/prepare.js +199 -248
  218. package/dist/executable/prepare.js.map +1 -1
  219. package/dist/frontend/analysis.js +200 -18
  220. package/dist/frontend/analysis.js.map +1 -1
  221. package/dist/frontend/builtin-modules.d.ts +4 -0
  222. package/dist/frontend/builtin-modules.js +10 -0
  223. package/dist/frontend/builtin-modules.js.map +1 -1
  224. package/dist/frontend/early-errors.d.ts +12 -2
  225. package/dist/frontend/early-errors.js +535 -4
  226. package/dist/frontend/early-errors.js.map +1 -1
  227. package/dist/frontend/early-errors.test.js +165 -0
  228. package/dist/frontend/early-errors.test.js.map +1 -1
  229. package/dist/frontend/inferred-js-diagnostics.test.js +65 -0
  230. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  231. package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
  232. package/dist/frontend/jsx-opinion-sites.test.js +86 -0
  233. package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
  234. package/dist/frontend/lib-exports.d.ts +23 -4
  235. package/dist/frontend/lib-exports.js +98 -26
  236. package/dist/frontend/lib-exports.js.map +1 -1
  237. package/dist/frontend/lowering/binding-analysis.js +21 -3
  238. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  239. package/dist/frontend/lowering/buffers.d.ts +8 -0
  240. package/dist/frontend/lowering/buffers.js +43 -0
  241. package/dist/frontend/lowering/buffers.js.map +1 -0
  242. package/dist/frontend/lowering/builtin-calls.js +4 -0
  243. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  244. package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
  245. package/dist/frontend/lowering/builtin-namespaces.js +24 -3
  246. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  247. package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
  248. package/dist/frontend/lowering/builtin-statics.js +407 -0
  249. package/dist/frontend/lowering/builtin-statics.js.map +1 -0
  250. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  251. package/dist/frontend/lowering/builtins/arguments.js +12 -0
  252. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  253. package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
  254. package/dist/frontend/lowering/builtins/atomics.js +87 -1
  255. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  256. package/dist/frontend/lowering/builtins/child-process-methods.js +2 -2
  257. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  258. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
  259. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
  260. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  261. package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
  262. package/dist/frontend/lowering/builtins/child-process.js +560 -27
  263. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  264. package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
  265. package/dist/frontend/lowering/builtins/compression.js +41 -21
  266. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  267. package/dist/frontend/lowering/builtins/constants.js +7 -2
  268. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  269. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  270. package/dist/frontend/lowering/builtins/filesystem-calls.js +28 -2
  271. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  272. package/dist/frontend/lowering/builtins/json.js +4 -0
  273. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  274. package/dist/frontend/lowering/builtins/module-calls.js +3 -1
  275. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  276. package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
  277. package/dist/frontend/lowering/builtins/numbers.js +10 -2
  278. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  279. package/dist/frontend/lowering/builtins/operating-system.d.ts +6 -3
  280. package/dist/frontend/lowering/builtins/operating-system.js +96 -16
  281. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  282. package/dist/frontend/lowering/builtins/process.d.ts +2 -2
  283. package/dist/frontend/lowering/builtins/process.js +103 -8
  284. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  285. package/dist/frontend/lowering/builtins/promises.js +169 -8
  286. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  287. package/dist/frontend/lowering/builtins/properties.js +6 -2
  288. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  289. package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
  290. package/dist/frontend/lowering/builtins/readline.js +180 -36
  291. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  292. package/dist/frontend/lowering/builtins/url.js +35 -12
  293. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  294. package/dist/frontend/lowering/builtins/webassembly.js +2 -0
  295. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  296. package/dist/frontend/lowering/call-arguments.d.ts +10 -0
  297. package/dist/frontend/lowering/call-arguments.js +37 -2
  298. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  299. package/dist/frontend/lowering/call-signatures.d.ts +10 -0
  300. package/dist/frontend/lowering/call-signatures.js +103 -0
  301. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  302. package/dist/frontend/lowering/class-construction.d.ts +14 -2
  303. package/dist/frontend/lowering/class-construction.js +99 -5
  304. package/dist/frontend/lowering/class-construction.js.map +1 -1
  305. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +9 -0
  306. package/dist/frontend/lowering/class-dynamic-dispatch.js +1283 -1030
  307. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  308. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
  309. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  310. package/dist/frontend/lowering/class-prototypes.js +20 -15
  311. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  312. package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
  313. package/dist/frontend/lowering/class-runtime-statics.js +20 -1
  314. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  315. package/dist/frontend/lowering/class-unions.js +21 -4
  316. package/dist/frontend/lowering/class-unions.js.map +1 -1
  317. package/dist/frontend/lowering/coercions/function-adapters.js +9 -0
  318. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  319. package/dist/frontend/lowering/coercions/state.d.ts +8 -0
  320. package/dist/frontend/lowering/coercions/state.js +17 -0
  321. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  322. package/dist/frontend/lowering/coercions/structural-plans.js +20 -5
  323. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  324. package/dist/frontend/lowering/coercions/structural.js +10 -1
  325. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  326. package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
  327. package/dist/frontend/lowering/coercions/unions.js +54 -10
  328. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  329. package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
  330. package/dist/frontend/lowering/constructor-returns.js +284 -58
  331. package/dist/frontend/lowering/constructor-returns.js.map +1 -1
  332. package/dist/frontend/lowering/containers/array-callbacks.js +156 -62
  333. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  334. package/dist/frontend/lowering/containers/array-construction.js +21 -3
  335. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  336. package/dist/frontend/lowering/containers/array-from-async.js +139 -3
  337. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  338. package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
  339. package/dist/frontend/lowering/containers/array-iteration.js +24 -7
  340. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
  341. package/dist/frontend/lowering/containers/array-methods.js +14 -11
  342. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  343. package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
  344. package/dist/frontend/lowering/containers/bytes.js +446 -86
  345. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  346. package/dist/frontend/lowering/containers/callback-arguments.d.ts +5 -0
  347. package/dist/frontend/lowering/containers/callback-arguments.js +21 -12
  348. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  349. package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
  350. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  351. package/dist/frontend/lowering/containers/collection-methods.js +52 -17
  352. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  353. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
  354. package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
  355. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  356. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
  357. package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
  358. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  359. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  360. package/dist/frontend/lowering/crypto-tables.js +5 -5
  361. package/dist/frontend/lowering/dispatch-sites.js +3 -0
  362. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  363. package/dist/frontend/lowering/divergences.d.ts +40 -0
  364. package/dist/frontend/lowering/divergences.js +239 -20
  365. package/dist/frontend/lowering/divergences.js.map +1 -1
  366. package/dist/frontend/lowering/effect-free.d.ts +12 -0
  367. package/dist/frontend/lowering/effect-free.js +44 -0
  368. package/dist/frontend/lowering/effect-free.js.map +1 -0
  369. package/dist/frontend/lowering/expressions/array-literals.d.ts +10 -0
  370. package/dist/frontend/lowering/expressions/array-literals.js +62 -0
  371. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  372. package/dist/frontend/lowering/expressions/binary.js +115 -5
  373. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  374. package/dist/frontend/lowering/expressions/element-access.js +151 -7
  375. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  376. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
  377. package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
  378. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
  379. package/dist/frontend/lowering/expressions/identifiers.js +31 -2
  380. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  381. package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
  382. package/dist/frontend/lowering/expressions/narrowing.js +175 -22
  383. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  384. package/dist/frontend/lowering/expressions/object-literals.js +173 -11
  385. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  386. package/dist/frontend/lowering/expressions/optional-chains.js +5 -1
  387. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  388. package/dist/frontend/lowering/expressions/property-access.d.ts +8 -0
  389. package/dist/frontend/lowering/expressions/property-access.js +379 -109
  390. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  391. package/dist/frontend/lowering/expressions/relational.js +237 -7
  392. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  393. package/dist/frontend/lowering/expressions/typeof.js +8 -0
  394. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  395. package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
  396. package/dist/frontend/lowering/expressions/union-fields.js +103 -13
  397. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  398. package/dist/frontend/lowering/expressions/updates.js +74 -55
  399. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  400. package/dist/frontend/lowering/function-returns.js +37 -10
  401. package/dist/frontend/lowering/function-returns.js.map +1 -1
  402. package/dist/frontend/lowering/general-streams.js +5 -0
  403. package/dist/frontend/lowering/general-streams.js.map +1 -1
  404. package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
  405. package/dist/frontend/lowering/generator-delegation.js +301 -118
  406. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  407. package/dist/frontend/lowering/generic-functions.d.ts +27 -1
  408. package/dist/frontend/lowering/generic-functions.js +432 -18
  409. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  410. package/dist/frontend/lowering/global-function-values.d.ts +25 -0
  411. package/dist/frontend/lowering/global-function-values.js +193 -0
  412. package/dist/frontend/lowering/global-function-values.js.map +1 -0
  413. package/dist/frontend/lowering/global-values.d.ts +6 -4
  414. package/dist/frontend/lowering/global-values.js +24 -10
  415. package/dist/frontend/lowering/global-values.js.map +1 -1
  416. package/dist/frontend/lowering/host-global-values.d.ts +31 -0
  417. package/dist/frontend/lowering/host-global-values.js +121 -0
  418. package/dist/frontend/lowering/host-global-values.js.map +1 -0
  419. package/dist/frontend/lowering/host-globals.d.ts +74 -0
  420. package/dist/frontend/lowering/host-globals.js +344 -0
  421. package/dist/frontend/lowering/host-globals.js.map +1 -0
  422. package/dist/frontend/lowering/http2-constants.js +1 -1
  423. package/dist/frontend/lowering/iterator-adapters.js +46 -17
  424. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  425. package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
  426. package/dist/frontend/lowering/iterator-prototype.js +160 -0
  427. package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
  428. package/dist/frontend/lowering/key-order-witness.js +43 -22
  429. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  430. package/dist/frontend/lowering/key-order-witness.test.js +1 -0
  431. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  432. package/dist/frontend/lowering/lib-boundary.js +11 -3
  433. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  434. package/dist/frontend/lowering/lower-assert.js +30 -15
  435. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  436. package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
  437. package/dist/frontend/lowering/lower-async-iteration.js +15 -0
  438. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  439. package/dist/frontend/lowering/lower-builtin-values.js +11 -1
  440. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  441. package/dist/frontend/lowering/lower-calls.d.ts +25 -0
  442. package/dist/frontend/lowering/lower-calls.js +929 -227
  443. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  444. package/dist/frontend/lowering/lower-calls.test.js +59 -16
  445. package/dist/frontend/lowering/lower-calls.test.js.map +1 -1
  446. package/dist/frontend/lowering/lower-classes.d.ts +20 -0
  447. package/dist/frontend/lowering/lower-classes.js +468 -44
  448. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  449. package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -2
  450. package/dist/frontend/lowering/lower-event-emitter.js +253 -83
  451. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  452. package/dist/frontend/lowering/lower-exprs.d.ts +1 -1
  453. package/dist/frontend/lowering/lower-exprs.js +71 -20
  454. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  455. package/dist/frontend/lowering/lower-functions.js +25 -6
  456. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  457. package/dist/frontend/lowering/lower-generators.js +57 -10
  458. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  459. package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
  460. package/dist/frontend/lowering/lower-global-value.js +14 -5
  461. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  462. package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
  463. package/dist/frontend/lowering/lower-inspect.js +638 -64
  464. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  465. package/dist/frontend/lowering/lower-modules.js +48 -2
  466. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  467. package/dist/frontend/lowering/lower-namespaces.js +18 -0
  468. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  469. package/dist/frontend/lowering/lower-node-island.js +16 -6
  470. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  471. package/dist/frontend/lowering/lower-server.js +303 -87
  472. package/dist/frontend/lowering/lower-server.js.map +1 -1
  473. package/dist/frontend/lowering/lower-stdlib.js +45 -0
  474. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  475. package/dist/frontend/lowering/lower-stmts.d.ts +14 -11
  476. package/dist/frontend/lowering/lower-stmts.js +270 -52
  477. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  478. package/dist/frontend/lowering/lower-timers.js +110 -27
  479. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  480. package/dist/frontend/lowering/lower-url.js +6 -3
  481. package/dist/frontend/lowering/lower-url.js.map +1 -1
  482. package/dist/frontend/lowering/lowerer.d.ts +227 -21
  483. package/dist/frontend/lowering/lowerer.js +651 -92
  484. package/dist/frontend/lowering/lowerer.js.map +1 -1
  485. package/dist/frontend/lowering/lowerer.test.js +18 -0
  486. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  487. package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
  488. package/dist/frontend/lowering/lowering-facts.js +323 -0
  489. package/dist/frontend/lowering/lowering-facts.js.map +1 -0
  490. package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
  491. package/dist/frontend/lowering/lowering-facts.test.js +100 -0
  492. package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
  493. package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
  494. package/dist/frontend/lowering/nan-coded-reads.js +112 -9
  495. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  496. package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
  497. package/dist/frontend/lowering/optional-arguments.js +26 -2
  498. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  499. package/dist/frontend/lowering/partial-assertions.d.ts +0 -3
  500. package/dist/frontend/lowering/partial-assertions.js +9 -15
  501. package/dist/frontend/lowering/partial-assertions.js.map +1 -1
  502. package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
  503. package/dist/frontend/lowering/primitive-throws.js +241 -0
  504. package/dist/frontend/lowering/primitive-throws.js.map +1 -0
  505. package/dist/frontend/lowering/primitive-wrappers.js +1 -0
  506. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
  507. package/dist/frontend/lowering/record-inherited.d.ts +17 -1
  508. package/dist/frontend/lowering/record-inherited.js +16 -2
  509. package/dist/frontend/lowering/record-inherited.js.map +1 -1
  510. package/dist/frontend/lowering/record-links.d.ts +73 -0
  511. package/dist/frontend/lowering/record-links.js +797 -0
  512. package/dist/frontend/lowering/record-links.js.map +1 -0
  513. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
  514. package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
  515. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  516. package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
  517. package/dist/frontend/lowering/runtime-optional-report.js +300 -0
  518. package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
  519. package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
  520. package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
  521. package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
  522. package/dist/frontend/lowering/static-typeof.d.ts +3 -1
  523. package/dist/frontend/lowering/static-typeof.js +6 -1
  524. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  525. package/dist/frontend/lowering/strict-mode.d.ts +1 -5
  526. package/dist/frontend/lowering/strict-mode.js +4 -30
  527. package/dist/frontend/lowering/strict-mode.js.map +1 -1
  528. package/dist/frontend/lowering/structural-instances.d.ts +7 -0
  529. package/dist/frontend/lowering/structural-instances.js +23 -0
  530. package/dist/frontend/lowering/structural-instances.js.map +1 -1
  531. package/dist/frontend/lowering/surfaces.d.ts +15 -1
  532. package/dist/frontend/lowering/surfaces.js +78 -10
  533. package/dist/frontend/lowering/surfaces.js.map +1 -1
  534. package/dist/frontend/lowering/union-retag.d.ts +13 -1
  535. package/dist/frontend/lowering/union-retag.js +55 -1
  536. package/dist/frontend/lowering/union-retag.js.map +1 -1
  537. package/dist/frontend/lowering/union-retag.test.js +51 -0
  538. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  539. package/dist/frontend/lowering/unit-journal.d.ts +8 -0
  540. package/dist/frontend/lowering/unit-journal.js +14 -0
  541. package/dist/frontend/lowering/unit-journal.js.map +1 -1
  542. package/dist/frontend/lowering/unit-journal.test.js +36 -1
  543. package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
  544. package/dist/frontend/lowering/zlib-constants.js +3 -2
  545. package/dist/frontend/lowering/zlib-constants.js.map +1 -1
  546. package/dist/frontend/npm-static.js +78 -9
  547. package/dist/frontend/npm-static.js.map +1 -1
  548. package/dist/frontend/npm-static.test.js +95 -2
  549. package/dist/frontend/npm-static.test.js.map +1 -1
  550. package/dist/frontend/pipeline.d.ts +5 -4
  551. package/dist/frontend/pipeline.js +94 -31
  552. package/dist/frontend/pipeline.js.map +1 -1
  553. package/dist/frontend/pipeline.test.js +68 -11
  554. package/dist/frontend/pipeline.test.js.map +1 -1
  555. package/dist/frontend/program.d.ts +62 -2
  556. package/dist/frontend/program.js +695 -422
  557. package/dist/frontend/program.js.map +1 -1
  558. package/dist/frontend/program.test.js +37 -1
  559. package/dist/frontend/program.test.js.map +1 -1
  560. package/dist/frontend/services-node.d.ts +7 -0
  561. package/dist/frontend/services-node.js +32 -1
  562. package/dist/frontend/services-node.js.map +1 -1
  563. package/dist/frontend/services-node.test.js +51 -0
  564. package/dist/frontend/services-node.test.js.map +1 -1
  565. package/dist/frontend/shape-inference/overlay.js +68 -2
  566. package/dist/frontend/shape-inference/overlay.js.map +1 -1
  567. package/dist/frontend/tier-analysis.d.ts +9 -0
  568. package/dist/frontend/tier-analysis.js +1 -0
  569. package/dist/frontend/tier-analysis.js.map +1 -1
  570. package/dist/frontend/tsc-codes.d.ts +57 -3
  571. package/dist/frontend/tsc-codes.js +935 -150
  572. package/dist/frontend/tsc-codes.js.map +1 -1
  573. package/dist/frontend/tsc-codes.test.js +221 -12
  574. package/dist/frontend/tsc-codes.test.js.map +1 -1
  575. package/dist/frontend/type-mapper.d.ts +91 -9
  576. package/dist/frontend/type-mapper.js +622 -181
  577. package/dist/frontend/type-mapper.js.map +1 -1
  578. package/dist/index.d.ts +1 -1
  579. package/dist/index.js +80 -15
  580. package/dist/index.js.map +1 -1
  581. package/dist/index.test.d.ts +1 -0
  582. package/dist/index.test.js +60 -0
  583. package/dist/index.test.js.map +1 -0
  584. package/dist/ir/builtin-effects.js +43 -0
  585. package/dist/ir/builtin-effects.js.map +1 -1
  586. package/dist/ir/builtin-signatures.d.ts +1 -1
  587. package/dist/ir/builtin-signatures.js +242 -16
  588. package/dist/ir/builtin-signatures.js.map +1 -1
  589. package/dist/ir/callback-specialization.d.ts +3 -2
  590. package/dist/ir/callback-specialization.js +35 -25
  591. package/dist/ir/callback-specialization.js.map +1 -1
  592. package/dist/ir/capture-values.d.ts +8 -4
  593. package/dist/ir/capture-values.js +9 -6
  594. package/dist/ir/capture-values.js.map +1 -1
  595. package/dist/ir/char-unit-locals.d.ts +6 -2
  596. package/dist/ir/char-unit-locals.js +11 -2
  597. package/dist/ir/char-unit-locals.js.map +1 -1
  598. package/dist/ir/class-key-index.d.ts +18 -0
  599. package/dist/ir/class-key-index.js +29 -0
  600. package/dist/ir/class-key-index.js.map +1 -0
  601. package/dist/ir/class-key-index.test.d.ts +1 -0
  602. package/dist/ir/class-key-index.test.js +25 -0
  603. package/dist/ir/class-key-index.test.js.map +1 -0
  604. package/dist/ir/codec.generated.d.ts +1 -1
  605. package/dist/ir/codec.generated.js +724 -648
  606. package/dist/ir/codec.generated.js.map +1 -1
  607. package/dist/ir/constant-globals.d.ts +5 -2
  608. package/dist/ir/constant-globals.js +25 -27
  609. package/dist/ir/constant-globals.js.map +1 -1
  610. package/dist/ir/expression-inlining.d.ts +4 -2
  611. package/dist/ir/expression-inlining.js +8 -2
  612. package/dist/ir/expression-inlining.js.map +1 -1
  613. package/dist/ir/field-values.d.ts +5 -2
  614. package/dist/ir/field-values.js +32 -21
  615. package/dist/ir/field-values.js.map +1 -1
  616. package/dist/ir/fields.generated.d.ts +11 -2
  617. package/dist/ir/fields.generated.js +8 -0
  618. package/dist/ir/fields.generated.js.map +1 -1
  619. package/dist/ir/final-fields.js +1 -1
  620. package/dist/ir/final-fields.js.map +1 -1
  621. package/dist/ir/function-references.d.ts +5 -4
  622. package/dist/ir/function-references.js +7 -4
  623. package/dist/ir/function-references.js.map +1 -1
  624. package/dist/ir/function-references.test.js +7 -0
  625. package/dist/ir/function-references.test.js.map +1 -1
  626. package/dist/ir/init-only-globals.d.ts +4 -2
  627. package/dist/ir/init-only-globals.js +17 -18
  628. package/dist/ir/init-only-globals.js.map +1 -1
  629. package/dist/ir/inline-array-views.js +1 -0
  630. package/dist/ir/inline-array-views.js.map +1 -1
  631. package/dist/ir/int32-slots.js +7 -0
  632. package/dist/ir/int32-slots.js.map +1 -1
  633. package/dist/ir/ir.d.ts +59 -4
  634. package/dist/ir/ir.js +7 -0
  635. package/dist/ir/ir.js.map +1 -1
  636. package/dist/ir/js-groups.d.ts +51 -0
  637. package/dist/ir/js-groups.js +394 -0
  638. package/dist/ir/js-groups.js.map +1 -0
  639. package/dist/ir/js-groups.test.d.ts +1 -0
  640. package/dist/ir/js-groups.test.js +555 -0
  641. package/dist/ir/js-groups.test.js.map +1 -0
  642. package/dist/ir/js-ic.js +30 -5
  643. package/dist/ir/js-ic.js.map +1 -1
  644. package/dist/ir/js-ic.test.js +27 -1
  645. package/dist/ir/js-ic.test.js.map +1 -1
  646. package/dist/ir/node-index.d.ts +23 -6
  647. package/dist/ir/node-index.js +126 -49
  648. package/dist/ir/node-index.js.map +1 -1
  649. package/dist/ir/numeric-call-specialization.d.ts +4 -2
  650. package/dist/ir/numeric-call-specialization.js +40 -26
  651. package/dist/ir/numeric-call-specialization.js.map +1 -1
  652. package/dist/ir/paired-while-loops.d.ts +4 -2
  653. package/dist/ir/paired-while-loops.js +8 -2
  654. package/dist/ir/paired-while-loops.js.map +1 -1
  655. package/dist/ir/parameter-versions.d.ts +13 -4
  656. package/dist/ir/parameter-versions.js +63 -42
  657. package/dist/ir/parameter-versions.js.map +1 -1
  658. package/dist/ir/property-bags.d.ts +4 -2
  659. package/dist/ir/property-bags.js +22 -17
  660. package/dist/ir/property-bags.js.map +1 -1
  661. package/dist/ir/row-pairs.d.ts +4 -2
  662. package/dist/ir/row-pairs.js +12 -11
  663. package/dist/ir/row-pairs.js.map +1 -1
  664. package/dist/ir/runtime-features.d.ts +87 -12
  665. package/dist/ir/runtime-features.js +263 -160
  666. package/dist/ir/runtime-features.js.map +1 -1
  667. package/dist/ir/runtime-features.test.js +109 -139
  668. package/dist/ir/runtime-features.test.js.map +1 -1
  669. package/dist/ir/runtime-jam-loops.d.ts +35 -0
  670. package/dist/ir/runtime-jam-loops.js +604 -0
  671. package/dist/ir/runtime-jam-loops.js.map +1 -0
  672. package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
  673. package/dist/ir/runtime-jam-loops.test.js +565 -0
  674. package/dist/ir/runtime-jam-loops.test.js.map +1 -0
  675. package/dist/ir/saturating-loop-jams.d.ts +4 -2
  676. package/dist/ir/saturating-loop-jams.js +11 -10
  677. package/dist/ir/saturating-loop-jams.js.map +1 -1
  678. package/dist/ir/scalar-records.d.ts +5 -2
  679. package/dist/ir/scalar-records.js +12 -2
  680. package/dist/ir/scalar-records.js.map +1 -1
  681. package/dist/ir/self-captures.d.ts +4 -2
  682. package/dist/ir/self-captures.js +32 -27
  683. package/dist/ir/self-captures.js.map +1 -1
  684. package/dist/ir/serialize.d.ts +6 -1
  685. package/dist/ir/serialize.js +87 -23
  686. package/dist/ir/serialize.js.map +1 -1
  687. package/dist/ir/serialize.test.js +26 -0
  688. package/dist/ir/serialize.test.js.map +1 -1
  689. package/dist/ir/tiers.js +1 -0
  690. package/dist/ir/tiers.js.map +1 -1
  691. package/dist/ir/traverse.js +4 -0
  692. package/dist/ir/traverse.js.map +1 -1
  693. package/dist/ir/typed-argument-clones.d.ts +30 -0
  694. package/dist/ir/typed-argument-clones.js +789 -0
  695. package/dist/ir/typed-argument-clones.js.map +1 -0
  696. package/dist/ir/union-arm-loops.d.ts +3 -0
  697. package/dist/ir/union-arm-loops.js +373 -0
  698. package/dist/ir/union-arm-loops.js.map +1 -0
  699. package/dist/ir/union-arm-loops.test.d.ts +1 -0
  700. package/dist/ir/union-arm-loops.test.js +230 -0
  701. package/dist/ir/union-arm-loops.test.js.map +1 -0
  702. package/dist/ir/validate.js +88 -18
  703. package/dist/ir/validate.js.map +1 -1
  704. package/dist/library/compiler-self-identity.d.ts +8 -2
  705. package/dist/library/compiler-self-identity.js +92 -18
  706. package/dist/library/compiler-self-identity.js.map +1 -1
  707. package/dist/library/compiler-self-identity.test.js +150 -3
  708. package/dist/library/compiler-self-identity.test.js.map +1 -1
  709. package/dist/library/int-infer.d.ts +5 -0
  710. package/dist/library/int-infer.js +15 -3
  711. package/dist/library/int-infer.js.map +1 -1
  712. package/dist/library/ir-policy.js +1 -0
  713. package/dist/library/ir-policy.js.map +1 -1
  714. package/dist/library/library-cache.d.ts +4 -0
  715. package/dist/library/library-cache.js +2 -0
  716. package/dist/library/library-cache.js.map +1 -1
  717. package/dist/library/library-cache.test.js +26 -0
  718. package/dist/library/library-cache.test.js.map +1 -1
  719. package/dist/library/prepare.js +99 -31
  720. package/dist/library/prepare.js.map +1 -1
  721. package/dist/native/cache.d.ts +7 -0
  722. package/dist/native/cache.js +47 -0
  723. package/dist/native/cache.js.map +1 -1
  724. package/dist/native/cache.test.js +13 -1
  725. package/dist/native/cache.test.js.map +1 -1
  726. package/dist/native/cli.js +1 -1
  727. package/dist/native/cli.js.map +1 -1
  728. package/dist/native/compiler.js +18 -3
  729. package/dist/native/compiler.js.map +1 -1
  730. package/dist/native/executable-cache-open.test.js +31 -5
  731. package/dist/native/executable-cache-open.test.js.map +1 -1
  732. package/dist/native/executable-cache.d.ts +6 -1
  733. package/dist/native/executable-cache.js +7 -1
  734. package/dist/native/executable-cache.js.map +1 -1
  735. package/dist/native/prepare.d.ts +3 -0
  736. package/dist/native/prepare.js +43 -26
  737. package/dist/native/prepare.js.map +1 -1
  738. package/dist/native/prepare.test.js +25 -3
  739. package/dist/native/prepare.test.js.map +1 -1
  740. package/dist/native/sanitizer.js +10 -1
  741. package/dist/native/sanitizer.js.map +1 -1
  742. package/dist/native/sanitizer.test.js +7 -2
  743. package/dist/native/sanitizer.test.js.map +1 -1
  744. package/dist/node-islands/boundary.d.ts +12 -0
  745. package/dist/node-islands/boundary.js +38 -6
  746. package/dist/node-islands/boundary.js.map +1 -1
  747. package/dist/node-islands/boundary.test.d.ts +1 -0
  748. package/dist/node-islands/boundary.test.js +76 -0
  749. package/dist/node-islands/boundary.test.js.map +1 -0
  750. package/dist/node-islands/detect.d.ts +9 -0
  751. package/dist/node-islands/detect.js +110 -0
  752. package/dist/node-islands/detect.js.map +1 -1
  753. package/dist/node-islands/detect.test.js +24 -0
  754. package/dist/node-islands/detect.test.js.map +1 -1
  755. package/dist/node-islands/graph-islands.d.ts +40 -0
  756. package/dist/node-islands/graph-islands.js +128 -0
  757. package/dist/node-islands/graph-islands.js.map +1 -0
  758. package/dist/node-islands/growth.d.ts +57 -0
  759. package/dist/node-islands/growth.js +205 -0
  760. package/dist/node-islands/growth.js.map +1 -0
  761. package/dist/node-islands/report.d.ts +12 -0
  762. package/dist/node-islands/report.js +28 -0
  763. package/dist/node-islands/report.js.map +1 -1
  764. package/dist/node-islands/report.test.js +2 -0
  765. package/dist/node-islands/report.test.js.map +1 -1
  766. package/dist/node-islands/rules.js +5 -0
  767. package/dist/node-islands/rules.js.map +1 -1
  768. package/dist/node-islands/scan.d.ts +11 -2
  769. package/dist/node-islands/scan.js +61 -9
  770. package/dist/node-islands/scan.js.map +1 -1
  771. package/dist/wasm/translate.js +11 -5
  772. package/dist/wasm/translate.js.map +1 -1
  773. package/dist/wasm/translate.test.js +35 -0
  774. package/dist/wasm/translate.test.js.map +1 -1
  775. package/package.json +20 -20
  776. package/surface-manifest.json +184 -117
@@ -0,0 +1,277 @@
1
+ /* Object guard groups, the backend half (shape-tier design 3.3; the plan
2
+ * is ir/js-groups.ts, the record scr_js_group_probe in scr_js_object.c).
3
+ *
4
+ * A group is a run of constant-key reads on one subject inside one
5
+ * statement. Today each read is its own cache site: kind test, layout test,
6
+ * entry compares, slot load. The group tests the subject's layout once and
7
+ * answers every member from one entry that holds all the group's slots:
8
+ *
9
+ * guard k = obj+8; k == OBJ else no entry
10
+ * L = obj+80; L != null else probe
11
+ * L == @sc_js_group_N+0 -> entry 0
12
+ * L == @sc_js_group_N+16 -> entry 1
13
+ * else scr_js_group_probe(obj, @keys, K, @sc_js_group_N) (cold)
14
+ * member entry == null ? the site's helper : slots[i] for i = entry->slot[k]
15
+ *
16
+ * A member after a clobbering operation (one that may run user code, which
17
+ * can change the subject's layout) rechecks the layout against its entry
18
+ * first and takes the helper when it moved. The guard is emitted at the
19
+ * group's first member and every later member reuses its entry value, so
20
+ * the plan's membership must match emission order; a member whose position
21
+ * does not follow the last one emitted takes its plain site. */
22
+ import { DYN, STRING } from "../../ir/ir.js";
23
+ import { emitBorrowedInput } from "./borrowed-inputs.js";
24
+ import { DYN_KIND } from "./dyn.js";
25
+ import { asResult, gep, helperCall, jsIcSiteOf, kindIs, load } from "./js-ic.js";
26
+ import { JS_BITS } from "./jsval-encoding.js";
27
+ /** Words of one ScrJsGroup record: four entries of 16 bytes, then count
28
+ * and next (scr_js.h). */
29
+ export const JS_GROUP_WORDS = 9;
30
+ /** How many entries the guard compares inline. Two is the site's inline
31
+ * way count (js-ic.ts): a group guards the same ties a site does. */
32
+ const GUARD_WAYS = 2;
33
+ /** Bytes between two entries of a record. */
34
+ const WAY_BYTES = 16;
35
+ /** Bytes of an entry's slot bytes, at the entry's start. */
36
+ const SLOT_BASE = 8;
37
+ /** ScrDyn object fields (js-ic.ts). */
38
+ const OBJECT_SLOTS = 32;
39
+ const OBJECT_LAYOUT = 80;
40
+ /** The result of a grouped read of `e`, or null when `e` is not a member
41
+ * whose guard is in effect and the plain site path must answer. */
42
+ export function emitGroupedGet(host, e, callee) {
43
+ const member = host.jsGroupPlan?.member(e);
44
+ if (member === undefined)
45
+ return null;
46
+ if (jsIcSiteOf(host, e) === null)
47
+ return null;
48
+ const group = member.group;
49
+ const receiver = emitBorrowedInput(host, e.args[0]);
50
+ let run = host.groupRuns.get(group);
51
+ if (member.position === 0) {
52
+ run = { entry: emitGuard(host, receiver.name, group, e), next: 0 };
53
+ host.groupRuns.set(group, run);
54
+ }
55
+ else if (run === undefined || run.next !== member.position) {
56
+ // A member emitted out of order (or without its guard) reads through
57
+ // its own site: the plan's entry does not dominate it.
58
+ return null;
59
+ }
60
+ run.next = member.position + 1;
61
+ return emitMember(host, e, callee, receiver, run.entry, member);
62
+ }
63
+ /** Emits the guard of `group` on `receiver` in the current block and
64
+ * answers the entry value it found (a record address, or null). */
65
+ function emitGuard(host, receiver, group, e) {
66
+ const B = host.B;
67
+ const record = host.jsGroup();
68
+ const keys = host.jsGroupKeys(group.keys.map((key) => keyString(host, key, e)));
69
+ const join = B.newLabel("grp.j");
70
+ const none = B.newLabel("grp.none");
71
+ const shaped = B.newLabel("grp.shape");
72
+ kindIs(host, receiver, DYN_KIND.OBJ, shaped, none);
73
+ B.startBlock(shaped);
74
+ const layout = load(host, "ptr", receiver, OBJECT_LAYOUT);
75
+ const present = B.tmp();
76
+ B.line(`${present} = icmp ne ptr ${layout}, null`);
77
+ const ways = [];
78
+ const hits = [];
79
+ const probes = [];
80
+ for (let way = 0; way < GUARD_WAYS; way++) {
81
+ ways.push(B.newLabel("grp.w"));
82
+ hits.push(B.newLabel("grp.hit"));
83
+ }
84
+ const miss = B.newLabel("grp.miss");
85
+ B.condBr(present, ways[0], miss);
86
+ const incoming = [];
87
+ for (let way = 0; way < GUARD_WAYS; way++) {
88
+ B.startBlock(ways[way]);
89
+ const cached = load(host, "ptr", record, way * WAY_BYTES);
90
+ const same = B.tmp();
91
+ B.line(`${same} = icmp eq ptr ${cached}, ${layout}`);
92
+ B.condBr(same, hits[way], way + 1 < GUARD_WAYS ? ways[way + 1] : miss);
93
+ B.startBlock(hits[way]);
94
+ incoming.push(`[ ${gep(host, record, way * WAY_BYTES)}, %${B.currentLabel()} ]`);
95
+ B.br(join);
96
+ }
97
+ B.startBlock(none);
98
+ probes.push(`[ null, %${B.currentLabel()} ]`);
99
+ B.br(join);
100
+ B.startBlock(miss);
101
+ // The probe answers the layouts the guard does not know, and refuses
102
+ // every object whose layout lacks one of the group's keys.
103
+ host.declare(`declare ptr @scr_js_group_probe(ptr, ptr, i32, ptr)`);
104
+ const probed = B.tmp();
105
+ B.line(`${probed} = call ptr @scr_js_group_probe(ptr ${receiver}, ptr ${keys}, i32 ${group.keys.length}, ptr ${record}) cold`);
106
+ probes.push(`[ ${probed}, %${B.currentLabel()} ]`);
107
+ B.br(join);
108
+ B.startBlock(join);
109
+ const entry = B.tmp();
110
+ B.line(`${entry} = phi ptr ${[...incoming, ...probes].join(", ")}`);
111
+ return entry;
112
+ }
113
+ /** Emits one grouped read of `member` through `entry`, with the site's
114
+ * helper as the fallback. */
115
+ function emitMember(host, e, callee, receiver, entry, member) {
116
+ const B = host.B;
117
+ const fast = B.newLabel("grp.fast");
118
+ const slow = B.newLabel("grp.slow");
119
+ const join = B.newLabel("grp.j");
120
+ const ready = B.tmp();
121
+ B.line(`${ready} = icmp ne ptr ${entry}, null`);
122
+ B.condBr(ready, fast, slow);
123
+ const incoming = [];
124
+ B.startBlock(fast);
125
+ if (member.recheck) {
126
+ // A clobbering operation may have run user code since the guard: the
127
+ // entry answers for the subject only while its layout still holds.
128
+ const now = load(host, "ptr", receiver.name, OBJECT_LAYOUT);
129
+ const entryLayout = load(host, "ptr", entry, 0);
130
+ const same = B.tmp();
131
+ B.line(`${same} = icmp eq ptr ${now}, ${entryLayout}`);
132
+ const read = B.newLabel("grp.read");
133
+ B.condBr(same, read, slow);
134
+ B.startBlock(read);
135
+ }
136
+ const slots = load(host, "ptr", receiver.name, OBJECT_SLOTS);
137
+ const index = load(host, "i8", entry, SLOT_BASE + member.index);
138
+ const wide = B.tmp();
139
+ B.line(`${wide} = zext i8 ${index} to i64`);
140
+ const address = B.tmp();
141
+ B.line(`${address} = getelementptr inbounds ptr, ptr ${slots}, i64 ${wide}`);
142
+ const cell = load(host, "ptr", address, 0);
143
+ incoming.push(`[ ${asResult(host, cell, e, false)}, %${B.currentLabel()} ]`);
144
+ B.br(join);
145
+ B.startBlock(slow);
146
+ incoming.push(`[ ${helperCall(host, e, callee, [receiver])}, %${B.currentLabel()} ]`);
147
+ B.br(join);
148
+ B.startBlock(join);
149
+ const value = B.tmp();
150
+ B.line(`${value} = phi ptr ${incoming.join(", ")}`);
151
+ return host.own({ name: value, type: e.type });
152
+ }
153
+ function keyString(host, key, e) {
154
+ return host.emitExpr({ kind: "strLit", value: key, type: STRING, loc: e.loc }).name;
155
+ }
156
+ /** The result of a grouped store of `e`, or null when `e` is not a member
157
+ * whose guard is in effect and the plain site path must answer. The store's
158
+ * receiver and value are already evaluated: a member read inside the stored
159
+ * value comes before the store in the group's order.
160
+ *
161
+ * The grouped store is the site's fast branch: the guard has established
162
+ * that the subject is a layout-mode object whose layout holds every key of
163
+ * the group, so the store replaces an existing slot and the shape stays.
164
+ * The value is a static primitive, which the parse region treats as inert,
165
+ * so no write barrier can fire either. */
166
+ export function emitGroupedSet(host, e, callee, receiver, word, value) {
167
+ const member = host.jsGroupPlan?.member(e);
168
+ if (member === undefined || !member.store)
169
+ return null;
170
+ if (jsIcSiteOf(host, e) === null)
171
+ return null;
172
+ const B = host.B;
173
+ const group = member.group;
174
+ const open = host.groupRuns.get(group);
175
+ // A member whose guard is not in effect (emitted out of order, or
176
+ // without its guard) stores through its own site.
177
+ if (member.position !== 0 && (open === undefined || open.next !== member.position))
178
+ return null;
179
+ let entry;
180
+ if (member.position === 0) {
181
+ entry = emitGuard(host, receiver.name, group, e);
182
+ host.groupRuns.set(group, { entry, next: 0 });
183
+ }
184
+ else {
185
+ entry = open.entry;
186
+ }
187
+ host.groupRuns.get(group).next = member.position + 1;
188
+ // The cell the cold path passes to the helper is boxed lazily there.
189
+ let boxedSlot = null;
190
+ if (word !== null) {
191
+ boxedSlot = B.slot();
192
+ B.entryAllocas.push(`${boxedSlot} = alloca ptr`);
193
+ B.line(`store ptr null, ptr ${boxedSlot}`);
194
+ host.ownSlot(boxedSlot, DYN);
195
+ }
196
+ const fast = B.newLabel("grp.fast");
197
+ const slow = B.newLabel("grp.slow");
198
+ const join = B.newLabel("grp.j");
199
+ if (word !== null)
200
+ host.declare(`declare ptr @scr_js_to_dyn_borrow(ptr)`);
201
+ const ready = B.tmp();
202
+ B.line(`${ready} = icmp ne ptr ${entry}, null`);
203
+ B.condBr(ready, fast, slow);
204
+ B.startBlock(fast);
205
+ if (member.recheck) {
206
+ // A clobbering operation may have run user code since the guard: the
207
+ // entry answers for the subject only while its layout still holds.
208
+ const now = load(host, "ptr", receiver.name, OBJECT_LAYOUT);
209
+ const entryLayout = load(host, "ptr", entry, 0);
210
+ const same = B.tmp();
211
+ B.line(`${same} = icmp eq ptr ${now}, ${entryLayout}`);
212
+ const write = B.newLabel("grp.write");
213
+ B.condBr(same, write, slow);
214
+ B.startBlock(write);
215
+ }
216
+ const slots = load(host, "ptr", receiver.name, OBJECT_SLOTS);
217
+ const index = load(host, "i8", entry, SLOT_BASE + member.index);
218
+ const wide = B.tmp();
219
+ B.line(`${wide} = zext i8 ${index} to i64`);
220
+ const address = B.tmp();
221
+ B.line(`${address} = getelementptr inbounds ptr, ptr ${slots}, i64 ${wide}`);
222
+ const old = B.tmp();
223
+ B.line(`${old} = load ptr, ptr ${address}`);
224
+ if (word === null) {
225
+ B.line(`store ptr ${host.retainHeap(value.name, DYN)}, ptr ${address}`);
226
+ host.releaseHeap(old, DYN);
227
+ B.br(join);
228
+ }
229
+ else {
230
+ // A new number replaces the value of an unshared number cell in place;
231
+ // any other value is boxed, and the store takes the box.
232
+ const bits = B.tmp();
233
+ const isDouble = B.tmp();
234
+ B.line(`${bits} = ptrtoint ptr ${word} to i64`);
235
+ B.line(`${isDouble} = icmp ult i64 ${bits}, ${JS_BITS.limit}`);
236
+ const number = B.newLabel("grp.dbl");
237
+ const box = B.newLabel("grp.box");
238
+ B.condBr(isDouble, number, box);
239
+ B.startBlock(number);
240
+ const oldKind = load(host, "i32", old, 8);
241
+ const oldRc = load(host, "i64", old, 0);
242
+ const isNumber = B.tmp();
243
+ const unshared = B.tmp();
244
+ const inPlace = B.tmp();
245
+ B.line(`${isNumber} = icmp eq i32 ${oldKind}, ${DYN_KIND.NUM}`);
246
+ B.line(`${unshared} = icmp eq i64 ${oldRc}, 1`);
247
+ B.line(`${inPlace} = and i1 ${isNumber}, ${unshared}`);
248
+ const update = B.newLabel("grp.inplace");
249
+ B.condBr(inPlace, update, box);
250
+ B.startBlock(update);
251
+ const d = B.tmp();
252
+ B.line(`${d} = bitcast i64 ${bits} to double`);
253
+ B.line(`store double ${d}, ptr ${gep(host, old, 16)}`);
254
+ B.br(join);
255
+ B.startBlock(box);
256
+ const cell = B.tmp();
257
+ B.line(`${cell} = call ptr @scr_js_to_dyn_borrow(ptr ${word})`);
258
+ B.line(`store ptr ${cell}, ptr ${address}`);
259
+ host.releaseHeap(old, DYN);
260
+ B.br(join);
261
+ }
262
+ B.startBlock(slow);
263
+ let cell;
264
+ if (word !== null) {
265
+ cell = B.tmp();
266
+ B.line(`${cell} = call ptr @scr_js_to_dyn_borrow(ptr ${word})`);
267
+ B.line(`store ptr ${cell}, ptr ${boxedSlot}`);
268
+ }
269
+ else {
270
+ cell = value.name;
271
+ }
272
+ helperCall(host, e, callee, [receiver, { name: cell, type: DYN }]);
273
+ B.br(join);
274
+ B.startBlock(join);
275
+ return { name: "", type: e.type };
276
+ }
277
+ //# sourceMappingURL=js-groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js-groups.js","sourceRoot":"","sources":["../../../src/backend/llvm/js-groups.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type IrFunction } from "../../ir/ir.js";
1
+ import { type IrExpr, type IrFunction } from "../../ir/ir.js";
2
2
  import { type JsIcSite } from "../../ir/js-ic.js";
3
3
  import type { ExprOf, LlValue, LlvmEmitterContext } from "./expr-context.js";
4
4
  type Host = LlvmEmitterContext;
@@ -9,6 +9,24 @@ export declare const JS_IC_WORDS = 21;
9
9
  export declare function jsIcSiteOf(host: Host, e: ExprOf<"call">): JsIcSite | null;
10
10
  /** Whether method dispatch in the current function reads through a cache. */
11
11
  export declare function jsIcMethods(host: Host): boolean;
12
+ export declare function gep(host: Host, base: string, offset: number): string;
13
+ export declare function load(host: Host, type: string, base: string, offset: number): string;
14
+ /** Branches to `yes` when the dyn cell `d` has kind `kind`. */
15
+ export declare function kindIs(host: Host, d: string, kind: number, yes: string, no: string): void;
16
+ /** The attribution way count `SCRIPTC_DEBUG_JS_IC_WAYS` asks for, or null
17
+ * when the variable is unset. The value changes emitted code, so the build
18
+ * cache keys on it (executable/executable-cache.ts). */
19
+ export declare function debugJsIcWays(env?: NodeJS.ProcessEnv): 0 | 1 | 2 | null;
20
+ /** A property value (a dyn cell, `owned` or borrowed from its entry) as
21
+ * the site's result type, owned. A jsval result reads a number cell as an
22
+ * immediate, so arithmetic on it takes no reference and a later store can
23
+ * update an unshared number cell in place; any other cell is carried under
24
+ * the cell tag. */
25
+ export declare function asResult(host: Host, cell: string, e: IrExpr, owned: boolean | string): string;
26
+ /** The helper call of a site's slow path, with the site's evaluated
27
+ * (borrowed) arguments. Ordinary parameters take a reference; borrowed
28
+ * ones lend it. Returns the owned result, or "" for a void helper. */
29
+ export declare function helperCall(host: Host, e: ExprOf<"call">, callee: IrFunction, args: LlValue[]): string;
12
30
  /** A class instance's answer that a method dispatch helper gives by
13
31
  * calling one compiled method: the branch `if (dyn.typedRefIs(p, KEY)) {
14
32
  * M(R, p1, ..., pn); return [js.fromDyn](p) }` of a method that returns
@@ -8,7 +8,8 @@
8
8
  * read slot `slot` inline; otherwise scr_js_get_probe
9
9
  * (polymorphic, prototype hits, absent keys, misses)
10
10
  * store ordinary object whose layout is entry 0's replace layout,
11
- * outside an intact parse region: replace inline; otherwise
11
+ * outside an intact parse region (or storing an inert value,
12
+ * which leaves a region intact): replace inline; otherwise
12
13
  * scr_js_store_probe (adds, polymorphic, misses)
13
14
  * keyed dense array element at an integral number key: inline;
14
15
  * otherwise scr_js_keyed_probe (string keys of ordinary objects)
@@ -33,6 +34,7 @@
33
34
  * ScrJsIc entries of 40 bytes {layout, target, holder,
34
35
  * holder_layout, slot}; 168 bytes in all */
35
36
  import { BOOL, DYN, F64, STRING } from "../../ir/ir.js";
37
+ import { inertValue } from "../../ir/js-groups.js";
36
38
  import { jsIcMethodSites } from "../../ir/js-ic.js";
37
39
  import { mangleBorrowedFunction } from "../mangle.js";
38
40
  import { emitBorrowedInput } from "./borrowed-inputs.js";
@@ -40,6 +42,7 @@ import { classFieldBase, classFieldIndex } from "./classes.js";
40
42
  import { DYN_KIND } from "./dyn.js";
41
43
  import { dispatchesCall } from "./integer-clones.js";
42
44
  import { JS_BITS } from "./jsval-encoding.js";
45
+ import { emitGroupedGet, emitGroupedSet } from "./js-groups.js";
43
46
  import { jsImmediates } from "./jsval.js";
44
47
  /** Words of one ScrJsIc record. */
45
48
  export const JS_IC_WORDS = 21;
@@ -58,18 +61,18 @@ export function jsIcMethods(host) {
58
61
  host.currentTier === "dynamic" &&
59
62
  jsIcMethodSites(host.currentFunctionName, host.loopDepth > 0));
60
63
  }
61
- function gep(host, base, offset) {
64
+ export function gep(host, base, offset) {
62
65
  const p = host.B.tmp();
63
66
  host.B.line(`${p} = getelementptr inbounds i8, ptr ${base}, i64 ${offset}`);
64
67
  return p;
65
68
  }
66
- function load(host, type, base, offset) {
69
+ export function load(host, type, base, offset) {
67
70
  const v = host.B.tmp();
68
71
  host.B.line(`${v} = load ${type}, ptr ${offset === 0 ? base : gep(host, base, offset)}`);
69
72
  return v;
70
73
  }
71
74
  /** Branches to `yes` when the dyn cell `d` has kind `kind`. */
72
- function kindIs(host, d, kind, yes, no) {
75
+ export function kindIs(host, d, kind, yes, no) {
73
76
  const k = load(host, "i32", d, 8);
74
77
  const is = host.B.tmp();
75
78
  host.B.line(`${is} = icmp eq i32 ${k}, ${kind}`);
@@ -85,8 +88,29 @@ function kindIs(host, d, kind, yes, no) {
85
88
  * they made the run 13% faster than one entry, and 26% faster without its
86
89
  * class instances; four were no faster than two. So a site tests entries
87
90
  * 0 and 1, own or prototype, and its probe does the rest. (0 makes every access probe: with a runtime
88
- * built with SCR_JS_VERIFY, that probes every access.) */
89
- const INLINE_WAYS = 2;
91
+ * built with SCR_JS_VERIFY, that probes every access.)
92
+ *
93
+ * SCRIPTC_DEBUG_JS_IC_WAYS=0|1|2 overrides the count for an attribution run,
94
+ * where every access should reach the probe so that the runtime entry points
95
+ * can count it; the value is read once, so one build is one way count. */
96
+ /** The attribution way count `SCRIPTC_DEBUG_JS_IC_WAYS` asks for, or null
97
+ * when the variable is unset. The value changes emitted code, so the build
98
+ * cache keys on it (executable/executable-cache.ts). */
99
+ export function debugJsIcWays(env = process.env) {
100
+ const raw = env["SCRIPTC_DEBUG_JS_IC_WAYS"];
101
+ if (raw === undefined || raw === "")
102
+ return null;
103
+ const ways = Number(raw);
104
+ if (ways !== 0 && ways !== 1 && ways !== 2)
105
+ throw new Error(`SCRIPTC_DEBUG_JS_IC_WAYS must be 0, 1 or 2, got ${raw}`);
106
+ return ways;
107
+ }
108
+ const IC_WAYS_DEBUG = debugJsIcWays();
109
+ const INLINE_WAYS = IC_WAYS_DEBUG ?? 2;
110
+ /* An attribution run gives an object literal's member stores their own probe
111
+ * entry point, so a profile can split them from other stores. With the
112
+ * variable unset the emitted code calls scr_js_store_probe as before. */
113
+ const LITERAL_PROBE = IC_WAYS_DEBUG === null ? "scr_js_store_probe" : "scr_js_literal_probe";
90
114
  const INLINE_PROTO = true;
91
115
  /** The address of slot `slot` of layout-mode object `d`. */
92
116
  function slotAt(host, d, slot) {
@@ -199,7 +223,7 @@ function inlineReplace(host, d, ic, ways, store, miss) {
199
223
  * immediate, so arithmetic on it takes no reference and a later store can
200
224
  * update an unshared number cell in place; any other cell is carried under
201
225
  * the cell tag. */
202
- function asResult(host, cell, e, owned) {
226
+ export function asResult(host, cell, e, owned) {
203
227
  const B = host.B;
204
228
  /** Retains the cell unless the caller owns it. */
205
229
  const hold = () => {
@@ -268,7 +292,7 @@ function asResult(host, cell, e, owned) {
268
292
  /** The helper call of a site's slow path, with the site's evaluated
269
293
  * (borrowed) arguments. Ordinary parameters take a reference; borrowed
270
294
  * ones lend it. Returns the owned result, or "" for a void helper. */
271
- function helperCall(host, e, callee, args) {
295
+ export function helperCall(host, e, callee, args) {
272
296
  const B = host.B;
273
297
  const borrowed = host.callLifetimes.borrowed.get(e.callee);
274
298
  const argList = args
@@ -313,7 +337,7 @@ function capsuleReads(host, helper) {
313
337
  if (receiver === undefined || helper.params.length !== 1)
314
338
  return [];
315
339
  const reads = new Map();
316
- for (const stmt of helper.body) {
340
+ for (const stmt of tableBranches(helper.body)) {
317
341
  if (normalizes(stmt, receiver))
318
342
  continue;
319
343
  if (stmt.kind !== "if" || stmt.else_ !== null)
@@ -346,6 +370,29 @@ function capsuleReads(host, helper) {
346
370
  }
347
371
  return out;
348
372
  }
373
+ /** A class table's branches in the order a receiver that matches none of
374
+ * them reaches their guards: the statements of the body, with a
375
+ * `dyn.classHash` switch replaced by its cases' branches. A capsule whose
376
+ * key is a branch's selects that case, whose guard is then true, so the
377
+ * site can treat the branches as the chain they were lowered from. */
378
+ function tableBranches(body) {
379
+ if (!body.some(isClassHashSwitch))
380
+ return body;
381
+ const branches = [];
382
+ for (const stmt of body) {
383
+ if (isClassHashSwitch(stmt))
384
+ for (const { body: caseBody } of stmt.cases)
385
+ branches.push(...caseBody);
386
+ else
387
+ branches.push(stmt);
388
+ }
389
+ return branches;
390
+ }
391
+ /** The switch the compiler builds over a generated class table's branches
392
+ * (frontend/lowering/class-dynamic-dispatch.ts). */
393
+ function isClassHashSwitch(stmt) {
394
+ return stmt.kind === "switch" && stmt.disc.kind === "libCall" && stmt.disc.fn === "dyn.classHash";
395
+ }
349
396
  /** `p = %dyn.class.normalize(p)`. */
350
397
  function normalizes(stmt, receiver) {
351
398
  return (stmt.kind === "assign" &&
@@ -401,7 +448,7 @@ function normalizationTargets(host) {
401
448
  const value = normalize.params[0]?.localId;
402
449
  if (value === undefined)
403
450
  return null;
404
- for (const stmt of normalize.body) {
451
+ for (const stmt of tableBranches(normalize.body)) {
405
452
  if (stmt.kind === "return") {
406
453
  if (stmt.value !== null && isLocal(stmt.value, value))
407
454
  continue;
@@ -538,7 +585,7 @@ export function capsuleCallSite(host, e, helper) {
538
585
  return null;
539
586
  const branches = new Map();
540
587
  const self = params[0].localId;
541
- for (const stmt of helper.body) {
588
+ for (const stmt of tableBranches(helper.body)) {
542
589
  if (normalizes(stmt, self))
543
590
  continue;
544
591
  if (stmt.kind !== "if" || stmt.else_ !== null)
@@ -578,7 +625,7 @@ export function capsuleCallSite(host, e, helper) {
578
625
  function callbackKeys(callback) {
579
626
  const value = callback.params[0].localId;
580
627
  const keys = new Set();
581
- const body = callback.body;
628
+ const body = tableBranches(callback.body);
582
629
  for (let i = 0; i < body.length; i++) {
583
630
  const stmt = body[i];
584
631
  if (normalizes(stmt, value))
@@ -800,6 +847,11 @@ export function emitJsIcCall(host, e, callee, site) {
800
847
  }
801
848
  }
802
849
  function emitGet(host, e, callee, key) {
850
+ // A member of a guard group reads through the group's entry (js-groups.ts)
851
+ // unless its guard is not in effect here.
852
+ const grouped = emitGroupedGet(host, e, callee);
853
+ if (grouped !== null)
854
+ return grouped;
803
855
  const B = host.B;
804
856
  const receiver = emitBorrowedInput(host, e.args[0]);
805
857
  const name = keyString(host, key, e);
@@ -894,17 +946,31 @@ function numberResult(host, d, e) {
894
946
  B.line(`${cell} = call ptr @scr_dyn_new_num(double ${d})`);
895
947
  return cell;
896
948
  }
949
+ /** The jsval word of a store's value when the jsval pass left one: the
950
+ * operand of `js.toDyn`. The word of a double is its bits with NaN
951
+ * canonicalized, the same word the pass carries for it. */
952
+ function storeWord(host, value) {
953
+ if (value.kind === "libCall" && value.fn === "js.toDyn")
954
+ return host.emitExpr(value.args[0]).name;
955
+ return null;
956
+ }
897
957
  function emitSet(host, e, callee, key) {
898
958
  const B = host.B;
899
959
  const receiver = emitBorrowedInput(host, e.args[0]);
900
960
  // A value the jsval pass left as `js.toDyn(x)` is stored from the jsval
901
- // itself: a number replaces the value of an unshared number cell in
902
- // place instead of boxing a new one.
961
+ // itself: a number replaces the value of an unshared number cell in place
962
+ // instead of boxing a new one, and the generic path boxes it only where it
963
+ // must store a cell.
903
964
  const stored = e.args[1];
904
- const word = stored.kind === "libCall" && stored.fn === "js.toDyn"
905
- ? host.emitExpr(stored.args[0]).name
906
- : null;
965
+ const word = storeWord(host, stored);
907
966
  const value = word === null ? emitBorrowedInput(host, stored) : null;
967
+ // A member of a guard group stores through the group's entry
968
+ // (js-groups.ts) unless its guard is not in effect here. Its operands are
969
+ // already evaluated: a member read inside the stored value comes first in
970
+ // the group's order.
971
+ const grouped = emitGroupedSet(host, e, callee, receiver, word, value);
972
+ if (grouped !== null)
973
+ return grouped;
908
974
  const name = keyString(host, key, e);
909
975
  const ic = host.jsIcSite();
910
976
  const object = B.newLabel("ics.obj");
@@ -922,11 +988,18 @@ function emitSet(host, e, callee, key) {
922
988
  }
923
989
  kindIs(host, receiver.name, DYN_KIND.OBJ, object, probe);
924
990
  B.startBlock(object);
925
- const region = load(host, "ptr", receiver.name, 72);
926
- const outside = B.tmp();
927
- B.line(`${outside} = icmp eq ptr ${region}, null`);
928
991
  const unshared = B.newLabel("ics.r");
929
- B.condBr(outside, unshared, probe);
992
+ if (inertValue(stored)) {
993
+ // An inert value leaves a parse region intact, so the barrier the probe
994
+ // applies behind the region test cannot fire: the replace stays inline.
995
+ B.br(unshared);
996
+ }
997
+ else {
998
+ const region = load(host, "ptr", receiver.name, 72);
999
+ const outside = B.tmp();
1000
+ B.line(`${outside} = icmp eq ptr ${region}, null`);
1001
+ B.condBr(outside, unshared, probe);
1002
+ }
930
1003
  B.startBlock(unshared);
931
1004
  host.declare(`declare ptr @scr_js_to_dyn_borrow(ptr)`);
932
1005
  inlineReplace(host, receiver.name, ic, INLINE_WAYS, (slot) => {
@@ -1258,9 +1331,9 @@ function emitKeyed(host, e, callee) {
1258
1331
  export function emitJsIcLiteralMember(host, obj, key, value) {
1259
1332
  const B = host.B;
1260
1333
  const ic = host.jsIcSite();
1261
- host.declare(`declare zeroext i1 @scr_js_store_probe(ptr, ptr, ptr, ptr)`);
1334
+ host.declare(`declare zeroext i1 @${LITERAL_PROBE}(ptr, ptr, ptr, ptr)`);
1262
1335
  const done = B.tmp();
1263
- B.line(`${done} = call zeroext i1 @scr_js_store_probe(ptr ${obj}, ptr ${key}, ptr ${value}, ptr ${ic})`);
1336
+ B.line(`${done} = call zeroext i1 @${LITERAL_PROBE}(ptr ${obj}, ptr ${key}, ptr ${value}, ptr ${ic})`);
1264
1337
  const slow = B.newLabel("icl.slow");
1265
1338
  const join = B.newLabel("icl.j");
1266
1339
  B.condBr(done, join, slow);