@scriptc/compiler 0.4.1 → 0.4.2

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 (680) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +582 -78
  2. package/dist/backend/cycle-analysis.d.ts +2 -1
  3. package/dist/backend/cycle-analysis.js +4 -4
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-mutability.d.ts +2 -1
  6. package/dist/backend/cycle-mutability.js +2 -2
  7. package/dist/backend/cycle-mutability.js.map +1 -1
  8. package/dist/backend/executable-features.js +4 -1
  9. package/dist/backend/executable-features.js.map +1 -1
  10. package/dist/backend/immutability.d.ts +2 -1
  11. package/dist/backend/immutability.js +2 -2
  12. package/dist/backend/immutability.js.map +1 -1
  13. package/dist/backend/library-pack.js +4 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +7 -3
  16. package/dist/backend/llvm/alloc.js +7 -4
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/array-search.js +2 -1
  19. package/dist/backend/llvm/array-search.js.map +1 -1
  20. package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
  21. package/dist/backend/llvm/bytes-loop-versions.js +115 -19
  22. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  23. package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
  24. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  25. package/dist/backend/llvm/classes.d.ts +72 -1
  26. package/dist/backend/llvm/classes.js +331 -45
  27. package/dist/backend/llvm/classes.js.map +1 -1
  28. package/dist/backend/llvm/classes.test.js +223 -16
  29. package/dist/backend/llvm/classes.test.js.map +1 -1
  30. package/dist/backend/llvm/common.d.ts +1 -3
  31. package/dist/backend/llvm/common.js +1 -3
  32. package/dist/backend/llvm/common.js.map +1 -1
  33. package/dist/backend/llvm/constant-callbacks.js +8 -4
  34. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  35. package/dist/backend/llvm/constant-callbacks.test.js +4 -4
  36. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  37. package/dist/backend/llvm/counted-loops.d.ts +4 -1
  38. package/dist/backend/llvm/counted-loops.js +62 -23
  39. package/dist/backend/llvm/counted-loops.js.map +1 -1
  40. package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
  41. package/dist/backend/llvm/dense-array-loops.js +46 -10
  42. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  43. package/dist/backend/llvm/dense-array-loops.test.js +50 -14
  44. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  45. package/dist/backend/llvm/dyn.d.ts +25 -1
  46. package/dist/backend/llvm/dyn.js +331 -8
  47. package/dist/backend/llvm/dyn.js.map +1 -1
  48. package/dist/backend/llvm/emit-function.js +22 -6
  49. package/dist/backend/llvm/emit-function.js.map +1 -1
  50. package/dist/backend/llvm/emit-module.js +17 -11
  51. package/dist/backend/llvm/emit-module.js.map +1 -1
  52. package/dist/backend/llvm/emit-statements.d.ts +0 -23
  53. package/dist/backend/llvm/emit-statements.js +325 -25
  54. package/dist/backend/llvm/emit-statements.js.map +1 -1
  55. package/dist/backend/llvm/emitter.d.ts +141 -15
  56. package/dist/backend/llvm/emitter.js +537 -64
  57. package/dist/backend/llvm/emitter.js.map +1 -1
  58. package/dist/backend/llvm/expr-async.js +19 -0
  59. package/dist/backend/llvm/expr-async.js.map +1 -1
  60. package/dist/backend/llvm/expr-bytes.d.ts +5 -2
  61. package/dist/backend/llvm/expr-bytes.js +110 -40
  62. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  63. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  64. package/dist/backend/llvm/expr-calls.js +34 -22
  65. package/dist/backend/llvm/expr-calls.js.map +1 -1
  66. package/dist/backend/llvm/expr-containers.js +21 -5
  67. package/dist/backend/llvm/expr-containers.js.map +1 -1
  68. package/dist/backend/llvm/expr-control.js +2 -3
  69. package/dist/backend/llvm/expr-control.js.map +1 -1
  70. package/dist/backend/llvm/expr-dynamic.js +54 -6
  71. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  72. package/dist/backend/llvm/expr-primitives.js +26 -8
  73. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  74. package/dist/backend/llvm/expr-stream-bridges.js +38 -6
  75. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  76. package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
  77. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  78. package/dist/backend/llvm/lib-dispatch.js +10 -0
  79. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  80. package/dist/backend/llvm/lib-filesystem.js +61 -0
  81. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  82. package/dist/backend/llvm/lib-http2.d.ts +4 -0
  83. package/dist/backend/llvm/lib-http2.js +20 -17
  84. package/dist/backend/llvm/lib-http2.js.map +1 -1
  85. package/dist/backend/llvm/lib-process.js +65 -14
  86. package/dist/backend/llvm/lib-process.js.map +1 -1
  87. package/dist/backend/llvm/lib-shared.js +53 -1
  88. package/dist/backend/llvm/lib-shared.js.map +1 -1
  89. package/dist/backend/llvm/lib-stream.js +65 -28
  90. package/dist/backend/llvm/lib-stream.js.map +1 -1
  91. package/dist/backend/llvm/lib-tls.js +23 -0
  92. package/dist/backend/llvm/lib-tls.js.map +1 -1
  93. package/dist/backend/llvm/local-array-reads.js +66 -45
  94. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  95. package/dist/backend/llvm/local-array-reads.test.js +14 -0
  96. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  97. package/dist/backend/llvm/publish.d.ts +8 -1
  98. package/dist/backend/llvm/publish.js +64 -25
  99. package/dist/backend/llvm/publish.js.map +1 -1
  100. package/dist/backend/llvm/publish.test.js +3 -0
  101. package/dist/backend/llvm/publish.test.js.map +1 -1
  102. package/dist/backend/llvm/receivers.js +1 -1
  103. package/dist/backend/llvm/receivers.js.map +1 -1
  104. package/dist/backend/llvm/reference-writes.js +2 -0
  105. package/dist/backend/llvm/reference-writes.js.map +1 -1
  106. package/dist/backend/llvm/regex-matchers.js +161 -14
  107. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  108. package/dist/backend/llvm/regex-matchers.test.js +18 -0
  109. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  110. package/dist/backend/llvm/shapes.d.ts +9 -7
  111. package/dist/backend/llvm/shapes.js +12 -10
  112. package/dist/backend/llvm/shapes.js.map +1 -1
  113. package/dist/backend/llvm/string-lifetimes.test.js +2 -1
  114. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  115. package/dist/backend/llvm/string-reads.d.ts +3 -0
  116. package/dist/backend/llvm/string-reads.js +84 -0
  117. package/dist/backend/llvm/string-reads.js.map +1 -1
  118. package/dist/backend/llvm/wasm-modules.d.ts +6 -5
  119. package/dist/backend/llvm/wasm-modules.js +32 -9
  120. package/dist/backend/llvm/wasm-modules.js.map +1 -1
  121. package/dist/backend/mangle.d.ts +3 -0
  122. package/dist/backend/mangle.js +5 -0
  123. package/dist/backend/mangle.js.map +1 -1
  124. package/dist/backend/native/contracts.d.ts +22 -4
  125. package/dist/backend/native/executable.js +24 -8
  126. package/dist/backend/native/executable.js.map +1 -1
  127. package/dist/backend/native/library.js +1 -0
  128. package/dist/backend/native/library.js.map +1 -1
  129. package/dist/backend/native-codegen.d.ts +11 -6
  130. package/dist/backend/native-codegen.js +36 -9
  131. package/dist/backend/native-codegen.js.map +1 -1
  132. package/dist/backend/native-codegen.test.js +0 -23
  133. package/dist/backend/native-codegen.test.js.map +1 -1
  134. package/dist/backend/native-link-info-core.d.ts +14 -4
  135. package/dist/backend/native-link-info-core.js.map +1 -1
  136. package/dist/backend/optimization.d.ts +2 -2
  137. package/dist/backend/runtime-abi.d.ts +2 -2
  138. package/dist/backend/runtime-abi.js +2 -2
  139. package/dist/backend/runtime-pack-core.d.ts +1 -1
  140. package/dist/backend/runtime-pack-core.js +1 -1
  141. package/dist/backend/runtime-pack-core.js.map +1 -1
  142. package/dist/backend/runtime-pack-targets.test.js +4 -1
  143. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  144. package/dist/backend/runtime-pack.d.ts +0 -21
  145. package/dist/backend/runtime-pack.js +0 -29
  146. package/dist/backend/runtime-pack.js.map +1 -1
  147. package/dist/backend/runtime-pack.test.js +9 -69
  148. package/dist/backend/runtime-pack.test.js.map +1 -1
  149. package/dist/backend/target-diagnostics.js +31 -1
  150. package/dist/backend/target-diagnostics.js.map +1 -1
  151. package/dist/backend/warm-cache.js +3 -0
  152. package/dist/backend/warm-cache.js.map +1 -1
  153. package/dist/cli/command.js +26 -6
  154. package/dist/cli/command.js.map +1 -1
  155. package/dist/cli/usage.d.ts +5 -1
  156. package/dist/cli/usage.js +7 -2
  157. package/dist/cli/usage.js.map +1 -1
  158. package/dist/contracts/check.js +1 -1
  159. package/dist/contracts/check.js.map +1 -1
  160. package/dist/coverage/report.d.ts +7 -2
  161. package/dist/coverage/report.js +18 -0
  162. package/dist/coverage/report.js.map +1 -1
  163. package/dist/coverage/verdict-cache.d.ts +1 -0
  164. package/dist/coverage/verdict-cache.js +4 -0
  165. package/dist/coverage/verdict-cache.js.map +1 -1
  166. package/dist/coverage/verdict-semantic.js +4 -0
  167. package/dist/coverage/verdict-semantic.js.map +1 -1
  168. package/dist/diagnostics/diagnostic.js.map +1 -1
  169. package/dist/diagnostics/dynamic-tier.d.ts +40 -0
  170. package/dist/diagnostics/dynamic-tier.js +57 -0
  171. package/dist/diagnostics/dynamic-tier.js.map +1 -0
  172. package/dist/diagnostics/envelope.d.ts +2 -1
  173. package/dist/diagnostics/envelope.js +5 -2
  174. package/dist/diagnostics/envelope.js.map +1 -1
  175. package/dist/executable/executable-cache.d.ts +23 -1
  176. package/dist/executable/executable-cache.js +59 -7
  177. package/dist/executable/executable-cache.js.map +1 -1
  178. package/dist/executable/executable-cache.test.js +45 -3
  179. package/dist/executable/executable-cache.test.js.map +1 -1
  180. package/dist/executable/prepare.js +3 -1
  181. package/dist/executable/prepare.js.map +1 -1
  182. package/dist/frontend/analysis.js +1 -0
  183. package/dist/frontend/analysis.js.map +1 -1
  184. package/dist/frontend/dispose-hook.d.ts +2 -0
  185. package/dist/frontend/dispose-hook.js +14 -0
  186. package/dist/frontend/dispose-hook.js.map +1 -0
  187. package/dist/frontend/jsx-entities.d.ts +4 -0
  188. package/dist/frontend/jsx-entities.js +259 -0
  189. package/dist/frontend/jsx-entities.js.map +1 -0
  190. package/dist/frontend/jsx-source.d.ts +71 -0
  191. package/dist/frontend/jsx-source.js +781 -0
  192. package/dist/frontend/jsx-source.js.map +1 -0
  193. package/dist/frontend/jsx-source.test.d.ts +1 -0
  194. package/dist/frontend/jsx-source.test.js +200 -0
  195. package/dist/frontend/jsx-source.test.js.map +1 -0
  196. package/dist/frontend/literal-values.test.js +8 -9
  197. package/dist/frontend/literal-values.test.js.map +1 -1
  198. package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
  199. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  200. package/dist/frontend/lowering/array-values.js +3 -2
  201. package/dist/frontend/lowering/array-values.js.map +1 -1
  202. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  203. package/dist/frontend/lowering/binding-analysis.js +2 -2
  204. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  205. package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
  206. package/dist/frontend/lowering/builtins/arguments.js +30 -15
  207. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  208. package/dist/frontend/lowering/builtins/atomics.js +10 -6
  209. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  210. package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
  211. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  212. package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
  213. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  214. package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
  215. package/dist/frontend/lowering/builtins/crypto.js +59 -3
  216. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  217. package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
  218. package/dist/frontend/lowering/builtins/date-classes.js +477 -0
  219. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
  220. package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
  221. package/dist/frontend/lowering/builtins/dates.js +55 -26
  222. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  223. package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
  224. package/dist/frontend/lowering/builtins/dh.js +151 -0
  225. package/dist/frontend/lowering/builtins/dh.js.map +1 -0
  226. package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
  227. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  228. package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
  229. package/dist/frontend/lowering/builtins/ecdh.js +7 -7
  230. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
  231. package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
  232. package/dist/frontend/lowering/builtins/errors.js +110 -0
  233. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  234. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
  235. package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
  236. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  237. package/dist/frontend/lowering/builtins/filesystem.js +6 -4
  238. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  239. package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
  240. package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
  241. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
  242. package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
  243. package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
  244. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
  245. package/dist/frontend/lowering/builtins/json.js +2 -1
  246. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  247. package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
  248. package/dist/frontend/lowering/builtins/key-object.js +20 -7
  249. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  250. package/dist/frontend/lowering/builtins/module-calls.js +11 -4
  251. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  252. package/dist/frontend/lowering/builtins/numbers.js +9 -5
  253. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  254. package/dist/frontend/lowering/builtins/operating-system.js +4 -3
  255. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  256. package/dist/frontend/lowering/builtins/performance.js +3 -2
  257. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  258. package/dist/frontend/lowering/builtins/process.js +3 -2
  259. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  260. package/dist/frontend/lowering/builtins/promises.js +3 -2
  261. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  262. package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
  263. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  264. package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
  265. package/dist/frontend/lowering/builtins/readline.js +23 -6
  266. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  267. package/dist/frontend/lowering/builtins/strings.js +13 -5
  268. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  269. package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
  270. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  271. package/dist/frontend/lowering/builtins/timers.js +1 -1
  272. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  273. package/dist/frontend/lowering/builtins/url.js +4 -3
  274. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  275. package/dist/frontend/lowering/builtins/v8.js +2 -1
  276. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  277. package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
  278. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
  279. package/dist/frontend/lowering/call-arguments.js +2 -1
  280. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  281. package/dist/frontend/lowering/call-signatures.js +13 -6
  282. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  283. package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
  284. package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
  285. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
  286. package/dist/frontend/lowering/class-assertions.js +3 -2
  287. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  288. package/dist/frontend/lowering/class-construction.d.ts +2 -1
  289. package/dist/frontend/lowering/class-construction.js +8 -13
  290. package/dist/frontend/lowering/class-construction.js.map +1 -1
  291. package/dist/frontend/lowering/class-descriptors.js +1 -1
  292. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  293. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
  294. package/dist/frontend/lowering/class-dynamic-dispatch.js +568 -151
  295. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  296. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
  297. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  298. package/dist/frontend/lowering/class-method-mutations.js +3 -0
  299. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  300. package/dist/frontend/lowering/class-method-values.js +1 -1
  301. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  302. package/dist/frontend/lowering/class-protocols.d.ts +7 -0
  303. package/dist/frontend/lowering/class-protocols.js +64 -4
  304. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  305. package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
  306. package/dist/frontend/lowering/class-prototypes.js +36 -3
  307. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  308. package/dist/frontend/lowering/class-to-primitive.js +25 -5
  309. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  310. package/dist/frontend/lowering/class-unions.js +2 -1
  311. package/dist/frontend/lowering/class-unions.js.map +1 -1
  312. package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
  313. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  314. package/dist/frontend/lowering/coercions/structural.js +8 -7
  315. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  316. package/dist/frontend/lowering/coercions/unions.js +8 -7
  317. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  318. package/dist/frontend/lowering/collection-ingestion.js +2 -1
  319. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  320. package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
  321. package/dist/frontend/lowering/containers/array-callbacks.js +14 -13
  322. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  323. package/dist/frontend/lowering/containers/array-concat.js +2 -1
  324. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  325. package/dist/frontend/lowering/containers/array-construction.js +25 -4
  326. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  327. package/dist/frontend/lowering/containers/array-methods.js +6 -5
  328. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  329. package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
  330. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  331. package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
  332. package/dist/frontend/lowering/containers/bytes.js +129 -28
  333. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  334. package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
  335. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  336. package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
  337. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  338. package/dist/frontend/lowering/containers/collection-methods.js +8 -7
  339. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  340. package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
  341. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  342. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
  343. package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
  344. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  345. package/dist/frontend/lowering/containers/string-and-regexp.js +36 -9
  346. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  347. package/dist/frontend/lowering/containers/string-replacement.js +2 -1
  348. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  349. package/dist/frontend/lowering/cycle-initialization.js +25 -4
  350. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  351. package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
  352. package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
  353. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  354. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  355. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  356. package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
  357. package/dist/frontend/lowering/dispatch-sites.js +204 -0
  358. package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
  359. package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
  360. package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
  361. package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
  362. package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
  363. package/dist/frontend/lowering/dyn-streams.js +1 -1
  364. package/dist/frontend/lowering/dyn-streams.js.map +1 -1
  365. package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
  366. package/dist/frontend/lowering/dynamic-tier.js +327 -0
  367. package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
  368. package/dist/frontend/lowering/error-methods.js +4 -0
  369. package/dist/frontend/lowering/error-methods.js.map +1 -1
  370. package/dist/frontend/lowering/expressions/array-literals.js +15 -0
  371. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  372. package/dist/frontend/lowering/expressions/binary.js +45 -3
  373. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  374. package/dist/frontend/lowering/expressions/element-access.js +17 -1
  375. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  376. package/dist/frontend/lowering/expressions/identifiers.js +46 -7
  377. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  378. package/dist/frontend/lowering/expressions/narrowing.js +35 -5
  379. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  380. package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
  381. package/dist/frontend/lowering/expressions/object-literals.js +27 -6
  382. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  383. package/dist/frontend/lowering/expressions/optional-chains.js +5 -5
  384. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  385. package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
  386. package/dist/frontend/lowering/expressions/property-access.js +99 -7
  387. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  388. package/dist/frontend/lowering/expressions/relational.js +63 -5
  389. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  390. package/dist/frontend/lowering/expressions/updates.js +63 -9
  391. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  392. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
  393. package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
  394. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  395. package/dist/frontend/lowering/generic-functions.d.ts +42 -1
  396. package/dist/frontend/lowering/generic-functions.js +448 -18
  397. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  398. package/dist/frontend/lowering/intern-tables.js +2 -1
  399. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  400. package/dist/frontend/lowering/iterator-adapters.js +9 -8
  401. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  402. package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
  403. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
  404. package/dist/frontend/lowering/json-require.js +2 -1
  405. package/dist/frontend/lowering/json-require.js.map +1 -1
  406. package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
  407. package/dist/frontend/lowering/key-order-witness.js +21 -4
  408. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  409. package/dist/frontend/lowering/key-order-witness.test.js +38 -2
  410. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  411. package/dist/frontend/lowering/lifetime-regions.js +2 -1
  412. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  413. package/dist/frontend/lowering/lower-assert.js +6 -5
  414. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  415. package/dist/frontend/lowering/lower-async-iteration.js +3 -1
  416. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  417. package/dist/frontend/lowering/lower-calls.d.ts +4 -0
  418. package/dist/frontend/lowering/lower-calls.js +339 -91
  419. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  420. package/dist/frontend/lowering/lower-classes.d.ts +18 -0
  421. package/dist/frontend/lowering/lower-classes.js +280 -25
  422. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  423. package/dist/frontend/lowering/lower-dgram.js +3 -2
  424. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  425. package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
  426. package/dist/frontend/lowering/lower-event-emitter.js +267 -20
  427. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  428. package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
  429. package/dist/frontend/lowering/lower-exprs.js +116 -11
  430. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  431. package/dist/frontend/lowering/lower-functions.js +304 -72
  432. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  433. package/dist/frontend/lowering/lower-inspect.js +10 -6
  434. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  435. package/dist/frontend/lowering/lower-mixins.js +2 -1
  436. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  437. package/dist/frontend/lowering/lower-mock.js +2 -1
  438. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  439. package/dist/frontend/lowering/lower-modules.js +15 -5
  440. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  441. package/dist/frontend/lowering/lower-modules.test.js +2 -2
  442. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  443. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
  444. package/dist/frontend/lowering/lower-namespaces.js +4 -3
  445. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  446. package/dist/frontend/lowering/lower-server.d.ts +10 -0
  447. package/dist/frontend/lowering/lower-server.js +237 -59
  448. package/dist/frontend/lowering/lower-server.js.map +1 -1
  449. package/dist/frontend/lowering/lower-stdlib.js +12 -10
  450. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  451. package/dist/frontend/lowering/lower-stmts.js +168 -20
  452. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  453. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  454. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  455. package/dist/frontend/lowering/lower-stream.js +575 -165
  456. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  457. package/dist/frontend/lowering/lower-timers.js +4 -3
  458. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  459. package/dist/frontend/lowering/lowerer.d.ts +125 -28
  460. package/dist/frontend/lowering/lowerer.js +557 -63
  461. package/dist/frontend/lowering/lowerer.js.map +1 -1
  462. package/dist/frontend/lowering/lowerer.test.js +21 -9
  463. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  464. package/dist/frontend/lowering/narrowing-stability.js +5 -0
  465. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  466. package/dist/frontend/lowering/native-ffi.js +1 -1
  467. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  468. package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
  469. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  470. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  471. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  472. package/dist/frontend/lowering/private-brands.d.ts +9 -0
  473. package/dist/frontend/lowering/private-brands.js +66 -15
  474. package/dist/frontend/lowering/private-brands.js.map +1 -1
  475. package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
  476. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  477. package/dist/frontend/lowering/require-initialization.js +2 -1
  478. package/dist/frontend/lowering/require-initialization.js.map +1 -1
  479. package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
  480. package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
  481. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  482. package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
  483. package/dist/frontend/lowering/runtime-optional-records.js +18 -5
  484. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  485. package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
  486. package/dist/frontend/lowering/site-dependencies.js +84 -0
  487. package/dist/frontend/lowering/site-dependencies.js.map +1 -0
  488. package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
  489. package/dist/frontend/lowering/site-dependencies.test.js +53 -0
  490. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
  491. package/dist/frontend/lowering/stable-names.d.ts +11 -0
  492. package/dist/frontend/lowering/stable-names.js +35 -0
  493. package/dist/frontend/lowering/stable-names.js.map +1 -0
  494. package/dist/frontend/lowering/static-typeof.d.ts +2 -2
  495. package/dist/frontend/lowering/static-typeof.js +42 -3
  496. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  497. package/dist/frontend/lowering/strict-equality.js +2 -1
  498. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  499. package/dist/frontend/lowering/structural-positions.d.ts +32 -0
  500. package/dist/frontend/lowering/structural-positions.js +108 -0
  501. package/dist/frontend/lowering/structural-positions.js.map +1 -0
  502. package/dist/frontend/lowering/surfaces.js +42 -26
  503. package/dist/frontend/lowering/surfaces.js.map +1 -1
  504. package/dist/frontend/lowering/var-hoisting.js +37 -3
  505. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  506. package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
  507. package/dist/frontend/npm-static-tsc-helpers.js +106 -0
  508. package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
  509. package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
  510. package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
  511. package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
  512. package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
  513. package/dist/frontend/npm-static-type-exports-host.js +214 -0
  514. package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
  515. package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
  516. package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
  517. package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
  518. package/dist/frontend/npm-static-type-exports.d.ts +52 -0
  519. package/dist/frontend/npm-static-type-exports.js +261 -0
  520. package/dist/frontend/npm-static-type-exports.js.map +1 -0
  521. package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
  522. package/dist/frontend/npm-static-type-exports.test.js +103 -0
  523. package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
  524. package/dist/frontend/npm-static-umd.d.ts +6 -0
  525. package/dist/frontend/npm-static-umd.js +203 -0
  526. package/dist/frontend/npm-static-umd.js.map +1 -0
  527. package/dist/frontend/npm-static-umd.test.d.ts +1 -0
  528. package/dist/frontend/npm-static-umd.test.js +105 -0
  529. package/dist/frontend/npm-static-umd.test.js.map +1 -0
  530. package/dist/frontend/npm-static.d.ts +8 -0
  531. package/dist/frontend/npm-static.js +47 -2
  532. package/dist/frontend/npm-static.js.map +1 -1
  533. package/dist/frontend/program.d.ts +13 -0
  534. package/dist/frontend/program.js +103 -6
  535. package/dist/frontend/program.js.map +1 -1
  536. package/dist/frontend/program.test.js +1 -1
  537. package/dist/frontend/program.test.js.map +1 -1
  538. package/dist/frontend/services.d.ts +6 -0
  539. package/dist/frontend/services.js +18 -0
  540. package/dist/frontend/services.js.map +1 -1
  541. package/dist/frontend/ts7/ast-node.d.ts +21 -7
  542. package/dist/frontend/ts7/ast-node.js +131 -29
  543. package/dist/frontend/ts7/ast-node.js.map +1 -1
  544. package/dist/frontend/ts7/ast-node.test.js +60 -0
  545. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  546. package/dist/frontend/ts7/ast-wire.d.ts +27 -2
  547. package/dist/frontend/ts7/ast-wire.js +124 -21
  548. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  549. package/dist/frontend/ts7/ast.d.ts +23 -2
  550. package/dist/frontend/ts7/ast.js +143 -2
  551. package/dist/frontend/ts7/ast.js.map +1 -1
  552. package/dist/frontend/ts7/checker.d.ts +13 -1
  553. package/dist/frontend/ts7/checker.js +75 -1
  554. package/dist/frontend/ts7/checker.js.map +1 -1
  555. package/dist/frontend/ts7/checker.test.js +9 -6
  556. package/dist/frontend/ts7/checker.test.js.map +1 -1
  557. package/dist/frontend/ts7/enums.d.ts +3 -3
  558. package/dist/frontend/ts7/enums.generated.d.ts +10 -0
  559. package/dist/frontend/ts7/enums.generated.js +21 -0
  560. package/dist/frontend/ts7/enums.generated.js.map +1 -1
  561. package/dist/frontend/ts7/enums.js +19 -0
  562. package/dist/frontend/ts7/enums.js.map +1 -1
  563. package/dist/frontend/ts7/program-host.js +5 -2
  564. package/dist/frontend/ts7/program-host.js.map +1 -1
  565. package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
  566. package/dist/frontend/ts7/semantic-checker.js +25 -20
  567. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  568. package/dist/frontend/ts7/semantic-json.d.ts +13 -0
  569. package/dist/frontend/ts7/semantic-json.js +146 -0
  570. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  571. package/dist/frontend/ts7/semantic-json.test.js +57 -1
  572. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  573. package/dist/frontend/ts7/semantic-model.d.ts +15 -0
  574. package/dist/frontend/ts7/semantic-model.js +67 -19
  575. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  576. package/dist/frontend/ts7/semantic-model.test.js +3 -2
  577. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  578. package/dist/frontend/ts7/session.js +1 -1
  579. package/dist/frontend/ts7/session.js.map +1 -1
  580. package/dist/frontend/tsc-codes.d.ts +1 -1
  581. package/dist/frontend/tsc-codes.js +7 -0
  582. package/dist/frontend/tsc-codes.js.map +1 -1
  583. package/dist/frontend/type-mapper.d.ts +38 -6
  584. package/dist/frontend/type-mapper.js +265 -32
  585. package/dist/frontend/type-mapper.js.map +1 -1
  586. package/dist/frontend/type-mapper.test.js +1 -1
  587. package/dist/frontend/type-mapper.test.js.map +1 -1
  588. package/dist/frontend-process-args.d.ts +4 -0
  589. package/dist/frontend-process-args.js +52 -0
  590. package/dist/frontend-process-args.js.map +1 -0
  591. package/dist/frontend-process-args.test.d.ts +1 -0
  592. package/dist/frontend-process-args.test.js +47 -0
  593. package/dist/frontend-process-args.test.js.map +1 -0
  594. package/dist/frontend-process.d.ts +1 -0
  595. package/dist/frontend-process.js +23 -0
  596. package/dist/frontend-process.js.map +1 -0
  597. package/dist/heap-collection.d.ts +16 -0
  598. package/dist/heap-collection.js +42 -0
  599. package/dist/heap-collection.js.map +1 -0
  600. package/dist/heap-collection.test.d.ts +1 -0
  601. package/dist/heap-collection.test.js +59 -0
  602. package/dist/heap-collection.test.js.map +1 -0
  603. package/dist/heap-pressure.d.ts +2 -0
  604. package/dist/heap-pressure.js +12 -0
  605. package/dist/heap-pressure.js.map +1 -0
  606. package/dist/index.d.ts +7 -0
  607. package/dist/index.js +402 -86
  608. package/dist/index.js.map +1 -1
  609. package/dist/ir/array-length-stability.js +7 -0
  610. package/dist/ir/array-length-stability.js.map +1 -1
  611. package/dist/ir/array-length-stability.test.js +25 -0
  612. package/dist/ir/array-length-stability.test.js.map +1 -1
  613. package/dist/ir/builtin-effects.js +28 -0
  614. package/dist/ir/builtin-effects.js.map +1 -1
  615. package/dist/ir/builtin-signatures.d.ts +5 -1
  616. package/dist/ir/builtin-signatures.js +141 -12
  617. package/dist/ir/builtin-signatures.js.map +1 -1
  618. package/dist/ir/final-fields.d.ts +2 -1
  619. package/dist/ir/final-fields.js +2 -2
  620. package/dist/ir/final-fields.js.map +1 -1
  621. package/dist/ir/function-references.test.js +2 -0
  622. package/dist/ir/function-references.test.js.map +1 -1
  623. package/dist/ir/int32-slots.d.ts +13 -5
  624. package/dist/ir/int32-slots.js +112 -115
  625. package/dist/ir/int32-slots.js.map +1 -1
  626. package/dist/ir/int32-slots.test.js +3 -1
  627. package/dist/ir/int32-slots.test.js.map +1 -1
  628. package/dist/ir/integer-loop-facts.d.ts +9 -4
  629. package/dist/ir/integer-loop-facts.js +93 -18
  630. package/dist/ir/integer-loop-facts.js.map +1 -1
  631. package/dist/ir/integer-loops.d.ts +49 -0
  632. package/dist/ir/integer-loops.js +193 -39
  633. package/dist/ir/integer-loops.js.map +1 -1
  634. package/dist/ir/integer-loops.test.js +201 -1
  635. package/dist/ir/integer-loops.test.js.map +1 -1
  636. package/dist/ir/integer-ranges.test.js +64 -0
  637. package/dist/ir/integer-ranges.test.js.map +1 -1
  638. package/dist/ir/ir.d.ts +17 -2
  639. package/dist/ir/ir.js +3 -1
  640. package/dist/ir/ir.js.map +1 -1
  641. package/dist/ir/runtime-features.d.ts +31 -7
  642. package/dist/ir/runtime-features.js +138 -11
  643. package/dist/ir/runtime-features.js.map +1 -1
  644. package/dist/ir/tiers.js +1 -0
  645. package/dist/ir/tiers.js.map +1 -1
  646. package/dist/ir/traverse.d.ts +2 -0
  647. package/dist/ir/traverse.js +14 -2
  648. package/dist/ir/traverse.js.map +1 -1
  649. package/dist/ir/validate.js +56 -16
  650. package/dist/ir/validate.js.map +1 -1
  651. package/dist/library/ir-policy.js +10 -0
  652. package/dist/library/ir-policy.js.map +1 -1
  653. package/dist/library/library-cache.d.ts +2 -0
  654. package/dist/library/library-cache.js.map +1 -1
  655. package/dist/library/prepare.js +2 -0
  656. package/dist/library/prepare.js.map +1 -1
  657. package/dist/native/cli.js +5 -0
  658. package/dist/native/cli.js.map +1 -1
  659. package/dist/native/prepare.js +5 -1
  660. package/dist/native/prepare.js.map +1 -1
  661. package/dist/native/sanitizer.test.js +4 -1
  662. package/dist/native/sanitizer.test.js.map +1 -1
  663. package/dist/startup-cache.d.ts +1 -0
  664. package/dist/startup-cache.js +1 -0
  665. package/dist/startup-cache.js.map +1 -1
  666. package/dist/text-parts.d.ts +7 -0
  667. package/dist/text-parts.js +44 -0
  668. package/dist/text-parts.js.map +1 -1
  669. package/dist/text-parts.test.d.ts +1 -0
  670. package/dist/text-parts.test.js +46 -0
  671. package/dist/text-parts.test.js.map +1 -0
  672. package/dist/timing.d.ts +9 -2
  673. package/dist/timing.js +7 -4
  674. package/dist/timing.js.map +1 -1
  675. package/dist/wasm/translate.d.ts +4 -0
  676. package/dist/wasm/translate.js +2 -2
  677. package/dist/wasm/translate.js.map +1 -1
  678. package/package.json +21 -21
  679. package/shims/undici/core/client.ts +4 -4
  680. package/surface-manifest.json +19 -49
@@ -1,3 +1,4 @@
1
+ import { keyedHelperName } from "./stable-names.js";
1
2
  import { isForwardedTupleSpread, lowerForwardingApply } from "./typed-arguments.js";
2
3
  import { guardNullProto, nullProtoRecordShape } from "./null-prototype.js";
3
4
  import { lowerDynStreamMemberCall } from "./dyn-streams.js";
@@ -51,7 +52,7 @@ import { createRequireSpecOf } from "./builtins/module-bindings.js";
51
52
  import { lowerChildStreamMethodCall, lowerChildWriterMethodCall, } from "./builtins/child-process-methods.js";
52
53
  import { lowerCreateRequireCall, lowerImportMetaResolveCall, lowerRequireResolveCall, } from "./builtins/module-resolution.js";
53
54
  import { isWebCryptoReceiver, lowerCipherMethodCall, lowerCryptoGetRandomValues, lowerCryptoHashMethodCall, lowerPromisifiedCryptoCall, } from "./builtins/crypto.js";
54
- import { lowerErrorIsErrorCall } from "./builtins/errors.js";
55
+ import { lowerErrorCaptureStackTraceCall, lowerErrorIsErrorCall } from "./builtins/errors.js";
55
56
  import { lowerPromisifiedDnsCall } from "./lower-dgram.js";
56
57
  import { lowerDisposableStackUseCall } from "./builtins/disposable-stack.js";
57
58
  import { lowerDirentMethodCall, lowerFileHandleMethodCall, lowerDirMethodCall, lowerWatcherMethodCall, } from "./builtins/filesystem.js";
@@ -59,7 +60,7 @@ import { fencePerfEntryKeyWalk, isPerfEntryType, lowerHistogramMethodCall, lower
59
60
  import { lowerProcStreamMethodCall, lowerProcessBuiltinModuleNamespace, } from "./builtins/process.js";
60
61
  import { recordMayKeepSource, throughRecordSource } from "./record-sources.js";
61
62
  import { lowerReflectCall } from "./builtins/reflection.js";
62
- import { lowerAbsenceProbe, v8CalleeText, lowerOptionalNumber, lowerPromiseAllTupleCall, lowerPromiseRejectCall, lowerToNumberArgument, stringWrapperToString, symbolFieldInfo, templateRawTextOf, } from "./lower-exprs.js";
63
+ import { lowerAbsenceProbe, v8CalleeText, lowerPromiseAllTupleCall, lowerPromiseRejectCall, lowerToNumberArgument, stringWrapperToString, symbolFieldInfo, templateRawTextOf, primitiveCtorClosure, } from "./lower-exprs.js";
63
64
  import { isSafeToDiscard } from "./expressions/evaluation-safety.js";
64
65
  import { tryLowerExpression } from "./expressions/try-lower-expression.js";
65
66
  import { lowerChildMethodValue, lowerChildPropertyCall } from "./handle-properties.js";
@@ -71,6 +72,7 @@ import { EMITTER_API_MEMBERS, exactClassOfReceiver, exactInstanceClassOf, findGe
71
72
  import { classCallbackCall, isClassCallback } from "./class-callbacks.js";
72
73
  import { emitterRooted, lowerEmitterMethodCall } from "./lower-event-emitter.js";
73
74
  import { eventTargetApiMethod, lowerEventTargetMethodCall } from "./lower-event-target.js";
75
+ import { dateRootOf, isDatePrototypeMethod, lowerInheritedDateMethodCall, } from "./builtins/date-classes.js";
74
76
  import { lowerConsoleInstanceCall, lowerConsoleMethodCall, lowerConsoleOutput, } from "./lower-console.js";
75
77
  import { STREAM_API_MEMBERS, STREAM_OPERATORS, lowerStreamMethodCall, lowerStreamStaticCall, streamSidesOf, } from "./lower-stream.js";
76
78
  import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, ambientUndefinedFnSymbolOf, contextualUndefReadType, fenceEarlyAliasUse, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "./lower-namespaces.js";
@@ -739,10 +741,9 @@ export function lowerCall(lowerer, expr) {
739
741
  // excludes shadowed names. parseInt's omitted radix completes
740
742
  // to 0 — the spec's "undefined" (base 10 with the 0x hex escape);
741
743
  // parseFloat lowers the STRING form only (Node would ToString other
742
- // values — no static story); isNaN/isFinite's arguments are
743
- // checker-pinned (or checked) to number, where the global's ToNumber
744
- // coercion is the identity and the tests are Number.isNaN /
745
- // Number.isFinite exactly (ms's `isFinite(val)` guard).
744
+ // values — no static story); isNaN/isFinite apply the global's
745
+ // ToNumber to any argument, then test like Number.isNaN /
746
+ // Number.isFinite.
746
747
  if ((expr.expression.text === "parseInt" ||
747
748
  expr.expression.text === "isNaN" ||
748
749
  expr.expression.text === "parseFloat" ||
@@ -841,15 +842,11 @@ export function lowerCall(lowerer, expr) {
841
842
  }
842
843
  if (islFn && expr.arguments.nodes.length === islFn.args.length) {
843
844
  // The static forms above already took the exactly-typed argument
844
- // (a string for parseFloat, a number for isFinite): name the
845
- // argument type that refused the call, so the message states the
846
- // condition rather than reading as if the global itself were
847
- // unsupported.
845
+ // (a string for parseFloat): name the argument type that refused
846
+ // the call, so the message states the condition rather than
847
+ // reading as if the global itself were unsupported.
848
848
  const argText = loweredArgumentText(lowerer, expr.arguments.nodes[0]);
849
- const exact = expr.expression.text === "isFinite" ? "number" : "string";
850
- lowerer.refuseUnsupportedApi(`'${expr.expression.text}' with a '${argText}' argument`, expr, exact === "string"
851
- ? "only a string argument compiles statically: convert the argument explicitly first (for example String(x), or narrow the union)"
852
- : "only a number argument compiles statically: narrow the argument to a number first");
849
+ lowerer.refuseUnsupportedApi(`'${expr.expression.text}' with a '${argText}' argument`, expr, "only a string argument compiles statically: convert the argument explicitly first (for example String(x), or narrow the union)");
853
850
  }
854
851
  }
855
852
  // A TYPE-GUARD call on a catch binding (`isErrnoException(err)` —
@@ -1237,9 +1234,10 @@ export function lowerCall(lowerer, expr) {
1237
1234
  lowerer.fenceStaticReadableStreamMember(expr.expression, "call") ??
1238
1235
  lowerDisposableStackUseCall(lowerer, expr, expr.expression) ??
1239
1236
  lowerer.lowerStdlibMethodCall(expr, expr.expression) ??
1240
- // crypto.getRandomValues on the WebCrypto global (untyped in
1241
- // fallback builds, so before the dyn receiver path) or webcrypto.
1242
- lowerWebCryptoGetRandomValues(lowerer, expr, expr.expression) ??
1237
+ // crypto.getRandomValues / randomUUID on the WebCrypto global
1238
+ // (untyped in fallback builds, so before the dyn receiver path) or
1239
+ // webcrypto.
1240
+ lowerWebCryptoMethodCall(lowerer, expr, expr.expression) ??
1243
1241
  // Dyn receivers (JSON.parse-derived `unknown`/`any` values) —
1244
1242
  lowerDynReceiverMethodCall(lowerer, expr, expr.expression) ??
1245
1243
  // Narrowing filters (inferred predicates, filter(Boolean)) claim
@@ -1248,6 +1246,7 @@ export function lowerCall(lowerer, expr) {
1248
1246
  lowerer.lowerFilterNarrowCall(expr, expr.expression) ??
1249
1247
  lowerArrayIsArrayCall(lowerer, expr, expr.expression) ??
1250
1248
  lowerErrorIsErrorCall(lowerer, expr, expr.expression) ??
1249
+ lowerErrorCaptureStackTraceCall(lowerer, expr, expr.expression) ??
1251
1250
  lowerBigIntMethodCall(lowerer, expr, expr.expression) ??
1252
1251
  lowerSymbolStaticCall(lowerer, expr, expr.expression) ??
1253
1252
  lowerSymbolMethodCall(lowerer, expr, expr.expression) ??
@@ -1703,7 +1702,7 @@ function lowerOptionalNumberDefault(lowerer, value, dflt, loc) {
1703
1702
  const key = `number.optionalDefault:${widened.unionId}:${dflt}`;
1704
1703
  let helper = lowerer.valueHelpers.get(key);
1705
1704
  if (!helper) {
1706
- helper = `%number.optionalDefault.${lowerer.valueHelpers.size}`;
1705
+ helper = keyedHelperName(lowerer, "%number.optionalDefault", key);
1707
1706
  lowerer.valueHelpers.set(key, helper);
1708
1707
  const input = varRef("value.0", widened, loc);
1709
1708
  lowerer.liftedFns.push({
@@ -1804,7 +1803,7 @@ function primitiveConversionHandler(lowerer, node, inner) {
1804
1803
  const key = `then.${name}:${typeKey(inner)}`;
1805
1804
  let fnName = lowerer.arrHofHelpers.get(key);
1806
1805
  if (fnName === undefined) {
1807
- fnName = `%then.${name}.${lowerer.arrHofHelpers.size}`;
1806
+ fnName = keyedHelperName(lowerer, `%then.${name}`, key);
1808
1807
  lowerer.arrHofHelpers.set(key, fnName);
1809
1808
  const value = varRef("v.0", inner, loc);
1810
1809
  let body;
@@ -1958,7 +1957,7 @@ function lowerBigIntConstructorValue(lowerer, arg, loc) {
1958
1957
  const key = `bigint.scalar:${unionId}`;
1959
1958
  let helper = lowerer.valueHelpers.get(key);
1960
1959
  if (!helper) {
1961
- helper = `%bigint.scalar.${lowerer.valueHelpers.size}`;
1960
+ helper = keyedHelperName(lowerer, "%bigint.scalar", key);
1962
1961
  lowerer.valueHelpers.set(key, helper);
1963
1962
  const value = varRef("value.0", arg.type, loc);
1964
1963
  const body = [];
@@ -2647,6 +2646,12 @@ function lowerStringPrototypeCall(lowerer, call, access) {
2647
2646
  const receiver = lowerer.ensureString(receiverValue, receiverNode);
2648
2647
  return lowerStringMethodCallWithOptionalArgs(lowerer, call, methodAccess, () => receiver, call.arguments.nodes.slice(1));
2649
2648
  }
2649
+ /** ToNumber of a union of strings, numbers, booleans, null and undefined, as
2650
+ * `Number(value)` converts it; null for other types. Unary `+` takes it too:
2651
+ * the two conversions differ only for BigInt, which such unions don't hold. */
2652
+ export function lowerPrimitiveUnionNumber(lowerer, arg, node, loc) {
2653
+ return (lowerOptionalStringNumber(lowerer, arg, loc) ?? lowerScalarUnionNumber(lowerer, arg, node, loc));
2654
+ }
2650
2655
  function lowerScalarUnionNumber(lowerer, arg, node, loc) {
2651
2656
  if (arg.type.kind !== "union" ||
2652
2657
  !lowerer.unions
@@ -2656,7 +2661,7 @@ function lowerScalarUnionNumber(lowerer, arg, node, loc) {
2656
2661
  const key = `number.scalar:${arg.type.unionId}`;
2657
2662
  let helper = lowerer.valueHelpers.get(key);
2658
2663
  if (!helper) {
2659
- helper = `%number.scalar.${lowerer.valueHelpers.size}`;
2664
+ helper = keyedHelperName(lowerer, "%number.scalar", key);
2660
2665
  lowerer.valueHelpers.set(key, helper);
2661
2666
  const value = varRef("value.0", arg.type, loc);
2662
2667
  const nan = {
@@ -2697,7 +2702,7 @@ function lowerOptionalStringNumber(lowerer, arg, loc, fn = "num.fromString", lab
2697
2702
  const key = `${label}.optionalString:${arg.type.unionId}`;
2698
2703
  let helper = lowerer.valueHelpers.get(key);
2699
2704
  if (!helper) {
2700
- helper = `%${label}.optionalString.${lowerer.valueHelpers.size}`;
2705
+ helper = keyedHelperName(lowerer, `%${label}.optionalString`, key);
2701
2706
  lowerer.valueHelpers.set(key, helper);
2702
2707
  const value = varRef("value.0", arg.type, loc);
2703
2708
  lowerer.liftedFns.push({
@@ -3108,6 +3113,16 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
3108
3113
  // IS Node's semantics for every possible dyn value. Shared names would
3109
3114
  // need a receiver-kind dispatch — they keep the fence.
3110
3115
  if (DYN_STRING_ONLY_METHODS.has(access.name.text) && !ownCallable) {
3116
+ // An object-typed receiver the member is missing from (a JavaScript
3117
+ // module object whose members are assigned in a function body,
3118
+ // `common.repeat(" ", n)`) holds a string or an object with that
3119
+ // member: dispatch on the receiver's runtime kind.
3120
+ if (!checkerUntyped &&
3121
+ (lowerer.typeOf(access).flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0 &&
3122
+ !call.questionDotToken &&
3123
+ !access.questionDotToken &&
3124
+ !call.arguments.nodes.some(ts.isSpreadElement))
3125
+ return lowerStringOrMemberCall(lowerer, call, access, recv);
3111
3126
  const checked = () => dynStringReceiver(lowerer, recv, access);
3112
3127
  return (lowerRegexMethodCall(lowerer, call, access, checked) ??
3113
3128
  lowerStringMethodCall(lowerer, call, access, checked));
@@ -3294,6 +3309,79 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
3294
3309
  loc,
3295
3310
  };
3296
3311
  }
3312
+ /** `value.name(...args)` on a dyn receiver that may be a string or an
3313
+ * object: a string runs the String.prototype lowering, any other value
3314
+ * calls its member. The member is read before the arguments are
3315
+ * evaluated, and the arguments are evaluated once for either branch. */
3316
+ function lowerStringOrMemberCall(lowerer, call, access, recv) {
3317
+ const loc = locOf(call);
3318
+ const receiverLocal = lowerer.declareHiddenLocal("%dynCallReceiver", DYN);
3319
+ const receiver = varRef(receiverLocal.id, DYN, loc);
3320
+ const isString = { kind: "dynTest", test: "string", value: receiver, type: BOOL, loc };
3321
+ const calleeLocal = lowerer.declareHiddenLocal("%dynCallCallee", DYN);
3322
+ const callee = varRef(calleeLocal.id, DYN, loc);
3323
+ const stmts = [
3324
+ { kind: "varDecl", localId: receiverLocal.id, init: recv, loc },
3325
+ {
3326
+ kind: "varDecl",
3327
+ localId: calleeLocal.id,
3328
+ init: {
3329
+ kind: "ternary",
3330
+ cond: isString,
3331
+ then: dynUndefinedExpr(loc),
3332
+ else_: {
3333
+ kind: "dynKeyGet",
3334
+ key: { kind: "strLit", value: access.name.text, type: STRING, loc: locOf(access) },
3335
+ value: receiver,
3336
+ type: DYN,
3337
+ loc: locOf(access),
3338
+ },
3339
+ type: DYN,
3340
+ loc,
3341
+ },
3342
+ loc,
3343
+ },
3344
+ ];
3345
+ const args = call.arguments.nodes.map((node) => {
3346
+ const value = lowerer.lowerExpr(node);
3347
+ const local = lowerer.declareHiddenLocal("%dynCallArg", value.type);
3348
+ stmts.push({ kind: "varDecl", localId: local.id, init: value, loc: value.loc });
3349
+ return { node, value: varRef(local.id, value.type, value.loc) };
3350
+ });
3351
+ // String.prototype methods ignore arguments past the ones they read.
3352
+ const arity = DYN_STRING_ONLY_ARITY[access.name.text] ?? call.arguments.nodes.length;
3353
+ const stringReceiver = () => ({ kind: "dynCheck", value: receiver, type: STRING, loc });
3354
+ const lowerString = () => (call.arguments.nodes.length <= arity
3355
+ ? lowerRegexMethodCall(lowerer, call, access, stringReceiver)
3356
+ : null) ??
3357
+ lowerStringMethodCall(lowerer, call, access, stringReceiver, call.arguments.nodes.slice(0, arity));
3358
+ const stringCall = lowerer.withExpressionOverrides(args, lowerString);
3359
+ const memberCall = {
3360
+ kind: "dynCall",
3361
+ callee,
3362
+ receiver,
3363
+ calleeName: ts.getTextOfNode(access),
3364
+ args: args.map((arg) => lowerer.coerceToExpected(arg.value, DYN)),
3365
+ type: DYN,
3366
+ loc,
3367
+ };
3368
+ return {
3369
+ kind: "seqExpr",
3370
+ stmts,
3371
+ result: {
3372
+ kind: "ternary",
3373
+ cond: isString,
3374
+ then: stringCall
3375
+ ? lowerer.coerceToExpected(stringCall, DYN)
3376
+ : nodeThrowExpr(0, "SC1090", `method calls like '${ts.getTextOfNode(access)}' on a string are not supported yet [SC1090 at ${ts.getSourceFileOfNode(call).fileName}:${ts.getLineAndCharacterOfPosition(ts.getSourceFileOfNode(call), ts.tokenStartOfNode(call)).line + 1}]`, DYN, loc),
3377
+ else_: memberCall,
3378
+ type: DYN,
3379
+ loc,
3380
+ },
3381
+ type: DYN,
3382
+ loc,
3383
+ };
3384
+ }
3297
3385
  /** Prototype method names of the checked-dynamic tree-representable kinds (String, Array,
3298
3386
  * Object, Function, Number prototypes): a dyn receiver call on one of
3299
3387
  * these could be a REAL method on a real value, which a stored-member
@@ -3455,6 +3543,12 @@ const DYN_DISPATCH_METHODS = new Set([
3455
3543
  "prependOnceListener",
3456
3544
  "listeners",
3457
3545
  "listenerCount",
3546
+ // The rest of EventEmitter.prototype, which compiled emitters answer
3547
+ // through the class dispatch (class-dynamic-dispatch.ts).
3548
+ "rawListeners",
3549
+ "eventNames",
3550
+ "setMaxListeners",
3551
+ "getMaxListeners",
3458
3552
  "write",
3459
3553
  "end",
3460
3554
  "destroy",
@@ -3664,7 +3758,19 @@ export function lowerDynDispatchMethodCall(lowerer, call, access, recv, arrayRec
3664
3758
  }
3665
3759
  }
3666
3760
  }
3761
+ // `String`, `Number` or `Boolean` as the callback of an array method
3762
+ // (`values.map(String)` over an unknown array): the method calls it with
3763
+ // each element, whatever its type, and cannot observe which function
3764
+ // value it received, so it gets the constructor's form that converts any
3765
+ // argument rather than the string-input form typed code stores.
3766
+ const arrayCallbackReceiver = ARRAY_CALLBACK_METHODS.has(method) &&
3767
+ lowerer.checker.isArrayType(lowerer.typeOf(access.expression));
3667
3768
  const args = call.arguments.nodes.map((arg, i) => {
3769
+ const primitive = i === 0 && arrayCallbackReceiver && ts.isIdentifier(arg)
3770
+ ? stdlibGlobalNameOf(lowerer, arg)
3771
+ : null;
3772
+ if (primitive === "String" || primitive === "Number" || primitive === "Boolean")
3773
+ return lowerer.coerceInto(arg, primitiveCtorClosure(lowerer, primitive, locOf(arg), true), DYN);
3668
3774
  if (i === 0 && predicate)
3669
3775
  return lowerer.coerceInto(arg, predicate, DYN);
3670
3776
  const undefinedArg = lowerStaticallyUndefinedArgument(lowerer, arg);
@@ -3682,6 +3788,20 @@ export function lowerDynDispatchMethodCall(lowerer, call, access, recv, arrayRec
3682
3788
  loc: locOf(call),
3683
3789
  };
3684
3790
  }
3791
+ /** Array.prototype methods whose first argument is a callback they call
3792
+ * with the elements. */
3793
+ const ARRAY_CALLBACK_METHODS = new Set([
3794
+ "map",
3795
+ "filter",
3796
+ "forEach",
3797
+ "some",
3798
+ "every",
3799
+ "find",
3800
+ "findIndex",
3801
+ "findLast",
3802
+ "findLastIndex",
3803
+ "flatMap",
3804
+ ]);
3685
3805
  /** Every String.prototype method name a typed or dyn string lowering
3686
3806
  * answers. */
3687
3807
  function isStringMethodName(name) {
@@ -3692,6 +3812,28 @@ function isStringMethodName(name) {
3692
3812
  name === "normalize" ||
3693
3813
  name === "lastIndexOf");
3694
3814
  }
3815
+ /** How many arguments each DYN_STRING_ONLY_METHODS method reads. */
3816
+ const DYN_STRING_ONLY_ARITY = {
3817
+ charCodeAt: 1,
3818
+ charAt: 1,
3819
+ startsWith: 2,
3820
+ endsWith: 2,
3821
+ substring: 2,
3822
+ repeat: 1,
3823
+ trim: 0,
3824
+ trimStart: 0,
3825
+ trimEnd: 0,
3826
+ split: 2,
3827
+ padStart: 2,
3828
+ padEnd: 2,
3829
+ toLowerCase: 0,
3830
+ toUpperCase: 0,
3831
+ replace: 2,
3832
+ replaceAll: 2,
3833
+ match: 1,
3834
+ matchAll: 1,
3835
+ search: 1,
3836
+ };
3695
3837
  /** STR_METHODS ∪ the regex-form names, MINUS everything Array (or any
3696
3838
  * other dyn kind's prototype) also declares. */
3697
3839
  const DYN_STRING_ONLY_METHODS = new Set([
@@ -4013,7 +4155,7 @@ function lowerDefaultToStringCall(lowerer, call, access) {
4013
4155
  const key = `objToStr:${typeKey(recv.type)}${missing ? `:${missing}` : ""}`;
4014
4156
  let helper = lowerer.valueHelpers.get(key);
4015
4157
  if (!helper) {
4016
- helper = `%obj.tostr.${lowerer.valueHelpers.size}`;
4158
+ helper = keyedHelperName(lowerer, "%obj.tostr", key);
4017
4159
  lowerer.valueHelpers.set(key, helper);
4018
4160
  const o = varRef("o.0", recv.type, loc);
4019
4161
  lowerer.liftedFns.push({
@@ -4625,7 +4767,7 @@ function loweredTemplateStrings(lowerer, expr, cooked, loc, raw) {
4625
4767
  const site = lowerer.globalsList.length;
4626
4768
  const globalId = `%g.templateStrings.${site}`;
4627
4769
  const readyId = `%g.templateStringsReady.${site}`;
4628
- getter = `%templateStrings.get.${lowerer.valueHelpers.size}`;
4770
+ getter = keyedHelperName(lowerer, "%templateStrings.get", key);
4629
4771
  lowerer.valueHelpers.set(key, getter);
4630
4772
  lowerer.globalsList.push({ id: globalId, name: "%templateStrings", type, mutable: true }, { id: readyId, name: "%templateStringsReady", type: BOOL, mutable: true });
4631
4773
  lowerer.liftedFns.push({
@@ -4794,7 +4936,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
4794
4936
  // IS the spec's identity/thrower/no-op substitution for all three
4795
4937
  // members. An argument expression, when present, is undefined/null
4796
4938
  // by construction — nothing to evaluate.
4797
- const fnName = `%fn${lowerer.lambdaCounter++}_${member}pass`;
4939
+ const fnName = lowerer.closureName(loc, `_${member}pass`);
4798
4940
  const funcType = { kind: "func", params: [promT], ret: promT };
4799
4941
  const fnCtx = newFnCtx(true, null, funcType, inner);
4800
4942
  fnCtx.isAsync = true;
@@ -4876,7 +5018,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
4876
5018
  // Evaluate both callback expressions before the wrapper runs, in source order.
4877
5019
  const fulfilled = fulfilledAbsent ? null : boxHandler(fulfilledNode, true);
4878
5020
  const rejected = rejectedAbsent ? null : boxHandler(rejectedNode, false);
4879
- const fnName = `%fn${lowerer.lambdaCounter++}_then2`;
5021
+ const fnName = lowerer.closureName(loc, "_then2");
4880
5022
  const paramTypes = [
4881
5023
  promT,
4882
5024
  ...(fulfilled ? [fulfilled.value.type] : []),
@@ -5095,7 +5237,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
5095
5237
  lowerer.unsupported("SC1090", call.arguments.nodes[0], `then handlers receiving '${lowerer.fmt(v.type)}' values through an untyped handler (the settled value cannot cross the checked-dynamic tree boundary)`);
5096
5238
  };
5097
5239
  const resultT = { kind: "promise", inner: DYN };
5098
- const fnName = `%fn${lowerer.lambdaCounter++}_then`;
5240
+ const fnName = lowerer.closureName(loc, "_then");
5099
5241
  const funcType = {
5100
5242
  kind: "func",
5101
5243
  params: [promT, DYN],
@@ -5178,7 +5320,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
5178
5320
  lowerer.noLowering("then with this handler's result type", call, "the combined result must be a representable promise");
5179
5321
  }
5180
5322
  const R = resultT.inner;
5181
- const fnName = `%fn${lowerer.lambdaCounter++}_then`;
5323
+ const fnName = lowerer.closureName(loc, "_then");
5182
5324
  const funcType = {
5183
5325
  kind: "func",
5184
5326
  params: [promT, cb.type],
@@ -5282,7 +5424,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
5282
5424
  if (cb.type.kind !== "func" || cb.type.params.length !== 0 || cb.type.ret.kind !== "void") {
5283
5425
  lowerer.unsupported("SC1090", call.arguments.nodes[0], "finally callbacks with parameters or a return value (use () => { ... })");
5284
5426
  }
5285
- const fnName = `%fn${lowerer.lambdaCounter++}_finally`;
5427
+ const fnName = lowerer.closureName(loc, "_finally");
5286
5428
  const funcType = {
5287
5429
  kind: "func",
5288
5430
  params: [promT, cb.type],
@@ -5378,7 +5520,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
5378
5520
  }
5379
5521
  if (cb.type.kind === "dyn") {
5380
5522
  const resultT = { kind: "promise", inner: DYN };
5381
- const fnName = `%fn${lowerer.lambdaCounter++}_catchdyn`;
5523
+ const fnName = lowerer.closureName(loc, "_catchdyn");
5382
5524
  const funcType = {
5383
5525
  kind: "func",
5384
5526
  params: [promT, DYN],
@@ -5495,7 +5637,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
5495
5637
  "own type, or annotate the handler `(): undefined =>` for the T | undefined result");
5496
5638
  }
5497
5639
  const R = resultT.inner;
5498
- const fnName = `%fn${lowerer.lambdaCounter++}_catch`;
5640
+ const fnName = lowerer.closureName(loc, "_catch");
5499
5641
  const funcType = { kind: "func", params: [promT], ret: resultT };
5500
5642
  const fnCtx = newFnCtx(true, null, funcType, R);
5501
5643
  fnCtx.isAsync = true;
@@ -5713,7 +5855,7 @@ function filterNarrowHelper(lowerer, test, elem, outElem, tag, loc) {
5713
5855
  const existing = lowerer.arrHofHelpers.get(key);
5714
5856
  if (existing)
5715
5857
  return existing;
5716
- const name = `%arr.filterNarrow.${lowerer.arrHofHelpers.size}`;
5858
+ const name = keyedHelperName(lowerer, "%arr.filterNarrow", key);
5717
5859
  lowerer.arrHofHelpers.set(key, name);
5718
5860
  const arrT = arrayOf(elem);
5719
5861
  const outT = arrayOf(outElem);
@@ -5935,7 +6077,7 @@ export function recordKeysArrayCall(lowerer, receiver, argIr, shape, loc) {
5935
6077
  const key = `obj.keys:${argIr.shapeId}:${typeKey(resultT)}`;
5936
6078
  let helper = lowerer.arrHofHelpers.get(key);
5937
6079
  if (!helper) {
5938
- helper = `%obj.keys.${lowerer.arrHofHelpers.size}`;
6080
+ helper = keyedHelperName(lowerer, "%obj.keys", key);
5939
6081
  const ref = { kind: "varRef", localId: "r.0", type: argIr, loc };
5940
6082
  const outRef = { kind: "varRef", localId: "out.0", type: resultT, loc };
5941
6083
  lowerer.arrHofHelpers.set(key, helper);
@@ -6003,7 +6145,7 @@ function recordHasOwnHelper(lowerer, shapeId, loc) {
6003
6145
  const existing = lowerer.arrHofHelpers.get(key);
6004
6146
  if (existing)
6005
6147
  return existing;
6006
- const helper = `%obj.hasOwn.${lowerer.arrHofHelpers.size}`;
6148
+ const helper = keyedHelperName(lowerer, "%obj.hasOwn", key);
6007
6149
  lowerer.arrHofHelpers.set(key, helper);
6008
6150
  const shape = lowerer.shapes.get(shapeId);
6009
6151
  const recT = { kind: "record", shapeId };
@@ -6081,7 +6223,7 @@ function classAssignHelper(lowerer, className, srcShapeId, loc) {
6081
6223
  const existing = lowerer.arrHofHelpers.get(key);
6082
6224
  if (existing)
6083
6225
  return existing;
6084
- const helper = `%obj.assignClass.${lowerer.arrHofHelpers.size}`;
6226
+ const helper = keyedHelperName(lowerer, "%obj.assignClass", key);
6085
6227
  lowerer.arrHofHelpers.set(key, helper);
6086
6228
  const sShape = lowerer.shapes.get(srcShapeId);
6087
6229
  const oT = { kind: "object", className };
@@ -6142,7 +6284,7 @@ function recordAssignHelper(lowerer, targetShapeId, srcShapeId, loc) {
6142
6284
  const existing = lowerer.arrHofHelpers.get(key);
6143
6285
  if (existing)
6144
6286
  return existing;
6145
- const helper = `%obj.assign.${lowerer.arrHofHelpers.size}`;
6287
+ const helper = keyedHelperName(lowerer, "%obj.assign", key);
6146
6288
  lowerer.arrHofHelpers.set(key, helper);
6147
6289
  const sShape = lowerer.shapes.get(srcShapeId);
6148
6290
  const tShape = lowerer.shapes.get(targetShapeId);
@@ -6323,6 +6465,33 @@ function lowerObjectStaticCall(lowerer, call, access) {
6323
6465
  if (!lowerer.isStdlibGlobal(access.expression, "Object"))
6324
6466
  return null;
6325
6467
  const member = access.name.text;
6468
+ // `Object.getOwnPropertyDescriptor(Error, "stackTraceLimit")` (Effect's
6469
+ // isStackTraceLimitWritable): Error's own writable, enumerable,
6470
+ // configurable data property holding the current limit. The interned
6471
+ // Error value models no other statics (builtinGlobalValueAt).
6472
+ const [first, second] = call.arguments.nodes;
6473
+ if (member === "getOwnPropertyDescriptor" &&
6474
+ call.arguments.nodes.length === 2 &&
6475
+ lowerer.isStdlibGlobal(first, "Error") &&
6476
+ ts.isStringLiteralLike(second) &&
6477
+ second.text === "stackTraceLimit") {
6478
+ const loc = locOf(call);
6479
+ const dyn = (value) => ({ kind: "dynFrom", value, type: DYN, loc });
6480
+ const yes = dyn({ kind: "boolLit", value: true, type: BOOL, loc });
6481
+ const limit = { kind: "libCall", fn: "error.stackLimitGet", args: [], type: F64, loc };
6482
+ return {
6483
+ kind: "dynObjLit",
6484
+ fields: [
6485
+ { key: { kind: "strLit", value: "value", type: STRING, loc }, value: dyn(limit) },
6486
+ ...["writable", "enumerable", "configurable"].map((key) => ({
6487
+ key: { kind: "strLit", value: key, type: STRING, loc },
6488
+ value: yes,
6489
+ })),
6490
+ ],
6491
+ type: DYN,
6492
+ loc,
6493
+ };
6494
+ }
6326
6495
  if ((member === "getOwnPropertyNames" ||
6327
6496
  member === "getOwnPropertySymbols" ||
6328
6497
  member === "getOwnPropertyDescriptors") &&
@@ -6677,6 +6846,11 @@ function lowerObjectStaticCall(lowerer, call, access) {
6677
6846
  const target = lowerer.lowerExpr(call.arguments.nodes[0]);
6678
6847
  const rawSource = lowerer.lowerExpr(call.arguments.nodes[1]);
6679
6848
  fenceSymbolFieldCopy(lowerer, call.arguments.nodes[1], rawSource.type);
6849
+ let targetNode = call.arguments.nodes[0];
6850
+ while (ts.isParenthesizedExpression(targetNode))
6851
+ targetNode = targetNode.expression;
6852
+ if (ts.isObjectLiteralExpression(targetNode))
6853
+ fenceClassCopyIntoFreshObject(lowerer, call, call.arguments.nodes[1], rawSource);
6680
6854
  const source = lowerer.coerceToExpected(rawSource, DYN);
6681
6855
  if (target.type.kind === "dyn" && source.type.kind === "dyn") {
6682
6856
  return { kind: "libCall", fn: "dyn.assign", args: [target, source], type: DYN, loc };
@@ -6815,19 +6989,8 @@ function lowerObjectStaticCall(lowerer, call, access) {
6815
6989
  const srcNode = spread ? argNode.expression : argNode;
6816
6990
  const rawSource = lowerer.lowerExpr(srcNode);
6817
6991
  fenceSymbolFieldCopy(lowerer, srcNode, rawSource.type, spread);
6818
- // A class instance copied into a fresh object
6819
- // (`Object.assign({}, instance)`): the result is a plain
6820
- // object holding the instance's own fields, never an
6821
- // instance, so a result the checker types as the class has
6822
- // no representation (the checked cast would throw).
6823
- if (rawSource.type.kind === "object" &&
6824
- freshLiteralTarget &&
6825
- !ts.isExpressionStatement(call.parent)) {
6826
- const resultT = lowerer.mapTypeOf(lowerer.typeOf(call));
6827
- if (resultT !== null && resultT.kind === "object") {
6828
- lowerer.unsupported("SC1090", srcNode, `Object.assign copying a '${lowerer.fmt(rawSource.type)}' instance into a fresh object typed as the class (the copy is a plain object holding the instance's own fields, not an instance — build the object literal from the fields you need)`);
6829
- }
6830
- }
6992
+ if (freshLiteralTarget)
6993
+ fenceClassCopyIntoFreshObject(lowerer, call, srcNode, rawSource);
6831
6994
  const src = lowerer.coerceToExpected(rawSource, DYN);
6832
6995
  if (src.type.kind !== "dyn") {
6833
6996
  ok = false;
@@ -7049,6 +7212,9 @@ function lowerObjectStaticCall(lowerer, call, access) {
7049
7212
  loc,
7050
7213
  };
7051
7214
  }
7215
+ const fnIntegrity = functionIntegrity(lowerer, member, value, call.arguments.nodes[0], locOf(call));
7216
+ if (fnIntegrity)
7217
+ return fnIntegrity;
7052
7218
  if (member === "preventExtensions" || member === "seal") {
7053
7219
  const integrity = lowerClassIntegrity(lowerer, call, member, value);
7054
7220
  if (integrity)
@@ -7126,6 +7292,9 @@ function lowerObjectStaticCall(lowerer, call, access) {
7126
7292
  arm.kind === "string" ||
7127
7293
  arm.kind === "symbol"))
7128
7294
  return value;
7295
+ const fnIntegrity = functionIntegrity(lowerer, "freeze", value, argNode, locOf(call));
7296
+ if (fnIntegrity)
7297
+ return fnIntegrity;
7129
7298
  const integrity = lowerClassIntegrity(lowerer, call, "freeze", value);
7130
7299
  if (integrity)
7131
7300
  return integrity;
@@ -7445,7 +7614,7 @@ function lowerObjectStaticCall(lowerer, call, access) {
7445
7614
  const key = `obj.${member}:${argIr.shapeId}:${typeKey(resultT)}`;
7446
7615
  let helper = lowerer.arrHofHelpers.get(key);
7447
7616
  if (!helper) {
7448
- helper = `%obj.${member}.${lowerer.arrHofHelpers.size}`;
7617
+ helper = keyedHelperName(lowerer, `%obj.${member}`, key);
7449
7618
  const recT = argIr;
7450
7619
  const ref = { kind: "varRef", localId: "r.0", type: recT, loc };
7451
7620
  const outRef = { kind: "varRef", localId: "out.0", type: resultT, loc };
@@ -8008,7 +8177,7 @@ function lowerInlineArrowBind(lowerer, call, access) {
8008
8177
  const length = firstDefault < 0 ? arrow.parameters.nodes.length : firstDefault;
8009
8178
  const key = `arrow.bind:${typeKey(type)}:${length}`;
8010
8179
  const existing = lowerer.arrHofHelpers.get(key);
8011
- const name = existing ?? `%arrow.bind.${lowerer.arrHofHelpers.size}`;
8180
+ const name = existing ?? keyedHelperName(lowerer, "%arrow.bind", key);
8012
8181
  if (!existing) {
8013
8182
  lowerer.arrHofHelpers.set(key, name);
8014
8183
  lowerer.freshClosureAdapters.add(name);
@@ -8462,6 +8631,10 @@ export function lowerObjectMethodCall(lowerer, call, access) {
8462
8631
  if (info && !found && eventTargetApiMethod(info, access.name.text)) {
8463
8632
  return lowerEventTargetMethodCall(lowerer, call, access, info, lowerReceiver());
8464
8633
  }
8634
+ // The Date methods a class declared `extends Date` does not declare.
8635
+ if (info && !found && dateRootOf(info) && isDatePrototypeMethod(access.name.text)) {
8636
+ return lowerInheritedDateMethodCall(lowerer, call, access.name.text, info, lowerReceiver());
8637
+ }
8465
8638
  // GENERIC methods (own type parameters) never enter the methods table:
8466
8639
  // they monomorphize per call site and dispatch statically
8467
8640
  // (lowerClassGenericMethodCall has the exactness rules).
@@ -8820,7 +8993,7 @@ function lowerUnionObjectDynFieldCall(lowerer, call, access, receiverT) {
8820
8993
  const receiverRef = varRef(receiverLocal.id, receiverT, loc);
8821
8994
  let helper = lowerer.unionCallHelpers.get(key);
8822
8995
  if (!helper) {
8823
- helper = `%union.call.${lowerer.unionCallHelpers.size}`;
8996
+ helper = keyedHelperName(lowerer, "%union.call", key);
8824
8997
  lowerer.unionCallHelpers.set(key, helper);
8825
8998
  const receiverRef = varRef("this.0", receiverT, loc);
8826
8999
  const branch = (plan) => {
@@ -8900,7 +9073,7 @@ function unionObjectMethodHelper(lowerer, sourceCall, receiverT, method, plans,
8900
9073
  const existing = lowerer.unionCallHelpers.get(key);
8901
9074
  if (existing)
8902
9075
  return existing;
8903
- const name = `%union.call.${lowerer.unionCallHelpers.size}`;
9076
+ const name = keyedHelperName(lowerer, "%union.call", key);
8904
9077
  lowerer.unionCallHelpers.set(key, name);
8905
9078
  // A probe that catches a refusal while the body lowers must not leave
8906
9079
  // the name registered for a helper that was never emitted.
@@ -9005,15 +9178,17 @@ function loweredArgumentText(lowerer, arg) {
9005
9178
  * fences; null when the argument shape has no static form (the caller
9006
9179
  * reports the SC2012 refusal). */
9007
9180
  export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
9008
- if (name === "parseInt" || name === "isNaN") {
9181
+ if (name === "parseInt" || name === "isNaN" || name === "isFinite") {
9009
9182
  const maxArgs = name === "parseInt" ? 2 : 1;
9010
9183
  if (args.length < 1 || args.length > maxArgs) {
9011
9184
  lowerer.noLowering(`${name} with ${args.length} argument${args.length === 1 ? "" : "s"}`, call);
9012
9185
  }
9013
- if (name === "isNaN") {
9014
- // The global's ToNumber turns a missing value into NaN.
9186
+ if (name === "isNaN" || name === "isFinite") {
9187
+ // The global's ToNumber turns a missing value into NaN, converts
9188
+ // strings, booleans and null, and calls valueOf/toString on objects.
9015
9189
  const x = lowerToNumberArgument(lowerer, args[0]);
9016
- return { kind: "libCall", fn: "num.isNaN", args: [x], type: BOOL, loc };
9190
+ const fn = name === "isNaN" ? "num.isNaN" : "number.isFinite";
9191
+ return { kind: "libCall", fn, args: [x], type: BOOL, loc };
9017
9192
  }
9018
9193
  const radix = args[1]
9019
9194
  ? lowerer.lowerExprExpecting(args[1], F64)
@@ -9050,7 +9225,7 @@ export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
9050
9225
  const key = `parseInt.optional:${unionT.unionId}`;
9051
9226
  let helper = lowerer.valueHelpers.get(key);
9052
9227
  if (!helper) {
9053
- helper = `%parseInt.optional.${lowerer.valueHelpers.size}`;
9228
+ helper = keyedHelperName(lowerer, "%parseInt.optional", key);
9054
9229
  lowerer.valueHelpers.set(key, helper);
9055
9230
  const value = { kind: "varRef", localId: "value.0", type: unionT, loc };
9056
9231
  const radixRef = { kind: "varRef", localId: "radix.0", type: F64, loc };
@@ -9139,27 +9314,32 @@ export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
9139
9314
  : lowerer.lowerExprExpecting(args[0], STRING);
9140
9315
  return { kind: "libCall", fn: "num.parseInt", args: [s, radix], type: F64, loc };
9141
9316
  }
9142
- // STATIC parseFloat/isFinite over exactly-typed arguments —
9143
- // parseInt's siblings (num.parseFloat is ECMA 19.2.4's decimal-
9144
- // literal prefix parse in scr_string.c; a number-typed isFinite IS
9145
- // Number.isFinite — the global's ToNumber coercion is the identity
9146
- // there, ms's `isFinite(val)` guard). Other argument types retain
9147
- // their native coercion checks or the SC2012 refusal. The probe never
9148
- // emits — lowering is IR construction.
9149
- if ((name === "parseFloat" || name === "isFinite") && args.length === 1) {
9150
- if (name === "parseFloat") {
9151
- const optional = optionalCallValue(lowerer, args[0]);
9152
- if (optional) {
9153
- const parsed = lowerOptionalStringNumber(lowerer, optional, loc, "num.parseFloat", "parseFloat");
9154
- if (parsed)
9155
- return parsed;
9156
- }
9317
+ // parseFloat takes one argument; Node ignores the rest after evaluating
9318
+ // them (`parseFloat(text, 10)`). Literal and identifier extras have
9319
+ // nothing to evaluate.
9320
+ if (name === "parseFloat" &&
9321
+ args.length > 1 &&
9322
+ args
9323
+ .slice(1)
9324
+ .every((arg) => ts.isNumericLiteral(arg) || ts.isStringLiteral(arg) || ts.isIdentifier(arg)))
9325
+ return lowerStaticNumberGlobal(lowerer, name, call, args.slice(0, 1), loc);
9326
+ // STATIC parseFloat over string arguments — parseInt's sibling
9327
+ // (num.parseFloat is ECMA 19.2.4's decimal-literal prefix parse in
9328
+ // scr_string.c). Other argument types retain their native coercion
9329
+ // checks or the SC2012 refusal. The probe never emits — lowering is IR
9330
+ // construction.
9331
+ if (name === "parseFloat" && args.length === 1) {
9332
+ const optional = optionalCallValue(lowerer, args[0]);
9333
+ if (optional) {
9334
+ const parsed = lowerOptionalStringNumber(lowerer, optional, loc, "num.parseFloat", "parseFloat");
9335
+ if (parsed)
9336
+ return parsed;
9157
9337
  }
9158
9338
  const probed = tryLowerExpression(lowerer, args[0]);
9159
- if (name === "parseFloat" && probed?.type.kind === "string") {
9339
+ if (probed?.type.kind === "string") {
9160
9340
  return { kind: "libCall", fn: "num.parseFloat", args: [probed], type: F64, loc };
9161
9341
  }
9162
- if (name === "parseFloat" && probed?.type.kind === "dyn") {
9342
+ if (probed?.type.kind === "dyn") {
9163
9343
  return {
9164
9344
  kind: "libCall",
9165
9345
  fn: "num.parseFloat",
@@ -9168,29 +9348,38 @@ export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
9168
9348
  loc,
9169
9349
  };
9170
9350
  }
9171
- if (name === "isFinite" && probed?.type.kind === "f64") {
9172
- return { kind: "libCall", fn: "number.isFinite", args: [probed], type: BOOL, loc };
9173
- }
9174
- // A number the checker trusts but storage may hold missing (an
9175
- // out-of-range read): the global's ToNumber makes undefined NaN.
9176
- if (name === "isFinite" &&
9177
- probed?.type.kind === "union" &&
9178
- lowerer.armTag(probed.type.unionId, UNDEFINED_T) >= 0 &&
9179
- lowerer.stripUndefinedArm(probed.type).kind === "f64") {
9180
- const x = lowerOptionalNumber(lowerer, probed, loc, args[0]);
9181
- return { kind: "libCall", fn: "number.isFinite", args: [x], type: BOOL, loc };
9182
- }
9183
9351
  }
9184
9352
  return null;
9185
9353
  }
9186
- /** `crypto.getRandomValues(view)` on the WebCrypto global or webcrypto. */
9187
- function lowerWebCryptoGetRandomValues(lowerer, call, access) {
9188
- if (access.name.text !== "getRandomValues" ||
9354
+ /** `crypto.getRandomValues(view)` and `crypto.randomUUID()` on the
9355
+ * WebCrypto global or webcrypto. Other argument counts (JavaScript only)
9356
+ * invoke the dynamic object's method, which ignores extra arguments and
9357
+ * throws Node's missing-argument TypeError. */
9358
+ function lowerWebCryptoMethodCall(lowerer, call, access) {
9359
+ const member = access.name.text;
9360
+ if ((member !== "getRandomValues" && member !== "randomUUID") ||
9189
9361
  call.questionDotToken ||
9190
9362
  access.questionDotToken ||
9191
9363
  !isWebCryptoReceiver(lowerer, access.expression))
9192
9364
  return null;
9193
- return lowerCryptoGetRandomValues(lowerer, call);
9365
+ const args = call.arguments.nodes;
9366
+ if (member === "getRandomValues" && args.length === 1) {
9367
+ return lowerCryptoGetRandomValues(lowerer, call);
9368
+ }
9369
+ if (member === "randomUUID" && args.length === 0) {
9370
+ return { kind: "libCall", fn: "crypto.randomUUID", args: [], type: STRING, loc: locOf(call) };
9371
+ }
9372
+ if (args.some(ts.isSpreadElement))
9373
+ return null;
9374
+ return {
9375
+ kind: "dynInvoke",
9376
+ recv: lowerer.lowerExprExpecting(access.expression, DYN),
9377
+ method: member,
9378
+ calleeName: v8CalleeText(access),
9379
+ args: args.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
9380
+ type: DYN,
9381
+ loc: locOf(call),
9382
+ };
9194
9383
  }
9195
9384
  /** A then handler's promise-armed result (`.then(() => cached ?? load())`
9196
9385
  * typed `T | Promise<T>`, or a `Promise<void> | void` callback's result):
@@ -9293,4 +9482,63 @@ function lowerObjectAssignOntoError(lowerer, call) {
9293
9482
  loc,
9294
9483
  };
9295
9484
  }
9485
+ /** `Object.freeze(fn)` and the other integrity operations on a function
9486
+ * value: the function's checked-dynamic face holds its own properties (the
9487
+ * ones a program assigns, `name`, `length`, `prototype`) and their
9488
+ * integrity state, which the runtime keeps on its property table. The
9489
+ * mutators answer the function itself; the queries answer from the table.
9490
+ * Null for other values. */
9491
+ function functionIntegrity(lowerer, member, value, node, loc) {
9492
+ if (value.type.kind !== "func" || !lowerer.dynConvertible(value.type))
9493
+ return null;
9494
+ const operations = {
9495
+ freeze: "dyn.freeze",
9496
+ seal: "dyn.seal",
9497
+ preventExtensions: "dyn.preventExtensions",
9498
+ isSealed: "dyn.isSealed",
9499
+ isExtensible: "dyn.isExtensible",
9500
+ };
9501
+ if (!(member in operations))
9502
+ return null;
9503
+ const fn = operations[member];
9504
+ // The first operation on a function creates its property table, whose
9505
+ // `name` comes from the box: give the box the function's JS name, as a
9506
+ // closure flowing into any checked-dynamic slot gets.
9507
+ const name = jsFuncNameOf(node, lowerer);
9508
+ const boxed = (e) => {
9509
+ const box = lowerer.coerceToExpected(e, DYN);
9510
+ return box.kind === "dynFrom" && name !== null ? { ...box, fnName: name } : box;
9511
+ };
9512
+ if (fn === "dyn.isSealed" || fn === "dyn.isExtensible") {
9513
+ return { kind: "libCall", fn, args: [boxed(value)], type: BOOL, loc };
9514
+ }
9515
+ const held = lowerer.declareHiddenLocal("%integrityFn", value.type);
9516
+ const ref = () => ({ kind: "varRef", localId: held.id, type: value.type, loc });
9517
+ return {
9518
+ kind: "seqExpr",
9519
+ stmts: [
9520
+ { kind: "varDecl", localId: held.id, init: value, loc },
9521
+ {
9522
+ kind: "exprStmt",
9523
+ expr: { kind: "libCall", fn, args: [boxed(ref())], type: DYN, loc },
9524
+ loc,
9525
+ },
9526
+ ],
9527
+ result: ref(),
9528
+ type: value.type,
9529
+ loc,
9530
+ };
9531
+ }
9532
+ /** A class instance copied into a fresh object (`Object.assign({},
9533
+ * instance)`): the result is a plain object holding the instance's own
9534
+ * fields, never an instance, so a result the checker types as the class has
9535
+ * no representation (the checked cast would throw). */
9536
+ function fenceClassCopyIntoFreshObject(lowerer, call, srcNode, rawSource) {
9537
+ if (rawSource.type.kind !== "object" || ts.isExpressionStatement(call.parent))
9538
+ return;
9539
+ const resultT = lowerer.mapTypeOf(lowerer.typeOf(call));
9540
+ if (resultT === null || resultT.kind !== "object")
9541
+ return;
9542
+ lowerer.unsupported("SC1090", srcNode, `Object.assign copying a '${lowerer.fmt(rawSource.type)}' instance into a fresh object typed as the class (the copy is a plain object holding the instance's own fields, not an instance — build the object literal from the fields you need)`);
9543
+ }
9296
9544
  //# sourceMappingURL=lower-calls.js.map