@scriptc/compiler 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1104) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +915 -215
  2. package/ambient/scriptc-overrides.d.ts +5 -1
  3. package/ambient/scriptc.d.ts +22 -2
  4. package/dist/backend/build-cache.d.ts +4 -0
  5. package/dist/backend/build-cache.js +16 -2
  6. package/dist/backend/build-cache.js.map +1 -1
  7. package/dist/backend/cycle-analysis.js +17 -5
  8. package/dist/backend/cycle-analysis.js.map +1 -1
  9. package/dist/backend/cycle-analysis.test.js +50 -11
  10. package/dist/backend/cycle-analysis.test.js.map +1 -1
  11. package/dist/backend/debug-symbols.js.map +1 -1
  12. package/dist/backend/executable-features.js +2 -1
  13. package/dist/backend/executable-features.js.map +1 -1
  14. package/dist/backend/external-c.d.ts +13 -6
  15. package/dist/backend/external-c.js +15 -3
  16. package/dist/backend/external-c.js.map +1 -1
  17. package/dist/backend/ffi-callbacks.js +6 -9
  18. package/dist/backend/ffi-callbacks.js.map +1 -1
  19. package/dist/backend/library-identity-markers.js.map +1 -1
  20. package/dist/backend/library-pack.d.ts +1 -1
  21. package/dist/backend/library-pack.js +81 -24
  22. package/dist/backend/library-pack.js.map +1 -1
  23. package/dist/backend/link-plan-core.js +9 -2
  24. package/dist/backend/link-plan-core.js.map +1 -1
  25. package/dist/backend/link-plan.d.ts +1 -1
  26. package/dist/backend/link-plan.js +4 -5
  27. package/dist/backend/link-plan.js.map +1 -1
  28. package/dist/backend/linker.d.ts +1 -1
  29. package/dist/backend/linker.js +42 -23
  30. package/dist/backend/linker.js.map +1 -1
  31. package/dist/backend/literals.js +5 -4
  32. package/dist/backend/literals.js.map +1 -1
  33. package/dist/backend/literals.test.js +30 -5
  34. package/dist/backend/literals.test.js.map +1 -1
  35. package/dist/backend/llvm/blocks.test.js +5 -2
  36. package/dist/backend/llvm/blocks.test.js.map +1 -1
  37. package/dist/backend/llvm/borrowed-inputs.js.map +1 -1
  38. package/dist/backend/llvm/borrowed-receivers.js +43 -19
  39. package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
  40. package/dist/backend/llvm/byte-numbers.js +6 -1
  41. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  42. package/dist/backend/llvm/bytes-bounds.js +73 -22
  43. package/dist/backend/llvm/bytes-bounds.js.map +1 -1
  44. package/dist/backend/llvm/call-lifetimes.d.ts +3 -0
  45. package/dist/backend/llvm/call-lifetimes.js +60 -17
  46. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  47. package/dist/backend/llvm/call-lifetimes.test.js +159 -28
  48. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  49. package/dist/backend/llvm/checked-value-lifetimes.d.ts +4 -0
  50. package/dist/backend/llvm/checked-value-lifetimes.js +14 -4
  51. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  52. package/dist/backend/llvm/classes.js +16 -12
  53. package/dist/backend/llvm/classes.js.map +1 -1
  54. package/dist/backend/llvm/common.js +4 -1
  55. package/dist/backend/llvm/common.js.map +1 -1
  56. package/dist/backend/llvm/counted-loops.js +10 -3
  57. package/dist/backend/llvm/counted-loops.js.map +1 -1
  58. package/dist/backend/llvm/debug-info.js +33 -13
  59. package/dist/backend/llvm/debug-info.js.map +1 -1
  60. package/dist/backend/llvm/debug-info.test.js +28 -6
  61. package/dist/backend/llvm/debug-info.test.js.map +1 -1
  62. package/dist/backend/llvm/dyn.js +68 -22
  63. package/dist/backend/llvm/dyn.js.map +1 -1
  64. package/dist/backend/llvm/emitter.d.ts +9 -3
  65. package/dist/backend/llvm/emitter.js +238 -105
  66. package/dist/backend/llvm/emitter.js.map +1 -1
  67. package/dist/backend/llvm/emitter.test.js +233 -42
  68. package/dist/backend/llvm/emitter.test.js.map +1 -1
  69. package/dist/backend/llvm/expr-async.js +25 -6
  70. package/dist/backend/llvm/expr-async.js.map +1 -1
  71. package/dist/backend/llvm/expr-bytes.js +13 -4
  72. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  73. package/dist/backend/llvm/expr-callbacks.js +10 -4
  74. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  75. package/dist/backend/llvm/expr-calls.js +20 -9
  76. package/dist/backend/llvm/expr-calls.js.map +1 -1
  77. package/dist/backend/llvm/expr-containers.d.ts +2 -0
  78. package/dist/backend/llvm/expr-containers.js +92 -33
  79. package/dist/backend/llvm/expr-containers.js.map +1 -1
  80. package/dist/backend/llvm/expr-control.js +1 -3
  81. package/dist/backend/llvm/expr-control.js.map +1 -1
  82. package/dist/backend/llvm/expr-dispatch.js +3 -1
  83. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  84. package/dist/backend/llvm/expr-dynamic.js +19 -4
  85. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  86. package/dist/backend/llvm/expr-island.js +26 -6
  87. package/dist/backend/llvm/expr-island.js.map +1 -1
  88. package/dist/backend/llvm/expr-primitives.js +88 -19
  89. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  90. package/dist/backend/llvm/expr-primitives.test.js +43 -1
  91. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  92. package/dist/backend/llvm/expr-records.js +10 -9
  93. package/dist/backend/llvm/expr-records.js.map +1 -1
  94. package/dist/backend/llvm/expr-stream-bridges.js +44 -26
  95. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  96. package/dist/backend/llvm/expr-stream-bridges.test.js +51 -14
  97. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  98. package/dist/backend/llvm/expr-stream-callbacks.js +34 -14
  99. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  100. package/dist/backend/llvm/integer-values.js +15 -4
  101. package/dist/backend/llvm/integer-values.js.map +1 -1
  102. package/dist/backend/llvm/integer-views.js +23 -7
  103. package/dist/backend/llvm/integer-views.js.map +1 -1
  104. package/dist/backend/llvm/integer-views.test.js +42 -7
  105. package/dist/backend/llvm/integer-views.test.js.map +1 -1
  106. package/dist/backend/llvm/lib-abi.js +13 -4
  107. package/dist/backend/llvm/lib-abi.js.map +1 -1
  108. package/dist/backend/llvm/lib-connect.js +7 -1
  109. package/dist/backend/llvm/lib-connect.js.map +1 -1
  110. package/dist/backend/llvm/lib-datagram.js +35 -10
  111. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  112. package/dist/backend/llvm/lib-dispatch.js +35 -16
  113. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  114. package/dist/backend/llvm/lib-filesystem.js +33 -18
  115. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  116. package/dist/backend/llvm/lib-http2.js +60 -15
  117. package/dist/backend/llvm/lib-http2.js.map +1 -1
  118. package/dist/backend/llvm/lib-lookup.js +12 -5
  119. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  120. package/dist/backend/llvm/lib-network.js +97 -31
  121. package/dist/backend/llvm/lib-network.js.map +1 -1
  122. package/dist/backend/llvm/lib-process.js +57 -14
  123. package/dist/backend/llvm/lib-process.js.map +1 -1
  124. package/dist/backend/llvm/lib-shared.js +107 -31
  125. package/dist/backend/llvm/lib-shared.js.map +1 -1
  126. package/dist/backend/llvm/lib-stream.js +33 -14
  127. package/dist/backend/llvm/lib-stream.js.map +1 -1
  128. package/dist/backend/llvm/lib-test.js +21 -7
  129. package/dist/backend/llvm/lib-test.js.map +1 -1
  130. package/dist/backend/llvm/lib-tls.js +69 -20
  131. package/dist/backend/llvm/lib-tls.js.map +1 -1
  132. package/dist/backend/llvm/local-array-reads.d.ts +1 -0
  133. package/dist/backend/llvm/local-array-reads.js +96 -30
  134. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  135. package/dist/backend/llvm/local-array-reads.test.js +368 -60
  136. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  137. package/dist/backend/llvm/local-union-storage.d.ts +25 -0
  138. package/dist/backend/llvm/local-union-storage.js +109 -0
  139. package/dist/backend/llvm/local-union-storage.js.map +1 -0
  140. package/dist/backend/llvm/local-union-storage.test.d.ts +1 -0
  141. package/dist/backend/llvm/local-union-storage.test.js +210 -0
  142. package/dist/backend/llvm/local-union-storage.test.js.map +1 -0
  143. package/dist/backend/llvm/map-read-lifetimes.d.ts +6 -2
  144. package/dist/backend/llvm/map-read-lifetimes.js +44 -14
  145. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  146. package/dist/backend/llvm/map-read-lifetimes.test.js +89 -17
  147. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  148. package/dist/backend/llvm/reference-effects.d.ts +3 -2
  149. package/dist/backend/llvm/reference-effects.js +67 -36
  150. package/dist/backend/llvm/reference-effects.js.map +1 -1
  151. package/dist/backend/llvm/reference-effects.test.js +92 -9
  152. package/dist/backend/llvm/reference-effects.test.js.map +1 -1
  153. package/dist/backend/llvm/shapes.js +60 -17
  154. package/dist/backend/llvm/shapes.js.map +1 -1
  155. package/dist/backend/llvm/shapes.test.js +3 -1
  156. package/dist/backend/llvm/shapes.test.js.map +1 -1
  157. package/dist/backend/llvm/split.js +4 -4
  158. package/dist/backend/llvm/split.js.map +1 -1
  159. package/dist/backend/llvm/split.test.js +14 -6
  160. package/dist/backend/llvm/split.test.js.map +1 -1
  161. package/dist/backend/llvm/stack-unions.js +14 -5
  162. package/dist/backend/llvm/stack-unions.js.map +1 -1
  163. package/dist/backend/llvm/stack-unions.test.js +151 -32
  164. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  165. package/dist/backend/llvm/string-construction.js.map +1 -1
  166. package/dist/backend/llvm/string-construction.test.js +32 -7
  167. package/dist/backend/llvm/string-construction.test.js.map +1 -1
  168. package/dist/backend/llvm/string-lifetimes.js +14 -8
  169. package/dist/backend/llvm/string-lifetimes.js.map +1 -1
  170. package/dist/backend/llvm/string-lifetimes.test.js +112 -26
  171. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  172. package/dist/backend/llvm/switch-dispatch.d.ts +9 -0
  173. package/dist/backend/llvm/switch-dispatch.js +114 -0
  174. package/dist/backend/llvm/switch-dispatch.js.map +1 -0
  175. package/dist/backend/llvm/switch-dispatch.test.d.ts +1 -0
  176. package/dist/backend/llvm/switch-dispatch.test.js +83 -0
  177. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -0
  178. package/dist/backend/llvm/unsupported.js.map +1 -1
  179. package/dist/backend/llvm/walkers.js +6 -3
  180. package/dist/backend/llvm/walkers.js.map +1 -1
  181. package/dist/backend/mangle.js +9 -3
  182. package/dist/backend/mangle.js.map +1 -1
  183. package/dist/backend/may-throw.js +18 -8
  184. package/dist/backend/may-throw.js.map +1 -1
  185. package/dist/backend/may-throw.test.js +118 -22
  186. package/dist/backend/may-throw.test.js.map +1 -1
  187. package/dist/backend/native/artifact-stamps.d.ts +39 -0
  188. package/dist/backend/native/artifact-stamps.js +371 -0
  189. package/dist/backend/native/artifact-stamps.js.map +1 -0
  190. package/dist/backend/native/cache-warm.d.ts +24 -0
  191. package/dist/backend/native/cache-warm.js +80 -0
  192. package/dist/backend/native/cache-warm.js.map +1 -0
  193. package/dist/backend/native/compiler-fingerprint.d.ts +19 -0
  194. package/dist/backend/native/compiler-fingerprint.js +357 -0
  195. package/dist/backend/native/compiler-fingerprint.js.map +1 -0
  196. package/dist/backend/native/contracts.d.ts +314 -0
  197. package/dist/backend/native/contracts.js +2 -0
  198. package/dist/backend/native/contracts.js.map +1 -0
  199. package/dist/backend/native/dependency-files.d.ts +5 -0
  200. package/dist/backend/native/dependency-files.js +83 -0
  201. package/dist/backend/native/dependency-files.js.map +1 -0
  202. package/dist/backend/native/driver.d.ts +50 -0
  203. package/dist/backend/native/driver.js +294 -0
  204. package/dist/backend/native/driver.js.map +1 -0
  205. package/dist/backend/native/executable.d.ts +18 -0
  206. package/dist/backend/native/executable.js +1267 -0
  207. package/dist/backend/native/executable.js.map +1 -0
  208. package/dist/backend/native/library.d.ts +2 -0
  209. package/dist/backend/native/library.js +614 -0
  210. package/dist/backend/native/library.js.map +1 -0
  211. package/dist/backend/native/linker-fingerprint.d.ts +8 -0
  212. package/dist/backend/native/linker-fingerprint.js +174 -0
  213. package/dist/backend/native/linker-fingerprint.js.map +1 -0
  214. package/dist/backend/native/object-merge.d.ts +2 -0
  215. package/dist/backend/native/object-merge.js +154 -0
  216. package/dist/backend/native/object-merge.js.map +1 -0
  217. package/dist/backend/native/process.d.ts +17 -0
  218. package/dist/backend/native/process.js +42 -0
  219. package/dist/backend/native/process.js.map +1 -0
  220. package/dist/backend/native/program-shards.d.ts +21 -0
  221. package/dist/backend/native/program-shards.js +99 -0
  222. package/dist/backend/native/program-shards.js.map +1 -0
  223. package/dist/backend/native/runtime-inputs.d.ts +12 -0
  224. package/dist/backend/native/runtime-inputs.js +163 -0
  225. package/dist/backend/native/runtime-inputs.js.map +1 -0
  226. package/dist/backend/native/runtime-inputs.test.d.ts +1 -0
  227. package/dist/backend/native/runtime-inputs.test.js +64 -0
  228. package/dist/backend/native/runtime-inputs.test.js.map +1 -0
  229. package/dist/backend/native/runtime-objects.d.ts +16 -0
  230. package/dist/backend/native/runtime-objects.js +122 -0
  231. package/dist/backend/native/runtime-objects.js.map +1 -0
  232. package/dist/backend/native/session.d.ts +12 -0
  233. package/dist/backend/native/session.js +31 -0
  234. package/dist/backend/native/session.js.map +1 -0
  235. package/dist/backend/native/tool-identity.d.ts +37 -0
  236. package/dist/backend/native/tool-identity.js +310 -0
  237. package/dist/backend/native/tool-identity.js.map +1 -0
  238. package/dist/backend/native/trace-paths.d.ts +12 -0
  239. package/dist/backend/native/trace-paths.js +73 -0
  240. package/dist/backend/native/trace-paths.js.map +1 -0
  241. package/dist/backend/native/vendor.d.ts +1 -0
  242. package/dist/backend/native/vendor.js +12 -0
  243. package/dist/backend/native/vendor.js.map +1 -0
  244. package/dist/backend/native-codegen-core.js +2 -1
  245. package/dist/backend/native-codegen-core.js.map +1 -1
  246. package/dist/backend/native-codegen.d.ts +1 -1
  247. package/dist/backend/native-codegen.js +24 -13
  248. package/dist/backend/native-codegen.js.map +1 -1
  249. package/dist/backend/native-codegen.test.js +12 -9
  250. package/dist/backend/native-codegen.test.js.map +1 -1
  251. package/dist/backend/native-link-info-core.js +9 -5
  252. package/dist/backend/native-link-info-core.js.map +1 -1
  253. package/dist/backend/native-link-info.js +14 -5
  254. package/dist/backend/native-link-info.js.map +1 -1
  255. package/dist/backend/native-link-info.test.js +58 -13
  256. package/dist/backend/native-link-info.test.js.map +1 -1
  257. package/dist/backend/native-toolchain.d.ts +17 -450
  258. package/dist/backend/native-toolchain.js +17 -3971
  259. package/dist/backend/native-toolchain.js.map +1 -1
  260. package/dist/backend/native-toolchain.test.js +103 -72
  261. package/dist/backend/native-toolchain.test.js.map +1 -1
  262. package/dist/backend/native-tools.js +27 -8
  263. package/dist/backend/native-tools.js.map +1 -1
  264. package/dist/backend/object-localize.js +17 -14
  265. package/dist/backend/object-localize.js.map +1 -1
  266. package/dist/backend/object-localize.test.js +59 -12
  267. package/dist/backend/object-localize.test.js.map +1 -1
  268. package/dist/backend/runtime-pack-core.js +96 -49
  269. package/dist/backend/runtime-pack-core.js.map +1 -1
  270. package/dist/backend/runtime-pack-native.js +5 -3
  271. package/dist/backend/runtime-pack-native.js.map +1 -1
  272. package/dist/backend/runtime-pack-targets.test.js +87 -15
  273. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  274. package/dist/backend/runtime-pack.d.ts +1 -1
  275. package/dist/backend/runtime-pack.js +11 -12
  276. package/dist/backend/runtime-pack.js.map +1 -1
  277. package/dist/backend/runtime-pack.test.js +40 -24
  278. package/dist/backend/runtime-pack.test.js.map +1 -1
  279. package/dist/backend/source-locations.js.map +1 -1
  280. package/dist/backend/source-locations.test.js +7 -2
  281. package/dist/backend/source-locations.test.js.map +1 -1
  282. package/dist/backend/target-diagnostics.js +44 -14
  283. package/dist/backend/target-diagnostics.js.map +1 -1
  284. package/dist/backend/target-diagnostics.test.js +93 -20
  285. package/dist/backend/target-diagnostics.test.js.map +1 -1
  286. package/dist/backend/targets.js +230 -86
  287. package/dist/backend/targets.js.map +1 -1
  288. package/dist/backend/targets.test.js +32 -18
  289. package/dist/backend/targets.test.js.map +1 -1
  290. package/dist/backend/toolchain-environment.js +5 -1
  291. package/dist/backend/toolchain-environment.js.map +1 -1
  292. package/dist/backend/vendor-archives.d.ts +2 -2
  293. package/dist/backend/vendor-archives.js +84 -35
  294. package/dist/backend/vendor-archives.js.map +1 -1
  295. package/dist/backend/vendor-inputs.js +13 -1
  296. package/dist/backend/vendor-inputs.js.map +1 -1
  297. package/dist/backend/warm-cache.d.ts +1 -1
  298. package/dist/backend/warm-cache.js +33 -9
  299. package/dist/backend/warm-cache.js.map +1 -1
  300. package/dist/cli/command.js +39 -9
  301. package/dist/cli/command.js.map +1 -1
  302. package/dist/cli/output-options.js +14 -4
  303. package/dist/cli/output-options.js.map +1 -1
  304. package/dist/cli/paths.js.map +1 -1
  305. package/dist/cli/wasi-runner.js.map +1 -1
  306. package/dist/compat/fetch-profile.js +36 -35
  307. package/dist/compat/fetch-profile.js.map +1 -1
  308. package/dist/coverage/report.js +16 -17
  309. package/dist/coverage/report.js.map +1 -1
  310. package/dist/coverage/surface-manifest.js +112 -26
  311. package/dist/coverage/surface-manifest.js.map +1 -1
  312. package/dist/diagnostics/diagnostic.js +55 -16
  313. package/dist/diagnostics/diagnostic.js.map +1 -1
  314. package/dist/executable/executable-cache.d.ts +1 -1
  315. package/dist/executable/executable-cache.js +78 -48
  316. package/dist/executable/executable-cache.js.map +1 -1
  317. package/dist/executable/executable-cache.test.js +75 -26
  318. package/dist/executable/executable-cache.test.js.map +1 -1
  319. package/dist/executable/prepare.js +2 -2
  320. package/dist/executable/prepare.js.map +1 -1
  321. package/dist/ffi/ffi-manifest.js +78 -20
  322. package/dist/ffi/ffi-manifest.js.map +1 -1
  323. package/dist/ffi/ffi-manifest.test.js +96 -16
  324. package/dist/ffi/ffi-manifest.test.js.map +1 -1
  325. package/dist/format-integer.js.map +1 -1
  326. package/dist/frontend/analysis.js +12 -2
  327. package/dist/frontend/analysis.js.map +1 -1
  328. package/dist/frontend/arguments-usage.js.map +1 -1
  329. package/dist/frontend/binding-source.js +9 -3
  330. package/dist/frontend/binding-source.js.map +1 -1
  331. package/dist/frontend/builtin-modules.js +46 -2
  332. package/dist/frontend/builtin-modules.js.map +1 -1
  333. package/dist/frontend/cjs-resolve.js +40 -17
  334. package/dist/frontend/cjs-resolve.js.map +1 -1
  335. package/dist/frontend/cjs-syntax.js +31 -10
  336. package/dist/frontend/cjs-syntax.js.map +1 -1
  337. package/dist/frontend/comptime-node.test.js +10 -11
  338. package/dist/frontend/comptime-node.test.js.map +1 -1
  339. package/dist/frontend/dts-paths.js +7 -3
  340. package/dist/frontend/dts-paths.js.map +1 -1
  341. package/dist/frontend/fork-target.js +17 -12
  342. package/dist/frontend/fork-target.js.map +1 -1
  343. package/dist/frontend/function-completion.js +11 -6
  344. package/dist/frontend/function-completion.js.map +1 -1
  345. package/dist/frontend/helper-tokens.js +53 -6
  346. package/dist/frontend/helper-tokens.js.map +1 -1
  347. package/dist/frontend/helper-tokens.test.js +18 -2
  348. package/dist/frontend/helper-tokens.test.js.map +1 -1
  349. package/dist/frontend/inferred-js-diagnostics.js +32 -12
  350. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  351. package/dist/frontend/inferred-js-diagnostics.test.js +11 -15
  352. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  353. package/dist/frontend/input-tracker.js +11 -11
  354. package/dist/frontend/input-tracker.js.map +1 -1
  355. package/dist/frontend/input-tracker.test.js +4 -1
  356. package/dist/frontend/input-tracker.test.js.map +1 -1
  357. package/dist/frontend/lib-contract.js +38 -9
  358. package/dist/frontend/lib-contract.js.map +1 -1
  359. package/dist/frontend/literal-values.js.map +1 -1
  360. package/dist/frontend/literal-values.test.js +28 -8
  361. package/dist/frontend/literal-values.test.js.map +1 -1
  362. package/dist/frontend/lowering/abstract-equality.js +53 -10
  363. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  364. package/dist/frontend/lowering/array-indexed-mutation.d.ts +1 -1
  365. package/dist/frontend/lowering/array-indexed-mutation.js +108 -106
  366. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  367. package/dist/frontend/lowering/array-values.js +37 -14
  368. package/dist/frontend/lowering/array-values.js.map +1 -1
  369. package/dist/frontend/lowering/binding-analysis.d.ts +50 -0
  370. package/dist/frontend/lowering/binding-analysis.js +376 -0
  371. package/dist/frontend/lowering/binding-analysis.js.map +1 -0
  372. package/dist/frontend/lowering/builtin-calls.d.ts +9 -0
  373. package/dist/frontend/lowering/builtin-calls.js +60 -0
  374. package/dist/frontend/lowering/builtin-calls.js.map +1 -0
  375. package/dist/frontend/lowering/builtins/arguments.d.ts +43 -0
  376. package/dist/frontend/lowering/builtins/arguments.js +247 -0
  377. package/dist/frontend/lowering/builtins/arguments.js.map +1 -0
  378. package/dist/frontend/lowering/builtins/async-context.d.ts +52 -0
  379. package/dist/frontend/lowering/builtins/async-context.js +436 -0
  380. package/dist/frontend/lowering/builtins/async-context.js.map +1 -0
  381. package/dist/frontend/lowering/builtins/atomics.d.ts +15 -0
  382. package/dist/frontend/lowering/builtins/atomics.js +46 -0
  383. package/dist/frontend/lowering/builtins/atomics.js.map +1 -0
  384. package/dist/frontend/lowering/builtins/callable-aliases.d.ts +13 -0
  385. package/dist/frontend/lowering/builtins/callable-aliases.js +87 -0
  386. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -0
  387. package/dist/frontend/lowering/builtins/child-process-async.d.ts +18 -0
  388. package/dist/frontend/lowering/builtins/child-process-async.js +245 -0
  389. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -0
  390. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +21 -0
  391. package/dist/frontend/lowering/builtins/child-process-methods.js +362 -0
  392. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -0
  393. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +4 -0
  394. package/dist/frontend/lowering/builtins/child-process-sync.js +639 -0
  395. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -0
  396. package/dist/frontend/lowering/builtins/child-process.d.ts +55 -0
  397. package/dist/frontend/lowering/builtins/child-process.js +669 -0
  398. package/dist/frontend/lowering/builtins/child-process.js.map +1 -0
  399. package/dist/frontend/lowering/builtins/compression.d.ts +7 -0
  400. package/dist/frontend/lowering/builtins/compression.js +115 -0
  401. package/dist/frontend/lowering/builtins/compression.js.map +1 -0
  402. package/dist/frontend/lowering/builtins/console.d.ts +10 -0
  403. package/dist/frontend/lowering/builtins/console.js +38 -0
  404. package/dist/frontend/lowering/builtins/console.js.map +1 -0
  405. package/dist/frontend/lowering/builtins/constants.d.ts +24 -0
  406. package/dist/frontend/lowering/builtins/constants.js +141 -0
  407. package/dist/frontend/lowering/builtins/constants.js.map +1 -0
  408. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  409. package/dist/frontend/lowering/builtins/crypto.js +517 -0
  410. package/dist/frontend/lowering/builtins/crypto.js.map +1 -0
  411. package/dist/frontend/lowering/builtins/dates.d.ts +7 -0
  412. package/dist/frontend/lowering/builtins/dates.js +101 -0
  413. package/dist/frontend/lowering/builtins/dates.js.map +1 -0
  414. package/dist/frontend/lowering/builtins/environment.d.ts +34 -0
  415. package/dist/frontend/lowering/builtins/environment.js +95 -0
  416. package/dist/frontend/lowering/builtins/environment.js.map +1 -0
  417. package/dist/frontend/lowering/builtins/errors.d.ts +14 -0
  418. package/dist/frontend/lowering/builtins/errors.js +83 -0
  419. package/dist/frontend/lowering/builtins/errors.js.map +1 -0
  420. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +32 -0
  421. package/dist/frontend/lowering/builtins/filesystem-calls.js +678 -0
  422. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -0
  423. package/dist/frontend/lowering/builtins/filesystem.d.ts +108 -0
  424. package/dist/frontend/lowering/builtins/filesystem.js +1061 -0
  425. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -0
  426. package/dist/frontend/lowering/builtins/ipc.d.ts +8 -0
  427. package/dist/frontend/lowering/builtins/ipc.js +76 -0
  428. package/dist/frontend/lowering/builtins/ipc.js.map +1 -0
  429. package/dist/frontend/lowering/builtins/json.d.ts +12 -0
  430. package/dist/frontend/lowering/builtins/json.js +387 -0
  431. package/dist/frontend/lowering/builtins/json.js.map +1 -0
  432. package/dist/frontend/lowering/builtins/module-bindings.d.ts +85 -0
  433. package/dist/frontend/lowering/builtins/module-bindings.js +346 -0
  434. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -0
  435. package/dist/frontend/lowering/builtins/module-calls.d.ts +8 -0
  436. package/dist/frontend/lowering/builtins/module-calls.js +303 -0
  437. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -0
  438. package/dist/frontend/lowering/builtins/module-resolution.d.ts +38 -0
  439. package/dist/frontend/lowering/builtins/module-resolution.js +344 -0
  440. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -0
  441. package/dist/frontend/lowering/builtins/numbers.d.ts +15 -0
  442. package/dist/frontend/lowering/builtins/numbers.js +124 -0
  443. package/dist/frontend/lowering/builtins/numbers.js.map +1 -0
  444. package/dist/frontend/lowering/builtins/operating-system.d.ts +13 -0
  445. package/dist/frontend/lowering/builtins/operating-system.js +148 -0
  446. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -0
  447. package/dist/frontend/lowering/builtins/performance.d.ts +13 -0
  448. package/dist/frontend/lowering/builtins/performance.js +100 -0
  449. package/dist/frontend/lowering/builtins/performance.js.map +1 -0
  450. package/dist/frontend/lowering/builtins/process.d.ts +50 -0
  451. package/dist/frontend/lowering/builtins/process.js +1138 -0
  452. package/dist/frontend/lowering/builtins/process.js.map +1 -0
  453. package/dist/frontend/lowering/builtins/promises.d.ts +14 -0
  454. package/dist/frontend/lowering/builtins/promises.js +356 -0
  455. package/dist/frontend/lowering/builtins/promises.js.map +1 -0
  456. package/dist/frontend/lowering/builtins/properties.d.ts +11 -0
  457. package/dist/frontend/lowering/builtins/properties.js +186 -0
  458. package/dist/frontend/lowering/builtins/properties.js.map +1 -0
  459. package/dist/frontend/lowering/builtins/querystring.d.ts +19 -0
  460. package/dist/frontend/lowering/builtins/querystring.js +150 -0
  461. package/dist/frontend/lowering/builtins/querystring.js.map +1 -0
  462. package/dist/frontend/lowering/builtins/readline.d.ts +13 -0
  463. package/dist/frontend/lowering/builtins/readline.js +138 -0
  464. package/dist/frontend/lowering/builtins/readline.js.map +1 -0
  465. package/dist/frontend/lowering/builtins/receiver-types.d.ts +5 -0
  466. package/dist/frontend/lowering/builtins/receiver-types.js +15 -0
  467. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -0
  468. package/dist/frontend/lowering/builtins/reflection.d.ts +13 -0
  469. package/dist/frontend/lowering/builtins/reflection.js +95 -0
  470. package/dist/frontend/lowering/builtins/reflection.js.map +1 -0
  471. package/dist/frontend/lowering/builtins/strings.d.ts +14 -0
  472. package/dist/frontend/lowering/builtins/strings.js +121 -0
  473. package/dist/frontend/lowering/builtins/strings.js.map +1 -0
  474. package/dist/frontend/lowering/builtins/text-codecs.d.ts +29 -0
  475. package/dist/frontend/lowering/builtins/text-codecs.js +590 -0
  476. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -0
  477. package/dist/frontend/lowering/builtins/timers.d.ts +22 -0
  478. package/dist/frontend/lowering/builtins/timers.js +180 -0
  479. package/dist/frontend/lowering/builtins/timers.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/url.d.ts +37 -0
  481. package/dist/frontend/lowering/builtins/url.js +596 -0
  482. package/dist/frontend/lowering/builtins/url.js.map +1 -0
  483. package/dist/frontend/lowering/builtins/util-types.d.ts +7 -0
  484. package/dist/frontend/lowering/builtins/util-types.js +31 -0
  485. package/dist/frontend/lowering/builtins/util-types.js.map +1 -0
  486. package/dist/frontend/lowering/call-arguments.d.ts +72 -0
  487. package/dist/frontend/lowering/call-arguments.js +618 -0
  488. package/dist/frontend/lowering/call-arguments.js.map +1 -0
  489. package/dist/frontend/lowering/call-signatures.d.ts +115 -0
  490. package/dist/frontend/lowering/call-signatures.js +719 -0
  491. package/dist/frontend/lowering/call-signatures.js.map +1 -0
  492. package/dist/frontend/lowering/callback-arg.js.map +1 -1
  493. package/dist/frontend/lowering/checked-iterable-spread.js +53 -10
  494. package/dist/frontend/lowering/checked-iterable-spread.js.map +1 -1
  495. package/dist/frontend/lowering/checked-promise-all.js +41 -9
  496. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  497. package/dist/frontend/lowering/class-callbacks.d.ts +1 -1
  498. package/dist/frontend/lowering/class-callbacks.js +130 -27
  499. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  500. package/dist/frontend/lowering/class-construction.d.ts +1 -1
  501. package/dist/frontend/lowering/class-construction.js +247 -50
  502. package/dist/frontend/lowering/class-construction.js.map +1 -1
  503. package/dist/frontend/lowering/class-descriptors.js +109 -29
  504. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  505. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -1
  506. package/dist/frontend/lowering/class-dynamic-dispatch.js +2471 -465
  507. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  508. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +284 -44
  509. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  510. package/dist/frontend/lowering/class-instance-constructor.js +17 -5
  511. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  512. package/dist/frontend/lowering/class-method-values.js +199 -51
  513. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  514. package/dist/frontend/lowering/class-prototypes.js +345 -86
  515. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  516. package/dist/frontend/lowering/class-runtime-statics.d.ts +1 -1
  517. package/dist/frontend/lowering/class-runtime-statics.js +80 -17
  518. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  519. package/dist/frontend/lowering/class-static-data.js +76 -16
  520. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  521. package/dist/frontend/lowering/coercions/builders.d.ts +13 -0
  522. package/dist/frontend/lowering/coercions/builders.js +77 -0
  523. package/dist/frontend/lowering/coercions/builders.js.map +1 -0
  524. package/dist/frontend/lowering/coercions/function-adapters.d.ts +58 -0
  525. package/dist/frontend/lowering/coercions/function-adapters.js +430 -0
  526. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -0
  527. package/dist/frontend/lowering/coercions/island.d.ts +37 -0
  528. package/dist/frontend/lowering/coercions/island.js +350 -0
  529. package/dist/frontend/lowering/coercions/island.js.map +1 -0
  530. package/dist/frontend/lowering/coercions/state.d.ts +14 -0
  531. package/dist/frontend/lowering/coercions/state.js +16 -0
  532. package/dist/frontend/lowering/coercions/state.js.map +1 -0
  533. package/dist/frontend/lowering/coercions/structural-plans.d.ts +40 -0
  534. package/dist/frontend/lowering/coercions/structural-plans.js +447 -0
  535. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -0
  536. package/dist/frontend/lowering/coercions/structural.d.ts +63 -0
  537. package/dist/frontend/lowering/coercions/structural.js +616 -0
  538. package/dist/frontend/lowering/coercions/structural.js.map +1 -0
  539. package/dist/frontend/lowering/coercions/unions.d.ts +65 -0
  540. package/dist/frontend/lowering/coercions/unions.js +318 -0
  541. package/dist/frontend/lowering/coercions/unions.js.map +1 -0
  542. package/dist/frontend/lowering/collection-ingestion.js +355 -72
  543. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  544. package/dist/frontend/lowering/containers/array-callbacks.d.ts +92 -0
  545. package/dist/frontend/lowering/containers/array-callbacks.js +1646 -0
  546. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -0
  547. package/dist/frontend/lowering/containers/array-construction.d.ts +42 -0
  548. package/dist/frontend/lowering/containers/array-construction.js +1044 -0
  549. package/dist/frontend/lowering/containers/array-construction.js.map +1 -0
  550. package/dist/frontend/lowering/containers/array-iteration.d.ts +16 -0
  551. package/dist/frontend/lowering/containers/array-iteration.js +95 -0
  552. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -0
  553. package/dist/frontend/lowering/containers/array-methods.d.ts +27 -0
  554. package/dist/frontend/lowering/containers/array-methods.js +1854 -0
  555. package/dist/frontend/lowering/containers/array-methods.js.map +1 -0
  556. package/dist/frontend/lowering/containers/bytes.d.ts +17 -17
  557. package/dist/frontend/lowering/containers/bytes.js +419 -105
  558. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  559. package/dist/frontend/lowering/containers/callback-arguments.d.ts +26 -0
  560. package/dist/frontend/lowering/containers/callback-arguments.js +179 -0
  561. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -0
  562. package/dist/frontend/lowering/containers/collection-grouping.d.ts +19 -0
  563. package/dist/frontend/lowering/containers/collection-grouping.js +297 -0
  564. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -0
  565. package/dist/frontend/lowering/containers/collection-methods.d.ts +57 -0
  566. package/dist/frontend/lowering/containers/collection-methods.js +1314 -0
  567. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -0
  568. package/dist/frontend/lowering/containers/dynamic-receivers.d.ts +18 -0
  569. package/dist/frontend/lowering/containers/dynamic-receivers.js +114 -0
  570. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -0
  571. package/dist/frontend/lowering/containers/for-of.d.ts +60 -0
  572. package/dist/frontend/lowering/containers/for-of.js +643 -0
  573. package/dist/frontend/lowering/containers/for-of.js.map +1 -0
  574. package/dist/frontend/lowering/containers/indexed-objects.d.ts +132 -0
  575. package/dist/frontend/lowering/containers/indexed-objects.js +1743 -0
  576. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -0
  577. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +20 -0
  578. package/dist/frontend/lowering/containers/iterator-helpers.js +809 -0
  579. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -0
  580. package/dist/frontend/lowering/containers/string-and-regexp.js +580 -158
  581. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  582. package/dist/frontend/lowering/containers/string-replacement.js +213 -63
  583. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  584. package/dist/frontend/lowering/crypto-tables.js +263 -64
  585. package/dist/frontend/lowering/crypto-tables.js.map +1 -1
  586. package/dist/frontend/lowering/deferred-module-initializers.js +172 -68
  587. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  588. package/dist/frontend/lowering/deferred-module-initializers.test.js +41 -8
  589. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  590. package/dist/frontend/lowering/error-methods.js +339 -65
  591. package/dist/frontend/lowering/error-methods.js.map +1 -1
  592. package/dist/frontend/lowering/expressions/evaluation-safety.js +3 -2
  593. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  594. package/dist/frontend/lowering/expressions/global-symbols.js +2 -1
  595. package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -1
  596. package/dist/frontend/lowering/expressions/native-proxy.js +11 -5
  597. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  598. package/dist/frontend/lowering/expressions/nullish-assignment.js +67 -13
  599. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  600. package/dist/frontend/lowering/expressions/object-literals.js +589 -162
  601. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  602. package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
  603. package/dist/frontend/lowering/expressions/optional-chains.js +68 -17
  604. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  605. package/dist/frontend/lowering/expressions/union-field-write.js +45 -18
  606. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
  607. package/dist/frontend/lowering/function-context.js +5 -1
  608. package/dist/frontend/lowering/function-context.js.map +1 -1
  609. package/dist/frontend/lowering/function-returns.d.ts +67 -0
  610. package/dist/frontend/lowering/function-returns.js +392 -0
  611. package/dist/frontend/lowering/function-returns.js.map +1 -0
  612. package/dist/frontend/lowering/generator-delegation.d.ts +1 -1
  613. package/dist/frontend/lowering/generator-delegation.js +171 -39
  614. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  615. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -1
  616. package/dist/frontend/lowering/generator-dynamic-dispatch.js +176 -36
  617. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  618. package/dist/frontend/lowering/generic-functions.d.ts +274 -0
  619. package/dist/frontend/lowering/generic-functions.js +1727 -0
  620. package/dist/frontend/lowering/generic-functions.js.map +1 -0
  621. package/dist/frontend/lowering/import-meta.d.ts +1 -1
  622. package/dist/frontend/lowering/import-meta.js +37 -14
  623. package/dist/frontend/lowering/import-meta.js.map +1 -1
  624. package/dist/frontend/lowering/indexed-comparison.js +6 -2
  625. package/dist/frontend/lowering/indexed-comparison.js.map +1 -1
  626. package/dist/frontend/lowering/iterator-consumption.d.ts +9 -0
  627. package/dist/frontend/lowering/iterator-consumption.js +91 -0
  628. package/dist/frontend/lowering/iterator-consumption.js.map +1 -0
  629. package/dist/frontend/lowering/lib-boundary.js +40 -17
  630. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  631. package/dist/frontend/lowering/lib-boundary.test.js +49 -11
  632. package/dist/frontend/lowering/lib-boundary.test.js.map +1 -1
  633. package/dist/frontend/lowering/lower-array-sort.d.ts +0 -19
  634. package/dist/frontend/lowering/lower-array-sort.js +331 -566
  635. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  636. package/dist/frontend/lowering/lower-assert.js +248 -43
  637. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  638. package/dist/frontend/lowering/lower-async-iteration.js +71 -16
  639. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  640. package/dist/frontend/lowering/lower-builtin-values.js +420 -71
  641. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  642. package/dist/frontend/lowering/lower-calls.d.ts +39 -558
  643. package/dist/frontend/lowering/lower-calls.js +2593 -5667
  644. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  645. package/dist/frontend/lowering/lower-classes.d.ts +243 -242
  646. package/dist/frontend/lowering/lower-classes.js +1701 -724
  647. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  648. package/dist/frontend/lowering/lower-comptime.d.ts +35 -35
  649. package/dist/frontend/lowering/lower-comptime.js +39 -37
  650. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  651. package/dist/frontend/lowering/lower-dgram.js +59 -31
  652. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  653. package/dist/frontend/lowering/lower-enums.js +5 -2
  654. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  655. package/dist/frontend/lowering/lower-event-emitter.js +322 -85
  656. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  657. package/dist/frontend/lowering/lower-expando.js +19 -7
  658. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  659. package/dist/frontend/lowering/lower-exprs.d.ts +194 -194
  660. package/dist/frontend/lowering/lower-exprs.js +3446 -1154
  661. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  662. package/dist/frontend/lowering/lower-functions.d.ts +23 -0
  663. package/dist/frontend/lowering/lower-functions.js +449 -0
  664. package/dist/frontend/lowering/lower-functions.js.map +1 -0
  665. package/dist/frontend/lowering/lower-generators.js +121 -32
  666. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  667. package/dist/frontend/lowering/lower-global-value.js +15 -4
  668. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  669. package/dist/frontend/lowering/lower-inspect.js +479 -89
  670. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  671. package/dist/frontend/lowering/lower-island.d.ts +79 -79
  672. package/dist/frontend/lowering/lower-island.js +365 -273
  673. package/dist/frontend/lowering/lower-island.js.map +1 -1
  674. package/dist/frontend/lowering/lower-island.test.js +7 -2
  675. package/dist/frontend/lowering/lower-island.test.js.map +1 -1
  676. package/dist/frontend/lowering/lower-mixins.js +17 -8
  677. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  678. package/dist/frontend/lowering/lower-modules.d.ts +94 -94
  679. package/dist/frontend/lowering/lower-modules.js +612 -321
  680. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  681. package/dist/frontend/lowering/lower-modules.test.js +91 -20
  682. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  683. package/dist/frontend/lowering/lower-namespaces.js +25 -8
  684. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  685. package/dist/frontend/lowering/lower-node-module.js +115 -34
  686. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  687. package/dist/frontend/lowering/lower-server.js +1210 -290
  688. package/dist/frontend/lowering/lower-server.js.map +1 -1
  689. package/dist/frontend/lowering/lower-stmts.d.ts +148 -148
  690. package/dist/frontend/lowering/lower-stmts.js +2312 -984
  691. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  692. package/dist/frontend/lowering/lower-stmts.test.js +13 -5
  693. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  694. package/dist/frontend/lowering/lower-stream.js +362 -90
  695. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  696. package/dist/frontend/lowering/lower-system-errors.js +30 -8
  697. package/dist/frontend/lowering/lower-system-errors.js.map +1 -1
  698. package/dist/frontend/lowering/lower-test.js +40 -13
  699. package/dist/frontend/lowering/lower-test.js.map +1 -1
  700. package/dist/frontend/lowering/lower-timers.d.ts +31 -0
  701. package/dist/frontend/lowering/lower-timers.js +336 -0
  702. package/dist/frontend/lowering/lower-timers.js.map +1 -0
  703. package/dist/frontend/lowering/lower-url.d.ts +1 -1
  704. package/dist/frontend/lowering/lower-url.js +46 -13
  705. package/dist/frontend/lowering/lower-url.js.map +1 -1
  706. package/dist/frontend/lowering/lowerer.d.ts +21 -351
  707. package/dist/frontend/lowering/lowerer.js +1024 -2704
  708. package/dist/frontend/lowering/lowerer.js.map +1 -1
  709. package/dist/frontend/lowering/lowerer.test.js +85 -17
  710. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  711. package/dist/frontend/lowering/module-namespace-elements.js +43 -8
  712. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  713. package/dist/frontend/lowering/native-ffi.d.ts +21 -1
  714. package/dist/frontend/lowering/native-ffi.js +487 -18
  715. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  716. package/dist/frontend/lowering/object-enumeration-receiver.js +55 -10
  717. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  718. package/dist/frontend/lowering/object-factory-new.d.ts +1 -1
  719. package/dist/frontend/lowering/object-factory-new.js +36 -11
  720. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  721. package/dist/frontend/lowering/optional-arguments.js +49 -20
  722. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  723. package/dist/frontend/lowering/pairs-snapshot.js +66 -14
  724. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  725. package/dist/frontend/lowering/runtime-optional-locals.js +3 -1
  726. package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -1
  727. package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -1
  728. package/dist/frontend/lowering/sanitize-class-types.js +4 -1
  729. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  730. package/dist/frontend/lowering/sanitize-class-types.test.js +86 -18
  731. package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -1
  732. package/dist/frontend/lowering/static-this.js +13 -6
  733. package/dist/frontend/lowering/static-this.js.map +1 -1
  734. package/dist/frontend/lowering/string-index.js +32 -10
  735. package/dist/frontend/lowering/string-index.js.map +1 -1
  736. package/dist/frontend/lowering/surfaces.d.ts +42 -42
  737. package/dist/frontend/lowering/surfaces.js +1094 -249
  738. package/dist/frontend/lowering/surfaces.js.map +1 -1
  739. package/dist/frontend/lowering/symbol-fields.js +40 -15
  740. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  741. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  742. package/dist/frontend/lowering/text-decoder-encoding.js +236 -24
  743. package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
  744. package/dist/frontend/lowering/text-decoder-encoding.test.js +84 -12
  745. package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -1
  746. package/dist/frontend/lowering/union-narrow.js +59 -16
  747. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  748. package/dist/frontend/lowering/union-narrow.test.js +24 -7
  749. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  750. package/dist/frontend/lowering/union-retag.js +155 -40
  751. package/dist/frontend/lowering/union-retag.js.map +1 -1
  752. package/dist/frontend/lowering/union-retag.test.js +131 -33
  753. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  754. package/dist/frontend/lowering/unregistered-class-types.js.map +1 -1
  755. package/dist/frontend/lowering/unregistered-class-types.test.js +34 -8
  756. package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
  757. package/dist/frontend/module-syntax.js +21 -8
  758. package/dist/frontend/module-syntax.js.map +1 -1
  759. package/dist/frontend/module-syntax.test.js +37 -13
  760. package/dist/frontend/module-syntax.test.js.map +1 -1
  761. package/dist/frontend/npm-fetch-analysis.js +13 -4
  762. package/dist/frontend/npm-fetch-analysis.js.map +1 -1
  763. package/dist/frontend/npm-fetch-analysis.test.js +33 -10
  764. package/dist/frontend/npm-fetch-analysis.test.js.map +1 -1
  765. package/dist/frontend/npm-fetch-node.js.map +1 -1
  766. package/dist/frontend/npm-fetch-syntax.js +4 -9
  767. package/dist/frontend/npm-fetch-syntax.js.map +1 -1
  768. package/dist/frontend/npm-node.js +3 -1
  769. package/dist/frontend/npm-node.js.map +1 -1
  770. package/dist/frontend/npm-static-bundled-cjs.js +88 -29
  771. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  772. package/dist/frontend/npm-static-bundled-cjs.test.js +29 -10
  773. package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -1
  774. package/dist/frontend/npm-static-declaration-syntax.js +148 -56
  775. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  776. package/dist/frontend/npm-static-declarations.d.ts +1 -1
  777. package/dist/frontend/npm-static-declarations.js.map +1 -1
  778. package/dist/frontend/npm-static-declarations.test.js +33 -7
  779. package/dist/frontend/npm-static-declarations.test.js.map +1 -1
  780. package/dist/frontend/npm-static-prune.js +26 -12
  781. package/dist/frontend/npm-static-prune.js.map +1 -1
  782. package/dist/frontend/npm-static-prune.test.js +17 -3
  783. package/dist/frontend/npm-static-prune.test.js.map +1 -1
  784. package/dist/frontend/npm-static-rewrite-host.js +2 -3
  785. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  786. package/dist/frontend/npm-static-rewrite-syntax.js +64 -21
  787. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  788. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  789. package/dist/frontend/npm-static-subtyping.js +9 -4
  790. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  791. package/dist/frontend/npm-static-subtyping.test.js +30 -6
  792. package/dist/frontend/npm-static-subtyping.test.js.map +1 -1
  793. package/dist/frontend/npm-static.js +15 -4
  794. package/dist/frontend/npm-static.js.map +1 -1
  795. package/dist/frontend/npm.js +122 -36
  796. package/dist/frontend/npm.js.map +1 -1
  797. package/dist/frontend/npm.test.js +30 -10
  798. package/dist/frontend/npm.test.js.map +1 -1
  799. package/dist/frontend/pipeline-native.js.map +1 -1
  800. package/dist/frontend/pipeline.js +25 -8
  801. package/dist/frontend/pipeline.js.map +1 -1
  802. package/dist/frontend/pipeline.test.js +21 -7
  803. package/dist/frontend/pipeline.test.js.map +1 -1
  804. package/dist/frontend/program-node.js +5 -3
  805. package/dist/frontend/program-node.js.map +1 -1
  806. package/dist/frontend/program.d.ts +2 -2
  807. package/dist/frontend/program.js +234 -101
  808. package/dist/frontend/program.js.map +1 -1
  809. package/dist/frontend/program.test.js +27 -27
  810. package/dist/frontend/program.test.js.map +1 -1
  811. package/dist/frontend/provenance-core.js +8 -4
  812. package/dist/frontend/provenance-core.js.map +1 -1
  813. package/dist/frontend/provenance-registry.js +1 -4
  814. package/dist/frontend/provenance-registry.js.map +1 -1
  815. package/dist/frontend/resolve.js +32 -20
  816. package/dist/frontend/resolve.js.map +1 -1
  817. package/dist/frontend/resolve.test.js +1 -1
  818. package/dist/frontend/resolve.test.js.map +1 -1
  819. package/dist/frontend/runtime-resolve.js +13 -4
  820. package/dist/frontend/runtime-resolve.js.map +1 -1
  821. package/dist/frontend/runtime-resolve.test.js +25 -9
  822. package/dist/frontend/runtime-resolve.test.js.map +1 -1
  823. package/dist/frontend/services-node.js +6 -2
  824. package/dist/frontend/services-node.js.map +1 -1
  825. package/dist/frontend/services-node.test.js +18 -6
  826. package/dist/frontend/services-node.test.js.map +1 -1
  827. package/dist/frontend/services.js +8 -4
  828. package/dist/frontend/services.js.map +1 -1
  829. package/dist/frontend/services.test.js +6 -2
  830. package/dist/frontend/services.test.js.map +1 -1
  831. package/dist/frontend/ts7/api.js +12 -4
  832. package/dist/frontend/ts7/api.js.map +1 -1
  833. package/dist/frontend/ts7/ast-bytes.js +10 -3
  834. package/dist/frontend/ts7/ast-bytes.js.map +1 -1
  835. package/dist/frontend/ts7/ast-bytes.test.js +23 -4
  836. package/dist/frontend/ts7/ast-bytes.test.js.map +1 -1
  837. package/dist/frontend/ts7/ast-guards.test.js +14 -5
  838. package/dist/frontend/ts7/ast-guards.test.js.map +1 -1
  839. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  840. package/dist/frontend/ts7/ast-node.js +484 -164
  841. package/dist/frontend/ts7/ast-node.js.map +1 -1
  842. package/dist/frontend/ts7/ast-node.test.js +109 -36
  843. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  844. package/dist/frontend/ts7/ast-text.js +13 -3
  845. package/dist/frontend/ts7/ast-text.js.map +1 -1
  846. package/dist/frontend/ts7/ast-text.test.js.map +1 -1
  847. package/dist/frontend/ts7/ast-types.js.map +1 -1
  848. package/dist/frontend/ts7/ast-wire.d.ts +1 -1
  849. package/dist/frontend/ts7/ast-wire.js +55 -20
  850. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  851. package/dist/frontend/ts7/ast-wire.test.js +53 -8
  852. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  853. package/dist/frontend/ts7/ast.js +47 -28
  854. package/dist/frontend/ts7/ast.js.map +1 -1
  855. package/dist/frontend/ts7/census-check.js +1 -1
  856. package/dist/frontend/ts7/census-check.js.map +1 -1
  857. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  858. package/dist/frontend/ts7/checker.js +5 -3
  859. package/dist/frontend/ts7/checker.js.map +1 -1
  860. package/dist/frontend/ts7/checker.test.js +54 -17
  861. package/dist/frontend/ts7/checker.test.js.map +1 -1
  862. package/dist/frontend/ts7/enums.test.js +9 -4
  863. package/dist/frontend/ts7/enums.test.js.map +1 -1
  864. package/dist/frontend/ts7/native-api.js.map +1 -1
  865. package/dist/frontend/ts7/native-host.js.map +1 -1
  866. package/dist/frontend/ts7/native-process.js +9 -3
  867. package/dist/frontend/ts7/native-process.js.map +1 -1
  868. package/dist/frontend/ts7/program-adapter.js +1 -1
  869. package/dist/frontend/ts7/program-adapter.js.map +1 -1
  870. package/dist/frontend/ts7/program-host.js +7 -4
  871. package/dist/frontend/ts7/program-host.js.map +1 -1
  872. package/dist/frontend/ts7/program-host.test.js +43 -11
  873. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  874. package/dist/frontend/ts7/rpc-api.js +3 -1
  875. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  876. package/dist/frontend/ts7/rpc-client.js +15 -5
  877. package/dist/frontend/ts7/rpc-client.js.map +1 -1
  878. package/dist/frontend/ts7/rpc-client.test.js +26 -8
  879. package/dist/frontend/ts7/rpc-client.test.js.map +1 -1
  880. package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
  881. package/dist/frontend/ts7/rpc-filesystem.test.js +43 -10
  882. package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
  883. package/dist/frontend/ts7/rpc-process.js +16 -6
  884. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  885. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  886. package/dist/frontend/ts7/rpc-wire.d.ts +1 -0
  887. package/dist/frontend/ts7/rpc-wire.js +41 -14
  888. package/dist/frontend/ts7/rpc-wire.js.map +1 -1
  889. package/dist/frontend/ts7/rpc-wire.test.js +36 -6
  890. package/dist/frontend/ts7/rpc-wire.test.js.map +1 -1
  891. package/dist/frontend/ts7/semantic-checker.js +209 -68
  892. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  893. package/dist/frontend/ts7/semantic-checker.test.js +29 -14
  894. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  895. package/dist/frontend/ts7/semantic-json.js +7 -1
  896. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  897. package/dist/frontend/ts7/semantic-json.test.js +17 -3
  898. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  899. package/dist/frontend/ts7/semantic-model.js +147 -51
  900. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  901. package/dist/frontend/ts7/semantic-model.test.js +72 -19
  902. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  903. package/dist/frontend/ts7/semantic-types.d.ts +2 -2
  904. package/dist/frontend/ts7/session-cache.js +10 -3
  905. package/dist/frontend/ts7/session-cache.js.map +1 -1
  906. package/dist/frontend/ts7/session-cache.test.js +13 -4
  907. package/dist/frontend/ts7/session-cache.test.js.map +1 -1
  908. package/dist/frontend/ts7/session-path.js +25 -10
  909. package/dist/frontend/ts7/session-path.js.map +1 -1
  910. package/dist/frontend/ts7/session-path.test.js +47 -4
  911. package/dist/frontend/ts7/session-path.test.js.map +1 -1
  912. package/dist/frontend/ts7/session-timing.js +22 -3
  913. package/dist/frontend/ts7/session-timing.js.map +1 -1
  914. package/dist/frontend/ts7/session-timing.test.js +12 -3
  915. package/dist/frontend/ts7/session-timing.test.js.map +1 -1
  916. package/dist/frontend/ts7/session.d.ts +1 -0
  917. package/dist/frontend/ts7/session.js +109 -35
  918. package/dist/frontend/ts7/session.js.map +1 -1
  919. package/dist/frontend/ts7/session.test.js +69 -15
  920. package/dist/frontend/ts7/session.test.js.map +1 -1
  921. package/dist/frontend/ts7/source-parser.js +17 -6
  922. package/dist/frontend/ts7/source-parser.js.map +1 -1
  923. package/dist/frontend/ts7/source-parser.test.js +32 -9
  924. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  925. package/dist/frontend/tsc-codes.js +56 -11
  926. package/dist/frontend/tsc-codes.js.map +1 -1
  927. package/dist/frontend/tsc-codes.test.d.ts +1 -0
  928. package/dist/frontend/tsc-codes.test.js +16 -0
  929. package/dist/frontend/tsc-codes.test.js.map +1 -0
  930. package/dist/frontend/type-mapper.js +545 -204
  931. package/dist/frontend/type-mapper.js.map +1 -1
  932. package/dist/frontend/type-mapper.test.js +108 -33
  933. package/dist/frontend/type-mapper.test.js.map +1 -1
  934. package/dist/frontend/union-discriminants.js +8 -2
  935. package/dist/frontend/union-discriminants.js.map +1 -1
  936. package/dist/frontend/union-discriminants.test.js +77 -20
  937. package/dist/frontend/union-discriminants.test.js.map +1 -1
  938. package/dist/index.d.ts +9 -8
  939. package/dist/index.js +150 -81
  940. package/dist/index.js.map +1 -1
  941. package/dist/ir/analysis.js +95 -38
  942. package/dist/ir/analysis.js.map +1 -1
  943. package/dist/ir/analysis.test.js +91 -15
  944. package/dist/ir/analysis.test.js.map +1 -1
  945. package/dist/ir/api.d.ts +4 -0
  946. package/dist/ir/api.js +6 -0
  947. package/dist/ir/api.js.map +1 -0
  948. package/dist/ir/build.d.ts +7 -0
  949. package/dist/ir/build.js +27 -1
  950. package/dist/ir/build.js.map +1 -1
  951. package/dist/ir/builtin-effects.d.ts +9 -0
  952. package/dist/ir/builtin-effects.js +631 -0
  953. package/dist/ir/builtin-effects.js.map +1 -0
  954. package/dist/ir/builtin-signatures.d.ts +15 -0
  955. package/dist/ir/builtin-signatures.js +3396 -0
  956. package/dist/ir/builtin-signatures.js.map +1 -0
  957. package/dist/ir/byte-numbers.js +67 -16
  958. package/dist/ir/byte-numbers.js.map +1 -1
  959. package/dist/ir/byte-numbers.test.js +17 -4
  960. package/dist/ir/byte-numbers.test.js.map +1 -1
  961. package/dist/ir/constant-tables.js +13 -5
  962. package/dist/ir/constant-tables.js.map +1 -1
  963. package/dist/ir/constant-tables.test.js +47 -7
  964. package/dist/ir/constant-tables.test.js.map +1 -1
  965. package/dist/ir/control-flow.js +2 -1
  966. package/dist/ir/control-flow.js.map +1 -1
  967. package/dist/ir/control-flow.test.js +35 -11
  968. package/dist/ir/control-flow.test.js.map +1 -1
  969. package/dist/ir/initializer-bindings.d.ts +9 -0
  970. package/dist/ir/initializer-bindings.js +115 -0
  971. package/dist/ir/initializer-bindings.js.map +1 -0
  972. package/dist/ir/initializer-bindings.test.d.ts +1 -0
  973. package/dist/ir/initializer-bindings.test.js +118 -0
  974. package/dist/ir/initializer-bindings.test.js.map +1 -0
  975. package/dist/ir/integer-loop-facts.d.ts +12 -0
  976. package/dist/ir/integer-loop-facts.js +137 -0
  977. package/dist/ir/integer-loop-facts.js.map +1 -0
  978. package/dist/ir/integer-loops.js +85 -30
  979. package/dist/ir/integer-loops.js.map +1 -1
  980. package/dist/ir/integer-loops.test.js +76 -13
  981. package/dist/ir/integer-loops.test.js.map +1 -1
  982. package/dist/ir/integer-ranges.js +93 -21
  983. package/dist/ir/integer-ranges.js.map +1 -1
  984. package/dist/ir/integer-ranges.test.js +199 -21
  985. package/dist/ir/integer-ranges.test.js.map +1 -1
  986. package/dist/ir/intrinsic-signatures.d.ts +20 -0
  987. package/dist/ir/intrinsic-signatures.js +57 -0
  988. package/dist/ir/intrinsic-signatures.js.map +1 -0
  989. package/dist/ir/ir.d.ts +6 -2150
  990. package/dist/ir/ir.js +160 -1396
  991. package/dist/ir/ir.js.map +1 -1
  992. package/dist/ir/ir.test.js +98 -77
  993. package/dist/ir/ir.test.js.map +1 -1
  994. package/dist/ir/runtime-features.d.ts +221 -0
  995. package/dist/ir/runtime-features.js +551 -0
  996. package/dist/ir/runtime-features.js.map +1 -0
  997. package/dist/ir/runtime-features.test.d.ts +1 -0
  998. package/dist/ir/runtime-features.test.js +98 -0
  999. package/dist/ir/runtime-features.test.js.map +1 -0
  1000. package/dist/ir/scalar-records.js +130 -40
  1001. package/dist/ir/scalar-records.js.map +1 -1
  1002. package/dist/ir/scalar-records.test.js +146 -27
  1003. package/dist/ir/scalar-records.test.js.map +1 -1
  1004. package/dist/ir/serialize.js +4 -2
  1005. package/dist/ir/serialize.js.map +1 -1
  1006. package/dist/ir/serialize.test.js +44 -9
  1007. package/dist/ir/serialize.test.js.map +1 -1
  1008. package/dist/ir/traverse.js +156 -43
  1009. package/dist/ir/traverse.js.map +1 -1
  1010. package/dist/ir/traverse.test.js +99 -24
  1011. package/dist/ir/traverse.test.js.map +1 -1
  1012. package/dist/ir/validate.d.ts +1 -31
  1013. package/dist/ir/validate.js +782 -1889
  1014. package/dist/ir/validate.js.map +1 -1
  1015. package/dist/ir/validate.test.js +610 -114
  1016. package/dist/ir/validate.test.js.map +1 -1
  1017. package/dist/library/cache-primitives.js +9 -10
  1018. package/dist/library/cache-primitives.js.map +1 -1
  1019. package/dist/library/cache-reset.test.js +2 -1
  1020. package/dist/library/cache-reset.test.js.map +1 -1
  1021. package/dist/library/compiler-self-identity.js +11 -5
  1022. package/dist/library/compiler-self-identity.js.map +1 -1
  1023. package/dist/library/compiler-self-identity.test.js +10 -3
  1024. package/dist/library/compiler-self-identity.test.js.map +1 -1
  1025. package/dist/library/fence-eval.js +24 -7
  1026. package/dist/library/fence-eval.js.map +1 -1
  1027. package/dist/library/fence-eval.test.js +31 -7
  1028. package/dist/library/fence-eval.test.js.map +1 -1
  1029. package/dist/library/int-infer.js +199 -59
  1030. package/dist/library/int-infer.js.map +1 -1
  1031. package/dist/library/int-infer.test.js +133 -57
  1032. package/dist/library/int-infer.test.js.map +1 -1
  1033. package/dist/library/ir-policy.d.ts +27 -0
  1034. package/dist/library/ir-policy.js +232 -0
  1035. package/dist/library/ir-policy.js.map +1 -0
  1036. package/dist/library/library-cache.js +40 -17
  1037. package/dist/library/library-cache.js.map +1 -1
  1038. package/dist/library/library-cache.test.js +24 -13
  1039. package/dist/library/library-cache.test.js.map +1 -1
  1040. package/dist/library/library-profile.js +68 -13
  1041. package/dist/library/library-profile.js.map +1 -1
  1042. package/dist/library/prepare.js +48 -20
  1043. package/dist/library/prepare.js.map +1 -1
  1044. package/dist/library/semantic-source.js +16 -14
  1045. package/dist/library/semantic-source.js.map +1 -1
  1046. package/dist/library/semantic-source.test.js +9 -14
  1047. package/dist/library/semantic-source.test.js.map +1 -1
  1048. package/dist/library/sidecar-validate.js +53 -12
  1049. package/dist/library/sidecar-validate.js.map +1 -1
  1050. package/dist/library/sidecar.js +85 -24
  1051. package/dist/library/sidecar.js.map +1 -1
  1052. package/dist/library/trap-teaching.js +11 -2
  1053. package/dist/library/trap-teaching.js.map +1 -1
  1054. package/dist/native/cache.js +10 -4
  1055. package/dist/native/cache.js.map +1 -1
  1056. package/dist/native/cli.js +34 -9
  1057. package/dist/native/cli.js.map +1 -1
  1058. package/dist/native/compiler.js +167 -43
  1059. package/dist/native/compiler.js.map +1 -1
  1060. package/dist/native/compiler.test.js +129 -32
  1061. package/dist/native/compiler.test.js.map +1 -1
  1062. package/dist/native/comptime.js +23 -7
  1063. package/dist/native/comptime.js.map +1 -1
  1064. package/dist/native/comptime.test.js +26 -6
  1065. package/dist/native/comptime.test.js.map +1 -1
  1066. package/dist/native/executable-cache.js +77 -27
  1067. package/dist/native/executable-cache.js.map +1 -1
  1068. package/dist/native/executable-cache.test.js +41 -6
  1069. package/dist/native/executable-cache.test.js.map +1 -1
  1070. package/dist/native/file-identity.js +9 -2
  1071. package/dist/native/file-identity.js.map +1 -1
  1072. package/dist/native/file-identity.test.js.map +1 -1
  1073. package/dist/native/library.js +50 -12
  1074. package/dist/native/library.js.map +1 -1
  1075. package/dist/native/prepare.js +119 -34
  1076. package/dist/native/prepare.js.map +1 -1
  1077. package/dist/native/prepare.test.js +22 -6
  1078. package/dist/native/prepare.test.js.map +1 -1
  1079. package/dist/native/runtime-typescript.js +24 -11
  1080. package/dist/native/runtime-typescript.js.map +1 -1
  1081. package/dist/native/runtime-typescript.test.js.map +1 -1
  1082. package/dist/native/sanitizer.js +71 -18
  1083. package/dist/native/sanitizer.js.map +1 -1
  1084. package/dist/native/sanitizer.test.js +77 -20
  1085. package/dist/native/sanitizer.test.js.map +1 -1
  1086. package/dist/native/task.js.map +1 -1
  1087. package/dist/native/task.test.js +7 -2
  1088. package/dist/native/task.test.js.map +1 -1
  1089. package/dist/native/toolchain.js +68 -26
  1090. package/dist/native/toolchain.js.map +1 -1
  1091. package/dist/native/toolchain.test.js +59 -20
  1092. package/dist/native/toolchain.test.js.map +1 -1
  1093. package/dist/startup-cache.d.ts +1 -1
  1094. package/dist/startup-cache.js +1 -1
  1095. package/dist/startup-cache.js.map +1 -1
  1096. package/dist/timing.js.map +1 -1
  1097. package/package.json +20 -20
  1098. package/surface-manifest.json +1 -1
  1099. package/dist/frontend/lowering/lower-builtins.d.ts +0 -601
  1100. package/dist/frontend/lowering/lower-builtins.js +0 -8986
  1101. package/dist/frontend/lowering/lower-builtins.js.map +0 -1
  1102. package/dist/frontend/lowering/lower-containers.d.ts +0 -382
  1103. package/dist/frontend/lowering/lower-containers.js +0 -7344
  1104. package/dist/frontend/lowering/lower-containers.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { dynUndefinedExpr, numLit, strLit, varRef } from "../../../ir/build.js";
1
2
  import { pathModuleValue } from "../lower-builtin-values.js";
2
3
  import { InternalCompilerError } from "../../../errors.js";
3
4
  import * as ts from "../../ts7/adapter.js";
@@ -5,10 +6,9 @@ import { BOOL, DYN, F64, JSVAL, STRING, UNDEFINED_T, VOID, arrayOf, canDynCheckT
5
6
  import { isCjsExportTableLiteral, isJsSourceFile, locOf } from "../../program.js";
6
7
  import { NARROW_FIRST } from "../surfaces.js";
7
8
  import { recordShapeMismatchDiag } from "../../../diagnostics/diagnostic.js";
8
- import { PoisonError, dynUndefinedExpr, neverTaintedJsType } from "../lowerer.js";
9
- import { lowerIndexMergeHelper } from "../lower-containers.js";
9
+ import { PoisonError, neverTaintedJsType } from "../lowerer.js";
10
+ import { lowerIndexMergeHelper } from "../containers/indexed-objects.js";
10
11
  import { isGenericCallableMemberType, jsOpenObjectType } from "../../type-mapper.js";
11
- import { numLit, strLit, varRef } from "../../../ir/build.js";
12
12
  import { isSafeToRepeat } from "./evaluation-safety.js";
13
13
  import { tryLowerExpression } from "./try-lower-expression.js";
14
14
  import { fenceSymbolFieldCopy } from "../symbol-fields.js";
@@ -31,7 +31,9 @@ function settledDropNames(lowerer, tsType) {
31
31
  for (const part of parts) {
32
32
  const sym = part.getSymbol();
33
33
  if (!sym ||
34
- !lowerer.checker.declarationsOf(sym).some((d) => ts.isInterfaceDeclaration(d) && lowerer.isStdlibFile(d.getSourceFile()))) {
34
+ !lowerer.checker
35
+ .declarationsOf(sym)
36
+ .some((d) => ts.isInterfaceDeclaration(d) && lowerer.isStdlibFile(d.getSourceFile()))) {
35
37
  continue;
36
38
  }
37
39
  if (sym.name === "PromiseFulfilledResult" || sym.name === "PromiseRejectedResult") {
@@ -106,7 +108,11 @@ function literalKeySpellingOf(t) {
106
108
  if (t.isUnionType()) {
107
109
  let out = null;
108
110
  for (const arm of ts.constituentTypes(t)) {
109
- const s = arm.isStringLiteralType() ? arm.value : arm.isNumberLiteralType() ? String(arm.value) : null;
111
+ const s = arm.isStringLiteralType()
112
+ ? arm.value
113
+ : arm.isNumberLiteralType()
114
+ ? String(arm.value)
115
+ : null;
110
116
  if (s === null || (out !== null && s !== out))
111
117
  return null;
112
118
  out = s;
@@ -129,7 +135,8 @@ function pureKeyExpr(lowerer, expr) {
129
135
  return true;
130
136
  if (ts.isStringLiteralLike(expr) || ts.isNumericLiteral(expr))
131
137
  return true;
132
- if (expr.kind === ts.SyntaxKind.TrueKeyword || expr.kind === ts.SyntaxKind.FalseKeyword ||
138
+ if (expr.kind === ts.SyntaxKind.TrueKeyword ||
139
+ expr.kind === ts.SyntaxKind.FalseKeyword ||
133
140
  expr.kind === ts.SyntaxKind.NullKeyword)
134
141
  return true;
135
142
  if (ts.isPropertyAccessExpression(expr)) {
@@ -139,20 +146,27 @@ function pureKeyExpr(lowerer, expr) {
139
146
  return pureKeyExpr(lowerer, expr.expression);
140
147
  }
141
148
  if (ts.isPrefixUnaryExpression(expr) &&
142
- (expr.operator === ts.SyntaxKind.MinusToken || expr.operator === ts.SyntaxKind.PlusToken ||
143
- expr.operator === ts.SyntaxKind.ExclamationToken || expr.operator === ts.SyntaxKind.TildeToken)) {
149
+ (expr.operator === ts.SyntaxKind.MinusToken ||
150
+ expr.operator === ts.SyntaxKind.PlusToken ||
151
+ expr.operator === ts.SyntaxKind.ExclamationToken ||
152
+ expr.operator === ts.SyntaxKind.TildeToken)) {
144
153
  return pureKeyExpr(lowerer, expr.operand);
145
154
  }
146
155
  if (ts.isBinaryExpression(expr)) {
147
156
  const op = expr.operatorToken.kind;
148
- const pureOp = op === ts.SyntaxKind.AmpersandAmpersandToken || op === ts.SyntaxKind.BarBarToken ||
157
+ const pureOp = op === ts.SyntaxKind.AmpersandAmpersandToken ||
158
+ op === ts.SyntaxKind.BarBarToken ||
149
159
  op === ts.SyntaxKind.QuestionQuestionToken ||
150
- (op >= ts.SyntaxKind.LessThanToken && op <= ts.SyntaxKind.CaretToken &&
151
- op !== ts.SyntaxKind.InstanceOfKeyword && op !== ts.SyntaxKind.InKeyword);
160
+ (op >= ts.SyntaxKind.LessThanToken &&
161
+ op <= ts.SyntaxKind.CaretToken &&
162
+ op !== ts.SyntaxKind.InstanceOfKeyword &&
163
+ op !== ts.SyntaxKind.InKeyword);
152
164
  return pureOp && pureKeyExpr(lowerer, expr.left) && pureKeyExpr(lowerer, expr.right);
153
165
  }
154
166
  if (ts.isConditionalExpression(expr)) {
155
- return pureKeyExpr(lowerer, expr.condition) && pureKeyExpr(lowerer, expr.whenTrue) && pureKeyExpr(lowerer, expr.whenFalse);
167
+ return (pureKeyExpr(lowerer, expr.condition) &&
168
+ pureKeyExpr(lowerer, expr.whenTrue) &&
169
+ pureKeyExpr(lowerer, expr.whenFalse));
156
170
  }
157
171
  if (ts.isTemplateExpression(expr))
158
172
  return expr.templateSpans.every((s) => pureKeyExpr(lowerer, s.expression));
@@ -195,31 +209,56 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
195
209
  return;
196
210
  if (hasAccessors) {
197
211
  for (const field of fields) {
198
- const descriptor = { kind: "dynObjLit", type: DYN, loc, fields: [
212
+ const descriptor = {
213
+ kind: "dynObjLit",
214
+ type: DYN,
215
+ loc,
216
+ fields: [
199
217
  { key: { kind: "strLit", value: "value", type: STRING, loc }, value: field.value },
200
- ...["writable", "enumerable", "configurable"].map(name => ({
218
+ ...["writable", "enumerable", "configurable"].map((name) => ({
201
219
  key: strLit(name, loc),
202
- value: { kind: "dynFrom", value: { kind: "boolLit", value: true, type: BOOL, loc }, type: DYN, loc },
220
+ value: {
221
+ kind: "dynFrom",
222
+ value: { kind: "boolLit", value: true, type: BOOL, loc },
223
+ type: DYN,
224
+ loc,
225
+ },
203
226
  })),
204
- ] };
205
- acc = { kind: "libCall", fn: "dyn.defineProperty", args: [acc, lowerer.coerceToExpected(field.key, DYN), descriptor], type: DYN, loc };
227
+ ],
228
+ };
229
+ acc = {
230
+ kind: "libCall",
231
+ fn: "dyn.defineProperty",
232
+ args: [acc, lowerer.coerceToExpected(field.key, DYN), descriptor],
233
+ type: DYN,
234
+ loc,
235
+ };
206
236
  }
207
237
  fields = [];
208
238
  return;
209
239
  }
210
240
  const chunk = { kind: "dynObjLit", fields, type: DYN, loc };
211
- acc = acc === null
212
- ? chunk
213
- : { kind: "libCall", fn: "dyn.assign", args: [acc, chunk], type: DYN, loc };
241
+ acc =
242
+ acc === null
243
+ ? chunk
244
+ : { kind: "libCall", fn: "dyn.assign", args: [acc, chunk], type: DYN, loc };
214
245
  fields = [];
215
246
  };
216
247
  for (const prop of expr.properties) {
217
- if (ts.isPropertyAssignment(prop) && !ts.isComputedPropertyName(prop.name) && prop.name.text === "__proto__") {
248
+ if (ts.isPropertyAssignment(prop) &&
249
+ !ts.isComputedPropertyName(prop.name) &&
250
+ prop.name.text === "__proto__") {
218
251
  if (prop.initializer.kind !== ts.SyntaxKind.NullKeyword)
219
252
  lowerer.unsupported("SC1090", prop, "object-literal prototypes other than null (use Object.setPrototypeOf)");
220
253
  flushFields();
221
254
  acc ??= { kind: "dynObjLit", fields: [], type: DYN, loc };
222
- acc = { kind: "libCall", fn: "dyn.setPrototype", args: [acc, lowerer.lowerExprExpecting(prop.initializer, DYN)], type: DYN, loc: locOf(prop) };
255
+ acc = {
256
+ kind: "libCall",
257
+ fn: "dyn.setPrototype",
258
+ args: [acc, lowerer.lowerExprExpecting(prop.initializer, DYN)],
259
+ type: DYN,
260
+ loc: locOf(prop),
261
+ };
223
262
  continue;
224
263
  }
225
264
  if (ts.isSpreadAssignment(prop)) {
@@ -231,14 +270,18 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
231
270
  ? lowerer.lowerExprExpecting(prop.expression, DYN)
232
271
  : lowerer.lowerExpr(prop.expression);
233
272
  fenceSymbolFieldCopy(lowerer, prop.expression, raw.type);
234
- const source = boxValue
235
- ? boxValue(prop.expression, raw)
236
- : lowerer.coerceToExpected(raw, DYN);
273
+ const source = boxValue ? boxValue(prop.expression, raw) : lowerer.coerceToExpected(raw, DYN);
237
274
  if (source.type.kind !== "dyn") {
238
275
  lowerer.unsupported("SC1101", prop.expression, `spreading '${lowerer.fmt(source.type)}' into a checked-dynamic object literal`);
239
276
  }
240
277
  acc ??= { kind: "dynObjLit", fields: [], type: DYN, loc };
241
- acc = { kind: "libCall", fn: "dyn.copyDataProperties", args: [acc, source], type: DYN, loc: locOf(prop) };
278
+ acc = {
279
+ kind: "libCall",
280
+ fn: "dyn.copyDataProperties",
281
+ args: [acc, source],
282
+ type: DYN,
283
+ loc: locOf(prop),
284
+ };
242
285
  continue;
243
286
  }
244
287
  const name = prop.name;
@@ -282,15 +325,37 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
282
325
  lowerer.rejectThisInObjectMethod(prop.body ?? prop);
283
326
  const fn = lowerer.lowerLambda(prop);
284
327
  const descriptor = {
285
- kind: "dynObjLit", type: DYN, loc: locOf(prop), fields: [
286
- { key: { kind: "strLit", value: ts.isGetAccessorDeclaration(prop) ? "get" : "set", type: STRING, loc }, value: lowerer.coerceToExpected(fn, DYN) },
287
- ...["enumerable", "configurable"].map(name => ({
328
+ kind: "dynObjLit",
329
+ type: DYN,
330
+ loc: locOf(prop),
331
+ fields: [
332
+ {
333
+ key: {
334
+ kind: "strLit",
335
+ value: ts.isGetAccessorDeclaration(prop) ? "get" : "set",
336
+ type: STRING,
337
+ loc,
338
+ },
339
+ value: lowerer.coerceToExpected(fn, DYN),
340
+ },
341
+ ...["enumerable", "configurable"].map((name) => ({
288
342
  key: strLit(name, loc),
289
- value: { kind: "dynFrom", value: { kind: "boolLit", value: true, type: BOOL, loc }, type: DYN, loc },
343
+ value: {
344
+ kind: "dynFrom",
345
+ value: { kind: "boolLit", value: true, type: BOOL, loc },
346
+ type: DYN,
347
+ loc,
348
+ },
290
349
  })),
291
350
  ],
292
351
  };
293
- acc = { kind: "libCall", fn: "dyn.defineProperty", args: [acc, lowerer.coerceToExpected(key, DYN), descriptor], type: DYN, loc };
352
+ acc = {
353
+ kind: "libCall",
354
+ fn: "dyn.defineProperty",
355
+ args: [acc, lowerer.coerceToExpected(key, DYN), descriptor],
356
+ type: DYN,
357
+ loc,
358
+ };
294
359
  continue;
295
360
  }
296
361
  const valueExpr = ts.isMethodDeclaration(prop)
@@ -305,13 +370,13 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
305
370
  const propDiagsBefore = lowerer.diags.length;
306
371
  try {
307
372
  const lowerValue = () => ts.isMethodDeclaration(prop)
308
- ? (isJsSourceFile(expr.getSourceFile()) ? lowerer.lowerLambda(prop) : (lowerer.rejectThisInObjectMethod(prop.body ?? prop), lowerer.lowerLambda(prop)))
373
+ ? isJsSourceFile(expr.getSourceFile())
374
+ ? lowerer.lowerLambda(prop)
375
+ : (lowerer.rejectThisInObjectMethod(prop.body ?? prop), lowerer.lowerLambda(prop))
309
376
  : !boxValue && ts.isObjectLiteralExpression(valueExpr)
310
377
  ? lowerer.lowerExprExpecting(valueExpr, DYN)
311
378
  : lowerer.lowerExpr(valueExpr);
312
- raw =
313
- fenceClosureProbe(lowerer, valueExpr, undefined, lowerValue) ??
314
- lowerValue();
379
+ raw = fenceClosureProbe(lowerer, valueExpr, undefined, lowerValue) ?? lowerValue();
315
380
  }
316
381
  catch (err) {
317
382
  // A PURE member read a JS file cannot lower (a namespace object
@@ -336,7 +401,10 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
336
401
  : lowerer.coerceToExpected(raw, DYN);
337
402
  // A JS object's array-valued properties retain the same source array.
338
403
  // Repeated references must compare equal and mutations remain shared.
339
- if (!boxValue && isJsSourceFile(prop.getSourceFile()) && v.kind === "dynFrom" && v.value.type.kind === "array") {
404
+ if (!boxValue &&
405
+ isJsSourceFile(prop.getSourceFile()) &&
406
+ v.kind === "dynFrom" &&
407
+ v.value.type.kind === "array") {
340
408
  v = { ...v, liveRef: true };
341
409
  }
342
410
  if (v.type.kind !== "dyn") {
@@ -406,7 +474,9 @@ function fenceClosureProbe(lowerer, node, slotType, attempt) {
406
474
  let inner = node;
407
475
  while (ts.isParenthesizedExpression(inner))
408
476
  inner = inner.expression;
409
- if (!ts.isArrowFunction(inner) && !ts.isFunctionExpression(inner) && !ts.isMethodDeclaration(inner)) {
477
+ if (!ts.isArrowFunction(inner) &&
478
+ !ts.isFunctionExpression(inner) &&
479
+ !ts.isMethodDeclaration(inner)) {
410
480
  return null;
411
481
  }
412
482
  // The trap's ABI: the field's func slot when one exists; otherwise (the
@@ -498,7 +568,8 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
498
568
  if (ftT.isNumberLiteralType())
499
569
  return litT.isNumberLiteralType() && litT.value === ftT.value;
500
570
  if (ftT.flags & ts.TypeFlags.BooleanLiteral) {
501
- return (litT.flags & ts.TypeFlags.BooleanLiteral) !== 0 && lowerer.checker.typeToString(litT) === lowerer.checker.typeToString(ftT);
571
+ return ((litT.flags & ts.TypeFlags.BooleanLiteral) !== 0 &&
572
+ lowerer.checker.typeToString(litT) === lowerer.checker.typeToString(ftT));
502
573
  }
503
574
  if (ftT.flags & ts.TypeFlags.Null)
504
575
  return (litT.flags & ts.TypeFlags.Null) !== 0;
@@ -510,7 +581,9 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
510
581
  const candidates = new Set();
511
582
  for (const member of ts.constituentTypes(tsType)) {
512
583
  const mMapped = lowerer.mapTypeOf(member);
513
- if (mMapped?.kind !== "record" || !armShapeIds.has(mMapped.shapeId) || candidates.has(mMapped.shapeId))
584
+ if (mMapped?.kind !== "record" ||
585
+ !armShapeIds.has(mMapped.shapeId) ||
586
+ candidates.has(mMapped.shapeId))
514
587
  continue;
515
588
  const shape = lowerer.shapes.get(mMapped.shapeId);
516
589
  if (!shape || shape.tuple || shape.indexValue)
@@ -572,59 +645,100 @@ function lowerOptionalIndexSpreadSource(lowerer, source, loc) {
572
645
  }
573
646
  const selected = {
574
647
  kind: "ternary",
575
- cond: { kind: "unionIsTag", unionId: source.type.unionId, tag: undefinedTag, negated: false, value: stable, type: BOOL, loc },
648
+ cond: {
649
+ kind: "unionIsTag",
650
+ unionId: source.type.unionId,
651
+ tag: undefinedTag,
652
+ negated: false,
653
+ value: stable,
654
+ type: BOOL,
655
+ loc,
656
+ },
576
657
  then: { kind: "recordLit", fields: [], type: recordType, loc },
577
- else_: { kind: "unionNarrow", unionId: source.type.unionId, tag: recordTag, value: stable, type: recordType, loc },
658
+ else_: {
659
+ kind: "unionNarrow",
660
+ unionId: source.type.unionId,
661
+ tag: recordTag,
662
+ value: stable,
663
+ type: recordType,
664
+ loc,
665
+ },
578
666
  type: recordType,
579
667
  loc,
580
668
  };
581
- return prefix.length === 0 ? selected : { kind: "seqExpr", stmts: prefix, result: selected, type: recordType, loc };
669
+ return prefix.length === 0
670
+ ? selected
671
+ : { kind: "seqExpr", stmts: prefix, result: selected, type: recordType, loc };
582
672
  }
583
673
  export function lowerObjectLiteral(lowerer, expr, expected) {
584
674
  // Unannotated JavaScript accumulator fields have no element contract.
585
675
  // Preserve their checked arrays instead of assigning never[] a numeric ABI.
586
- if (!expected && isJsSourceFile(expr.getSourceFile()) && expr.properties.some((prop) => ts.isPropertyAssignment(prop) && (ts.isArrayLiteralExpression(prop.initializer) &&
587
- prop.initializer.elements.length === 0 || neverTaintedJsType(lowerer, prop.initializer, lowerer.typeOf(prop.initializer))))) {
676
+ if (!expected &&
677
+ isJsSourceFile(expr.getSourceFile()) &&
678
+ expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
679
+ ((ts.isArrayLiteralExpression(prop.initializer) &&
680
+ prop.initializer.elements.length === 0) ||
681
+ neverTaintedJsType(lowerer, prop.initializer, lowerer.typeOf(prop.initializer))))) {
588
682
  return lowerDynObjectLiteral(lowerer, expr);
589
683
  }
590
- if (!expected && isJsSourceFile(expr.getSourceFile()) && expr.properties.some((prop) => ts.isPropertyAssignment(prop) && lowerer.mapTypeOf(lowerer.typeOf(prop.initializer))?.kind === "array" &&
591
- tryLowerExpression(lowerer, prop.initializer)?.type.kind === "dyn")) {
684
+ if (!expected &&
685
+ isJsSourceFile(expr.getSourceFile()) &&
686
+ expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
687
+ lowerer.mapTypeOf(lowerer.typeOf(prop.initializer))?.kind === "array" &&
688
+ tryLowerExpression(lowerer, prop.initializer)?.type.kind === "dyn")) {
592
689
  return lowerDynObjectLiteral(lowerer, expr);
593
690
  }
594
691
  // A JS constructor parameter can hold omitted values even when its
595
692
  // documentation names a number. Inferred literal fields must preserve
596
693
  // the represented binding rather than checking it back into that type.
597
- if (!expected && isJsSourceFile(expr.getSourceFile()) && expr.properties.some((prop) => {
598
- let value = ts.isPropertyAssignment(prop) ? prop.initializer
599
- : ts.isShorthandPropertyAssignment(prop) ? prop.name : null;
600
- while (value && ts.isParenthesizedExpression(value))
601
- value = value.expression;
602
- if (!value || !ts.isIdentifier(value))
603
- return false;
604
- const stored = lowerer.peekLocal(value)?.type ?? lowerer.globalOf(value)?.type;
605
- const inferred = lowerer.mapTypeOf(lowerer.typeOf(value));
606
- return stored?.kind === "dyn" && inferred !== null && inferred.kind !== "dyn" && lowerer.dynConvertible(inferred);
607
- })) {
694
+ if (!expected &&
695
+ isJsSourceFile(expr.getSourceFile()) &&
696
+ expr.properties.some((prop) => {
697
+ let value = ts.isPropertyAssignment(prop)
698
+ ? prop.initializer
699
+ : ts.isShorthandPropertyAssignment(prop)
700
+ ? prop.name
701
+ : null;
702
+ while (value && ts.isParenthesizedExpression(value))
703
+ value = value.expression;
704
+ if (!value || !ts.isIdentifier(value))
705
+ return false;
706
+ const stored = lowerer.peekLocal(value)?.type ?? lowerer.globalOf(value)?.type;
707
+ const inferred = lowerer.mapTypeOf(lowerer.typeOf(value));
708
+ return (stored?.kind === "dyn" &&
709
+ inferred !== null &&
710
+ inferred.kind !== "dyn" &&
711
+ lowerer.dynConvertible(inferred));
712
+ })) {
608
713
  return lowerDynObjectLiteral(lowerer, expr);
609
714
  }
610
715
  // JavaScript object methods/accessors carry a live receiver. Keep the
611
716
  // literal in checked native storage instead of erasing its prototype ABI.
612
- if (isJsSourceFile(expr.getSourceFile()) && (expr.properties.length === 0 || expr.properties.some((prop) => ts.isMethodDeclaration(prop) || ts.isGetAccessorDeclaration(prop) || ts.isSetAccessorDeclaration(prop)))) {
717
+ if (isJsSourceFile(expr.getSourceFile()) &&
718
+ (expr.properties.length === 0 ||
719
+ expr.properties.some((prop) => ts.isMethodDeclaration(prop) ||
720
+ ts.isGetAccessorDeclaration(prop) ||
721
+ ts.isSetAccessorDeclaration(prop)))) {
613
722
  return lowerDynObjectLiteral(lowerer, expr);
614
723
  }
615
724
  const loc = locOf(expr);
616
725
  // Module collection already chose checked storage for this JavaScript
617
726
  // binding. Construct in that representation: an intermediate record would
618
727
  // check nested aliases back into inferred shapes and lose their identity.
619
- if (isJsSourceFile(expr.getSourceFile()) && ts.isVariableDeclaration(expr.parent) &&
620
- expr.parent.initializer === expr && ts.isIdentifier(expr.parent.name) &&
728
+ if (isJsSourceFile(expr.getSourceFile()) &&
729
+ ts.isVariableDeclaration(expr.parent) &&
730
+ expr.parent.initializer === expr &&
731
+ ts.isIdentifier(expr.parent.name) &&
621
732
  lowerer.globalOf(expr.parent.name)?.type.kind === "dyn") {
622
733
  return lowerDynObjectLiteral(lowerer, expr);
623
734
  }
624
735
  // A checked spread carries runtime symbol keys and receiver-sensitive
625
736
  // methods absent from its inferred record shape. Copy the real properties.
626
- if (!expected && isJsSourceFile(expr.getSourceFile()) && expr.properties.some((property) => ts.isSpreadAssignment(property) && (lowerer.builtinNamespaceModuleOf(property.expression)?.startsWith("path") ||
627
- tryLowerExpression(lowerer, property.expression)?.type.kind === "dyn"))) {
737
+ if (!expected &&
738
+ isJsSourceFile(expr.getSourceFile()) &&
739
+ expr.properties.some((property) => ts.isSpreadAssignment(property) &&
740
+ (lowerer.builtinNamespaceModuleOf(property.expression)?.startsWith("path") ||
741
+ tryLowerExpression(lowerer, property.expression)?.type.kind === "dyn"))) {
628
742
  return lowerDynObjectLiteral(lowerer, expr);
629
743
  }
630
744
  const unionClone = lowerUnionRecordClone(lowerer, expr);
@@ -694,8 +808,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
694
808
  // stores "16" — JS's ToPropertyKey; the checker names the property
695
809
  // symbol the same way), and FOLDABLE computed keys (above).
696
810
  if (!prop.name ||
697
- !(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name) ||
698
- ts.isNumericLiteral(prop.name) || ts.isComputedPropertyName(prop.name))) {
811
+ !(ts.isIdentifier(prop.name) ||
812
+ ts.isStringLiteral(prop.name) ||
813
+ ts.isNumericLiteral(prop.name) ||
814
+ ts.isComputedPropertyName(prop.name))) {
699
815
  lowerer.unsupported("SC1090", prop, "non-identifier property names");
700
816
  }
701
817
  // Shorthand methods are just closure-valued fields — but their `this`
@@ -710,8 +826,11 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
710
826
  // An inferred binding pattern supplies placeholders such as
711
827
  // { nested: { value: any } }. Construct the literal's own fields so
712
828
  // those placeholders do not erase instantiated generic storage.
713
- if (!expected && ts.isVariableDeclaration(expr.parent) && !expr.parent.type &&
714
- ts.isObjectBindingPattern(expr.parent.name) && expr.parent.initializer === expr) {
829
+ if (!expected &&
830
+ ts.isVariableDeclaration(expr.parent) &&
831
+ !expr.parent.type &&
832
+ ts.isObjectBindingPattern(expr.parent.name) &&
833
+ expr.parent.initializer === expr) {
715
834
  tsType = lowerer.typeOf(expr);
716
835
  }
717
836
  // `as never` supplies no construction layout. Keep the literal's own
@@ -745,7 +864,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
745
864
  // slot's field types (`lanIp: string | null`), which the literal's own
746
865
  // type narrows away (a field written as `lanIp: null` types as bare
747
866
  // `null`, which maps to nothing on its own).
748
- if (tsType.isUnionType() && ts.constituentTypes(tsType).some((t) => t.getSymbol()?.name === "PromiseLike")) {
867
+ if (tsType.isUnionType() &&
868
+ ts.constituentTypes(tsType).some((t) => t.getSymbol()?.name === "PromiseLike")) {
749
869
  tsType = lowerer.checker.getAwaitedType(tsType) ?? tsType;
750
870
  }
751
871
  let mapped = lowerer.mapTypeOf(tsType);
@@ -753,7 +873,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
753
873
  // fields make the literal's inferred type look like a fixed record.
754
874
  // Keep a checked-dynamic destination in that representation so copying
755
875
  // preserves keys, evaluation order, and fields overwritten afterwards.
756
- if (mapped?.kind === "dyn" && expr.properties.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
876
+ if (mapped?.kind === "dyn" &&
877
+ expr.properties.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
757
878
  return lowerDynObjectLiteral(lowerer, expr);
758
879
  }
759
880
  // A JavaScript call can contextually type an object literal as string even
@@ -826,7 +947,12 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
826
947
  // a prototype-named DATA property (notably `toString`). Object literals
827
948
  // have no call signature; construct their own data shape and let the
828
949
  // surrounding assignment/assertion enforce the destination contract.
829
- if (mapped === null || mapped.kind === "union" || mapped.kind === "dyn" || mapped.kind === "object" || mapped.kind === "jsval" || mapped.kind === "func") {
950
+ if (mapped === null ||
951
+ mapped.kind === "union" ||
952
+ mapped.kind === "dyn" ||
953
+ mapped.kind === "object" ||
954
+ mapped.kind === "jsval" ||
955
+ mapped.kind === "func") {
830
956
  const ctxUnion = mapped?.kind === "union" ? mapped : null;
831
957
  mapped = lowerer.mapTypeOf(lowerer.typeOf(expr)) ?? mapped;
832
958
  // A literal whose own shape re-tags into NO arm of the contextual
@@ -851,7 +977,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
851
977
  !armShape?.tuple &&
852
978
  // `{} | undefined` supplies no layout for a populated options
853
979
  // literal, just as a bare empty-record context supplies none.
854
- (expr.properties.length === 0 || (armShape && (armShape.fields.length > 0 || armShape.indexValue)))) {
980
+ (expr.properties.length === 0 ||
981
+ (armShape && (armShape.fields.length > 0 || armShape.indexValue)))) {
855
982
  mapped = recordArms[0];
856
983
  }
857
984
  }
@@ -873,7 +1000,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
873
1000
  // retaining distinct nominal knots. An inferred spread shape can
874
1001
  // match the wrong knot, so consult discriminants even if that shape
875
1002
  // already appears in the union.
876
- if (ownShapeId === null || !recordArms.some((a) => a.shapeId === ownShapeId) || expr.properties.some(ts.isSpreadAssignment)) {
1003
+ if (ownShapeId === null ||
1004
+ !recordArms.some((a) => a.shapeId === ownShapeId) ||
1005
+ expr.properties.some(ts.isSpreadAssignment)) {
877
1006
  const arm = literalUnionArmOf(lowerer, expr, tsType, recordArms);
878
1007
  if (arm)
879
1008
  mapped = arm;
@@ -889,7 +1018,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
889
1018
  // (rest-param function types) narrow away. SEMANTICS.md documents the
890
1019
  // enumeration divergence.
891
1020
  if (isJsSourceFile(expr.getSourceFile()) &&
892
- (!mapped || expr.properties.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
1021
+ (!mapped ||
1022
+ expr.properties.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
893
1023
  isCjsExportTableLiteral(expr)) {
894
1024
  const fields = [];
895
1025
  for (const prop of expr.properties) {
@@ -925,8 +1055,11 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
925
1055
  // descriptor records with `any` values) — builds as a dyn OBJECT:
926
1056
  // each field converts through the usual dyn boundary, and dynamic
927
1057
  // consumers ride the keyed-dyn paths. TypeScript keeps the fence.
928
- if (mapped?.kind === "dyn" || (!mapped && isJsSourceFile(expr.getSourceFile())) ||
929
- (!expected && mapped && jsOpenObjectType(expr, mapped, lowerer.shapes, lowerer.unions).kind === "dyn")) {
1058
+ if (mapped?.kind === "dyn" ||
1059
+ (!mapped && isJsSourceFile(expr.getSourceFile())) ||
1060
+ (!expected &&
1061
+ mapped &&
1062
+ jsOpenObjectType(expr, mapped, lowerer.shapes, lowerer.unions).kind === "dyn")) {
930
1063
  return lowerDynObjectLiteral(lowerer, expr);
931
1064
  }
932
1065
  if (!mapped || mapped.kind !== "record")
@@ -937,14 +1070,19 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
937
1070
  // conditional records: an empty array in one arm has no element layout
938
1071
  // until the join supplies it. Existing values still use width coercion;
939
1072
  // extra fields, spreads, accessors, and keyed shapes retain their paths.
940
- if (expected && !isJsSourceFile(expr.getSourceFile()) &&
1073
+ if (expected &&
1074
+ !isJsSourceFile(expr.getSourceFile()) &&
941
1075
  expr.properties.every((p) => ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p))) {
942
1076
  const own = lowerer.shapes.get(type.shapeId);
943
1077
  const target = lowerer.shapes.get(expected.shapeId);
944
- if (!own.tuple && !target.tuple && !own.indexValue && !target.indexValue &&
945
- !shapeHasAccessorSlots(own) && !shapeHasAccessorSlots(target) &&
1078
+ if (!own.tuple &&
1079
+ !target.tuple &&
1080
+ !own.indexValue &&
1081
+ !target.indexValue &&
1082
+ !shapeHasAccessorSlots(own) &&
1083
+ !shapeHasAccessorSlots(target) &&
946
1084
  target.fields.every((field) => own.fields.some((candidate) => candidate.name === field.name) ||
947
- field.type.kind === "union" && lowerer.armTag(field.type.unionId, UNDEFINED_T) >= 0) &&
1085
+ (field.type.kind === "union" && lowerer.armTag(field.type.unionId, UNDEFINED_T) >= 0)) &&
948
1086
  own.fields.every((field) => target.fields.some((candidate) => candidate.name === field.name))) {
949
1087
  type = { kind: "record", shapeId: expected.shapeId };
950
1088
  }
@@ -952,7 +1090,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
952
1090
  let shape = lowerer.shapes.get(type.shapeId);
953
1091
  // JavaScript Dates carry native object identity in checked storage. An
954
1092
  // inferred scalar Date field would erase that identity before boxing.
955
- if (isJsSourceFile(expr.getSourceFile()) && shape.fields.some((field) => field.type.kind === "date")) {
1093
+ if (isJsSourceFile(expr.getSourceFile()) &&
1094
+ shape.fields.some((field) => field.type.kind === "date")) {
956
1095
  return lowerDynObjectLiteral(lowerer, expr);
957
1096
  }
958
1097
  // ACCESSOR properties, JS literals only (TS accessors fill the shape's
@@ -963,7 +1102,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
963
1102
  if (isJsSourceFile(expr.getSourceFile())) {
964
1103
  const accessorNames = new Set(expr.properties
965
1104
  .filter((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))
966
- .map((p) => (p.name && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) ? p.name.text : ""))
1105
+ .map((p) => p.name && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) ? p.name.text : "")
967
1106
  .filter((n) => n !== ""));
968
1107
  if (accessorNames.size > 0) {
969
1108
  const narrowed = shape.fields.filter((f) => !accessorNames.has(f.name));
@@ -982,7 +1121,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
982
1121
  ts.isVariableStatement(expr.parent?.parent?.parent) &&
983
1122
  ts.isSourceFile(expr.parent?.parent?.parent?.parent);
984
1123
  const assignedProperties = expr.properties.filter((prop) => ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop));
985
- if (topLevelJsDecl && isJsSourceFile(expr.getSourceFile()) &&
1124
+ if (topLevelJsDecl &&
1125
+ isJsSourceFile(expr.getSourceFile()) &&
986
1126
  assignedProperties.length === expr.properties.length) {
987
1127
  const provided = new Set(assignedProperties.map((prop) => propNameText(lowerer, prop.name)));
988
1128
  if (shape.fields.some((field) => !provided.has(field.name))) {
@@ -1013,7 +1153,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1013
1153
  expr.properties.length >= 2 &&
1014
1154
  ts.isSpreadAssignment(expr.properties[0]) &&
1015
1155
  !conditionalSpreadOf(expr.properties[0].expression) &&
1016
- expr.properties.slice(1).every((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
1156
+ expr.properties
1157
+ .slice(1)
1158
+ .every((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
1017
1159
  p.name !== undefined &&
1018
1160
  (ts.isIdentifier(p.name) ||
1019
1161
  ts.isStringLiteral(p.name) ||
@@ -1068,7 +1210,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1068
1210
  if (shape.indexValue &&
1069
1211
  shape.fields.length === 0 &&
1070
1212
  !shape.tuple &&
1071
- (expr.properties.some((p) => ts.isSpreadAssignment(p)) || expr.properties.some(isRuntimeComputedKey))) {
1213
+ (expr.properties.some((p) => ts.isSpreadAssignment(p)) ||
1214
+ expr.properties.some(isRuntimeComputedKey))) {
1072
1215
  const contributors = [];
1073
1216
  let mergeable = true;
1074
1217
  for (const prop of expr.properties) {
@@ -1085,7 +1228,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1085
1228
  const csProp = cs.props[0];
1086
1229
  const cond = lowerer.lowerCondition(cs.cond);
1087
1230
  const vNode = ts.isPropertyAssignment(csProp) ? csProp.initializer : csProp;
1088
- const v = lowerer.intoIndexValueSlot(ts.isPropertyAssignment(csProp) ? lowerer.lowerExpr(csProp.initializer) : lowerer.lowerShorthandValue(csProp), shape.indexValue, vNode);
1231
+ const v = lowerer.intoIndexValueSlot(ts.isPropertyAssignment(csProp)
1232
+ ? lowerer.lowerExpr(csProp.initializer)
1233
+ : lowerer.lowerShorthandValue(csProp), shape.indexValue, vNode);
1089
1234
  contributors.push({
1090
1235
  kind: "field",
1091
1236
  name: csProp.name.text,
@@ -1175,7 +1320,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1175
1320
  expr.properties.every((p) => ts.isSpreadAssignment(p) && !conditionalSpreadOf(p.expression)) &&
1176
1321
  expr.properties.some((p) => {
1177
1322
  const t = lowerer.mapTypeOf(lowerer.typeOf(p.expression));
1178
- return t?.kind === "dyn" || t?.kind === "record" && !!lowerer.shapes.get(t.shapeId)?.indexValue;
1323
+ return (t?.kind === "dyn" || (t?.kind === "record" && !!lowerer.shapes.get(t.shapeId)?.indexValue));
1179
1324
  })) {
1180
1325
  return lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc);
1181
1326
  }
@@ -1337,7 +1482,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1337
1482
  (ts.isIdentifier(later.name) ||
1338
1483
  ts.isStringLiteral(later.name) ||
1339
1484
  ts.isNumericLiteral(later.name) ||
1340
- (ts.isComputedPropertyName(later.name) && literalComputedKey(lowerer, later.name) !== null))) {
1485
+ (ts.isComputedPropertyName(later.name) &&
1486
+ literalComputedKey(lowerer, later.name) !== null))) {
1341
1487
  laterNames.add(propNameText(lowerer, later.name));
1342
1488
  }
1343
1489
  }
@@ -1355,13 +1501,28 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1355
1501
  }
1356
1502
  const fRead = () => ({
1357
1503
  kind: "recordGet",
1358
- obj: { kind: "unionNarrow", unionId: srcType.unionId, tag: recTag, value: srcRef(), type: recArm, loc: locOf(prop) },
1504
+ obj: {
1505
+ kind: "unionNarrow",
1506
+ unionId: srcType.unionId,
1507
+ tag: recTag,
1508
+ value: srcRef(),
1509
+ type: recArm,
1510
+ loc: locOf(prop),
1511
+ },
1359
1512
  shapeId: recArm.shapeId,
1360
1513
  field: f.name,
1361
1514
  type: f.type,
1362
1515
  loc: locOf(prop),
1363
1516
  });
1364
- let cond = { kind: "unionIsTag", unionId: srcType.unionId, tag: recTag, negated: false, value: srcRef(), type: BOOL, loc: locOf(prop) };
1517
+ let cond = {
1518
+ kind: "unionIsTag",
1519
+ unionId: srcType.unionId,
1520
+ tag: recTag,
1521
+ negated: false,
1522
+ value: srcRef(),
1523
+ type: BOOL,
1524
+ loc: locOf(prop),
1525
+ };
1365
1526
  let thenVal;
1366
1527
  if (typeEquals(f.type, targetType)) {
1367
1528
  thenVal = fRead();
@@ -1377,7 +1538,15 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1377
1538
  kind: "logical",
1378
1539
  op: "&&",
1379
1540
  left: cond,
1380
- right: { kind: "unionIsTag", unionId: f.type.unionId, tag: ftUndef, negated: true, value: fRead(), type: BOOL, loc: locOf(prop) },
1541
+ right: {
1542
+ kind: "unionIsTag",
1543
+ unionId: f.type.unionId,
1544
+ tag: ftUndef,
1545
+ negated: true,
1546
+ value: fRead(),
1547
+ type: BOOL,
1548
+ loc: locOf(prop),
1549
+ },
1381
1550
  type: BOOL,
1382
1551
  loc: locOf(prop),
1383
1552
  };
@@ -1388,10 +1557,25 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1388
1557
  lowerer.pushDiag(recordShapeMismatchDiag(lowerer.fmt(type), lowerer.fmt(recArm), locOf(prop), `spread field '${f.name}': '${lowerer.fmt(f.type)}' cannot re-tag into '${lowerer.fmt(targetType)}' behind the present-test`));
1389
1558
  throw new PoisonError();
1390
1559
  }
1391
- thenVal = { kind: "call", callee: retag, args: [fRead()], type: targetType, loc: locOf(prop) };
1560
+ thenVal = {
1561
+ kind: "call",
1562
+ callee: retag,
1563
+ args: [fRead()],
1564
+ type: targetType,
1565
+ loc: locOf(prop),
1566
+ };
1392
1567
  }
1393
- else if (ftDef && ftDef.arms.length === 2 && lowerer.armTag(f.type.unionId, targetType) >= 0) {
1394
- thenVal = { kind: "unionNarrow", unionId: f.type.unionId, tag: lowerer.armTag(f.type.unionId, targetType), value: fRead(), type: targetType, loc: locOf(prop) };
1568
+ else if (ftDef &&
1569
+ ftDef.arms.length === 2 &&
1570
+ lowerer.armTag(f.type.unionId, targetType) >= 0) {
1571
+ thenVal = {
1572
+ kind: "unionNarrow",
1573
+ unionId: f.type.unionId,
1574
+ tag: lowerer.armTag(f.type.unionId, targetType),
1575
+ value: fRead(),
1576
+ type: targetType,
1577
+ loc: locOf(prop),
1578
+ };
1395
1579
  }
1396
1580
  else {
1397
1581
  lowerer.pushDiag(recordShapeMismatchDiag(lowerer.fmt(type), lowerer.fmt(recArm), locOf(prop), `spread field '${f.name}': '${lowerer.fmt(f.type)}' cannot narrow into '${lowerer.fmt(targetType)}' behind the present-test`));
@@ -1416,7 +1600,14 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1416
1600
  if (!elseVal) {
1417
1601
  lowerer.unsupported("SC1090", prop, `object spread of '${lowerer.fmt(srcType)}' sources where '${f.name}' has no earlier contributor (the absent arm leaves the required field unset — spread defaults first: { ...defaults, ...overrides })`);
1418
1602
  }
1419
- const merged = { kind: "ternary", cond, then: thenVal, else_: elseVal, type: targetType, loc: locOf(prop) };
1603
+ const merged = {
1604
+ kind: "ternary",
1605
+ cond,
1606
+ then: thenVal,
1607
+ else_: elseVal,
1608
+ type: targetType,
1609
+ loc: locOf(prop),
1610
+ };
1420
1611
  if (at >= 0)
1421
1612
  fields[at] = { name: f.name, value: merged };
1422
1613
  else
@@ -1459,7 +1650,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1459
1650
  (ts.isIdentifier(later.name) ||
1460
1651
  ts.isStringLiteral(later.name) ||
1461
1652
  ts.isNumericLiteral(later.name) ||
1462
- (ts.isComputedPropertyName(later.name) && literalComputedKey(lowerer, later.name) !== null))) {
1653
+ (ts.isComputedPropertyName(later.name) &&
1654
+ literalComputedKey(lowerer, later.name) !== null))) {
1463
1655
  laterNames.add(propNameText(lowerer, later.name));
1464
1656
  }
1465
1657
  }
@@ -1619,8 +1811,12 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1619
1811
  // compile time; anything else — the awaited mapper — runs
1620
1812
  // (and may throw into the enclosing catch) with its result
1621
1813
  // released by the statement frame.
1622
- if (v.kind !== "unitLit" && v.kind !== "numLit" && v.kind !== "strLit" &&
1623
- v.kind !== "boolLit" && v.kind !== "varRef" && v.kind !== "closure") {
1814
+ if (v.kind !== "unitLit" &&
1815
+ v.kind !== "numLit" &&
1816
+ v.kind !== "strLit" &&
1817
+ v.kind !== "boolLit" &&
1818
+ v.kind !== "varRef" &&
1819
+ v.kind !== "closure") {
1624
1820
  fields.push({ name, value: v, drop: true });
1625
1821
  }
1626
1822
  }
@@ -1642,7 +1838,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1642
1838
  init = init.expression;
1643
1839
  value =
1644
1840
  fenceClosureProbe(lowerer, prop.initializer, fieldType, () => lowerer.lowerExpr(prop.initializer)) ??
1645
- (fieldType !== undefined && (ts.isArrayLiteralExpression(init) || ts.isObjectLiteralExpression(init) || ts.isConditionalExpression(init))
1841
+ (fieldType !== undefined &&
1842
+ (ts.isArrayLiteralExpression(init) ||
1843
+ ts.isObjectLiteralExpression(init) ||
1844
+ ts.isConditionalExpression(init))
1646
1845
  ? lowerer.lowerExprExpecting(prop.initializer, fieldType)
1647
1846
  : lowerer.lowerExpr(prop.initializer));
1648
1847
  }
@@ -1651,7 +1850,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1651
1850
  }
1652
1851
  else if (ts.isMethodDeclaration(prop)) {
1653
1852
  value =
1654
- fenceClosureProbe(lowerer, prop, fieldType, () => lowerer.lowerLambda(prop)) ?? lowerer.lowerLambda(prop);
1853
+ fenceClosureProbe(lowerer, prop, fieldType, () => lowerer.lowerLambda(prop)) ??
1854
+ lowerer.lowerLambda(prop);
1655
1855
  }
1656
1856
  else {
1657
1857
  lowerer.unsupported("SC1090", prop, `syntax '${ts.syntaxKindName(prop.kind)}'`);
@@ -1734,7 +1934,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1734
1934
  // property reads as undefined in Node, and a dyn slot holds
1735
1935
  // exactly that (the options-record call shape against
1736
1936
  // `{ plugins: unknown, ... }` — a JS caller the checker admits).
1737
- const optional = ((lowerer.checker.getPropertyOfType(tsType, f.name)?.flags ?? 0) & ts.SymbolFlags.Optional) !== 0;
1937
+ const optional = ((lowerer.checker.getPropertyOfType(tsType, f.name)?.flags ?? 0) &
1938
+ ts.SymbolFlags.Optional) !==
1939
+ 0;
1738
1940
  const absentHandle = f.type.kind === "jsval" && optional
1739
1941
  ? { kind: "jsOp", op: "undefLit", args: [], type: JSVAL, loc }
1740
1942
  : null;
@@ -1747,7 +1949,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1747
1949
  }
1748
1950
  }
1749
1951
  const result = { kind: "recordLit", fields, type, loc };
1750
- return spreadStmts.length === 0 ? result : { kind: "seqExpr", stmts: spreadStmts, result, type, loc };
1952
+ return spreadStmts.length === 0
1953
+ ? result
1954
+ : { kind: "seqExpr", stmts: spreadStmts, result, type, loc };
1751
1955
  }
1752
1956
  /** A union of plain records can preserve its existing variant while
1753
1957
  * replacing shared fields. Dispatch before constructing the copy: only
@@ -1790,7 +1994,10 @@ function lowerUnionRecordClone(lowerer, expr) {
1790
1994
  if (arm.kind !== "record")
1791
1995
  return null;
1792
1996
  const shape = lowerer.shapes.get(arm.shapeId);
1793
- if (!shape || shape.indexValue || shape.tuple || shapeHasAccessorSlots(shape) ||
1997
+ if (!shape ||
1998
+ shape.indexValue ||
1999
+ shape.tuple ||
2000
+ shapeHasAccessorSlots(shape) ||
1794
2001
  !names.every((name) => shape.fields.some((field) => field.name === name)))
1795
2002
  return null;
1796
2003
  for (let index = 0; index < props.length; index++) {
@@ -1807,10 +2014,14 @@ function lowerUnionRecordClone(lowerer, expr) {
1807
2014
  if (lift.how === "retag" && valueType?.kind === "union" && fieldType.kind === "union") {
1808
2015
  const from = lowerer.unions.get(valueType.unionId);
1809
2016
  const to = lowerer.unions.get(fieldType.unionId);
1810
- const plan = from && to ? planUnionRetag(from, to, (id) => lowerer.shapes.get(id), (source, target) => lowerer.widthLiftPlan(source, target)) : null;
1811
- if (!plan || !plan.every((arm) => arm.kind === "direct"
1812
- ? arm.route.lift.how === "copy" || arm.route.lift.how === "upcast"
1813
- : arm.kind === "discriminant" && arm.routes.every((route) => route.lift.how === "copy" || route.lift.how === "upcast")))
2017
+ const plan = from && to
2018
+ ? planUnionRetag(from, to, (id) => lowerer.shapes.get(id), (source, target) => lowerer.widthLiftPlan(source, target))
2019
+ : null;
2020
+ if (!plan ||
2021
+ !plan.every((arm) => arm.kind === "direct"
2022
+ ? arm.route.lift.how === "copy" || arm.route.lift.how === "upcast"
2023
+ : arm.kind === "discriminant" &&
2024
+ arm.routes.every((route) => route.lift.how === "copy" || route.lift.how === "upcast")))
1814
2025
  return null;
1815
2026
  }
1816
2027
  else if (lift.how !== "copy" && lift.how !== "wrap" && lift.how !== "upcast")
@@ -1821,14 +2032,24 @@ function lowerUnionRecordClone(lowerer, expr) {
1821
2032
  // Hidden runtime absence must never be mistaken for a record payload.
1822
2033
  // An earlier guard can remove that arm; an unguarded optional spread
1823
2034
  // still needs a destination able to represent the empty copy.
1824
- if (!typeEquals(source.type, sourceType) && source.type.kind === "union" && ts.isIdentifier(spread.expression)) {
2035
+ if (!typeEquals(source.type, sourceType) &&
2036
+ source.type.kind === "union" &&
2037
+ ts.isIdentifier(spread.expression)) {
1825
2038
  const local = lowerer.resolveLocal(spread.expression);
1826
2039
  const symbol = lowerer.resolveValueSymbol(spread.expression);
1827
- const captured = local?.boxed === true || symbol && lowerer.ctx.captureBySymbol.has(symbol);
1828
- if (local && !captured && !lowerer.runtimeOptionalLocals.has(lowerer.runtimeOptionalRootOf(local))) {
2040
+ const captured = local?.boxed === true || (symbol && lowerer.ctx.captureBySymbol.has(symbol));
2041
+ if (local &&
2042
+ !captured &&
2043
+ !lowerer.runtimeOptionalLocals.has(lowerer.runtimeOptionalRootOf(local))) {
1829
2044
  const helper = lowerer.narrowedRetagHelper(spread.expression, source.type.unionId, sourceType.unionId, source.loc);
1830
2045
  if (helper)
1831
- source = { kind: "call", callee: helper, args: [source], type: sourceType, loc: source.loc };
2046
+ source = {
2047
+ kind: "call",
2048
+ callee: helper,
2049
+ args: [source],
2050
+ type: sourceType,
2051
+ loc: source.loc,
2052
+ };
1832
2053
  }
1833
2054
  }
1834
2055
  if (!typeEquals(source.type, sourceType)) {
@@ -1853,18 +2074,50 @@ function lowerUnionRecordClone(lowerer, expr) {
1853
2074
  : lowerer.coerceInto(prop, lowerer.lowerShorthandValue(prop), fieldType);
1854
2075
  overrides.push({ name, value });
1855
2076
  }
1856
- const clone = { kind: "recordClone",
2077
+ const clone = {
2078
+ kind: "recordClone",
1857
2079
  source: { kind: "unionNarrow", value: ref, unionId: sourceType.unionId, tag, type: arm, loc },
1858
- overrides, type: arm, loc };
1859
- const wrapped = { kind: "unionWrap", value: clone, unionId: sourceType.unionId, tag, type: sourceType, loc };
1860
- result = result === null ? wrapped : {
1861
- kind: "ternary", cond: { kind: "unionIsTag", value: ref, unionId: sourceType.unionId, tag, negated: false, type: BOOL, loc },
1862
- then: wrapped, else_: result, type: sourceType, loc,
2080
+ overrides,
2081
+ type: arm,
2082
+ loc,
2083
+ };
2084
+ const wrapped = {
2085
+ kind: "unionWrap",
2086
+ value: clone,
2087
+ unionId: sourceType.unionId,
2088
+ tag,
2089
+ type: sourceType,
2090
+ loc,
1863
2091
  };
2092
+ result =
2093
+ result === null
2094
+ ? wrapped
2095
+ : {
2096
+ kind: "ternary",
2097
+ cond: {
2098
+ kind: "unionIsTag",
2099
+ value: ref,
2100
+ unionId: sourceType.unionId,
2101
+ tag,
2102
+ negated: false,
2103
+ type: BOOL,
2104
+ loc,
2105
+ },
2106
+ then: wrapped,
2107
+ else_: result,
2108
+ type: sourceType,
2109
+ loc,
2110
+ };
1864
2111
  }
1865
2112
  if (result === null)
1866
2113
  throw new InternalCompilerError("union clone has no arms");
1867
- return { kind: "seqExpr", stmts: [{ kind: "varDecl", localId: saved.id, init: source, loc }], result, type: sourceType, loc };
2114
+ return {
2115
+ kind: "seqExpr",
2116
+ stmts: [{ kind: "varDecl", localId: saved.id, init: source, loc }],
2117
+ result,
2118
+ type: sourceType,
2119
+ loc,
2120
+ };
1868
2121
  }
1869
2122
  /** Parses the conditional-spread idiom `...(c ? { k: v, ... } : {})`
1870
2123
  * (either orientation). Returns the condition, the non-empty arm's
@@ -1899,7 +2152,8 @@ export function conditionalSpreadOf(expr) {
1899
2152
  const props = [];
1900
2153
  for (const p of carrier.properties) {
1901
2154
  if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
1902
- p.name && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
2155
+ p.name &&
2156
+ (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
1903
2157
  props.push(p);
1904
2158
  }
1905
2159
  else {
@@ -1967,32 +2221,77 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
1967
2221
  stmts: (write) => {
1968
2222
  const chain = (i) => {
1969
2223
  if (i >= def.arms.length) {
1970
- return [{
2224
+ return [
2225
+ {
1971
2226
  kind: "throw",
1972
2227
  value: {
1973
2228
  kind: "libCall",
1974
2229
  fn: "error.new",
1975
- args: [{ kind: "strLit", value: `expected ${lowerer.fmt(fUnion)} at $.${f.name}`, type: STRING, loc }],
2230
+ args: [
2231
+ {
2232
+ kind: "strLit",
2233
+ value: `expected ${lowerer.fmt(fUnion)} at $.${f.name}`,
2234
+ type: STRING,
2235
+ loc,
2236
+ },
2237
+ ],
1976
2238
  type: { kind: "object", className: "%TypeError" },
1977
2239
  loc,
1978
2240
  },
1979
2241
  loc,
1980
- }];
2242
+ },
2243
+ ];
1981
2244
  }
1982
2245
  const arm = def.arms[i];
1983
2246
  const toTag = lowerer.armTag(fUnion.unionId, arm);
1984
2247
  if (toTag < 0)
1985
2248
  return chain(i + 1);
1986
2249
  const extracted = isUnitType(arm)
1987
- ? { kind: "unionWrap", unionId: fUnion.unionId, tag: toTag, value: { kind: "unitLit", unit: arm.kind === "undefinedT" ? "undefined" : "null", type: arm, loc }, type: fUnion, loc }
1988
- : { kind: "unionWrap", unionId: fUnion.unionId, tag: toTag, value: { kind: "unionNarrow", unionId: iv.unionId, tag: i, value: v, type: arm, loc }, type: fUnion, loc };
1989
- return [{
2250
+ ? {
2251
+ kind: "unionWrap",
2252
+ unionId: fUnion.unionId,
2253
+ tag: toTag,
2254
+ value: {
2255
+ kind: "unitLit",
2256
+ unit: arm.kind === "undefinedT" ? "undefined" : "null",
2257
+ type: arm,
2258
+ loc,
2259
+ },
2260
+ type: fUnion,
2261
+ loc,
2262
+ }
2263
+ : {
2264
+ kind: "unionWrap",
2265
+ unionId: fUnion.unionId,
2266
+ tag: toTag,
2267
+ value: {
2268
+ kind: "unionNarrow",
2269
+ unionId: iv.unionId,
2270
+ tag: i,
2271
+ value: v,
2272
+ type: arm,
2273
+ loc,
2274
+ },
2275
+ type: fUnion,
2276
+ loc,
2277
+ };
2278
+ return [
2279
+ {
1990
2280
  kind: "if",
1991
- cond: { kind: "unionIsTag", unionId: iv.unionId, tag: i, negated: false, value: v, type: BOOL, loc },
2281
+ cond: {
2282
+ kind: "unionIsTag",
2283
+ unionId: iv.unionId,
2284
+ tag: i,
2285
+ negated: false,
2286
+ value: v,
2287
+ type: BOOL,
2288
+ loc,
2289
+ },
1992
2290
  then: [write(extracted)],
1993
2291
  else_: chain(i + 1),
1994
2292
  loc,
1995
- }];
2293
+ },
2294
+ ];
1996
2295
  };
1997
2296
  return chain(0);
1998
2297
  },
@@ -2006,16 +2305,27 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
2006
2305
  // later source factory mutated it, contrary to object spread evaluation.
2007
2306
  const out = lowerer.declareHiddenLocal("%declMerge", type);
2008
2307
  const outRef = varRef(out.id, type, loc);
2009
- const stmts = [{
2010
- kind: "varDecl", localId: out.id,
2011
- init: { kind: "recordLit", fields: shape.fields.map((f) => ({ name: f.name, value: lowerer.wrappedUndefined(f.type, loc) })), type, loc },
2308
+ const stmts = [
2309
+ {
2310
+ kind: "varDecl",
2311
+ localId: out.id,
2312
+ init: {
2313
+ kind: "recordLit",
2314
+ fields: shape.fields.map((f) => ({
2315
+ name: f.name,
2316
+ value: lowerer.wrappedUndefined(f.type, loc),
2317
+ })),
2318
+ type,
2319
+ loc,
2320
+ },
2012
2321
  loc,
2013
- }];
2322
+ },
2323
+ ];
2014
2324
  for (const source of srcs) {
2015
2325
  const key = `declmerge-source:${type.shapeId}:${source.shapeId}`;
2016
- let helper = lowerer.widthHelpers.get(key);
2326
+ let helper = lowerer.valueHelpers.get(key);
2017
2327
  if (!helper) {
2018
- helper = `%rec.declmerge.${lowerer.widthHelpers.size}`;
2328
+ helper = `%rec.declmerge.${lowerer.valueHelpers.size}`;
2019
2329
  const sourceType = source.value.type;
2020
2330
  const destination = varRef("out.0", type, loc);
2021
2331
  const receiver = varRef("source.0", sourceType, loc);
@@ -2028,31 +2338,57 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
2028
2338
  // CopyDataProperties skips nullish sources, even when an erased
2029
2339
  // record view supplies the checker's apparent object type.
2030
2340
  body.push({
2031
- kind: "if", cond: { kind: "dynTest", test: "nullish", value: receiver, type: BOOL, loc },
2032
- then: [{ kind: "return", value: destination, loc }], else_: null, loc,
2341
+ kind: "if",
2342
+ cond: { kind: "dynTest", test: "nullish", value: receiver, type: BOOL, loc },
2343
+ then: [{ kind: "return", value: destination, loc }],
2344
+ else_: null,
2345
+ loc,
2033
2346
  });
2034
2347
  }
2035
2348
  for (const field of source.shape?.fields ?? []) {
2036
2349
  const target = shape.fields.find((candidate) => candidate.name === field.name);
2037
2350
  if (!target)
2038
2351
  continue; // The declared destination drops extra keys.
2039
- const raw = { kind: "recordGet", obj: receiver, shapeId: source.shapeId, field: field.name, type: field.type, loc };
2352
+ const raw = {
2353
+ kind: "recordGet",
2354
+ obj: receiver,
2355
+ shapeId: source.shapeId,
2356
+ field: field.name,
2357
+ type: field.type,
2358
+ loc,
2359
+ };
2040
2360
  const lift = lowerer.widthLiftPlan(field.type, target.type);
2041
2361
  if (!lift) {
2042
2362
  lowerer.unsupported("SC1090", expr, `object spread of field '${field.name}' from '${lowerer.fmt(field.type)}' into '${lowerer.fmt(target.type)}'`);
2043
2363
  }
2044
2364
  const write = {
2045
- kind: "recordSet", obj: destination, shapeId: type.shapeId, field: field.name,
2046
- value: lowerer.applyWidthLift(lift, raw, target.type, loc), loc,
2365
+ kind: "recordSet",
2366
+ obj: destination,
2367
+ shapeId: type.shapeId,
2368
+ field: field.name,
2369
+ value: lowerer.applyWidthLift(lift, raw, target.type, loc),
2370
+ loc,
2047
2371
  };
2048
2372
  // Optional declared fields use the established unset convention.
2049
2373
  // A dyn field, including a present undefined, is a real property;
2050
2374
  // its checked conversion runs and can overwrite an earlier value.
2051
2375
  const absent = field.type.kind === "union" ? lowerer.armTag(field.type.unionId, UNDEFINED_T) : -1;
2052
2376
  if (absent >= 0 && field.type.kind === "union") {
2053
- body.push({ kind: "if", cond: {
2054
- kind: "unionIsTag", unionId: field.type.unionId, tag: absent, negated: true, value: raw, type: BOOL, loc,
2055
- }, then: [write], else_: null, loc });
2377
+ body.push({
2378
+ kind: "if",
2379
+ cond: {
2380
+ kind: "unionIsTag",
2381
+ unionId: field.type.unionId,
2382
+ tag: absent,
2383
+ negated: true,
2384
+ value: raw,
2385
+ type: BOOL,
2386
+ loc,
2387
+ },
2388
+ then: [write],
2389
+ else_: null,
2390
+ loc,
2391
+ });
2056
2392
  }
2057
2393
  else
2058
2394
  body.push(write);
@@ -2066,42 +2402,123 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
2066
2402
  const value = varRef("value.0", iv, loc);
2067
2403
  locals.push({ id: "keys.0", name: "keys", type: keysType, mutable: false }, { id: "index.0", name: "index", type: F64, mutable: true }, { id: "key.0", name: "key", type: STRING, mutable: false }, { id: "value.0", name: "value", type: iv, mutable: false });
2068
2404
  const dispatch = shape.fields.reduceRight((rest, field) => {
2069
- const write = (value) => ({ kind: "recordSet", obj: destination, shapeId: type.shapeId, field: field.name, value, loc });
2405
+ const write = (value) => ({
2406
+ kind: "recordSet",
2407
+ obj: destination,
2408
+ shapeId: type.shapeId,
2409
+ field: field.name,
2410
+ value,
2411
+ loc,
2412
+ });
2070
2413
  const converted = conv(iv, field, value);
2071
- return [{
2414
+ return [
2415
+ {
2072
2416
  kind: "if",
2073
- cond: { kind: "strEq", negated: false, left: name, right: { kind: "strLit", value: field.name, type: STRING, loc }, type: BOOL, loc },
2417
+ cond: {
2418
+ kind: "strEq",
2419
+ negated: false,
2420
+ left: name,
2421
+ right: { kind: "strLit", value: field.name, type: STRING, loc },
2422
+ type: BOOL,
2423
+ loc,
2424
+ },
2074
2425
  then: "value" in converted ? [write(converted.value)] : converted.stmts(write),
2075
- else_: rest.length > 0 ? rest : null, loc,
2076
- }];
2426
+ else_: rest.length > 0 ? rest : null,
2427
+ loc,
2428
+ },
2429
+ ];
2077
2430
  }, []);
2078
- body.push({ kind: "varDecl", localId: "keys.0", init: source.shape
2079
- ? { kind: "recordOvfKeys", obj: receiver, shapeId: source.shapeId, type: keysType, loc }
2080
- : { kind: "dynCheck", value: { kind: "libCall", fn: "dyn.objKeys", args: [receiver], type: DYN, loc }, type: keysType, loc }, loc }, {
2431
+ body.push({
2432
+ kind: "varDecl",
2433
+ localId: "keys.0",
2434
+ init: source.shape
2435
+ ? {
2436
+ kind: "recordOvfKeys",
2437
+ obj: receiver,
2438
+ shapeId: source.shapeId,
2439
+ type: keysType,
2440
+ loc,
2441
+ }
2442
+ : {
2443
+ kind: "dynCheck",
2444
+ value: { kind: "libCall", fn: "dyn.objKeys", args: [receiver], type: DYN, loc },
2445
+ type: keysType,
2446
+ loc,
2447
+ },
2448
+ loc,
2449
+ }, {
2081
2450
  kind: "for",
2082
2451
  init: { kind: "varDecl", localId: "index.0", init: numLit(0, loc), loc },
2083
- cond: { kind: "bin", op: "<", left: index, right: { kind: "arrIntrinsic", method: "length", receiver: keys, args: [], type: F64, loc }, type: BOOL, loc },
2084
- update: { kind: "assign", localId: "index.0", value: { kind: "bin", op: "+", left: index, right: numLit(1, loc), type: F64, loc }, loc },
2452
+ cond: {
2453
+ kind: "bin",
2454
+ op: "<",
2455
+ left: index,
2456
+ right: {
2457
+ kind: "arrIntrinsic",
2458
+ method: "length",
2459
+ receiver: keys,
2460
+ args: [],
2461
+ type: F64,
2462
+ loc,
2463
+ },
2464
+ type: BOOL,
2465
+ loc,
2466
+ },
2467
+ update: {
2468
+ kind: "assign",
2469
+ localId: "index.0",
2470
+ value: { kind: "bin", op: "+", left: index, right: numLit(1, loc), type: F64, loc },
2471
+ loc,
2472
+ },
2085
2473
  body: [
2086
- { kind: "varDecl", localId: "key.0", init: { kind: "arrayGet", arr: keys, index, type: STRING, loc }, loc },
2087
- { kind: "varDecl", localId: "value.0", init: source.shape
2088
- ? { kind: "recordKeyGet", obj: receiver, shapeId: source.shapeId, key: name, overflowOnly: true, type: iv, loc }
2089
- : { kind: "dynKeyGet", value: receiver, key: name, type: DYN, loc }, loc },
2474
+ {
2475
+ kind: "varDecl",
2476
+ localId: "key.0",
2477
+ init: { kind: "arrayGet", arr: keys, index, type: STRING, loc },
2478
+ loc,
2479
+ },
2480
+ {
2481
+ kind: "varDecl",
2482
+ localId: "value.0",
2483
+ init: source.shape
2484
+ ? {
2485
+ kind: "recordKeyGet",
2486
+ obj: receiver,
2487
+ shapeId: source.shapeId,
2488
+ key: name,
2489
+ overflowOnly: true,
2490
+ type: iv,
2491
+ loc,
2492
+ }
2493
+ : { kind: "dynKeyGet", value: receiver, key: name, type: DYN, loc },
2494
+ loc,
2495
+ },
2090
2496
  ...dispatch,
2091
- ], loc,
2497
+ ],
2498
+ loc,
2092
2499
  });
2093
2500
  }
2094
2501
  body.push({ kind: "return", value: destination, loc });
2095
2502
  lowerer.liftedFns.push({
2096
2503
  name: helper,
2097
- params: [{ localId: "out.0", name: "out", type }, { localId: "source.0", name: "source", type: sourceType }],
2098
- returnType: type, locals, body, loc,
2504
+ params: [
2505
+ { localId: "out.0", name: "out", type },
2506
+ { localId: "source.0", name: "source", type: sourceType },
2507
+ ],
2508
+ returnType: type,
2509
+ locals,
2510
+ body,
2511
+ loc,
2099
2512
  });
2100
2513
  // Publish only a fully checked helper: rejected conversions must not
2101
2514
  // leave an entry that a later literal could reuse without a body.
2102
- lowerer.widthHelpers.set(key, helper);
2515
+ lowerer.valueHelpers.set(key, helper);
2103
2516
  }
2104
- stmts.push({ kind: "exprStmt", expr: { kind: "call", callee: helper, args: [outRef, source.value], type, loc }, loc });
2517
+ stmts.push({
2518
+ kind: "exprStmt",
2519
+ expr: { kind: "call", callee: helper, args: [outRef, source.value], type, loc },
2520
+ loc,
2521
+ });
2105
2522
  }
2106
2523
  return { kind: "seqExpr", stmts, result: outRef, type, loc };
2107
2524
  }
@@ -2138,8 +2555,11 @@ export function lowerShorthandValue(lowerer, prop) {
2138
2555
  }
2139
2556
  const sig = lowerer.fnSigsBySymbol.get(resolved);
2140
2557
  const decl = lowerer.checker.declarationsOf(resolved)[0];
2141
- if (sig && decl && ts.isFunctionDeclaration(decl) &&
2142
- (ts.isSourceFile(decl.parent) || (decl.parent !== undefined && lowerer.nsBlocks.get(decl.parent) === "flattened"))) {
2558
+ if (sig &&
2559
+ decl &&
2560
+ ts.isFunctionDeclaration(decl) &&
2561
+ (ts.isSourceFile(decl.parent) ||
2562
+ (decl.parent !== undefined && lowerer.nsBlocks.get(decl.parent) === "flattened"))) {
2143
2563
  lowerer.noteEdge(sig.name);
2144
2564
  const funcType = {
2145
2565
  kind: "func",
@@ -2157,12 +2577,19 @@ export function lowerShorthandValue(lowerer, prop) {
2157
2577
  lowerer.unsupported("SC1090", prop, `generic functions as values (call '${propName.text}' directly)`);
2158
2578
  }
2159
2579
  }
2160
- lowerer.rejectUnresolvedSymbol(symbol ? (symbol.flags & ts.SymbolFlags.Alias ? lowerer.checker.getAliasedSymbol(symbol) : symbol) : null, propName.text, prop, `the reference to '${propName.text}' (a binding form with no lowering)`);
2580
+ lowerer.rejectUnresolvedSymbol(symbol
2581
+ ? symbol.flags & ts.SymbolFlags.Alias
2582
+ ? lowerer.checker.getAliasedSymbol(symbol)
2583
+ : symbol
2584
+ : null, propName.text, prop, `the reference to '${propName.text}' (a binding form with no lowering)`);
2161
2585
  }
2162
2586
  /** Rejects the method's own receiver, including lexical captures in
2163
2587
  * arrows. Nested ordinary functions bind their own ambient receiver. */
2164
2588
  export function rejectThisInObjectMethod(lowerer, node) {
2165
- if (ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) || ts.isAccessor(node))
2589
+ if (ts.isFunctionExpression(node) ||
2590
+ ts.isFunctionDeclaration(node) ||
2591
+ ts.isMethodDeclaration(node) ||
2592
+ ts.isAccessor(node))
2166
2593
  return;
2167
2594
  if (node.kind === ts.SyntaxKind.ThisKeyword) {
2168
2595
  lowerer.unsupported("SC1090", node, "references to 'this' in object literal methods");