@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
@@ -1,14 +1,20 @@
1
+ import { lowerIteratorMemberValue } from "../iterator-prototype.js";
1
2
  import { widensReducedRecords } from "../function-returns.js";
3
+ import { nullishReadTypeError, throwAfterEach } from "../primitive-throws.js";
2
4
  import { lowerStaticPrivateRead } from "../private-statics.js";
3
5
  import { widthNarrowHelper } from "../coercions/unions.js";
4
6
  /* Property reads (`a.b`): lowerExprInner's property-access branch, intrinsic and union properties, field reads and targets, and match-group reads. */
5
7
  import { jsSpecialGlobalValue } from "../global-values.js";
8
+ import { HOST_GLOBAL_PROTOTYPE_MEMBERS, HOST_GLOBAL_VALUE_MEMBERS, hostGlobalCallTarget, hostGlobalNameOfMember, hostGlobalNameOfRead, hostGlobalPrototypeOf, } from "../host-globals.js";
9
+ import { hostGlobalValue } from "../host-global-values.js";
10
+ import { globalFunctionValue } from "../global-function-values.js";
6
11
  import { arrayClassMemberOwner, arrayClassReceiver, lowerArrayClassConstructorRead, } from "../builtins/array-classes.js";
7
12
  import { indexedUnionArms, lowerIndexedUnionMember } from "../indexed-unions.js";
8
13
  import { keyedHelperName } from "../stable-names.js";
9
14
  import { builtinNamespaceValue } from "../builtin-namespaces.js";
10
15
  import { staticallySelected } from "../static-typeof.js";
11
16
  import { lowerWebStreamClassRead } from "../builtins/web-streams-dyn.js";
17
+ import { wrapperConstructors } from "../primitive-wrappers.js";
12
18
  import * as ts from "../../ts7/adapter.js";
13
19
  import { lowerHistogramProperty } from "../builtins/performance.js";
14
20
  import { staticFunctionNameRead } from "../static-function-names.js";
@@ -18,7 +24,7 @@ import { isThisParameter } from "../call-signatures.js";
18
24
  import { argumentCountSlot, contextualCallCount, usedAsValue } from "../argument-counts.js";
19
25
  import { checkedPrivateValue, localPrivateBrandClass, privateNameClass, } from "../private-brands.js";
20
26
  import { PoisonError, builtinValueNameOf, jsFuncNameOf, neverTaintedJsType, own, } from "../lowerer.js";
21
- import { ARRAY_METHODS, MAP_METHODS, NARROW_FIRST, OBJECT_CALLABLE_VALUES, SET_METHODS, STDLIB_SURFACE, STRING_INDEX_METHODS, STR_METHODS, isChildSurfaceMember, stdlibGlobalNameOf, } from "../surfaces.js";
27
+ import { ARRAY_METHODS, MAP_METHODS, NARROW_FIRST, SET_METHODS, STDLIB_SURFACE, STRING_INDEX_METHODS, STR_METHODS, isChildSurfaceMember, stdlibGlobalNameOf, } from "../surfaces.js";
22
28
  import { isGenericCallableMemberType, isLegacyUrlSymbol, isOsConstantsType, isParseArgsDynTypeName, } from "../../type-mapper.js";
23
29
  import { BIGINT_T, BOOL, BYTES_U8, DYN, F64, NULL_T, SEARCH_PARAMS_T, STRING, SYMBOL_T, UNDEFINED_T, arrayOf, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isUnitType, typeEquals, typeKey, unionContainerArmsOk, BYTES_ELEMENT_SIZE, } from "../../../ir/ir.js";
24
30
  import { lowerNavigatorMember, navigatorValue } from "../builtins/navigator.js";
@@ -41,10 +47,11 @@ import { hasOptionalChainGuard, isOptionalChainTail, isRequireMainFilename, } fr
41
47
  import { isCjsModuleGlobal, lowerNodeModuleProperty, lowerRequireMainProperty, } from "../lower-node-module.js";
42
48
  import { dynUndefinedExpr, nodeThrowExpr, numLit, strLit, varRef } from "../../../ir/build.js";
43
49
  import { typedArrayLacksMember } from "../builtins/typed-array-members.js";
44
- import { TEMPORAL_GLOBAL } from "../../builtin-modules.js";
50
+ import { COMMONJS_MODULE_BINDINGS, TEMPORAL_GLOBAL } from "../../builtin-modules.js";
45
51
  import { tryLowerExpression } from "./try-lower-expression.js";
46
52
  import { applyDeferredAssertion, assertedReceiverNode, deferredMemberReadTarget, deferredProbeReadAccess, } from "./asserted-receiver.js";
47
53
  import { lowerRecordInheritedMember } from "../record-inherited.js";
54
+ import { MUTABLE_BUFFER_MEMBERS } from "../buffers.js";
48
55
  import { DATE_METHOD_HINT } from "../builtins/dates.js";
49
56
  import { cjsClassExprWholeExportOf, cjsExportAssignmentOf, cjsExportDiscardReason, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, isNodeEsmFile, locOf, } from "../../program.js";
50
57
  import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, contextualUndefReadType, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "../lower-namespaces.js";
@@ -64,9 +71,9 @@ import { npmStaticPackageOfPath } from "../../npm-static.js";
64
71
  import { importMetaField, isImportMeta } from "../import-meta.js";
65
72
  import { createRequireCalleeFileOf } from "../builtins/module-bindings.js";
66
73
  import { createRequireResolveFenceValue, createRequireResolveValue, } from "../builtins/module-resolution.js";
67
- import { builtinPrototypeMethod, lowerArrayIsArrayValue, lowerCheckedPredicateValue, lowerNumberParserValue, lowerObjectAssignValue, lowerStringCodesValue, } from "../lower-builtin-values.js";
68
- import { lowerArrayFromValue } from "../containers/array-construction.js";
69
- import { lowerBufferPrototypeMember } from "../containers/bytes.js";
74
+ import { builtinPrototypeMethod, lowerCheckedPredicateValue } from "../lower-builtin-values.js";
75
+ import { constructorStaticValue, objectFreezeValue } from "../builtin-statics.js";
76
+ import { lowerBufferPrototypeMember, lowerBufferPrototypeObject } from "../containers/bytes.js";
70
77
  import { lowerNetAddressStaticRead } from "../builtins/net-address.js";
71
78
  import { STATS_TYPE_TESTS } from "../builtins/filesystem.js";
72
79
  import { arrayValueRead, arrayValueType } from "../array-values.js";
@@ -75,7 +82,7 @@ import { reflectMemberValue } from "../builtins/reflection.js";
75
82
  import { objLitGenericFnInfoOf, objLitGenericFnNodeOf, requireObjLitGenericReceiver, } from "../generic-functions.js";
76
83
  import { narrowStoredClassValue, structuralReadType } from "../class-unions.js";
77
84
  import { InternalCompilerError } from "../../../errors.js";
78
- import { lowerUnionFieldRead } from "./union-fields.js";
85
+ import { lowerUnionFieldRead, narrowedArmRead, narrowedUnionView } from "./union-fields.js";
79
86
  import { errorPropertyRead } from "../error-methods.js";
80
87
  import { isSafeToDiscard, isSafeToRepeat } from "./evaluation-safety.js";
81
88
  import { partialAssertionFields, partialFieldRead } from "../partial-assertions.js";
@@ -159,6 +166,26 @@ function isStatFsDynProperty(lowerer, expr) {
159
166
  return false;
160
167
  }));
161
168
  }
169
+ /** The Iterator.prototype helpers and the iterator members with no typed
170
+ * value lowering, read as values on a typed iterator in JavaScript.
171
+ * `next` and `return` answer the function Node's prototype chain holds
172
+ * (a generator's, or an iterator helper object's); `throw` is not here
173
+ * because an iterator helper object has none. */
174
+ const TYPED_ITERATOR_MEMBER_VALUES = new Set([
175
+ "next",
176
+ "map",
177
+ "filter",
178
+ "take",
179
+ "drop",
180
+ "flatMap",
181
+ "reduce",
182
+ "toArray",
183
+ "forEach",
184
+ "some",
185
+ "every",
186
+ "find",
187
+ "return",
188
+ ]);
162
189
  /** The dgram.Socket methods its checked-dynamic handle answers as
163
190
  * function values (scr_dgram.c's scr_dgram_dyn_method_names). */
164
191
  const DGRAM_METHOD_VALUES = new Set([
@@ -177,6 +204,22 @@ const DGRAM_METHOD_VALUES = new Set([
177
204
  "ref",
178
205
  "unref",
179
206
  ]);
207
+ /** A lib builtin iterator whose prototype chain holds no `return` in Node
208
+ * 24: the Array, String, Map and Set iterators. Generators and iterator
209
+ * helper objects do have one. */
210
+ function builtinIteratorWithoutReturn(lowerer, node) {
211
+ const symbol = lowerer.typeOf(node).getSymbol();
212
+ if (symbol === undefined)
213
+ return false;
214
+ const name = ts.symbolName(symbol);
215
+ if (name !== "ArrayIterator" &&
216
+ name !== "StringIterator" &&
217
+ name !== "MapIterator" &&
218
+ name !== "SetIterator")
219
+ return false;
220
+ return (symbol.declarations.length > 0 &&
221
+ symbol.declarations.every((d) => lowerer.isStdlibFile(ts.getSourceFileOfNode(d))));
222
+ }
180
223
  function isCreateRequireResolveValue(lowerer, expr) {
181
224
  let resolve = expr;
182
225
  if (expr.name.text === "paths" &&
@@ -189,6 +232,11 @@ function isCreateRequireResolveValue(lowerer, expr) {
189
232
  createRequireCalleeFileOf(lowerer, resolve.expression) !== null);
190
233
  }
191
234
  export function lowerPropertyAccessExpr(lowerer, expr, loc) {
235
+ // A JavaScript source reading a member that resizes, grows or detaches a
236
+ // buffer is the mutableBuffers fact (buffers.ts, t262-dc §2.4). The name
237
+ // decides: the receiver may be a checked-dynamic value.
238
+ if (MUTABLE_BUFFER_MEMBERS.has(expr.name.text) && isJsSourceFile(ts.getSourceFileOfNode(expr)))
239
+ lowerer.buffersMutable = true;
192
240
  const arrayClassConstructor = lowerArrayClassConstructorRead(lowerer, expr, loc);
193
241
  if (arrayClassConstructor !== null)
194
242
  return arrayClassConstructor;
@@ -233,7 +281,7 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
233
281
  };
234
282
  }
235
283
  {
236
- const member = lowerBufferPrototypeMember(lowerer, expr);
284
+ const member = lowerBufferPrototypeMember(lowerer, expr) ?? lowerBufferPrototypeObject(lowerer, expr);
237
285
  if (member)
238
286
  return member;
239
287
  }
@@ -430,33 +478,8 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
430
478
  loc,
431
479
  };
432
480
  }
433
- if (lowerer.stdlibGlobalMember(expr, "Object") === "freeze") {
434
- // Object.freeze as a value can freeze any untyped value it is passed.
435
- lowerer.untypedIntegrity = true;
436
- const name = "%builtin.Object.freeze";
437
- if (!lowerer.liftedFns.some((fn) => fn.name === name))
438
- lowerer.liftedFns.push({
439
- name,
440
- params: [{ localId: "value", name: "value", type: DYN }],
441
- locals: [{ id: "value", name: "value", type: DYN, mutable: false }],
442
- returnType: DYN,
443
- body: [
444
- {
445
- kind: "return",
446
- value: {
447
- kind: "libCall",
448
- fn: "dyn.freeze",
449
- args: [varRef("value", DYN, loc)],
450
- type: DYN,
451
- loc,
452
- },
453
- loc,
454
- },
455
- ],
456
- loc,
457
- });
458
- return { kind: "closure", fnName: name, captures: [], type: funcOf([DYN], DYN), loc };
459
- }
481
+ if (lowerer.stdlibGlobalMember(expr, "Object") === "freeze")
482
+ return objectFreezeValue(lowerer, loc);
460
483
  // An Hmac has no copy() (Hash does): Node answers undefined, which
461
484
  // `typeof mac.copy` feature checks read. TypeScript rejects the read.
462
485
  if (expr.name.text === "copy" &&
@@ -487,6 +510,38 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
487
510
  loc,
488
511
  };
489
512
  }
513
+ // A read of a Node 24 global the native runtime does not implement
514
+ // (globalThis.WebSocket, (globalThis as T).FormData, alias.X) is not a
515
+ // capability probe: the branch below would answer undefined, where Node
516
+ // has the constructor. Answer the constructor (host-global-values.ts);
517
+ // constructing or calling it is the use that refuses (SC2020,
518
+ // host-global).
519
+ {
520
+ const hostGlobal = hostGlobalNameOfMember(lowerer, expr);
521
+ if (hostGlobal !== null) {
522
+ if (hostGlobalCallTarget(expr))
523
+ lowerer.hostGlobalFence(hostGlobal, expr);
524
+ return hostGlobalValue(lowerer, hostGlobal, expr);
525
+ }
526
+ }
527
+ // A member read off that value (`WebSocket.OPEN`, `FormData.prototype`):
528
+ // the value carries the function intrinsics only, and its prototype
529
+ // carries the constructor link (`FormData.prototype.constructor`). Node's
530
+ // class also has static members and instance methods, which native code
531
+ // does not provide, so reading one is a use of that surface and refuses
532
+ // (SC2020, host-global) instead of answering undefined.
533
+ {
534
+ const hostGlobal = hostGlobalNameOfRead(lowerer, expr.expression);
535
+ if (hostGlobal !== null) {
536
+ if (!HOST_GLOBAL_VALUE_MEMBERS.has(expr.name.text))
537
+ lowerer.hostGlobalFence(hostGlobal, expr);
538
+ }
539
+ else {
540
+ const prototypeOf = hostGlobalPrototypeOf(lowerer, expr.expression);
541
+ if (prototypeOf !== null && !HOST_GLOBAL_PROTOTYPE_MEMBERS.has(expr.name.text))
542
+ lowerer.hostGlobalFence(prototypeOf, expr);
543
+ }
544
+ }
490
545
  // Missing host globals (Bun/Deno capability probes) have no binding
491
546
  // in a native program. Declared globals retain their own lowering;
492
547
  // arbitrary global-object mutation remains fenced. Preserve a dyn
@@ -874,8 +929,9 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
874
929
  if (canonical !== null) {
875
930
  if (canonical === "globalThis")
876
931
  return lowerGlobalValue(lowerer, expr);
877
- // Typed for the programs that name it, absent in Node 24.
878
- if (canonical === TEMPORAL_GLOBAL)
932
+ // Typed for the programs that name it, absent in Node 24, and the
933
+ // CommonJS module bindings, which the global object does not hold.
934
+ if (canonical === TEMPORAL_GLOBAL || COMMONJS_MODULE_BINDINGS.has(canonical))
879
935
  return dynUndefinedExpr(loc);
880
936
  const value = jsSpecialGlobalValue(lowerer, canonical, loc);
881
937
  if (value)
@@ -1037,14 +1093,19 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1037
1093
  // by the property or function it reads. A builtin function value
1038
1094
  // keeps its length when that is not its adapter's parameter count
1039
1095
  // (`Math.max.length` is 2).
1040
- const fnName = builtinValueNameOf(expr.expression, lowerer) ?? jsFuncNameOf(expr.expression, lowerer);
1041
- const fnLength = lowerer.builtinFunctionIdentity(probed).fnLength;
1096
+ const builtinName = builtinValueNameOf(expr.expression, lowerer);
1097
+ const fnName = builtinName ?? jsFuncNameOf(expr.expression, lowerer);
1098
+ const identity = lowerer.builtinFunctionIdentity(probed);
1099
+ const fnLength = identity.fnLength;
1042
1100
  const boxed = {
1043
1101
  kind: "dynFrom",
1044
1102
  value: probed,
1045
1103
  type: DYN,
1046
1104
  ...(fnName !== null ? { fnName } : {}),
1047
1105
  ...(fnLength !== undefined ? { fnLength } : {}),
1106
+ ...(builtinName !== null && identity.fnNameMainThreadOnly
1107
+ ? { fnNameMainThreadOnly: true }
1108
+ : {}),
1048
1109
  loc,
1049
1110
  };
1050
1111
  const key = {
@@ -1129,7 +1190,13 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1129
1190
  isStatFsDynProperty(lowerer, expr) ||
1130
1191
  segmentDataProperty ||
1131
1192
  osConstants ||
1132
- isLegacyUrlSymbol(lowerer.checker.getSymbolAtLocation(expr.name), lowerer)) {
1193
+ // A record, not the Lowerer itself: the compiler lowers its own source,
1194
+ // and a class instance does not width-coerce to this shape.
1195
+ isLegacyUrlSymbol(lowerer.checker.getSymbolAtLocation(expr.name), {
1196
+ isStdlibFile: (sf) => lowerer.isStdlibFile(sf),
1197
+ symbolProvenance: lowerer.symbolProvenance,
1198
+ verifySymbolProvenance: lowerer.verifySymbolProvenance,
1199
+ })) {
1133
1200
  const recv = lowerer.lowerExpr(expr.expression);
1134
1201
  if (recv.type.kind === "dyn") {
1135
1202
  const key = {
@@ -1443,6 +1510,22 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1443
1510
  typedArrayLacksMember(expr.name.text, recvLowered.type.elem === "u8")) {
1444
1511
  return afterReceiver(recvLowered, dynUndefinedExpr(loc), loc);
1445
1512
  }
1513
+ // Buffer.prototype's parent and offset getters, which @types/node does not
1514
+ // declare (so only JavaScript reads them): the box answers a Buffer's
1515
+ // ArrayBuffer and byteOffset, and undefined for a Uint8Array, by the
1516
+ // runtime flag that tells the two apart.
1517
+ if (recvLowered.type.kind === "bytes" &&
1518
+ recvLowered.type.elem === "u8" &&
1519
+ (expr.name.text === "parent" || expr.name.text === "offset") &&
1520
+ !declaredMemberOf(lowerer, expr.expression, expr.name.text)) {
1521
+ return {
1522
+ kind: "dynKeyGet",
1523
+ value: lowerer.coerceToExpected(recvLowered, DYN),
1524
+ key: { kind: "strLit", value: expr.name.text, type: STRING, loc },
1525
+ type: DYN,
1526
+ loc,
1527
+ };
1528
+ }
1446
1529
  // A typed array under a checker `any` (a JS binding its own initializer's
1447
1530
  // inference refers to: hono's etag digest `nextChunk`) reads through its
1448
1531
  // box, as the method-call twin dispatches. The box shares the native
@@ -1457,6 +1540,25 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1457
1540
  loc,
1458
1541
  }, expr);
1459
1542
  }
1543
+ // A NULLISH receiver: JavaScript's RequireObjectCoercible throws Node's
1544
+ // TypeError at the read (only an optional chain, lowered elsewhere,
1545
+ // answers undefined). A primitive receiver that is not nullish never
1546
+ // reaches this fence — its members lower above.
1547
+ if (isUnitType(recvLowered.type)) {
1548
+ const unit = recvLowered.type.kind === "nullT" ? "null" : "undefined";
1549
+ const t = ambientUndefReadType(lowerer, expr) ?? contextualUndefReadType(lowerer, expr) ?? F64;
1550
+ return throwAfterEach([recvLowered], nullishReadTypeError(unit, expr.name.text, t, loc), loc);
1551
+ }
1552
+ // The site is about to be refused: a checker-narrowed receiver still
1553
+ // stores the wider union, whose other arms may be what refuse the member
1554
+ // (the OAuth arm's index signature beside `ApiKeyCredential.key`). Read
1555
+ // it off the arms the checker still allows, exactly where the refusal
1556
+ // would be.
1557
+ if (recvLowered.type.kind === "union") {
1558
+ const read = narrowedUnionValueRead(lowerer, expr, recvLowered);
1559
+ if (read)
1560
+ return read;
1561
+ }
1460
1562
  lowerer.unsupported("SC1090", expr, `reading '${expr.name.text}' from a value of type '${lowerer.checker.typeToString(lowerer.typeOf(expr.expression))}'`);
1461
1563
  }
1462
1564
  /** `result` after evaluating `receiver` for its effects (none to keep when
@@ -1828,6 +1930,45 @@ export function lowerIntrinsicProperty(lowerer, expr) {
1828
1930
  fenceDatePrototypeWrite(lowerer, expr);
1829
1931
  if (lowerer.chainBlocked(expr))
1830
1932
  return null;
1933
+ // Iterator.prototype, its members and Iterator's own members in
1934
+ // JavaScript: the live objects (scr_js_iterator.c).
1935
+ const iteratorMember = lowerIteratorMemberValue(lowerer, expr);
1936
+ if (iteratorMember)
1937
+ return iteratorMember;
1938
+ // A helper method read as a value on a typed iterator in JavaScript
1939
+ // (`g().map === Iterator.prototype.map`), or a member the typed iterator
1940
+ // has no lowering for (`[].values().return` is undefined): the value the
1941
+ // runtime answers through the boxed iterator, exactly Node's.
1942
+ if (!expr.questionDotToken &&
1943
+ TYPED_ITERATOR_MEMBER_VALUES.has(expr.name.text) &&
1944
+ isJsSourceFile(ts.getSourceFileOfNode(expr))) {
1945
+ const recvT = lowerer.mapTypeOf(lowerer.typeOf(expr.expression));
1946
+ if (recvT?.kind === "generator" && recvT.async !== true) {
1947
+ // Node's builtin iterators (%ArrayIteratorPrototype%'s family) hold
1948
+ // no `return`; a generator's and an iterator helper object's do.
1949
+ if (expr.name.text === "return" && builtinIteratorWithoutReturn(lowerer, expr.expression))
1950
+ return {
1951
+ kind: "seqExpr",
1952
+ stmts: [
1953
+ {
1954
+ kind: "exprStmt",
1955
+ expr: lowerer.lowerExpr(expr.expression),
1956
+ loc: locOf(expr.expression),
1957
+ },
1958
+ ],
1959
+ result: dynUndefinedExpr(locOf(expr)),
1960
+ type: DYN,
1961
+ loc: locOf(expr),
1962
+ };
1963
+ return {
1964
+ kind: "dynKeyGet",
1965
+ value: lowerer.coerceToExpected(lowerer.lowerExpr(expr.expression), DYN),
1966
+ key: { kind: "strLit", value: expr.name.text, type: STRING, loc: locOf(expr.name) },
1967
+ type: DYN,
1968
+ loc: locOf(expr),
1969
+ };
1970
+ }
1971
+ }
1831
1972
  // Object.prototype.constructor: the Object constructor value.
1832
1973
  if (expr.name.text === "constructor" &&
1833
1974
  ts.isPropertyAccessExpression(expr.expression) &&
@@ -1903,19 +2044,9 @@ export function lowerIntrinsicProperty(lowerer, expr) {
1903
2044
  }
1904
2045
  if (lowerer.stdlibGlobalMember(expr, "Object") === "prototype")
1905
2046
  return { kind: "libCall", fn: "dyn.objectPrototype", args: [], type: DYN, loc: locOf(expr) };
1906
- // Error.prototype as a value (`F.prototype = Object.create(Error.prototype)`)
1907
- // and Error.captureStackTrace read as a function (`if
1908
- // (Error.captureStackTrace) ...`).
2047
+ // Error.prototype as a value (`F.prototype = Object.create(Error.prototype)`).
1909
2048
  if (isErrorPrototypeValue(lowerer, expr))
1910
2049
  return { kind: "libCall", fn: "dyn.errorPrototype", args: [], type: DYN, loc: locOf(expr) };
1911
- if (lowerer.stdlibGlobalMember(expr, "Error") === "captureStackTrace")
1912
- return {
1913
- kind: "libCall",
1914
- fn: "dyn.errorCaptureStackTraceFunction",
1915
- args: [],
1916
- type: DYN,
1917
- loc: locOf(expr),
1918
- };
1919
2050
  // Function.prototype as a VALUE (a prototype-chain link:
1920
2051
  // `Object.setPrototypeOf(F.prototype, Function.prototype)`): one
1921
2052
  // anonymous function answering undefined, length 0 — a zero-capture
@@ -1944,16 +2075,19 @@ export function lowerIntrinsicProperty(lowerer, expr) {
1944
2075
  loc,
1945
2076
  };
1946
2077
  }
1947
- if (lowerer.stdlibGlobalMember(expr, "Array") === "isArray")
1948
- return lowerArrayIsArrayValue(lowerer, locOf(expr));
1949
- if (lowerer.stdlibGlobalMember(expr, "Array") === "from")
1950
- return lowerArrayFromValue(lowerer, locOf(expr));
1951
- const stringMember = lowerer.stdlibGlobalMember(expr, "String");
1952
- if (stringMember === "fromCharCode" || stringMember === "fromCodePoint")
1953
- return lowerStringCodesValue(lowerer, stringMember, locOf(expr));
1954
- const numberMember = lowerer.stdlibGlobalMember(expr, "Number");
1955
- if (numberMember === "parseInt" || numberMember === "parseFloat")
1956
- return lowerNumberParserValue(lowerer, numberMember, locOf(expr));
2078
+ // Array.isArray, Object.keys, Date.now, Error.captureStackTrace (`if
2079
+ // (Error.captureStackTrace) ...`) and the other statics with function
2080
+ // values: the same values a read through the constructor's untyped value
2081
+ // answers (builtin-statics.ts).
2082
+ {
2083
+ const owner = stdlibGlobalNameOf(lowerer, expr.expression);
2084
+ const member = owner === null ? null : lowerer.stdlibGlobalMember(expr, owner);
2085
+ const value = owner === null || member === null
2086
+ ? null
2087
+ : constructorStaticValue(lowerer, owner, member, locOf(expr));
2088
+ if (value !== null)
2089
+ return value;
2090
+ }
1957
2091
  if (lowerer.stdlibGlobalMember(expr, "Buffer") === "poolSize")
1958
2092
  return { kind: "libCall", fn: "buffer.poolSize", args: [], type: F64, loc: locOf(expr) };
1959
2093
  {
@@ -2006,20 +2140,6 @@ export function lowerIntrinsicProperty(lowerer, expr) {
2006
2140
  { mode: "required", type: DYN },
2007
2141
  ],
2008
2142
  }, "Buffer.compare", locOf(expr));
2009
- if (lowerer.stdlibGlobalMember(expr, "Date") === "now")
2010
- return lowerer.lowerNativeCallableValue({
2011
- fn: "date.now",
2012
- params: [],
2013
- result: F64,
2014
- valueParams: [],
2015
- }, "Date.now", locOf(expr));
2016
- if (stdlibGlobalNameOf(lowerer, expr.expression) === "Object") {
2017
- if (expr.name.text === "assign")
2018
- return lowerObjectAssignValue(lowerer, locOf(expr));
2019
- const fn = own(OBJECT_CALLABLE_VALUES, expr.name.text);
2020
- if (fn)
2021
- return lowerer.lowerNativeCallableValue(fn, `Object.${expr.name.text}`, locOf(expr));
2022
- }
2023
2143
  // A never-tainted JS receiver type lowered checked-dynamic
2024
2144
  // (neverTaintedJsType — `cmd.length` on `const cmd = ['pwd', []]`):
2025
2145
  // stand down so the dyn keyed read below the chain answers, instead
@@ -2457,6 +2577,21 @@ export function lowerIntrinsicProperty(lowerer, expr) {
2457
2577
  const receiver = expected?.kind === "bytes" ? strictReceiver(expected) : lowerer.lowerExpr(expr.expression);
2458
2578
  return { kind: "bytesIntrinsic", method: "buffer", receiver, args: [], type: DYN, loc };
2459
2579
  }
2580
+ // A method read as a value in JavaScript (`buf.indexOf ===
2581
+ // Buffer.prototype.indexOf`, `const write = buf.writeUInt8`): the box
2582
+ // answers the function Node's prototype holds, which runs on the
2583
+ // receiver it is called with.
2584
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr))) {
2585
+ const expected = lowerer.mapTypeOf(lowerer.typeOf(expr.expression));
2586
+ const receiver = expected?.kind === "bytes" ? strictReceiver(expected) : lowerer.lowerExpr(expr.expression);
2587
+ return {
2588
+ kind: "dynKeyGet",
2589
+ value: lowerer.coerceToExpected(receiver, DYN),
2590
+ key: { kind: "strLit", value: name, type: STRING, loc },
2591
+ type: DYN,
2592
+ loc,
2593
+ };
2594
+ }
2460
2595
  if (name === "slice" || name === "subarray" || name === "set" || name === "toString") {
2461
2596
  lowerer.unsupported("SC1090", expr, `typed-array methods as values (call '${name}' directly)`);
2462
2597
  }
@@ -3455,10 +3590,16 @@ export function lowerUnionProperty(lowerer, expr) {
3455
3590
  loc: locOf(expr),
3456
3591
  };
3457
3592
  }
3593
+ if (isUnitType(value.type)) {
3594
+ // A nullish receiver: Node's RequireObjectCoercible TypeError, after
3595
+ // the receiver's own evaluation.
3596
+ const unit = value.type.kind === "nullT" ? "null" : "undefined";
3597
+ return throwAfterEach([value], nullishReadTypeError(unit, expr.name.text, lowerer.mapTypeOf(lowerer.typeOf(expr)) ?? DYN, locOf(expr)), locOf(expr));
3598
+ }
3458
3599
  if (value.type.kind !== "union") {
3459
3600
  lowerer.unsupported("SC1090", expr, "shared property access without a represented union receiver");
3460
3601
  }
3461
- const read = lowerUnionValueRead(lowerer, expr, value);
3602
+ const read = lowerUnionValueRead(lowerer, expr, value) ?? narrowedUnionValueRead(lowerer, expr, value);
3462
3603
  if (read)
3463
3604
  return read;
3464
3605
  lowerer.unsupported("SC1090", expr, `reading '${expr.name.text}' on a union-typed value (every arm must be an object/record ` +
@@ -3472,6 +3613,24 @@ export function lowerUnionProperty(lowerer, expr) {
3472
3613
  * receiver still stores. Returns null when no arm can answer — the caller
3473
3614
  * owns the diagnostic. */
3474
3615
  export function lowerUnionValueRead(lowerer, expr, value, missingFieldAsUndefined = false) {
3616
+ return unionValueRead(lowerer, expr, value, missingFieldAsUndefined);
3617
+ }
3618
+ /** The stored-union read again over the arms the checker's narrowing still
3619
+ * allows: an arm it ruled out at this site refused the read (the OAuth
3620
+ * arm's index signature beside `ApiKeyCredential.key`, behind an
3621
+ * optional-chain discriminant guard). Only the REFUSAL points call this —
3622
+ * a site another lowering answers keeps it — so no compiling program
3623
+ * gains a second, narrowed lowering. Returns null when the site's type is
3624
+ * not a narrowing of the value's union. */
3625
+ export function narrowedUnionValueRead(lowerer, expr, value) {
3626
+ const narrowed = narrowedUnionView(lowerer, expr.expression, value, locOf(expr));
3627
+ if (!narrowed)
3628
+ return null;
3629
+ if (narrowed.arm)
3630
+ return narrowedArmRead(lowerer, expr, narrowed.value, narrowed.arm);
3631
+ return unionValueRead(lowerer, expr, narrowed.value, false);
3632
+ }
3633
+ function unionValueRead(lowerer, expr, value, missingFieldAsUndefined) {
3475
3634
  if (value.type.kind !== "union")
3476
3635
  return null;
3477
3636
  const unionId = value.type.unionId;
@@ -4121,6 +4280,54 @@ function readOnlyAccess(access) {
4121
4280
  (parent.operator !== ts.SyntaxKind.PlusPlusToken &&
4122
4281
  parent.operator !== ts.SyntaxKind.MinusMinusToken));
4123
4282
  }
4283
+ /** The operand a member WRITE addresses through a chain of type assertions:
4284
+ * `(p as View).x = v` names `p`. Node erases a type assertion, so a write
4285
+ * mutates the very object the operand names; the assertion only decides what
4286
+ * the checker accepts. Null when no `as`/`<T>` wraps the receiver (a write
4287
+ * there keeps the ordinary lowering). */
4288
+ function assertionOperand(access) {
4289
+ let node = access.expression;
4290
+ let asserted = false;
4291
+ for (;;) {
4292
+ if (ts.isParenthesizedExpression(node)) {
4293
+ node = node.expression;
4294
+ continue;
4295
+ }
4296
+ if (ts.isAsExpression(node) || ts.isTypeAssertion(node)) {
4297
+ node = node.expression;
4298
+ asserted = true;
4299
+ continue;
4300
+ }
4301
+ break;
4302
+ }
4303
+ return asserted ? node : null;
4304
+ }
4305
+ /** The unasserted value a member write addresses, when its OWN stored
4306
+ * layout holds the member at the asserted type — the erased write of Node.
4307
+ * The asserted view's conversion may instead build a fresh width record
4308
+ * (`%rec.width`), and a write into that temporary is dropped, so a view
4309
+ * that adds a member to a record has nothing to write and the caller
4310
+ * refuses. Only a RECORD operand converts like that: a dyn value's cast is
4311
+ * a checked, identity-preserving view (`dyn-literal-identity.ts`), and the
4312
+ * ordinary lowering already writes through it. The static type decides, so
4313
+ * the operand is lowered exactly once even when it has side effects. */
4314
+ function assertedWrite(lowerer, access, operand, fieldType, assertedType) {
4315
+ if (lowerer.mapTypeOf(lowerer.typeOf(operand))?.kind !== "record") {
4316
+ return { receiver: null, refuse: false };
4317
+ }
4318
+ const value = lowerer.lowerExpr(operand);
4319
+ if (value.type.kind === "record") {
4320
+ const field = lowerer.shapes
4321
+ .get(value.type.shapeId)
4322
+ ?.fields.find((f) => f.name === access.name.text);
4323
+ return field && typeEquals(field.type, fieldType)
4324
+ ? { receiver: value, refuse: false }
4325
+ : { receiver: null, refuse: true };
4326
+ }
4327
+ // The value stayed non-record (a generic body, an aliased layout): keep
4328
+ // the assertion's conversion over the value already lowered.
4329
+ return { receiver: lowerer.coerceInto(access.expression, value, assertedType), refuse: false };
4330
+ }
4124
4331
  export function fieldTarget(lowerer, access) {
4125
4332
  if (lowerer.cjsLocalModuleBindingOf(access.expression))
4126
4333
  return null;
@@ -4212,38 +4419,76 @@ export function fieldTarget(lowerer, access) {
4212
4419
  if (receiverIr?.kind === "union" && hasClassPayload(lowerer, receiverIr)) {
4213
4420
  return representedClassFieldTarget(lowerer, access.expression, access.name.text, lowerer.lowerExpr(access.expression));
4214
4421
  }
4215
- // A generic receiver's member the INSTANTIATION cannot store: the type
4216
- // parameter's constraint declares the member (so tsc admits the read),
4217
- // while the record the parameter was instantiated with has no such slot —
4218
- // a generic options bag read through its constraint (`options.sessionId`
4219
- // under an `"sessionId" in options` guard) at a call site whose options
4220
- // literal omits the optional member. Node reads the property off the
4221
- // object it actually has: undefined when the caller omitted it, the extra
4222
- // property when a JavaScript caller supplied one. So the read is the
4223
- // checked-dynamic keyed read of the stored record, entering the static
4224
- // code at the type the checker gave the read.
4225
- if (!access.questionDotToken &&
4226
- readOnlyAccess(access) &&
4227
- typeParameterReceiver(lowerer.typeOf(access.expression))) {
4422
+ // A member the checker ADMITS on a receiver that has no static layout: a
4423
+ // write through an assertion on a checked-dynamic value (a caught binding
4424
+ // — `(error as { headers?: Headers }).headers = undefined`). Node erases
4425
+ // the assertion, so the write lands on the runtime object as an own
4426
+ // property; the checked-dynamic keyed write sets exactly that, and the
4427
+ // class-typed value converts at the write like every other dyn→static edge.
4428
+ if (receiverIr?.kind === "dyn" && !readOnlyAccess(access)) {
4429
+ // The assertion itself may be unrepresentable (a class member on a
4430
+ // structural view); it is erased at runtime, so address the operand.
4431
+ const writeOperand = assertionOperand(access);
4432
+ const admitted = lowerer.mapTypeOf(lowerer.typeOf(access));
4433
+ if (writeOperand && admitted && admitted.kind !== "void")
4434
+ return {
4435
+ container: "dynamic",
4436
+ obj: lowerer.coerceToExpected(lowerer.lowerExpr(writeOperand), DYN),
4437
+ field: access.name.text,
4438
+ fieldType: admitted,
4439
+ };
4440
+ }
4441
+ // A member the checker ADMITS but the stored layout cannot hold. The
4442
+ // constraint of a type parameter declares it (a generic options bag read
4443
+ // through an `"sessionId" in options` guard, or `options?.apiKey` with the
4444
+ // guarded spelling), and so does a cast that intersects the member onto a
4445
+ // record (`options as Omit<T, "k"> & ProviderRequestOptions<M>`), while the
4446
+ // record the value was STORED as has no such slot: the call site omitted the
4447
+ // optional member, the instantiation is a union of option shapes, or the cast
4448
+ // added a member its source layout never declared. Node reads the property
4449
+ // off the object it actually has — undefined when the object lacks it, the
4450
+ // value when the value kept one — so the read is the checked-dynamic keyed
4451
+ // read of the stored value, entering the static code at the type the checker
4452
+ // gave the read (a failed conversion throws; it never diverges).
4453
+ //
4454
+ // Inside a `?.` chain this lowering runs on the re-dispatch, with the
4455
+ // receiver node bound to the chain's present (non-nullish) arm, so the
4456
+ // stored value is already the record and the chain supplies the guard.
4457
+ if ((!access.questionDotToken || lowerer.chainHandled.has(access)) && readOnlyAccess(access)) {
4228
4458
  const storedIr = stored ?? narrowed;
4229
- const arm = storedIr?.kind === "union" ? lowerer.stripUndefinedArm(storedIr) : storedIr;
4230
- const shape = arm?.kind === "record" ? lowerer.shapes.get(arm.shapeId) : undefined;
4459
+ const present = storedIr?.kind === "union" ? lowerer.stripUndefinedArm(storedIr) : storedIr;
4460
+ const arms = present?.kind === "union"
4461
+ ? (lowerer.unions.get(present.unionId)?.arms ?? [present])
4462
+ : present
4463
+ ? [present]
4464
+ : [];
4465
+ // Every arm is a plain record layout with no slot for the member.
4466
+ const layoutMissing = arms.length > 0 &&
4467
+ arms.every((arm) => {
4468
+ if (arm.kind !== "record")
4469
+ return false;
4470
+ const shape = lowerer.shapes.get(arm.shapeId);
4471
+ return (shape !== undefined &&
4472
+ !shape.tuple &&
4473
+ !shape.indexValue &&
4474
+ !shape.fields.some((f) => f.name === access.name.text));
4475
+ });
4231
4476
  const admitted = lowerer.mapTypeOf(lowerer.typeOf(access));
4232
- if (shape &&
4233
- !shape.tuple &&
4234
- !shape.indexValue &&
4235
- !shape.fields.some((f) => f.name === access.name.text) &&
4236
- admitted &&
4237
- admitted.kind !== "void") {
4477
+ const checkerHolds = typeParameterReceiver(lowerer.typeOf(access.expression)) ||
4478
+ narrowed === null ||
4479
+ (narrowed.kind === "record" &&
4480
+ (lowerer.shapes.get(narrowed.shapeId)?.fields.some((f) => f.name === access.name.text) ??
4481
+ false));
4482
+ if (layoutMissing && checkerHolds && admitted && admitted.kind !== "void") {
4238
4483
  let obj = lowerer.lowerExpr(access.expression);
4239
4484
  if (obj.type.kind === "union" && lowerer.armTag(obj.type.unionId, UNDEFINED_T) >= 0) {
4240
- const present = lowerer.stripUndefinedArm(obj.type);
4485
+ const presentType = lowerer.stripUndefinedArm(obj.type);
4241
4486
  obj =
4242
- present.kind === "record"
4243
- ? (lowerer.runtimeOptionalPropertyReceiver(access.expression, obj, present, access.name.text) ?? obj)
4487
+ presentType.kind === "record"
4488
+ ? (lowerer.runtimeOptionalPropertyReceiver(access.expression, obj, presentType, access.name.text) ?? obj)
4244
4489
  : lowerer.maybeNarrow(obj, access.expression);
4245
4490
  }
4246
- if (obj.type.kind !== "record")
4491
+ if (!lowerer.dynConvertible(obj.type))
4247
4492
  return null;
4248
4493
  return {
4249
4494
  container: "dynamic",
@@ -4257,7 +4502,11 @@ export function fieldTarget(lowerer, access) {
4257
4502
  const shape = lowerer.shapes.get(receiverIr.shapeId);
4258
4503
  const fieldType = shape?.fields.find((f) => f.name === access.name.text)?.type;
4259
4504
  if (fieldType) {
4260
- let obj = lowerer.lowerExpr(access.expression);
4505
+ const writeOperand = readOnlyAccess(access) ? null : assertionOperand(access);
4506
+ const write = writeOperand === null
4507
+ ? null
4508
+ : assertedWrite(lowerer, access, writeOperand, fieldType, receiverIr);
4509
+ let obj = write?.receiver ?? lowerer.lowerExpr(access.expression);
4261
4510
  const nominal = representedClassFieldTarget(lowerer, access.expression, access.name.text, obj);
4262
4511
  if (nominal)
4263
4512
  return nominal;
@@ -4289,6 +4538,13 @@ export function fieldTarget(lowerer, access) {
4289
4538
  }
4290
4539
  if (obj.type.kind !== "record")
4291
4540
  return null;
4541
+ // A write through a type assertion that the value's own layout cannot
4542
+ // host would land on the assertion's converted copy (`%rec.width.<id>`)
4543
+ // and be dropped. Node erases the assertion and mutates the object the
4544
+ // operand names, so refuse rather than diverge silently.
4545
+ if (write?.refuse === true) {
4546
+ lowerer.unsupported("SC1090", access, `writing '${access.name.text}' through a type assertion to a member the value's own layout does not hold (the write would land on a converted copy; declare the member on the value's type)`);
4547
+ }
4292
4548
  const actualShape = lowerer.shapes.get(obj.type.shapeId);
4293
4549
  const actualField = actualShape?.fields.find((f) => f.name === access.name.text);
4294
4550
  return {
@@ -4748,7 +5004,8 @@ export function builtinGlobalValueAt(lowerer, expr, canonical, loc, js) {
4748
5004
  return namespace;
4749
5005
  if (readsBuiltinGlobalMembers(expr))
4750
5006
  return null;
4751
- const value = builtinGlobalValue(canonical, loc, js);
5007
+ const value = builtinGlobalValue(canonical, loc, js) ??
5008
+ (js ? globalFunctionValue(lowerer, canonical, loc) : null);
4752
5009
  if (value === null)
4753
5010
  return null;
4754
5011
  let node = expr;
@@ -5130,13 +5387,26 @@ function jsPrimitivePrototypeValue(lowerer, expr) {
5130
5387
  if (!isJsSourceFile(ts.getSourceFileOfNode(expr)))
5131
5388
  return null;
5132
5389
  const loc = locOf(expr);
5133
- const value = (kind) => ({
5134
- kind: "libCall",
5135
- fn: "dyn.builtinPrototype",
5136
- args: [{ kind: "strLit", value: kind, type: STRING, loc }],
5137
- type: DYN,
5138
- loc,
5139
- });
5390
+ const value = (kind) => kind === "Boolean"
5391
+ ? // The wrapper unit's Boolean.prototype is the object Boolean
5392
+ // instances inherit from, so its valueOf/toString are the interned
5393
+ // members and accept a primitive boolean or a Boolean wrapper
5394
+ // receiver (the dyn.builtinPrototype builder takes only the kind's
5395
+ // primitives).
5396
+ {
5397
+ kind: "libCall",
5398
+ fn: "wrapper.booleanPrototype",
5399
+ args: [wrapperConstructors(lowerer, loc)[2]],
5400
+ type: DYN,
5401
+ loc,
5402
+ }
5403
+ : {
5404
+ kind: "libCall",
5405
+ fn: "dyn.builtinPrototype",
5406
+ args: [{ kind: "strLit", value: kind, type: STRING, loc }],
5407
+ type: DYN,
5408
+ loc,
5409
+ };
5140
5410
  const receiver = expr.expression;
5141
5411
  if (ts.isPropertyAccessExpression(receiver) && receiver.name.text === "prototype") {
5142
5412
  const kind = primitivePrototypeKind(lowerer, receiver);