@scriptc/compiler 0.2.4 → 0.2.6

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