@scriptc/compiler 0.3.5 → 0.4.0

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 (1243) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +960 -82
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +13 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +6 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +41 -4
  16. package/dist/backend/llvm/alloc.js +138 -7
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/alloc.test.js +30 -1
  19. package/dist/backend/llvm/alloc.test.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  21. package/dist/backend/llvm/array-search.test.js +1 -1
  22. package/dist/backend/llvm/blocks.d.ts +8 -0
  23. package/dist/backend/llvm/blocks.js +43 -1
  24. package/dist/backend/llvm/blocks.js.map +1 -1
  25. package/dist/backend/llvm/blocks.test.js +22 -1
  26. package/dist/backend/llvm/blocks.test.js.map +1 -1
  27. package/dist/backend/llvm/byte-numbers.js +15 -5
  28. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  29. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  30. package/dist/backend/llvm/bytes-alias.js +20 -0
  31. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  32. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  33. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  34. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  35. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  36. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  37. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  38. package/dist/backend/llvm/call-lifetimes.js +50 -1
  39. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  40. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  41. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  42. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  43. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  44. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  45. package/dist/backend/llvm/classes.d.ts +11 -0
  46. package/dist/backend/llvm/classes.js +71 -14
  47. package/dist/backend/llvm/classes.js.map +1 -1
  48. package/dist/backend/llvm/classes.test.js +58 -8
  49. package/dist/backend/llvm/classes.test.js.map +1 -1
  50. package/dist/backend/llvm/common.js +1 -0
  51. package/dist/backend/llvm/common.js.map +1 -1
  52. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  53. package/dist/backend/llvm/constant-callbacks.js +55 -12
  54. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  55. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  56. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  57. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  58. package/dist/backend/llvm/counted-loops.js +37 -0
  59. package/dist/backend/llvm/counted-loops.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.d.ts +12 -3
  61. package/dist/backend/llvm/dense-array-access.js +72 -14
  62. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  63. package/dist/backend/llvm/dense-array-access.test.js +59 -3
  64. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  66. package/dist/backend/llvm/dense-array-loops.js +162 -0
  67. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  68. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  69. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  70. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  71. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  72. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  73. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  74. package/dist/backend/llvm/dyn.d.ts +28 -4
  75. package/dist/backend/llvm/dyn.js +324 -179
  76. package/dist/backend/llvm/dyn.js.map +1 -1
  77. package/dist/backend/llvm/emit-function.d.ts +64 -0
  78. package/dist/backend/llvm/emit-function.js +1190 -0
  79. package/dist/backend/llvm/emit-function.js.map +1 -0
  80. package/dist/backend/llvm/emit-module.d.ts +24 -0
  81. package/dist/backend/llvm/emit-module.js +1535 -0
  82. package/dist/backend/llvm/emit-module.js.map +1 -0
  83. package/dist/backend/llvm/emit-statements.d.ts +58 -0
  84. package/dist/backend/llvm/emit-statements.js +1964 -0
  85. package/dist/backend/llvm/emit-statements.js.map +1 -0
  86. package/dist/backend/llvm/emitter.d.ts +576 -268
  87. package/dist/backend/llvm/emitter.js +801 -4447
  88. package/dist/backend/llvm/emitter.js.map +1 -1
  89. package/dist/backend/llvm/emitter.test.js +57 -3
  90. package/dist/backend/llvm/emitter.test.js.map +1 -1
  91. package/dist/backend/llvm/expr-async.js +73 -46
  92. package/dist/backend/llvm/expr-async.js.map +1 -1
  93. package/dist/backend/llvm/expr-async.test.js +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  95. package/dist/backend/llvm/expr-bytes.js +76 -29
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  98. package/dist/backend/llvm/expr-callbacks.js +48 -11
  99. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  100. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  101. package/dist/backend/llvm/expr-calls.js +71 -53
  102. package/dist/backend/llvm/expr-calls.js.map +1 -1
  103. package/dist/backend/llvm/expr-calls.test.js +1 -1
  104. package/dist/backend/llvm/expr-containers.js +39 -15
  105. package/dist/backend/llvm/expr-containers.js.map +1 -1
  106. package/dist/backend/llvm/expr-control.js +16 -16
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dispatch.js +1 -0
  109. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  110. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  111. package/dist/backend/llvm/expr-dynamic.js +92 -63
  112. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  113. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  114. package/dist/backend/llvm/expr-primitives.js +132 -25
  115. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  116. package/dist/backend/llvm/expr-primitives.test.js +2 -2
  117. package/dist/backend/llvm/expr-records.d.ts +1 -1
  118. package/dist/backend/llvm/expr-records.js +32 -11
  119. package/dist/backend/llvm/expr-records.js.map +1 -1
  120. package/dist/backend/llvm/expr-stream-bridges.js +54 -12
  121. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  122. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  123. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  124. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  125. package/dist/backend/llvm/int32-abi.test.js +2 -2
  126. package/dist/backend/llvm/integer-clones.test.js +3 -3
  127. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  128. package/dist/backend/llvm/integer-remainder.js +156 -22
  129. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  130. package/dist/backend/llvm/intern-tables.test.js +1 -1
  131. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  132. package/dist/backend/llvm/jsval-encoding.js +20 -0
  133. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  134. package/dist/backend/llvm/jsval.d.ts +12 -0
  135. package/dist/backend/llvm/jsval.js +488 -0
  136. package/dist/backend/llvm/jsval.js.map +1 -0
  137. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  138. package/dist/backend/llvm/lazy-captures.js +39 -17
  139. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  140. package/dist/backend/llvm/lib-abi.js +1 -1
  141. package/dist/backend/llvm/lib-abi.js.map +1 -1
  142. package/dist/backend/llvm/lib-connect.js +1 -1
  143. package/dist/backend/llvm/lib-connect.js.map +1 -1
  144. package/dist/backend/llvm/lib-datagram.js +14 -8
  145. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  146. package/dist/backend/llvm/lib-dispatch.js +217 -24
  147. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  148. package/dist/backend/llvm/lib-filesystem.js +102 -13
  149. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  150. package/dist/backend/llvm/lib-http2.js +3 -3
  151. package/dist/backend/llvm/lib-http2.js.map +1 -1
  152. package/dist/backend/llvm/lib-lookup.js +2 -2
  153. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  154. package/dist/backend/llvm/lib-network.js +77 -25
  155. package/dist/backend/llvm/lib-network.js.map +1 -1
  156. package/dist/backend/llvm/lib-process.js +100 -50
  157. package/dist/backend/llvm/lib-process.js.map +1 -1
  158. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  159. package/dist/backend/llvm/lib-shared.js +229 -5
  160. package/dist/backend/llvm/lib-shared.js.map +1 -1
  161. package/dist/backend/llvm/lib-stream.js +46 -16
  162. package/dist/backend/llvm/lib-stream.js.map +1 -1
  163. package/dist/backend/llvm/lib-test.js +57 -8
  164. package/dist/backend/llvm/lib-test.js.map +1 -1
  165. package/dist/backend/llvm/lib-tls.js +4 -9
  166. package/dist/backend/llvm/lib-tls.js.map +1 -1
  167. package/dist/backend/llvm/local-array-reads.js +2 -2
  168. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  169. package/dist/backend/llvm/local-extents.d.ts +19 -0
  170. package/dist/backend/llvm/local-extents.js +169 -0
  171. package/dist/backend/llvm/local-extents.js.map +1 -0
  172. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  173. package/dist/backend/llvm/local-extents.test.js +92 -0
  174. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  175. package/dist/backend/llvm/local-union-storage.js +7 -7
  176. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  177. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  178. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  179. package/dist/backend/llvm/map-number-lookup.js +2 -2
  180. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  181. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  182. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  183. package/dist/backend/llvm/narrow-guards.js +151 -0
  184. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  185. package/dist/backend/llvm/nullable-unions.d.ts +70 -9
  186. package/dist/backend/llvm/nullable-unions.js +105 -6
  187. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  188. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  189. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  190. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  191. package/dist/backend/llvm/publish.d.ts +4 -0
  192. package/dist/backend/llvm/publish.js +14 -2
  193. package/dist/backend/llvm/publish.js.map +1 -1
  194. package/dist/backend/llvm/publish.test.js +1 -1
  195. package/dist/backend/llvm/receivers.d.ts +31 -0
  196. package/dist/backend/llvm/receivers.js +395 -0
  197. package/dist/backend/llvm/receivers.js.map +1 -0
  198. package/dist/backend/llvm/record-results.d.ts +13 -2
  199. package/dist/backend/llvm/record-results.js +66 -6
  200. package/dist/backend/llvm/record-results.js.map +1 -1
  201. package/dist/backend/llvm/reference-effects.js +9 -0
  202. package/dist/backend/llvm/reference-effects.js.map +1 -1
  203. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  204. package/dist/backend/llvm/reference-writes.js +143 -6
  205. package/dist/backend/llvm/reference-writes.js.map +1 -1
  206. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  207. package/dist/backend/llvm/reference-writes.test.js +88 -0
  208. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  209. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  210. package/dist/backend/llvm/regex-matchers.js +33 -0
  211. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  212. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  213. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  214. package/dist/backend/llvm/regions.d.ts +1 -1
  215. package/dist/backend/llvm/regions.js +9 -6
  216. package/dist/backend/llvm/regions.js.map +1 -1
  217. package/dist/backend/llvm/regions.test.js +1 -1
  218. package/dist/backend/llvm/shapes.d.ts +69 -43
  219. package/dist/backend/llvm/shapes.js +285 -21
  220. package/dist/backend/llvm/shapes.js.map +1 -1
  221. package/dist/backend/llvm/shapes.test.js +37 -3
  222. package/dist/backend/llvm/shapes.test.js.map +1 -1
  223. package/dist/backend/llvm/speculative-integers.d.ts +74 -0
  224. package/dist/backend/llvm/speculative-integers.js +571 -0
  225. package/dist/backend/llvm/speculative-integers.js.map +1 -0
  226. package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
  227. package/dist/backend/llvm/speculative-integers.test.js +148 -0
  228. package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
  229. package/dist/backend/llvm/split-loops.js +2 -2
  230. package/dist/backend/llvm/split-loops.js.map +1 -1
  231. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  232. package/dist/backend/llvm/stack-objects.js +133 -10
  233. package/dist/backend/llvm/stack-objects.js.map +1 -1
  234. package/dist/backend/llvm/stack-objects.test.js +55 -1
  235. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  236. package/dist/backend/llvm/stack-unions.test.js +1 -1
  237. package/dist/backend/llvm/string-construction.test.js +1 -1
  238. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  239. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  240. package/dist/backend/llvm/string-slices.d.ts +25 -0
  241. package/dist/backend/llvm/string-slices.js +207 -1
  242. package/dist/backend/llvm/string-slices.js.map +1 -1
  243. package/dist/backend/llvm/string-slices.test.js +139 -2
  244. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  245. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  246. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  247. package/dist/backend/llvm/thread-slots.js +142 -0
  248. package/dist/backend/llvm/thread-slots.js.map +1 -0
  249. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  250. package/dist/backend/llvm/thread-slots.test.js +110 -0
  251. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  252. package/dist/backend/llvm/union-repr.d.ts +7 -7
  253. package/dist/backend/llvm/union-repr.js +18 -2
  254. package/dist/backend/llvm/union-repr.js.map +1 -1
  255. package/dist/backend/llvm/union-retype.test.js +17 -3
  256. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  257. package/dist/backend/llvm/walkers.d.ts +2 -2
  258. package/dist/backend/llvm/walkers.js +51 -26
  259. package/dist/backend/llvm/walkers.js.map +1 -1
  260. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  261. package/dist/backend/llvm/wasm-modules.js +66 -0
  262. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  263. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  264. package/dist/backend/llvm/wrapping-sums.js +11 -3
  265. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  266. package/dist/backend/mangle.d.ts +7 -0
  267. package/dist/backend/mangle.js +11 -0
  268. package/dist/backend/mangle.js.map +1 -1
  269. package/dist/backend/may-throw.d.ts +3 -0
  270. package/dist/backend/may-throw.js +6 -2
  271. package/dist/backend/may-throw.js.map +1 -1
  272. package/dist/backend/may-throw.test.js +1 -1
  273. package/dist/backend/native/contracts.d.ts +37 -0
  274. package/dist/backend/native/executable.js +192 -134
  275. package/dist/backend/native/executable.js.map +1 -1
  276. package/dist/backend/native/library.js +1 -0
  277. package/dist/backend/native/library.js.map +1 -1
  278. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  279. package/dist/backend/native/runtime-inputs.js +2 -0
  280. package/dist/backend/native/runtime-inputs.js.map +1 -1
  281. package/dist/backend/native-link-info-core.d.ts +30 -0
  282. package/dist/backend/native-link-info-core.js.map +1 -1
  283. package/dist/backend/publication.test.js +1 -1
  284. package/dist/backend/runtime-pack-core.d.ts +9 -1
  285. package/dist/backend/runtime-pack-core.js +10 -1
  286. package/dist/backend/runtime-pack-core.js.map +1 -1
  287. package/dist/backend/runtime-pack-native.js +1 -1
  288. package/dist/backend/runtime-pack-native.js.map +1 -1
  289. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  290. package/dist/backend/runtime-pack-native.test.js +31 -0
  291. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  292. package/dist/backend/runtime-pack-targets.test.js +5 -0
  293. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  294. package/dist/backend/runtime-pack.d.ts +7 -3
  295. package/dist/backend/runtime-pack.js +12 -6
  296. package/dist/backend/runtime-pack.js.map +1 -1
  297. package/dist/backend/runtime-pack.test.js +20 -6
  298. package/dist/backend/runtime-pack.test.js.map +1 -1
  299. package/dist/backend/stack-observations.d.ts +22 -0
  300. package/dist/backend/stack-observations.js +382 -0
  301. package/dist/backend/stack-observations.js.map +1 -0
  302. package/dist/backend/stack-observations.test.d.ts +1 -0
  303. package/dist/backend/stack-observations.test.js +233 -0
  304. package/dist/backend/stack-observations.test.js.map +1 -0
  305. package/dist/backend/target-diagnostics.js +8 -0
  306. package/dist/backend/target-diagnostics.js.map +1 -1
  307. package/dist/backend/target-diagnostics.test.js +1 -1
  308. package/dist/backend/warm-cache.js +5 -0
  309. package/dist/backend/warm-cache.js.map +1 -1
  310. package/dist/backend/young-nursery.d.ts +7 -0
  311. package/dist/backend/young-nursery.js +10 -0
  312. package/dist/backend/young-nursery.js.map +1 -0
  313. package/dist/cli/command.js +44 -4
  314. package/dist/cli/command.js.map +1 -1
  315. package/dist/cli/usage.d.ts +11 -1
  316. package/dist/cli/usage.js +20 -1
  317. package/dist/cli/usage.js.map +1 -1
  318. package/dist/compat/fetch-profile.js +10 -1
  319. package/dist/compat/fetch-profile.js.map +1 -1
  320. package/dist/compile-types.d.ts +13 -0
  321. package/dist/contracts/check.js +25 -6
  322. package/dist/contracts/check.js.map +1 -1
  323. package/dist/contracts/int32-elements.d.ts +115 -0
  324. package/dist/contracts/int32-elements.js +1179 -0
  325. package/dist/contracts/int32-elements.js.map +1 -0
  326. package/dist/coverage/report.d.ts +16 -0
  327. package/dist/coverage/report.js +182 -1
  328. package/dist/coverage/report.js.map +1 -1
  329. package/dist/coverage/surface-manifest.js +19 -6
  330. package/dist/coverage/surface-manifest.js.map +1 -1
  331. package/dist/coverage/verdict-cache.d.ts +2 -0
  332. package/dist/coverage/verdict-cache.js +12 -0
  333. package/dist/coverage/verdict-cache.js.map +1 -1
  334. package/dist/coverage/verdict-cache.test.js +2 -1
  335. package/dist/coverage/verdict-cache.test.js.map +1 -1
  336. package/dist/diagnostics/diagnostic.d.ts +11 -7
  337. package/dist/diagnostics/diagnostic.js +35 -23
  338. package/dist/diagnostics/diagnostic.js.map +1 -1
  339. package/dist/diagnostics/envelope.d.ts +39 -2
  340. package/dist/diagnostics/envelope.js.map +1 -1
  341. package/dist/diagnostics/render.d.ts +7 -0
  342. package/dist/diagnostics/render.js +50 -13
  343. package/dist/diagnostics/render.js.map +1 -1
  344. package/dist/diagnostics/render.test.d.ts +1 -0
  345. package/dist/diagnostics/render.test.js +49 -0
  346. package/dist/diagnostics/render.test.js.map +1 -0
  347. package/dist/executable/executable-cache.d.ts +17 -0
  348. package/dist/executable/executable-cache.js +13 -1
  349. package/dist/executable/executable-cache.js.map +1 -1
  350. package/dist/executable/executable-cache.test.js +7 -1
  351. package/dist/executable/executable-cache.test.js.map +1 -1
  352. package/dist/executable/prepare.js +2 -1
  353. package/dist/executable/prepare.js.map +1 -1
  354. package/dist/frontend/analysis.js +6 -1
  355. package/dist/frontend/analysis.js.map +1 -1
  356. package/dist/frontend/builtin-modules.d.ts +16 -2
  357. package/dist/frontend/builtin-modules.js +40 -7
  358. package/dist/frontend/builtin-modules.js.map +1 -1
  359. package/dist/frontend/cjs-syntax.js +52 -51
  360. package/dist/frontend/cjs-syntax.js.map +1 -1
  361. package/dist/frontend/contract-types.d.ts +3 -0
  362. package/dist/frontend/contract-types.js +36 -7
  363. package/dist/frontend/contract-types.js.map +1 -1
  364. package/dist/frontend/experimental-import.d.ts +5 -1
  365. package/dist/frontend/experimental-import.js +26 -7
  366. package/dist/frontend/experimental-import.js.map +1 -1
  367. package/dist/frontend/fork-target.js +20 -22
  368. package/dist/frontend/fork-target.js.map +1 -1
  369. package/dist/frontend/fork-target.test.js +2 -1
  370. package/dist/frontend/fork-target.test.js.map +1 -1
  371. package/dist/frontend/function-completion.js +6 -6
  372. package/dist/frontend/function-completion.js.map +1 -1
  373. package/dist/frontend/helper-tokens.js +15 -3
  374. package/dist/frontend/helper-tokens.js.map +1 -1
  375. package/dist/frontend/helper-tokens.test.js +7 -1
  376. package/dist/frontend/helper-tokens.test.js.map +1 -1
  377. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  378. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  379. package/dist/frontend/input-tracker.d.ts +3 -0
  380. package/dist/frontend/input-tracker.js +32 -3
  381. package/dist/frontend/input-tracker.js.map +1 -1
  382. package/dist/frontend/lib-contract.js +36 -32
  383. package/dist/frontend/lib-contract.js.map +1 -1
  384. package/dist/frontend/lib-exports.js +3 -3
  385. package/dist/frontend/lib-exports.js.map +1 -1
  386. package/dist/frontend/lowering/array-values.d.ts +8 -3
  387. package/dist/frontend/lowering/array-values.js +60 -11
  388. package/dist/frontend/lowering/array-values.js.map +1 -1
  389. package/dist/frontend/lowering/assert-instances.js +4 -4
  390. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  391. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  392. package/dist/frontend/lowering/assertion-identity.js +70 -0
  393. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  394. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  395. package/dist/frontend/lowering/assertion-members.js +185 -0
  396. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  397. package/dist/frontend/lowering/binding-analysis.js +27 -20
  398. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  399. package/dist/frontend/lowering/builtin-calls.js +72 -4
  400. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  401. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  402. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  403. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  404. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  405. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  406. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  407. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  408. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  409. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  410. package/dist/frontend/lowering/builtins/blob.js +8 -6
  411. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  412. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
  413. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
  414. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  415. package/dist/frontend/lowering/builtins/callable-aliases.js +45 -6
  416. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  417. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  418. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  419. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  420. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  421. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  422. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  423. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  424. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  425. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  426. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  428. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  429. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  430. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  431. package/dist/frontend/lowering/builtins/compression.js +230 -52
  432. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  433. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  434. package/dist/frontend/lowering/builtins/constants.js +28 -7
  435. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  436. package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
  437. package/dist/frontend/lowering/builtins/crypto.js +223 -38
  438. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  439. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  440. package/dist/frontend/lowering/builtins/dates.js +92 -16
  441. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  442. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  443. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  444. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  445. package/dist/frontend/lowering/builtins/environment.js +3 -3
  446. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  447. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  448. package/dist/frontend/lowering/builtins/errors.js +174 -6
  449. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  450. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +4 -0
  451. package/dist/frontend/lowering/builtins/filesystem-calls.js +136 -113
  452. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  453. package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
  454. package/dist/frontend/lowering/builtins/filesystem.js +213 -76
  455. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  457. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  459. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
  461. package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
  462. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  464. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  465. package/dist/frontend/lowering/builtins/json.js +232 -24
  466. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  468. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  470. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  471. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/module-calls.js +67 -46
  473. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  475. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  476. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  478. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  479. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  481. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  482. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  483. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  484. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  485. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  486. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  487. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  488. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  489. package/dist/frontend/lowering/builtins/performance.js +259 -8
  490. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  491. package/dist/frontend/lowering/builtins/process.d.ts +32 -1
  492. package/dist/frontend/lowering/builtins/process.js +468 -99
  493. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  494. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  495. package/dist/frontend/lowering/builtins/promises.js +326 -43
  496. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  497. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
  498. package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
  499. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  500. package/dist/frontend/lowering/builtins/properties.js +37 -1
  501. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  502. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  503. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  504. package/dist/frontend/lowering/builtins/readline.d.ts +55 -13
  505. package/dist/frontend/lowering/builtins/readline.js +931 -69
  506. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  508. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/reflection.js +16 -14
  510. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  512. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  513. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  514. package/dist/frontend/lowering/builtins/strings.js +101 -12
  515. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  516. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  517. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  518. package/dist/frontend/lowering/builtins/timers.js +75 -30
  519. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  521. package/dist/frontend/lowering/builtins/url.js +120 -17
  522. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  523. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  524. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  526. package/dist/frontend/lowering/builtins/v8.js +105 -0
  527. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  529. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  530. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  532. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  533. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  534. package/dist/frontend/lowering/builtins/workers.d.ts +16 -0
  535. package/dist/frontend/lowering/builtins/workers.js +246 -3
  536. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  537. package/dist/frontend/lowering/call-arguments.js +69 -14
  538. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  539. package/dist/frontend/lowering/call-signatures.d.ts +19 -1
  540. package/dist/frontend/lowering/call-signatures.js +254 -47
  541. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  542. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  543. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  544. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  545. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  546. package/dist/frontend/lowering/cjs-exports-object.js +528 -0
  547. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  548. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  549. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  550. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  551. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  552. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  553. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  554. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  555. package/dist/frontend/lowering/class-attributes.js +378 -0
  556. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  557. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  558. package/dist/frontend/lowering/class-callbacks.js +21 -10
  559. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  560. package/dist/frontend/lowering/class-construction.js +49 -4
  561. package/dist/frontend/lowering/class-construction.js.map +1 -1
  562. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  563. package/dist/frontend/lowering/class-descriptors.js +8 -8
  564. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  565. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  566. package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
  567. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  568. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  569. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  570. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  571. package/dist/frontend/lowering/class-iterables.js +31 -0
  572. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  573. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  574. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  575. package/dist/frontend/lowering/class-method-values.js +56 -10
  576. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  577. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  578. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  579. package/dist/frontend/lowering/class-protocols.d.ts +55 -0
  580. package/dist/frontend/lowering/class-protocols.js +738 -22
  581. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  582. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  583. package/dist/frontend/lowering/class-prototypes.js +80 -18
  584. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  585. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  586. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  587. package/dist/frontend/lowering/class-static-data.js +2 -2
  588. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  589. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  590. package/dist/frontend/lowering/class-to-primitive.js +261 -0
  591. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  592. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  593. package/dist/frontend/lowering/class-unions.js +102 -1
  594. package/dist/frontend/lowering/class-unions.js.map +1 -1
  595. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  596. package/dist/frontend/lowering/code-generation.js +127 -0
  597. package/dist/frontend/lowering/code-generation.js.map +1 -0
  598. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  599. package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
  600. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  601. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  602. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  603. package/dist/frontend/lowering/coercions/structural.js +35 -3
  604. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  605. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  606. package/dist/frontend/lowering/coercions/unions.js +57 -1
  607. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  608. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  609. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  610. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  611. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  612. package/dist/frontend/lowering/construction-escapes.js +8 -8
  613. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  614. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  615. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  616. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  617. package/dist/frontend/lowering/constructor-returns.js +477 -0
  618. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  619. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  620. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  621. package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
  622. package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
  623. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  624. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  625. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  626. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  627. package/dist/frontend/lowering/containers/array-construction.js +51 -13
  628. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  629. package/dist/frontend/lowering/containers/array-from-async.d.ts +19 -0
  630. package/dist/frontend/lowering/containers/array-from-async.js +427 -0
  631. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
  632. package/dist/frontend/lowering/containers/array-methods.js +89 -77
  633. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  634. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  635. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  636. package/dist/frontend/lowering/containers/bytes.js +161 -101
  637. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  638. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  639. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  640. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  641. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  642. package/dist/frontend/lowering/containers/collection-grouping.js +219 -27
  643. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  644. package/dist/frontend/lowering/containers/collection-methods.js +81 -48
  645. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  646. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  647. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  648. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  649. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  650. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  651. package/dist/frontend/lowering/containers/for-of.js +19 -19
  652. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  653. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  654. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  655. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  656. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  657. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  658. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  659. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  660. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  661. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  662. package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
  663. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  664. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  665. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  666. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
  667. package/dist/frontend/lowering/cycle-initialization.js +39 -0
  668. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  669. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  670. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  671. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  672. package/dist/frontend/lowering/devirtualize.js +27 -7
  673. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  674. package/dist/frontend/lowering/divergences.d.ts +0 -5
  675. package/dist/frontend/lowering/divergences.js +238 -128
  676. package/dist/frontend/lowering/divergences.js.map +1 -1
  677. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  678. package/dist/frontend/lowering/dyn-streams.js +257 -0
  679. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  680. package/dist/frontend/lowering/error-methods.js +4 -1
  681. package/dist/frontend/lowering/error-methods.js.map +1 -1
  682. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  683. package/dist/frontend/lowering/error-name-order.js +93 -0
  684. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  685. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  686. package/dist/frontend/lowering/expressions/array-literals.js +703 -0
  687. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  688. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  689. package/dist/frontend/lowering/expressions/binary.js +2483 -0
  690. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  691. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  692. package/dist/frontend/lowering/expressions/element-access.js +1797 -0
  693. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  694. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  695. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  696. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  697. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  698. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  699. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  700. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  701. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  702. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
  703. package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
  704. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  705. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  706. package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
  707. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  708. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  709. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  710. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  711. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  712. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  713. package/dist/frontend/lowering/expressions/object-literals.js +253 -85
  714. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  715. package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
  716. package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
  717. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  718. package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
  719. package/dist/frontend/lowering/expressions/property-access.js +3544 -0
  720. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  721. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  722. package/dist/frontend/lowering/expressions/relational.js +1679 -0
  723. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  724. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  725. package/dist/frontend/lowering/expressions/typeof.js +538 -0
  726. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  727. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  728. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  729. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  730. package/dist/frontend/lowering/expressions/updates.js +780 -0
  731. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  732. package/dist/frontend/lowering/function-context.d.ts +10 -0
  733. package/dist/frontend/lowering/function-context.js +11 -1
  734. package/dist/frontend/lowering/function-context.js.map +1 -1
  735. package/dist/frontend/lowering/function-returns.js +52 -28
  736. package/dist/frontend/lowering/function-returns.js.map +1 -1
  737. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  738. package/dist/frontend/lowering/general-streams.js +108 -0
  739. package/dist/frontend/lowering/general-streams.js.map +1 -0
  740. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  741. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  742. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  743. package/dist/frontend/lowering/generic-functions.d.ts +39 -0
  744. package/dist/frontend/lowering/generic-functions.js +393 -75
  745. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  746. package/dist/frontend/lowering/import-meta.js +2 -2
  747. package/dist/frontend/lowering/import-meta.js.map +1 -1
  748. package/dist/frontend/lowering/intern-tables.js +10 -9
  749. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  750. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  751. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  752. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  753. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  754. package/dist/frontend/lowering/js-class-fields.js +170 -0
  755. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  756. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  757. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  758. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  759. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  760. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  761. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  762. package/dist/frontend/lowering/json-require.d.ts +22 -0
  763. package/dist/frontend/lowering/json-require.js +131 -0
  764. package/dist/frontend/lowering/json-require.js.map +1 -0
  765. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  766. package/dist/frontend/lowering/key-order-witness.js +641 -0
  767. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  768. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  769. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  770. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  771. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  772. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  773. package/dist/frontend/lowering/lower-assert.js +61 -60
  774. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  775. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  776. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  777. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  778. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  779. package/dist/frontend/lowering/lower-builtin-values.js +32 -3
  780. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  781. package/dist/frontend/lowering/lower-calls.js +1298 -452
  782. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  783. package/dist/frontend/lowering/lower-classes.d.ts +50 -3
  784. package/dist/frontend/lowering/lower-classes.js +1499 -456
  785. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  786. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  787. package/dist/frontend/lowering/lower-comptime.js +111 -13
  788. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  789. package/dist/frontend/lowering/lower-console.js +13 -11
  790. package/dist/frontend/lowering/lower-console.js.map +1 -1
  791. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  792. package/dist/frontend/lowering/lower-dgram.js +179 -8
  793. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  794. package/dist/frontend/lowering/lower-enums.js +113 -14
  795. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  796. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  797. package/dist/frontend/lowering/lower-event-emitter.js +268 -71
  798. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  799. package/dist/frontend/lowering/lower-event-target.js +2 -2
  800. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  801. package/dist/frontend/lowering/lower-expando.js +17 -13
  802. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  803. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  804. package/dist/frontend/lowering/lower-exprs.js +1493 -12407
  805. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  806. package/dist/frontend/lowering/lower-functions.js +68 -22
  807. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  808. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  809. package/dist/frontend/lowering/lower-generators.js +29 -16
  810. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  811. package/dist/frontend/lowering/lower-global-value.js +5 -1
  812. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  813. package/dist/frontend/lowering/lower-inspect.js +354 -99
  814. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  815. package/dist/frontend/lowering/lower-mixins.js +23 -20
  816. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  817. package/dist/frontend/lowering/lower-mock.d.ts +19 -2
  818. package/dist/frontend/lowering/lower-mock.js +557 -74
  819. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  820. package/dist/frontend/lowering/lower-modules.js +268 -61
  821. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  822. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  823. package/dist/frontend/lowering/lower-namespaces.js +45 -33
  824. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  825. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  826. package/dist/frontend/lowering/lower-node-module.js +147 -14
  827. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  828. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  829. package/dist/frontend/lowering/lower-server.js +638 -105
  830. package/dist/frontend/lowering/lower-server.js.map +1 -1
  831. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  832. package/dist/frontend/lowering/lower-stdlib.js +151 -109
  833. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  834. package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
  835. package/dist/frontend/lowering/lower-stmts.js +1589 -398
  836. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  837. package/dist/frontend/lowering/lower-stream.d.ts +4 -3
  838. package/dist/frontend/lowering/lower-stream.js +714 -75
  839. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  840. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  841. package/dist/frontend/lowering/lower-test.js +574 -100
  842. package/dist/frontend/lowering/lower-test.js.map +1 -1
  843. package/dist/frontend/lowering/lower-timers.js +80 -32
  844. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  845. package/dist/frontend/lowering/lower-url.js +1 -1
  846. package/dist/frontend/lowering/lower-url.js.map +1 -1
  847. package/dist/frontend/lowering/lowerer.d.ts +409 -26
  848. package/dist/frontend/lowering/lowerer.js +1918 -305
  849. package/dist/frontend/lowering/lowerer.js.map +1 -1
  850. package/dist/frontend/lowering/lowerer.test.js +10 -4
  851. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  852. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  853. package/dist/frontend/lowering/maybe-promise.js +249 -0
  854. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  855. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  856. package/dist/frontend/lowering/module-member-this.js +262 -0
  857. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  858. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  859. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  860. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  861. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  862. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  863. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  864. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  865. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  866. package/dist/frontend/lowering/native-ffi.js +11 -11
  867. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  868. package/dist/frontend/lowering/null-prototype.d.ts +13 -0
  869. package/dist/frontend/lowering/null-prototype.js +33 -0
  870. package/dist/frontend/lowering/null-prototype.js.map +1 -0
  871. package/dist/frontend/lowering/object-factory-new.js +6 -8
  872. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  873. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  874. package/dist/frontend/lowering/private-brands.js +265 -0
  875. package/dist/frontend/lowering/private-brands.js.map +1 -0
  876. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  877. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  878. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  879. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  880. package/dist/frontend/lowering/require-initialization.js +246 -0
  881. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  882. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  883. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  884. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  885. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  886. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  887. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  888. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  889. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  890. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  891. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  892. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  893. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  894. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  895. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  896. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  897. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  898. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  899. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  900. package/dist/frontend/lowering/split-consumers.js +4 -4
  901. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  902. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  903. package/dist/frontend/lowering/static-function-names.js +212 -0
  904. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  905. package/dist/frontend/lowering/static-this.js +6 -6
  906. package/dist/frontend/lowering/static-this.js.map +1 -1
  907. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  908. package/dist/frontend/lowering/strict-mode.js +31 -0
  909. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  910. package/dist/frontend/lowering/string-index-bounds.js +10 -10
  911. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  912. package/dist/frontend/lowering/string-index.d.ts +12 -0
  913. package/dist/frontend/lowering/string-index.js +72 -1
  914. package/dist/frontend/lowering/string-index.js.map +1 -1
  915. package/dist/frontend/lowering/surfaces.d.ts +15 -6
  916. package/dist/frontend/lowering/surfaces.js +278 -45
  917. package/dist/frontend/lowering/surfaces.js.map +1 -1
  918. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  919. package/dist/frontend/lowering/symbol-fields.js +204 -36
  920. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  921. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  922. package/dist/frontend/lowering/symbol-methods.js +24 -6
  923. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  924. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  925. package/dist/frontend/lowering/thread-slots.js +208 -0
  926. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  927. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  928. package/dist/frontend/lowering/typed-arguments.js +472 -0
  929. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  930. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  931. package/dist/frontend/lowering/union-retag.js +27 -0
  932. package/dist/frontend/lowering/union-retag.js.map +1 -1
  933. package/dist/frontend/lowering/union-retag.test.js +24 -1
  934. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  935. package/dist/frontend/lowering/var-hoisting.js +6 -6
  936. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  937. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  938. package/dist/frontend/mock-shapes.d.ts +5 -0
  939. package/dist/frontend/mock-shapes.js +39 -7
  940. package/dist/frontend/mock-shapes.js.map +1 -1
  941. package/dist/frontend/module-source-candidates.js +1 -1
  942. package/dist/frontend/module-source-candidates.js.map +1 -1
  943. package/dist/frontend/module-source-candidates.test.js +2 -1
  944. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  945. package/dist/frontend/module-syntax.js +8 -8
  946. package/dist/frontend/module-syntax.js.map +1 -1
  947. package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
  948. package/dist/frontend/npm-static-bundled-chunks.js +810 -0
  949. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  950. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  951. package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
  952. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  953. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  954. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  955. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  956. package/dist/frontend/npm-static-bundled-esm.js +768 -0
  957. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  958. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  959. package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
  960. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  961. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  962. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  963. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  964. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  965. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  966. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  967. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  968. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  969. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  970. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  971. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  972. package/dist/frontend/npm-static-prune.js +36 -24
  973. package/dist/frontend/npm-static-prune.js.map +1 -1
  974. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  975. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  976. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  977. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  978. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  979. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  980. package/dist/frontend/npm-static-subtyping.js +7 -9
  981. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  982. package/dist/frontend/npm-static.d.ts +17 -1
  983. package/dist/frontend/npm-static.js +167 -16
  984. package/dist/frontend/npm-static.js.map +1 -1
  985. package/dist/frontend/npm-static.test.js +22 -1
  986. package/dist/frontend/npm-static.test.js.map +1 -1
  987. package/dist/frontend/pipeline.js +164 -26
  988. package/dist/frontend/pipeline.js.map +1 -1
  989. package/dist/frontend/pipeline.test.js +22 -1
  990. package/dist/frontend/pipeline.test.js.map +1 -1
  991. package/dist/frontend/program-analysis.d.ts +6 -1
  992. package/dist/frontend/program-analysis.js +7 -0
  993. package/dist/frontend/program-analysis.js.map +1 -1
  994. package/dist/frontend/program.d.ts +92 -2
  995. package/dist/frontend/program.js +1557 -254
  996. package/dist/frontend/program.js.map +1 -1
  997. package/dist/frontend/program.test.js +76 -6
  998. package/dist/frontend/program.test.js.map +1 -1
  999. package/dist/frontend/resolve.js +36 -2
  1000. package/dist/frontend/resolve.js.map +1 -1
  1001. package/dist/frontend/resolve.test.js +49 -0
  1002. package/dist/frontend/resolve.test.js.map +1 -1
  1003. package/dist/frontend/services.d.ts +20 -1
  1004. package/dist/frontend/services.js +40 -3
  1005. package/dist/frontend/services.js.map +1 -1
  1006. package/dist/frontend/services.test.js +2 -1
  1007. package/dist/frontend/services.test.js.map +1 -1
  1008. package/dist/frontend/threads-import.js +1 -1
  1009. package/dist/frontend/threads-import.js.map +1 -1
  1010. package/dist/frontend/tier-analysis.d.ts +71 -0
  1011. package/dist/frontend/tier-analysis.js +522 -0
  1012. package/dist/frontend/tier-analysis.js.map +1 -0
  1013. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1014. package/dist/frontend/ts7/api-conformance.js +7 -0
  1015. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1016. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1017. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1018. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1019. package/dist/frontend/ts7/ast-node.js +64 -18
  1020. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1021. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1022. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1023. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1024. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1025. package/dist/frontend/ts7/ast.d.ts +1 -0
  1026. package/dist/frontend/ts7/ast.js +3 -2
  1027. package/dist/frontend/ts7/ast.js.map +1 -1
  1028. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1029. package/dist/frontend/ts7/checker-backend.js +88 -0
  1030. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1031. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1032. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1033. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1034. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1035. package/dist/frontend/ts7/checker-cache.js +0 -6
  1036. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1037. package/dist/frontend/ts7/checker.d.ts +18 -11
  1038. package/dist/frontend/ts7/checker.js +42 -55
  1039. package/dist/frontend/ts7/checker.js.map +1 -1
  1040. package/dist/frontend/ts7/checker.test.js +10 -7
  1041. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1042. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1043. package/dist/frontend/ts7/diagnostic.js +22 -0
  1044. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1045. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1046. package/dist/frontend/ts7/node-functions.js +18 -0
  1047. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1048. package/dist/frontend/ts7/program-host.d.ts +5 -1
  1049. package/dist/frontend/ts7/program-host.js +12 -0
  1050. package/dist/frontend/ts7/program-host.js.map +1 -1
  1051. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1052. package/dist/frontend/ts7/rpc-api.js +8 -1
  1053. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1054. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1055. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1056. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1057. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1058. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1059. package/dist/frontend/ts7/semantic-model.d.ts +54 -24
  1060. package/dist/frontend/ts7/semantic-model.js +88 -16
  1061. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1062. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1063. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1064. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1065. package/dist/frontend/ts7/semantic-types.js +1 -1
  1066. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1067. package/dist/frontend/ts7/session.d.ts +11 -11
  1068. package/dist/frontend/ts7/session.js +8 -5
  1069. package/dist/frontend/ts7/session.js.map +1 -1
  1070. package/dist/frontend/ts7/session.test.js +9 -5
  1071. package/dist/frontend/ts7/session.test.js.map +1 -1
  1072. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1073. package/dist/frontend/ts7/source-parser.js +24 -3
  1074. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1075. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1076. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1077. package/dist/frontend/type-mapper.d.ts +122 -2
  1078. package/dist/frontend/type-mapper.js +2612 -695
  1079. package/dist/frontend/type-mapper.js.map +1 -1
  1080. package/dist/frontend/type-only-imports.d.ts +28 -0
  1081. package/dist/frontend/type-only-imports.js +122 -0
  1082. package/dist/frontend/type-only-imports.js.map +1 -0
  1083. package/dist/frontend/worker-target.js +8 -8
  1084. package/dist/frontend/worker-target.js.map +1 -1
  1085. package/dist/index.d.ts +3 -1
  1086. package/dist/index.js +47 -10
  1087. package/dist/index.js.map +1 -1
  1088. package/dist/ir/analysis.js +4 -2
  1089. package/dist/ir/analysis.js.map +1 -1
  1090. package/dist/ir/api.d.ts +1 -1
  1091. package/dist/ir/api.js +1 -1
  1092. package/dist/ir/api.js.map +1 -1
  1093. package/dist/ir/array-length-stability.d.ts +30 -0
  1094. package/dist/ir/array-length-stability.js +236 -0
  1095. package/dist/ir/array-length-stability.js.map +1 -0
  1096. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1097. package/dist/ir/array-length-stability.test.js +113 -0
  1098. package/dist/ir/array-length-stability.test.js.map +1 -0
  1099. package/dist/ir/build.d.ts +2 -2
  1100. package/dist/ir/build.js +1 -1
  1101. package/dist/ir/build.js.map +1 -1
  1102. package/dist/ir/builtin-effects.js +139 -0
  1103. package/dist/ir/builtin-effects.js.map +1 -1
  1104. package/dist/ir/builtin-signatures.d.ts +1 -1
  1105. package/dist/ir/builtin-signatures.js +655 -25
  1106. package/dist/ir/builtin-signatures.js.map +1 -1
  1107. package/dist/ir/byte-numbers.js +3 -0
  1108. package/dist/ir/byte-numbers.js.map +1 -1
  1109. package/dist/ir/callback-specialization.d.ts +37 -0
  1110. package/dist/ir/callback-specialization.js +459 -0
  1111. package/dist/ir/callback-specialization.js.map +1 -0
  1112. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1113. package/dist/ir/callback-specialization.test.js +208 -0
  1114. package/dist/ir/callback-specialization.test.js.map +1 -0
  1115. package/dist/ir/capture-values.d.ts +0 -1
  1116. package/dist/ir/capture-values.js +51 -40
  1117. package/dist/ir/capture-values.js.map +1 -1
  1118. package/dist/ir/constant-globals.test.js +1 -1
  1119. package/dist/ir/constant-tables.test.js +1 -1
  1120. package/dist/ir/field-values.test.js +1 -1
  1121. package/dist/ir/final-fields.test.js +1 -1
  1122. package/dist/ir/function-references.test.js +10 -1
  1123. package/dist/ir/function-references.test.js.map +1 -1
  1124. package/dist/ir/init-only-globals.test.js +1 -1
  1125. package/dist/ir/initializer-bindings.test.js +1 -1
  1126. package/dist/ir/int32-slots.d.ts +14 -0
  1127. package/dist/ir/int32-slots.js +119 -14
  1128. package/dist/ir/int32-slots.js.map +1 -1
  1129. package/dist/ir/int32-slots.test.js +29 -1
  1130. package/dist/ir/int32-slots.test.js.map +1 -1
  1131. package/dist/ir/integer-loop-facts.d.ts +16 -6
  1132. package/dist/ir/integer-loop-facts.js +143 -38
  1133. package/dist/ir/integer-loop-facts.js.map +1 -1
  1134. package/dist/ir/integer-loops.d.ts +1 -1
  1135. package/dist/ir/integer-loops.js +39 -9
  1136. package/dist/ir/integer-loops.js.map +1 -1
  1137. package/dist/ir/integer-loops.test.js +104 -0
  1138. package/dist/ir/integer-loops.test.js.map +1 -1
  1139. package/dist/ir/integer-ranges.d.ts +3 -0
  1140. package/dist/ir/integer-ranges.js +4 -6
  1141. package/dist/ir/integer-ranges.js.map +1 -1
  1142. package/dist/ir/integer-ranges.test.js +142 -1
  1143. package/dist/ir/integer-ranges.test.js.map +1 -1
  1144. package/dist/ir/intrinsic-signatures.js +6 -0
  1145. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1146. package/dist/ir/ir.d.ts +234 -58
  1147. package/dist/ir/ir.js +123 -12
  1148. package/dist/ir/ir.js.map +1 -1
  1149. package/dist/ir/ir.test.js +10 -0
  1150. package/dist/ir/ir.test.js.map +1 -1
  1151. package/dist/ir/jsval.d.ts +8 -0
  1152. package/dist/ir/jsval.js +365 -0
  1153. package/dist/ir/jsval.js.map +1 -0
  1154. package/dist/ir/jsval.test.d.ts +1 -0
  1155. package/dist/ir/jsval.test.js +239 -0
  1156. package/dist/ir/jsval.test.js.map +1 -0
  1157. package/dist/ir/runtime-features.d.ts +150 -33
  1158. package/dist/ir/runtime-features.js +672 -339
  1159. package/dist/ir/runtime-features.js.map +1 -1
  1160. package/dist/ir/runtime-features.test.js +62 -0
  1161. package/dist/ir/runtime-features.test.js.map +1 -1
  1162. package/dist/ir/scalar-records.test.js +1 -1
  1163. package/dist/ir/self-captures.d.ts +33 -0
  1164. package/dist/ir/self-captures.js +245 -0
  1165. package/dist/ir/self-captures.js.map +1 -0
  1166. package/dist/ir/self-captures.test.d.ts +1 -0
  1167. package/dist/ir/self-captures.test.js +135 -0
  1168. package/dist/ir/self-captures.test.js.map +1 -0
  1169. package/dist/ir/serialize.d.ts +1 -1
  1170. package/dist/ir/serialize.js +7 -4
  1171. package/dist/ir/serialize.js.map +1 -1
  1172. package/dist/ir/tiers.d.ts +26 -0
  1173. package/dist/ir/tiers.js +101 -0
  1174. package/dist/ir/tiers.js.map +1 -0
  1175. package/dist/ir/tiers.test.d.ts +1 -0
  1176. package/dist/ir/tiers.test.js +140 -0
  1177. package/dist/ir/tiers.test.js.map +1 -0
  1178. package/dist/ir/traverse.js +107 -94
  1179. package/dist/ir/traverse.js.map +1 -1
  1180. package/dist/ir/traverse.test.js +33 -30
  1181. package/dist/ir/traverse.test.js.map +1 -1
  1182. package/dist/ir/unshare.js +65 -3
  1183. package/dist/ir/unshare.js.map +1 -1
  1184. package/dist/ir/unshare.test.js +1 -1
  1185. package/dist/ir/validate.js +220 -71
  1186. package/dist/ir/validate.js.map +1 -1
  1187. package/dist/ir/validate.test.js +64 -9
  1188. package/dist/ir/validate.test.js.map +1 -1
  1189. package/dist/library/fence-eval.test.js +1 -1
  1190. package/dist/library/int-infer.test.js +4 -4
  1191. package/dist/library/ir-policy.js +18 -0
  1192. package/dist/library/ir-policy.js.map +1 -1
  1193. package/dist/library/library-cache.d.ts +1 -0
  1194. package/dist/library/library-cache.js.map +1 -1
  1195. package/dist/library/library-cache.test.js +5 -5
  1196. package/dist/library/library-profile.d.ts +4 -4
  1197. package/dist/library/library-profile.js +35 -7
  1198. package/dist/library/library-profile.js.map +1 -1
  1199. package/dist/library/prepare.js +13 -1
  1200. package/dist/library/prepare.js.map +1 -1
  1201. package/dist/native/cli.js +5 -0
  1202. package/dist/native/cli.js.map +1 -1
  1203. package/dist/native/compiler.js +2 -2
  1204. package/dist/native/compiler.js.map +1 -1
  1205. package/dist/native/compiler.test.js +2 -2
  1206. package/dist/native/prepare.js +7 -0
  1207. package/dist/native/prepare.js.map +1 -1
  1208. package/dist/native/sanitizer.test.js +12 -0
  1209. package/dist/native/sanitizer.test.js.map +1 -1
  1210. package/dist/native/toolchain.d.ts +2 -0
  1211. package/dist/native/toolchain.js +10 -1
  1212. package/dist/native/toolchain.js.map +1 -1
  1213. package/dist/native/toolchain.test.js +39 -1
  1214. package/dist/native/toolchain.test.js.map +1 -1
  1215. package/dist/startup-cache.d.ts +1 -0
  1216. package/dist/startup-cache.js +1 -0
  1217. package/dist/startup-cache.js.map +1 -1
  1218. package/dist/wasm/base64.d.ts +5 -0
  1219. package/dist/wasm/base64.js +62 -0
  1220. package/dist/wasm/base64.js.map +1 -0
  1221. package/dist/wasm/binary.d.ts +36 -0
  1222. package/dist/wasm/binary.js +1976 -0
  1223. package/dist/wasm/binary.js.map +1 -0
  1224. package/dist/wasm/binary.test.d.ts +1 -0
  1225. package/dist/wasm/binary.test.js +190 -0
  1226. package/dist/wasm/binary.test.js.map +1 -0
  1227. package/dist/wasm/discover.d.ts +38 -0
  1228. package/dist/wasm/discover.js +377 -0
  1229. package/dist/wasm/discover.js.map +1 -0
  1230. package/dist/wasm/discover.test.d.ts +1 -0
  1231. package/dist/wasm/discover.test.js +24 -0
  1232. package/dist/wasm/discover.test.js.map +1 -0
  1233. package/dist/wasm/module.d.ts +151 -0
  1234. package/dist/wasm/module.js +575 -0
  1235. package/dist/wasm/module.js.map +1 -0
  1236. package/dist/wasm/translate.d.ts +48 -0
  1237. package/dist/wasm/translate.js +2129 -0
  1238. package/dist/wasm/translate.js.map +1 -0
  1239. package/dist/wasm/translate.test.d.ts +1 -0
  1240. package/dist/wasm/translate.test.js +207 -0
  1241. package/dist/wasm/translate.test.js.map +1 -0
  1242. package/package.json +21 -20
  1243. package/surface-manifest.json +332 -36
@@ -1,10 +1,12 @@
1
1
  import * as ts from "../../ts7/adapter.js";
2
2
  import {} from "../lowerer.js";
3
3
  import { locOf } from "../../program.js";
4
- import { DYN, F64, STRING, VOID } from "../../../ir/ir.js";
5
- import { boolLit, numLit } from "../../../ir/build.js";
4
+ import { BOOL, DYN, F64, STRING, VOID, arrayOf, BYTES_U8, } from "../../../ir/ir.js";
5
+ import { boolLit, dynUndefinedExpr, numLit } from "../../../ir/build.js";
6
6
  import { READLINE_DOCUMENTED_OPTIONS, fenceOrDropOptionKey } from "../surfaces.js";
7
7
  import { streamSidesOf } from "../lower-stream.js";
8
+ import { voidizedCallback } from "../lower-server.js";
9
+ import { builtinImportOf } from "./module-bindings.js";
8
10
  /** The ambient module declaring `d`, or null. */
9
11
  function ambientModuleOf(d) {
10
12
  let up = d.parent;
@@ -28,23 +30,34 @@ function isReadlineModule(spec) {
28
30
  export function isReadlineTyped(lowerer, node) {
29
31
  const t = lowerer.checker.getTypeAtLocation(node);
30
32
  const sym = t.getAliasSymbol() ?? t.getSymbol();
31
- if (sym?.name !== "Interface")
33
+ if (sym === undefined || ts.symbolName(sym) !== "Interface")
32
34
  return false;
33
- return lowerer.checker.declarationsOf(sym).some((d) => {
35
+ return sym.declarations.some((d) => {
34
36
  if (!ts.isClassDeclaration(d) && !ts.isInterfaceDeclaration(d))
35
37
  return false;
36
- if (!lowerer.isStdlibFile(d.getSourceFile()))
38
+ if (!lowerer.isStdlibFile(ts.getSourceFileOfNode(d)))
37
39
  return false;
38
40
  return isReadlineModule(ambientModuleOf(d));
39
41
  });
40
42
  }
41
43
  /** The runtime's listener event numbers (scr_readline.c). */
42
- const RL_EVENTS = { line: 0, close: 1, pause: 2, resume: 3, error: 4 };
44
+ const RL_EVENTS = {
45
+ line: 0,
46
+ close: 1,
47
+ pause: 2,
48
+ resume: 3,
49
+ error: 4,
50
+ history: 5,
51
+ SIGINT: 6,
52
+ SIGTSTP: 7,
53
+ SIGCONT: 8,
54
+ };
55
+ const RL_EVENT_LIST = '"line", "close", "pause", "resume", "error", "history", "SIGINT", "SIGTSTP" and "SIGCONT"';
43
56
  /** True when the call's resolved signature answers a Promise — the
44
57
  * readline/promises question. */
45
58
  function returnsPromise(lowerer, call) {
46
59
  const t = lowerer.checker.getTypeAtLocation(call);
47
- return (t.getSymbol()?.name ?? "") === "Promise";
60
+ return (ts.symbolNameOf(t.getSymbol()) ?? "") === "Promise";
48
61
  }
49
62
  /** The `{ signal }` options argument of the promise question: the signal
50
63
  * expression, or null when absent. Other members fence by name. */
@@ -55,7 +68,7 @@ function questionSignal(lowerer, node) {
55
68
  lowerer.noLowering("readline/promises question options that are not an object literal", node, "write the options inline: question(query, { signal })");
56
69
  }
57
70
  let signal = null;
58
- for (const p of node.properties) {
71
+ for (const p of node.properties.nodes) {
59
72
  if (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && p.name.text === "signal") {
60
73
  signal = p.initializer;
61
74
  continue;
@@ -64,44 +77,262 @@ function questionSignal(lowerer, node) {
64
77
  }
65
78
  return signal;
66
79
  }
80
+ /** True when `node`'s checker type is readline/promises' Readline. */
81
+ function isReadlineUiTyped(lowerer, node) {
82
+ const t = lowerer.checker.getTypeAtLocation(node);
83
+ const sym = t.getAliasSymbol() ?? t.getSymbol();
84
+ if (sym === undefined || ts.symbolName(sym) !== "Readline")
85
+ return false;
86
+ return sym.declarations.some((d) => {
87
+ if (!ts.isClassDeclaration(d) && !ts.isInterfaceDeclaration(d))
88
+ return false;
89
+ if (!lowerer.isStdlibFile(ts.getSourceFileOfNode(d)))
90
+ return false;
91
+ const spec = ambientModuleOf(d);
92
+ return spec === "readline/promises" || spec === "node:readline/promises";
93
+ });
94
+ }
95
+ /** The process.stdout/stderr target (1/2) of `node`, or 0. */
96
+ function processOutputOf(lowerer, node) {
97
+ if (!ts.isPropertyAccessExpression(node))
98
+ return 0;
99
+ const member = lowerer.stdlibGlobalMember(node, "process");
100
+ return member === "stdout" ? 1 : member === "stderr" ? 2 : 0;
101
+ }
102
+ /** new Readline(stream, options?) from readline/promises: the stream is
103
+ * process.stdout, process.stderr or a writable stream (checked with
104
+ * isWritable at runtime), the options an object literal with a boolean
105
+ * autoCommit. Null for other constructors. */
106
+ export function lowerReadlineUiNew(lowerer, expr) {
107
+ if (!isReadlineUiTyped(lowerer, expr))
108
+ return null;
109
+ const loc = locOf(expr);
110
+ const args = expr.arguments?.nodes ?? [];
111
+ if (args.length < 1 || args.length > 2 || args.some(ts.isSpreadElement)) {
112
+ lowerer.noLowering(`new Readline with ${args.length} arguments`, expr);
113
+ }
114
+ const fd = processOutputOf(lowerer, args[0]);
115
+ let stream = null;
116
+ if (fd === 0) {
117
+ stream = lowerer.lowerExpr(args[0]);
118
+ const info = stream.type.kind === "object" ? lowerer.classes.get(stream.type.className) : undefined;
119
+ const sides = streamSidesOf(lowerer, info);
120
+ if (sides !== "w" && sides !== "rw") {
121
+ lowerer.noLowering("new Readline with this stream", args[0], "process.stdout, process.stderr and writable streams are the supported streams");
122
+ }
123
+ }
124
+ let autoCommit = boolLit(false, loc);
125
+ const opts = args[1];
126
+ if (opts !== undefined && !isNullish(opts)) {
127
+ if (!ts.isObjectLiteralExpression(opts)) {
128
+ lowerer.noLowering("new Readline with options that are not an object literal", opts, "write the options inline: new Readline(stream, { autoCommit: true })");
129
+ }
130
+ for (const p of opts.properties.nodes) {
131
+ if (ts.isPropertyAssignment(p) &&
132
+ ts.isIdentifier(p.name) &&
133
+ p.name.text === "autoCommit" &&
134
+ !isNullish(p.initializer)) {
135
+ if (!(lowerer.typeOf(p.initializer).flags & ts.TypeFlags.BooleanLike)) {
136
+ lowerer.noLowering("the Readline option 'autoCommit' with a value that is not a boolean", p.initializer);
137
+ }
138
+ autoCommit = lowerer.lowerExprExpecting(p.initializer, BOOL);
139
+ }
140
+ else if (!(ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && p.name.text === "autoCommit")) {
141
+ lowerer.noLowering("new Readline with this option", p, "autoCommit is the supported option");
142
+ }
143
+ }
144
+ }
145
+ if (stream !== null) {
146
+ return { kind: "libCall", fn: "rl.uiOpenStream", args: [stream, autoCommit], type: F64, loc };
147
+ }
148
+ return { kind: "libCall", fn: "rl.uiOpen", args: [numLit(fd, loc), autoCommit], type: F64, loc };
149
+ }
150
+ /** Readline methods: cursorTo(x, y?), moveCursor(dx, dy), clearLine(dir),
151
+ * clearScreenDown() and rollback() answer the receiver; commit() answers
152
+ * a promise. */
153
+ function lowerReadlineUiCall(lowerer, call, access) {
154
+ const name = access.name.text;
155
+ const loc = locOf(call);
156
+ const args = call.arguments.nodes;
157
+ const plan = {
158
+ cursorTo: ["rl.uiCursorTo", 1, 2],
159
+ moveCursor: ["rl.uiMoveCursor", 2, 2],
160
+ clearLine: ["rl.uiClearLine", 1, 1],
161
+ clearScreenDown: ["rl.uiClearScreenDown", 0, 0],
162
+ rollback: ["rl.uiRollback", 0, 0],
163
+ commit: ["rl.uiCommit", 0, 0],
164
+ };
165
+ const entry = plan[name];
166
+ if (entry === undefined ||
167
+ args.length < entry[1] ||
168
+ args.length > entry[2] ||
169
+ args.some(ts.isSpreadElement)) {
170
+ lowerer.noLowering(`readlinePromises.Readline.${name}`, call, "cursorTo, moveCursor, clearLine, clearScreenDown, commit and rollback are the supported Readline members", lowerer.checker.getSymbolAtLocation(access.name));
171
+ }
172
+ const l = lowerer.declareHiddenLocal("%rlUi", F64);
173
+ const recv = { kind: "varRef", localId: l.id, type: F64, loc };
174
+ const stmts = [
175
+ {
176
+ kind: "varDecl",
177
+ localId: l.id,
178
+ init: lowerer.lowerExprExpecting(access.expression, F64),
179
+ loc,
180
+ },
181
+ ];
182
+ if (name === "commit") {
183
+ return {
184
+ kind: "seqExpr",
185
+ stmts,
186
+ result: {
187
+ kind: "libCall",
188
+ fn: "rl.uiCommit",
189
+ args: [recv],
190
+ type: { kind: "promise", inner: VOID },
191
+ loc,
192
+ },
193
+ type: { kind: "promise", inner: VOID },
194
+ loc,
195
+ };
196
+ }
197
+ const number = (n) => {
198
+ if (!(lowerer.typeOf(n).flags & ts.TypeFlags.NumberLike)) {
199
+ lowerer.noLowering(`Readline.${name} with an argument that is not a number`, n);
200
+ }
201
+ return lowerer.lowerExprExpecting(n, F64);
202
+ };
203
+ const values = [recv];
204
+ if (name === "cursorTo") {
205
+ // cursorTo(x, y?): [handle, x, whether y is given, y]
206
+ const y = args[1];
207
+ const hasY = y !== undefined && !isNullish(y);
208
+ values.push(number(args[0]), boolLit(hasY, loc), hasY ? number(y) : numLit(0, loc));
209
+ }
210
+ else {
211
+ for (const n of args)
212
+ values.push(number(n));
213
+ }
214
+ stmts.push({
215
+ kind: "exprStmt",
216
+ expr: { kind: "libCall", fn: entry[0], args: values, type: VOID, loc },
217
+ loc,
218
+ });
219
+ return { kind: "seqExpr", stmts, result: recv, type: F64, loc };
220
+ }
221
+ /** The module ("readline" or "readline/promises") whose Interface class
222
+ * `node` names, or null. */
223
+ function interfaceClassModule(lowerer, node) {
224
+ const builtin = ts.isIdentifier(node)
225
+ ? builtinImportOf(lowerer, node)
226
+ : ts.isPropertyAccessExpression(node) && !node.questionDotToken
227
+ ? lowerer.builtinMemberOf(node)
228
+ : null;
229
+ if (builtin?.member !== "Interface")
230
+ return null;
231
+ return builtin.module === "readline" || builtin.module === "readline/promises"
232
+ ? builtin.module
233
+ : null;
234
+ }
235
+ /** `rl instanceof readline.Interface` and `rl instanceof
236
+ * readlinePromises.Interface` over a readline Interface: an interface is
237
+ * an instance of the class of the module that created it (Node's
238
+ * readline/promises Interface does not extend node:readline's). Null for
239
+ * other instanceof tests. */
240
+ export function lowerReadlineInstanceof(lowerer, expr) {
241
+ const module = interfaceClassModule(lowerer, expr.right);
242
+ if (module === null || !isReadlineTyped(lowerer, expr.left))
243
+ return null;
244
+ const loc = locOf(expr);
245
+ const recv = lowerer.lowerExprExpecting(expr.left, F64);
246
+ const isPromises = {
247
+ kind: "libCall",
248
+ fn: "rl.isPromises",
249
+ args: [recv],
250
+ type: BOOL,
251
+ loc,
252
+ };
253
+ if (module === "readline/promises")
254
+ return isPromises;
255
+ return { kind: "unary", op: "!", operand: isPromises, type: BOOL, loc };
256
+ }
257
+ /** `rl[Symbol.dispose]()` on a readline Interface: Node's dispose method
258
+ * calls close(), which does nothing on a closed interface. Null for other
259
+ * element-access calls. */
260
+ export function lowerReadlineDisposeCall(lowerer, call) {
261
+ const access = call.expression;
262
+ if (!ts.isElementAccessExpression(access) || access.questionDotToken || call.questionDotToken) {
263
+ return null;
264
+ }
265
+ let key = access.argumentExpression;
266
+ while (ts.isParenthesizedExpression(key))
267
+ key = key.expression;
268
+ if (!ts.isPropertyAccessExpression(key) ||
269
+ lowerer.stdlibGlobalMember(key, "Symbol") !== "dispose") {
270
+ return null;
271
+ }
272
+ if (!isReadlineTyped(lowerer, access.expression))
273
+ return null;
274
+ if (call.arguments.nodes.length > 0) {
275
+ lowerer.noLowering("readline.Interface[Symbol.dispose] with arguments", call);
276
+ }
277
+ const recv = lowerer.lowerExprExpecting(access.expression, F64);
278
+ return { kind: "libCall", fn: "rl.close", args: [recv], type: VOID, loc: locOf(call) };
279
+ }
280
+ /** A question query or setPrompt argument: the string, or for a value
281
+ * that need not be one (JavaScript), the checked-dynamic value, which the
282
+ * runtime writes the way Node's kWriteToOutput does (dyn: true). */
283
+ function lowerPromptArg(lowerer, node) {
284
+ if (lowerer.typeOf(node).flags & ts.TypeFlags.StringLike) {
285
+ return { value: lowerer.lowerExprExpecting(node, STRING), dyn: false };
286
+ }
287
+ const value = lowerer.lowerExpr(node);
288
+ if (value.type.kind === "string")
289
+ return { value, dyn: false };
290
+ return { value: lowerer.coerceInto(node, value, DYN), dyn: true };
291
+ }
67
292
  /** Method calls on readline Interface receivers (both modules):
68
293
  * - question(query, cb) — the callback form; question(query, { signal }?)
69
294
  * — the promise form (readline/promises);
70
- * - close(), pause(), resume(), prompt(), setPrompt(p), getPrompt(),
71
- * write(data);
295
+ * - close(), pause(), resume(), prompt(preserveCursor?), setPrompt(p),
296
+ * getPrompt(), write(data, key?);
72
297
  * - on/once/addListener for 'line' ((input: string) or no parameters),
73
- * 'close'/'pause'/'resume' (no parameters) and 'error' ((err: Error) or
74
- * no parameters), as statements.
298
+ * 'error' ((err: Error) or no parameters), 'history' ((history:
299
+ * string[]) or no parameters), and 'close'/'pause'/'resume'/'SIGINT'/
300
+ * 'SIGTSTP'/'SIGCONT' (no parameters), as statements.
75
301
  * Everything else the lib declares fences member-qualified. Null for
76
302
  * non-Interface receivers. */
77
303
  export function lowerReadlineMethodCall(lowerer, call, access) {
78
304
  if (call.questionDotToken || access.questionDotToken)
79
305
  return null;
306
+ if (isReadlineUiTyped(lowerer, access.expression) && lowerer.isStdlibMember(access)) {
307
+ return lowerReadlineUiCall(lowerer, call, access);
308
+ }
80
309
  if (!isReadlineTyped(lowerer, access.expression))
81
310
  return null;
82
311
  if (!lowerer.isStdlibMember(access))
83
312
  return null;
84
313
  const name = access.name.text;
85
314
  const loc = locOf(call);
86
- const args = call.arguments;
315
+ const args = call.arguments.nodes;
87
316
  const receiver = () => lowerer.lowerExprExpecting(access.expression, F64);
88
317
  if (name === "question" &&
89
318
  returnsPromise(lowerer, call) &&
90
319
  args.length >= 1 &&
91
320
  args.length <= 2) {
92
321
  const recv = receiver();
93
- const query = lowerer.lowerExprExpecting(args[0], STRING);
322
+ const query = lowerPromptArg(lowerer, args[0]);
94
323
  const signal = questionSignal(lowerer, args[1]);
95
324
  const type = { kind: "promise", inner: STRING };
96
325
  if (signal === null) {
97
- return { kind: "libCall", fn: "rl.questionAsync", args: [recv, query], type, loc };
326
+ const fn = query.dyn ? "rl.questionAsyncDyn" : "rl.questionAsync";
327
+ return { kind: "libCall", fn, args: [recv, query.value], type, loc };
98
328
  }
99
329
  const sig = lowerer.lowerExprExpecting(signal, DYN);
100
- return { kind: "libCall", fn: "rl.questionAsyncSignal", args: [recv, query, sig], type, loc };
330
+ const fn = query.dyn ? "rl.questionAsyncSignalDyn" : "rl.questionAsyncSignal";
331
+ return { kind: "libCall", fn, args: [recv, query.value, sig], type, loc };
101
332
  }
102
333
  if (name === "question" && args.length === 2) {
103
334
  const recv = receiver();
104
- const query = lowerer.lowerExprExpecting(args[0], STRING);
335
+ const query = lowerPromptArg(lowerer, args[0]);
105
336
  const cb = lowerer.lowerExpr(args[1]);
106
337
  if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 1) {
107
338
  lowerer.unsupported("SC1090", args[1], "question callbacks with more than one parameter or a return value");
@@ -110,7 +341,8 @@ export function lowerReadlineMethodCall(lowerer, call, access) {
110
341
  if (param !== undefined && param.kind !== "string" && param.kind !== "dyn") {
111
342
  lowerer.unsupported("SC1090", args[1], `question callbacks whose parameter is not 'string' (got '${lowerer.fmt(param)}')`);
112
343
  }
113
- return { kind: "libCall", fn: "rl.question", args: [recv, query, cb], type: VOID, loc };
344
+ const fn = query.dyn ? "rl.questionDyn" : "rl.question";
345
+ return { kind: "libCall", fn, args: [recv, query.value, cb], type: VOID, loc };
114
346
  }
115
347
  const simple = {
116
348
  close: "rl.close",
@@ -123,47 +355,93 @@ export function lowerReadlineMethodCall(lowerer, call, access) {
123
355
  if ((name === "pause" || name === "resume") && !ts.isExpressionStatement(call.parent)) {
124
356
  lowerer.unsupported("SC1090", call, `using the result of readline ${name}() (call it as its own statement)`);
125
357
  }
126
- // prompt(preserveCursor) only moves the cursor of a terminal
127
- // interface: a boolean literal is accepted and has no effect here.
358
+ // prompt(preserveCursor) keeps a terminal interface's cursor
128
359
  const flag = args[0];
129
- if (flag !== undefined &&
130
- flag.kind !== ts.SyntaxKind.TrueKeyword &&
131
- flag.kind !== ts.SyntaxKind.FalseKeyword) {
132
- lowerer.noLowering("readline prompt() with a non-literal preserveCursor", flag, "preserveCursor only affects terminal interfaces — pass a boolean literal or omit it");
360
+ if (flag !== undefined && flag.kind !== ts.SyntaxKind.FalseKeyword) {
361
+ if (!(lowerer.typeOf(flag).flags & ts.TypeFlags.BooleanLike)) {
362
+ lowerer.noLowering("readline prompt() with a preserveCursor that is not a boolean", flag, "pass a boolean or omit it");
363
+ }
364
+ const recv = receiver();
365
+ const keep = lowerer.lowerExprExpecting(flag, BOOL);
366
+ return { kind: "libCall", fn: "rl.promptWith", args: [recv, keep], type: VOID, loc };
133
367
  }
134
368
  return { kind: "libCall", fn: simpleFn, args: [receiver()], type: VOID, loc };
135
369
  }
136
370
  if (name === "setPrompt" && args.length === 1) {
137
371
  const recv = receiver();
138
- const prompt = lowerer.lowerExprExpecting(args[0], STRING);
139
- return { kind: "libCall", fn: "rl.setPrompt", args: [recv, prompt], type: VOID, loc };
372
+ const prompt = lowerPromptArg(lowerer, args[0]);
373
+ const fn = prompt.dyn ? "rl.setPromptDyn" : "rl.setPrompt";
374
+ return { kind: "libCall", fn, args: [recv, prompt.value], type: VOID, loc };
140
375
  }
141
376
  if (name === "getPrompt" && args.length === 0) {
142
377
  return { kind: "libCall", fn: "rl.getPrompt", args: [receiver()], type: STRING, loc };
143
378
  }
144
- if (name === "write" && args.length === 1) {
379
+ if (name === "getCursorPos" && args.length === 0) {
380
+ // { rows, cols } of the prompt and the line before the cursor
381
+ const t = lowerer.mapTypeOf(lowerer.typeOf(call));
382
+ const shape = t?.kind === "record" ? lowerer.shapes.get(t.shapeId) : undefined;
383
+ if (t?.kind !== "record" ||
384
+ !shape ||
385
+ !shape.fields.every((f) => (f.name === "rows" || f.name === "cols") && f.type.kind === "f64")) {
386
+ lowerer.badType(call, lowerer.typeOf(call));
387
+ }
388
+ const l = lowerer.declareHiddenLocal("%rl", F64);
389
+ const recv = { kind: "varRef", localId: l.id, type: F64, loc };
390
+ return {
391
+ kind: "seqExpr",
392
+ stmts: [{ kind: "varDecl", localId: l.id, init: receiver(), loc }],
393
+ result: {
394
+ kind: "recordLit",
395
+ fields: shape.fields.map((f) => ({
396
+ name: f.name,
397
+ value: {
398
+ kind: "libCall",
399
+ fn: "rl.cursorPos",
400
+ args: [recv, numLit(f.name === "rows" ? 0 : 1, loc)],
401
+ type: F64,
402
+ loc,
403
+ },
404
+ })),
405
+ type: t,
406
+ loc,
407
+ },
408
+ type: t,
409
+ loc,
410
+ };
411
+ }
412
+ if (name === "write" && args.length === 1 && !isNullish(args[0])) {
145
413
  const recv = receiver();
146
414
  const data = lowerer.lowerExprExpecting(args[0], STRING);
147
415
  return { kind: "libCall", fn: "rl.write", args: [recv, data], type: VOID, loc };
148
416
  }
417
+ if (name === "write" && (args.length === 1 || args.length === 2)) {
418
+ return lowerWriteKey(lowerer, receiver(), args[0], args[1], loc);
419
+ }
149
420
  if ((name === "on" || name === "once" || name === "addListener") && args.length === 2) {
150
421
  const evT = lowerer.typeOf(args[0]);
151
422
  const event = evT.isStringLiteralType() ? evT.value : null;
152
423
  const ev = event === null ? undefined : RL_EVENTS[event];
153
424
  if (ev === undefined) {
154
- lowerer.noLowering(`readline.Interface.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"line", "close", "pause", "resume" and "error" are the supported readline events');
425
+ lowerer.noLowering(`readline.Interface.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], `${RL_EVENT_LIST} are the supported readline events`);
155
426
  }
156
427
  if (!ts.isExpressionStatement(call.parent)) {
157
428
  lowerer.unsupported("SC1090", call, "chaining readline listener registration (register each listener as its own statement)");
158
429
  }
159
430
  const recv = receiver();
160
431
  const cb = lowerer.lowerExpr(args[1]);
161
- const want = event === "line" ? "string" : event === "error" ? "error" : null;
432
+ const want = event === "line"
433
+ ? "string"
434
+ : event === "error"
435
+ ? "error"
436
+ : event === "history"
437
+ ? "history"
438
+ : null;
162
439
  const param = cb.type.kind === "func" ? cb.type.params[0] : undefined;
163
440
  const paramOk = param === undefined ||
164
441
  (want !== null && param.kind === "dyn") ||
165
442
  (want === "string" && param.kind === "string") ||
166
- (want === "error" && param.kind === "object" && param.className === "Error");
443
+ (want === "error" && param.kind === "object" && param.className === "Error") ||
444
+ (want === "history" && param.kind === "array" && param.elem.kind === "string");
167
445
  if (cb.type.kind !== "func" ||
168
446
  cb.type.ret.kind !== "void" ||
169
447
  cb.type.params.length > (want === null ? 0 : 1) ||
@@ -172,7 +450,9 @@ export function lowerReadlineMethodCall(lowerer, call, access) {
172
450
  ? "'line' listeners other than (input: string) => void"
173
451
  : want === "error"
174
452
  ? "'error' listeners other than (err: Error) => void"
175
- : `'${event}' listeners with parameters or a return value (use ())`);
453
+ : want === "history"
454
+ ? "'history' listeners other than (history: string[]) => void"
455
+ : `'${event}' listeners with parameters or a return value (use ())`);
176
456
  }
177
457
  return {
178
458
  kind: "libCall",
@@ -182,7 +462,358 @@ export function lowerReadlineMethodCall(lowerer, call, access) {
182
462
  loc,
183
463
  };
184
464
  }
185
- lowerer.noLowering(`readline.Interface.${name}`, call, "question, close, pause, resume, prompt, setPrompt, getPrompt, write, for await, and on/once for 'line', 'close', 'pause', 'resume' and 'error' are the supported Interface members", lowerer.checker.getSymbolAtLocation(access.name));
465
+ lowerer.noLowering(`readline.Interface.${name}`, call, `question, close, pause, resume, prompt, setPrompt, getPrompt, write, for await, and on/once for ${RL_EVENT_LIST.replace(/"/g, "'")} are the supported Interface members`, lowerer.checker.getSymbolAtLocation(access.name));
466
+ }
467
+ function isNullish(node) {
468
+ return (node.kind === ts.SyntaxKind.NullKeyword || (ts.isIdentifier(node) && node.text === "undefined"));
469
+ }
470
+ /** write(data, key): data a string, null or undefined; key an object
471
+ * literal of name, ctrl, meta and shift. rl.writeKey's arguments: the
472
+ * interface, whether data is present, the data, whether the key is, whether
473
+ * its name is, the name and the three flags. */
474
+ function lowerWriteKey(lowerer, recv, dataNode, keyNode, loc) {
475
+ const empty = { kind: "strLit", value: "", type: STRING, loc };
476
+ const hasData = !isNullish(dataNode);
477
+ const data = hasData ? lowerer.lowerExprExpecting(dataNode, STRING) : empty;
478
+ let hasKey = false;
479
+ let hasName = false;
480
+ let keyName = empty;
481
+ const flags = {
482
+ ctrl: boolLit(false, loc),
483
+ meta: boolLit(false, loc),
484
+ shift: boolLit(false, loc),
485
+ };
486
+ if (keyNode !== undefined && !isNullish(keyNode)) {
487
+ if (!ts.isObjectLiteralExpression(keyNode)) {
488
+ lowerer.noLowering("readline write() with a key that is not an object literal", keyNode, "write the key inline: write(null, { ctrl: true, name: 'u' })");
489
+ }
490
+ hasKey = true;
491
+ for (const p of keyNode.properties.nodes) {
492
+ const member = ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) ? p.name.text : null;
493
+ const value = member !== null ? p.initializer : null;
494
+ if (member === "name" && value !== null && !isNullish(value)) {
495
+ hasName = true;
496
+ keyName = lowerer.lowerExprExpecting(value, STRING);
497
+ }
498
+ else if (member === "name") {
499
+ // an undefined name is no name
500
+ }
501
+ else if (member !== null && value !== null && flags[member] !== undefined) {
502
+ if (!(lowerer.typeOf(value).flags & ts.TypeFlags.BooleanLike)) {
503
+ lowerer.noLowering(`a readline write() key '${member}' that is not a boolean`, value);
504
+ }
505
+ flags[member] = lowerer.lowerExprExpecting(value, BOOL);
506
+ }
507
+ else {
508
+ lowerer.noLowering("readline write() with this key member", p, "name, ctrl, meta and shift are the supported key members");
509
+ }
510
+ }
511
+ }
512
+ return {
513
+ kind: "libCall",
514
+ fn: "rl.writeKey",
515
+ args: [
516
+ recv,
517
+ boolLit(hasData, loc),
518
+ data,
519
+ boolLit(hasKey, loc),
520
+ boolLit(hasName, loc),
521
+ keyName,
522
+ flags.ctrl,
523
+ flags.meta,
524
+ flags.shift,
525
+ ],
526
+ type: VOID,
527
+ loc,
528
+ };
529
+ }
530
+ /** readline.emitKeypressEvents(stream[, interface]): process.stdin or a
531
+ * readable stream; the interface is a readline Interface or an object
532
+ * literal with escapeCodeTimeout. rl.keypressStdin / rl.keypressStream
533
+ * take the interface handle (0 for none) and the timeout (NaN: the
534
+ * interface's, or 500). */
535
+ function lowerEmitKeypressEvents(lowerer, expr, loc) {
536
+ const args = expr.arguments.nodes;
537
+ if (args.length < 1 || args.length > 2 || args.some(ts.isSpreadElement)) {
538
+ lowerer.noLowering(`readline.emitKeypressEvents with ${args.length} arguments`, expr);
539
+ }
540
+ const stmts = [];
541
+ const streamNode = args[0];
542
+ let stream = null;
543
+ const stdin = ts.isPropertyAccessExpression(streamNode) &&
544
+ lowerer.stdlibGlobalMember(streamNode, "process") === "stdin";
545
+ if (!stdin) {
546
+ stream = lowerer.lowerExpr(streamNode);
547
+ const info = stream.type.kind === "object" ? lowerer.classes.get(stream.type.className) : undefined;
548
+ const sides = streamSidesOf(lowerer, info);
549
+ if (sides !== "r" && sides !== "rw") {
550
+ lowerer.noLowering("readline.emitKeypressEvents with this stream", streamNode, "process.stdin and readable streams are the supported streams");
551
+ }
552
+ const l = lowerer.declareHiddenLocal("%rlStream", stream.type);
553
+ stmts.push({ kind: "varDecl", localId: l.id, init: stream, loc });
554
+ stream = { kind: "varRef", localId: l.id, type: stream.type, loc };
555
+ }
556
+ let iface = numLit(0, loc);
557
+ let timeout = numLit(NaN, loc);
558
+ const ifaceNode = args[1];
559
+ if (ifaceNode !== undefined && !isNullish(ifaceNode)) {
560
+ if (isReadlineTyped(lowerer, ifaceNode)) {
561
+ iface = lowerer.lowerExprExpecting(ifaceNode, F64);
562
+ }
563
+ else if (ts.isObjectLiteralExpression(ifaceNode)) {
564
+ for (const p of ifaceNode.properties.nodes) {
565
+ if (ts.isPropertyAssignment(p) &&
566
+ ts.isIdentifier(p.name) &&
567
+ p.name.text === "escapeCodeTimeout" &&
568
+ lowerer.typeOf(p.initializer).flags & ts.TypeFlags.NumberLike) {
569
+ timeout = lowerer.lowerExprExpecting(p.initializer, F64);
570
+ }
571
+ else {
572
+ lowerer.noLowering("readline.emitKeypressEvents with this interface member", p, "a number escapeCodeTimeout is the supported member");
573
+ }
574
+ }
575
+ }
576
+ else {
577
+ lowerer.noLowering("readline.emitKeypressEvents with this interface", ifaceNode, "pass a readline Interface or { escapeCodeTimeout }");
578
+ }
579
+ }
580
+ const call = stream === null
581
+ ? { kind: "libCall", fn: "rl.keypressStdin", args: [iface, timeout], type: VOID, loc }
582
+ : {
583
+ kind: "libCall",
584
+ fn: "rl.keypressStream",
585
+ args: [stream, iface, timeout],
586
+ type: VOID,
587
+ loc,
588
+ };
589
+ return stmts.length === 0 ? call : { kind: "seqExpr", stmts, result: call, type: VOID, loc };
590
+ }
591
+ /** Checks a 'keypress' listener (process.stdin or a readable stream): the
592
+ * first argument is undefined for escape sequences, so a typed first
593
+ * parameter must admit undefined, and the key is readline.Key. */
594
+ export function checkKeypressListener(lowerer, node, cb) {
595
+ if (cb.type.kind === "dyn")
596
+ return;
597
+ if (cb.type.kind !== "func" || cb.type.params.length > 2) {
598
+ lowerer.noLowering("'keypress' listeners with more than two parameters", node, "(str, key) => void listeners are supported");
599
+ }
600
+ const first = cb.type.params[0];
601
+ if (first !== undefined && first.kind !== "dyn") {
602
+ const def = first.kind === "union" ? lowerer.unions.get(first.unionId) : undefined;
603
+ const ok = !!def &&
604
+ def.arms.some((a) => a.kind === "undefinedT") &&
605
+ def.arms.every((a) => a.kind === "undefinedT" || a.kind === "string");
606
+ if (!ok) {
607
+ lowerer.noLowering(`a 'keypress' listener whose first parameter is '${lowerer.fmt(first)}'`, node, "the first argument is undefined for escape sequences — declare it as string | undefined");
608
+ }
609
+ }
610
+ const second = cb.type.params[1];
611
+ if (second !== undefined && second.kind !== "dyn") {
612
+ lowerer.noLowering(`a 'keypress' listener whose second parameter is '${lowerer.fmt(second)}'`, node, "declare the key as readline.Key");
613
+ }
614
+ }
615
+ /** process.stdin's 'keypress' listener as the checked-dynamic function the
616
+ * runtime calls with (str, key). */
617
+ export function stdinKeypressListener(lowerer, node) {
618
+ const cb = lowerer.lowerExpr(node);
619
+ checkKeypressListener(lowerer, node, cb);
620
+ return lowerer.coerceToExpected(cb, DYN);
621
+ }
622
+ const CURSOR_HELPERS = {
623
+ cursorTo: 0,
624
+ moveCursor: 1,
625
+ clearLine: 2,
626
+ clearScreenDown: 3,
627
+ };
628
+ /** readline.cursorTo(stream, x[, y][, callback]), moveCursor(stream, dx,
629
+ * dy[, callback]), clearLine(stream, dir[, callback]) and
630
+ * clearScreenDown(stream[, callback]). The stream is process.stdout,
631
+ * process.stderr, a writable stream, or null/undefined (nothing is
632
+ * written and the callback runs on the next tick). The arguments are
633
+ * evaluated in order; rl.seq checks them (NaN coordinates throw
634
+ * ERR_INVALID_ARG_VALUE) and builds the escape sequence, which goes
635
+ * through the stream's own write. The result is write()'s boolean, or
636
+ * true. */
637
+ export function lowerReadlineCursorCall(lowerer, expr, member, loc) {
638
+ if (member === "emitKeypressEvents")
639
+ return lowerEmitKeypressEvents(lowerer, expr, loc);
640
+ const kind = CURSOR_HELPERS[member];
641
+ if (kind === undefined)
642
+ return null;
643
+ const args = [...expr.arguments.nodes];
644
+ if (args.some(ts.isSpreadElement)) {
645
+ lowerer.noLowering(`readline.${member} with a spread argument`, expr);
646
+ }
647
+ const numbers = kind === 0 ? 2 : kind === 1 ? 2 : kind === 2 ? 1 : 0;
648
+ const isFunc = (n) => lowerer.mapTypeOf(lowerer.typeOf(n))?.kind === "func";
649
+ // cursorTo(stream, x, callback): the third argument is the callback
650
+ let numberNodes = args.slice(1, 1 + numbers);
651
+ let cbNode = args[1 + numbers];
652
+ if (kind === 0 && args[2] !== undefined && isFunc(args[2])) {
653
+ numberNodes = [args[1]];
654
+ cbNode = args[2];
655
+ }
656
+ if (args.length > 2 + numbers || args.length < 1 + (kind === 0 ? 1 : numbers)) {
657
+ lowerer.noLowering(`readline.${member} with ${args.length} arguments`, expr);
658
+ }
659
+ if (cbNode !== undefined && isNullish(cbNode))
660
+ cbNode = undefined;
661
+ const stmts = [];
662
+ const hold = (name, value) => {
663
+ const l = lowerer.declareHiddenLocal(name, value.type);
664
+ stmts.push({ kind: "varDecl", localId: l.id, init: value, loc });
665
+ return { kind: "varRef", localId: l.id, type: value.type, loc };
666
+ };
667
+ // the stream
668
+ const streamNode = args[0];
669
+ let target;
670
+ const proc = ts.isPropertyAccessExpression(streamNode) && lowerer.stdlibGlobalMember(streamNode, "process");
671
+ if (proc === "stdout" || proc === "stderr") {
672
+ target = proc;
673
+ }
674
+ else if (isNullish(streamNode)) {
675
+ target = "none";
676
+ }
677
+ else {
678
+ const v = lowerer.lowerExpr(streamNode);
679
+ const info = v.type.kind === "object" ? lowerer.classes.get(v.type.className) : undefined;
680
+ const sides = streamSidesOf(lowerer, info);
681
+ if (sides !== "w" && sides !== "rw") {
682
+ lowerer.noLowering(`readline.${member} with this stream`, streamNode, "process.stdout, process.stderr, writable streams, null and undefined are the supported streams");
683
+ }
684
+ target = hold("%rlStream", v);
685
+ }
686
+ // the coordinates (cursorTo's x may be left undefined: then nothing is
687
+ // written, or ERR_INVALID_CURSOR_POS when y is given)
688
+ const values = [];
689
+ let hasB = false;
690
+ let noX = false;
691
+ for (let i = 0; i < numberNodes.length; i++) {
692
+ const n = numberNodes[i];
693
+ if (kind === 0 && isNullish(n)) {
694
+ if (i === 0) {
695
+ noX = true;
696
+ values.push(numLit(0, loc));
697
+ }
698
+ continue;
699
+ }
700
+ if (!(lowerer.typeOf(n).flags & ts.TypeFlags.NumberLike)) {
701
+ lowerer.noLowering(`readline.${member} with an argument that is not a number`, n);
702
+ }
703
+ values.push(hold("%rlArg", lowerer.lowerExprExpecting(n, F64)));
704
+ if (i === 1)
705
+ hasB = true;
706
+ }
707
+ // the callback: () => void, as the lib declares it
708
+ let cb = null;
709
+ if (cbNode !== undefined) {
710
+ const c = lowerer.lowerExpr(cbNode);
711
+ if (c.type.kind !== "func" || c.type.params.length > 0 || c.type.ret.kind !== "void") {
712
+ lowerer.noLowering(`readline.${member} callbacks with parameters or a return value`, cbNode, "() => void callbacks are supported");
713
+ }
714
+ cb = hold("%rlCallback", target === "stdout" || target === "stderr" ? voidizedCallback(lowerer, c, loc) : c);
715
+ }
716
+ const seqKind = noX && hasB && target !== "none" ? 4 : kind;
717
+ const seq = hold("%rlSeq", {
718
+ kind: "libCall",
719
+ fn: "rl.seq",
720
+ args: [
721
+ numLit(seqKind, loc),
722
+ values[0] ?? numLit(0, loc),
723
+ values[1] ?? numLit(0, loc),
724
+ boolLit(hasB, loc),
725
+ ],
726
+ type: STRING,
727
+ loc,
728
+ });
729
+ const skipped = () => {
730
+ const later = cb
731
+ ? [
732
+ {
733
+ kind: "exprStmt",
734
+ expr: { kind: "libCall", fn: "process.nextTick", args: [cb], type: VOID, loc },
735
+ loc,
736
+ },
737
+ ]
738
+ : [];
739
+ return { kind: "seqExpr", stmts: later, result: boolLit(true, loc), type: BOOL, loc };
740
+ };
741
+ let result;
742
+ if (target === "none" || (noX && !hasB)) {
743
+ result = skipped();
744
+ }
745
+ else {
746
+ let write;
747
+ if (target === "stdout" || target === "stderr") {
748
+ const utf8 = { kind: "strLit", value: "utf8", type: STRING, loc };
749
+ write = cb
750
+ ? {
751
+ kind: "libCall",
752
+ fn: target === "stdout" ? "process.stdoutWriteBytesCb" : "process.stderrWriteBytesCb",
753
+ args: [
754
+ { kind: "libCall", fn: "buffer.fromStr", args: [seq, utf8], type: BYTES_U8, loc },
755
+ utf8,
756
+ cb,
757
+ ],
758
+ type: BOOL,
759
+ loc,
760
+ }
761
+ : {
762
+ kind: "libCall",
763
+ fn: target === "stdout" ? "process.stdoutWrite" : "process.stderrWrite",
764
+ args: [seq],
765
+ type: BOOL,
766
+ loc,
767
+ };
768
+ }
769
+ else {
770
+ write = {
771
+ kind: "libCall",
772
+ fn: "writable.writeStr",
773
+ args: cb ? [target, seq, cb] : [target, seq],
774
+ type: BOOL,
775
+ loc,
776
+ };
777
+ }
778
+ result =
779
+ kind === 1
780
+ ? {
781
+ kind: "ternary",
782
+ cond: {
783
+ kind: "libCall",
784
+ fn: "rl.moves",
785
+ args: [values[0], values[1]],
786
+ type: BOOL,
787
+ loc,
788
+ },
789
+ then: write,
790
+ else_: skipped(),
791
+ type: BOOL,
792
+ loc,
793
+ }
794
+ : write;
795
+ }
796
+ return { kind: "seqExpr", stmts, result, type: BOOL, loc };
797
+ }
798
+ /** A checked-dynamic input or output (a JavaScript function's result, an
799
+ * object's member, an element that may be undefined) as the stream it
800
+ * holds: the runtime refuses a value that is not a stream with that
801
+ * side, and answers null for an output of null or undefined. Other
802
+ * values pass through. */
803
+ function streamFromDyn(lowerer, node, output) {
804
+ let v = lowerer.lowerExpr(node);
805
+ if (v.type.kind === "union")
806
+ v = lowerer.coerceInto(node, v, DYN);
807
+ if (v.type.kind !== "dyn")
808
+ return v;
809
+ const loc = locOf(node);
810
+ return {
811
+ kind: "libCall",
812
+ fn: output ? "rl.outputFromDyn" : "rl.inputFromDyn",
813
+ args: [v, boolLit(output, loc)],
814
+ type: { kind: "object", className: output ? "%Writable" : "%Readable" },
815
+ loc,
816
+ };
186
817
  }
187
818
  /** The interface's input: process.stdin (null) or a readable stream. */
188
819
  function lowerInput(lowerer, node) {
@@ -190,7 +821,7 @@ function lowerInput(lowerer, node) {
190
821
  lowerer.stdlibGlobalMember(node, "process") === "stdin") {
191
822
  return null;
192
823
  }
193
- const v = lowerer.lowerExpr(node);
824
+ const v = streamFromDyn(lowerer, node, false);
194
825
  const info = v.type.kind === "object" ? lowerer.classes.get(v.type.className) : undefined;
195
826
  const sides = streamSidesOf(lowerer, info);
196
827
  if (sides !== "r" && sides !== "rw") {
@@ -209,7 +840,7 @@ function lowerOutput(lowerer, node) {
209
840
  }
210
841
  if (ts.isIdentifier(node) && node.text === "undefined")
211
842
  return "none";
212
- const v = lowerer.lowerExpr(node);
843
+ const v = streamFromDyn(lowerer, node, true);
213
844
  const info = v.type.kind === "object" ? lowerer.classes.get(v.type.className) : undefined;
214
845
  const sides = streamSidesOf(lowerer, info);
215
846
  if (sides !== "w" && sides !== "rw") {
@@ -217,70 +848,152 @@ function lowerOutput(lowerer, node) {
217
848
  }
218
849
  return v;
219
850
  }
220
- /** createInterface({ input, output?, terminal?: false, crlfDelay?,
221
- * prompt?, signal? }) or createInterface(input, output?), from
222
- * node:readline or node:readline/promises. The input is process.stdin
223
- * or a readable stream; the output process.stdout, a writable stream, or
224
- * absent (prompts are then not written). rl.create's arguments: the mode
225
- * literal (1 stream input, 2 stream output, 4 stdout output, 8 signal,
226
- * 16 prompt), then the input and output streams when present, crlfDelay,
227
- * the prompt and the signal when present. */
228
- export function lowerReadlineCreateCall(lowerer, expr, loc) {
851
+ /** createInterface({ input, output?, terminal?, crlfDelay?, prompt?,
852
+ * signal?, ... }) or createInterface(input, output?, completer?,
853
+ * terminal?), from node:readline or node:readline/promises. The input is process.stdin or a readable
854
+ * stream; the output process.stdout, a writable stream, or absent
855
+ * (prompts are then not written). rl.create's arguments: the mode literal
856
+ * (1 stream input, 2 stream output, 4 stdout output, 8 signal, 16
857
+ * prompt, 32 node:readline/promises), then the input and output streams
858
+ * when present, crlfDelay, the prompt and the signal when present. An interface that can be a
859
+ * terminal one (a `terminal` option that is not false, or none with
860
+ * process.stdout as the output, which is a terminal when it is a TTY)
861
+ * goes through rl.terminal with the completer. */
862
+ export function lowerReadlineCreateCall(lowerer, expr, loc, promises) {
229
863
  let input = null;
230
864
  let output = "none";
231
865
  let crlf = numLit(0, loc);
232
866
  let prompt = null;
233
867
  let signal = null;
234
- const optsNode = expr.arguments[0];
868
+ // the history and editing options (scr_rl_check_options' flags)
869
+ let tabSize = null;
870
+ let escapeTimeout = null;
871
+ let historySize = null;
872
+ let history = null;
873
+ let removeDups = null;
874
+ let completer = null;
875
+ let completerValue = null; // set in setCompleter
876
+ let completerAt = -1;
877
+ // the terminal option: null when absent, else the boolean (a literal
878
+ // false drops it)
879
+ let terminal = null; // set in setTerminal
880
+ let terminalFalse = false;
881
+ const pre = [];
882
+ // Only terminal interfaces call the completer. A checked-dynamic value
883
+ // must be callable (Node's ERR_INVALID_ARG_VALUE, after the history
884
+ // checks); a function is not checked. The slot in `pre` is filled once
885
+ // the terminal mode is known.
886
+ const setCompleter = (value) => {
887
+ completerValue = lowerer.lowerExpr(value);
888
+ completerAt = pre.length;
889
+ pre.push({ kind: "exprStmt", expr: completerValue, loc });
890
+ };
891
+ const setTerminal = (value) => {
892
+ if (isNullish(value))
893
+ return;
894
+ if (value.kind === ts.SyntaxKind.FalseKeyword) {
895
+ terminalFalse = true;
896
+ return;
897
+ }
898
+ if (!(lowerer.typeOf(value).flags & ts.TypeFlags.BooleanLike)) {
899
+ lowerer.noLowering("the createInterface option 'terminal' with a value that is not a boolean", value);
900
+ }
901
+ const local = lowerer.declareHiddenLocal("%rlTerminal", BOOL);
902
+ pre.push({
903
+ kind: "varDecl",
904
+ localId: local.id,
905
+ init: lowerer.lowerExprExpecting(value, BOOL),
906
+ loc,
907
+ });
908
+ terminal = { kind: "varRef", localId: local.id, type: BOOL, loc };
909
+ };
910
+ const optsNode = expr.arguments.nodes[0];
235
911
  if (optsNode === undefined) {
236
912
  lowerer.noLowering("createInterface without arguments", expr, "pass { input: process.stdin, output: process.stdout } or createInterface(input, output)");
237
913
  }
238
914
  if (!ts.isObjectLiteralExpression(optsNode)) {
239
- if (expr.arguments.length > 2) {
240
- lowerer.noLowering("createInterface with a completer or terminal argument", expr.arguments[2], "the positional form createInterface(input, output) is supported (terminal line editing has no lowering)");
915
+ // createInterface(input, output?, completer?, terminal?)
916
+ if (expr.arguments.nodes.length > 4) {
917
+ lowerer.noLowering(`createInterface with ${expr.arguments.nodes.length} arguments`, expr.arguments.nodes[4], "pass createInterface(input, output, completer, terminal) or one options object");
241
918
  }
242
919
  input = lowerInput(lowerer, optsNode);
243
- if (expr.arguments[1] !== undefined)
244
- output = lowerOutput(lowerer, expr.arguments[1]);
920
+ if (expr.arguments.nodes[1] !== undefined)
921
+ output = lowerOutput(lowerer, expr.arguments.nodes[1]);
922
+ const completerNode = expr.arguments.nodes[2];
923
+ if (completerNode !== undefined &&
924
+ !(ts.isIdentifier(completerNode) && completerNode.text === "undefined")) {
925
+ setCompleter(completerNode);
926
+ }
927
+ if (expr.arguments.nodes[3] !== undefined)
928
+ setTerminal(expr.arguments.nodes[3]);
245
929
  }
246
930
  else {
247
- if (expr.arguments.length > 1) {
248
- lowerer.noLowering("createInterface with more than one argument", expr.arguments[1], "pass every option in the one options object");
931
+ if (expr.arguments.nodes.length > 1) {
932
+ lowerer.noLowering("createInterface with more than one argument", expr.arguments.nodes[1], "pass every option in the one options object");
249
933
  }
250
934
  let sawInput = false;
251
- for (const p of optsNode.properties) {
252
- if (!ts.isPropertyAssignment(p) || !ts.isIdentifier(p.name)) {
253
- lowerer.noLowering("createInterface with this options shape", p, "spreads, computed keys, and shorthand options have no lowering — write each member inline");
935
+ for (const p of optsNode.properties.nodes) {
936
+ const shorthand = ts.isShorthandPropertyAssignment(p);
937
+ if (!(shorthand || (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name)))) {
938
+ lowerer.noLowering("createInterface with this options shape", p, "spreads and computed keys have no lowering — write each member inline");
254
939
  }
255
940
  const member = p.name.text;
941
+ // `{ input }` reads the binding of the same name
942
+ const value = shorthand
943
+ ? p.name
944
+ : p.initializer;
945
+ const numeric = () => {
946
+ if (!(lowerer.typeOf(value).flags & ts.TypeFlags.NumberLike)) {
947
+ lowerer.noLowering(`the createInterface option '${member}' with a value that is not a number`, value);
948
+ }
949
+ return lowerer.lowerExprExpecting(value, F64);
950
+ };
256
951
  if (member === "input") {
257
- input = lowerInput(lowerer, p.initializer);
952
+ input = lowerInput(lowerer, value);
258
953
  sawInput = true;
259
954
  }
260
955
  else if (member === "output") {
261
- output = lowerOutput(lowerer, p.initializer);
956
+ output = lowerOutput(lowerer, value);
262
957
  }
263
- else if (member === "terminal") {
264
- const t = lowerer.typeOf(p.initializer);
265
- if (!(t.flags & ts.TypeFlags.BooleanLiteral) ||
266
- lowerer.checker.typeToString(t) !== "false") {
267
- lowerer.noLowering("createInterface with terminal enabled", p.initializer, "terminal line editing has no lowering — the pipe behavior is what compiles");
958
+ else if (member === "tabSize") {
959
+ tabSize = numeric();
960
+ }
961
+ else if (member === "escapeCodeTimeout") {
962
+ escapeTimeout = numeric();
963
+ }
964
+ else if (member === "historySize") {
965
+ historySize = numeric();
966
+ }
967
+ else if (member === "history") {
968
+ const h = lowerer.lowerExpr(value);
969
+ if (h.type.kind !== "array" || h.type.elem.kind !== "string") {
970
+ lowerer.noLowering("createInterface with a history that is not a string array", value, "pass the history as a string[]");
268
971
  }
972
+ history = h;
973
+ }
974
+ else if (member === "removeHistoryDuplicates") {
975
+ if (!(lowerer.typeOf(value).flags & ts.TypeFlags.BooleanLike)) {
976
+ lowerer.noLowering("the createInterface option 'removeHistoryDuplicates' with a value that is not a boolean", value);
977
+ }
978
+ removeDups = lowerer.lowerExprExpecting(value, BOOL);
979
+ }
980
+ else if (member === "completer") {
981
+ setCompleter(value);
982
+ }
983
+ else if (member === "terminal") {
984
+ setTerminal(value);
269
985
  }
270
986
  else if (member === "crlfDelay") {
271
- crlf = lowerer.lowerExprExpecting(p.initializer, F64);
987
+ crlf = lowerer.lowerExprExpecting(value, F64);
272
988
  }
273
989
  else if (member === "prompt") {
274
- prompt = lowerer.lowerExprExpecting(p.initializer, STRING);
990
+ prompt = lowerer.lowerExprExpecting(value, STRING);
275
991
  }
276
992
  else if (member === "signal") {
277
- signal = lowerer.lowerExprExpecting(p.initializer, DYN);
278
- }
279
- else if (member === "completer") {
280
- lowerer.noLowering("createInterface with a completer", p, "tab completion needs an interactive terminal — the lowered interface reads piped lines (terminal: false)");
993
+ signal = lowerer.lowerExprExpecting(value, DYN);
281
994
  }
282
995
  else {
283
- fenceOrDropOptionKey(lowerer, p, member, "createInterface", READLINE_DOCUMENTED_OPTIONS, "input, output, terminal: false, crlfDelay, prompt and signal are the supported options");
996
+ fenceOrDropOptionKey(lowerer, p, member, "createInterface", READLINE_DOCUMENTED_OPTIONS, "input, output, terminal, crlfDelay, prompt, signal, history, historySize, removeHistoryDuplicates, completer, tabSize and escapeCodeTimeout are the supported options");
284
997
  // An undocumented key, dropped like Node drops it.
285
998
  }
286
999
  }
@@ -292,7 +1005,8 @@ export function lowerReadlineCreateCall(lowerer, expr, loc) {
292
1005
  (typeof output === "object" ? 2 : 0) |
293
1006
  (output === "stdout" ? 4 : 0) |
294
1007
  (signal !== null ? 8 : 0) |
295
- (prompt !== null ? 16 : 0);
1008
+ (prompt !== null ? 16 : 0) |
1009
+ (promises ? 32 : 0);
296
1010
  const args = [numLit(mode, loc)];
297
1011
  if (input !== null)
298
1012
  args.push(input);
@@ -303,12 +1017,160 @@ export function lowerReadlineCreateCall(lowerer, expr, loc) {
303
1017
  args.push(prompt);
304
1018
  if (signal !== null)
305
1019
  args.push(signal);
306
- return {
1020
+ const create = {
307
1021
  kind: "libCall",
308
1022
  fn: signal !== null ? "rl.createSignal" : "rl.create",
309
1023
  args,
310
1024
  type: F64,
311
1025
  loc,
312
1026
  };
1027
+ // terminal mode: 0 the option's value, 2 output.isTTY of process.stdout
1028
+ const terminalMode = terminal !== null ? 0 : !terminalFalse && output === "stdout" ? 2 : null;
1029
+ // The completer is kept as a checked-dynamic value when the interface
1030
+ // can be a terminal one; a function is otherwise only evaluated.
1031
+ let completerChecked = false;
1032
+ if (completerValue !== null && (terminalMode !== null || completerValue.type.kind !== "func")) {
1033
+ const local = lowerer.declareHiddenLocal("%rlCompleter", DYN);
1034
+ pre[completerAt] = {
1035
+ kind: "varDecl",
1036
+ localId: local.id,
1037
+ init: lowerer.coerceToExpected(completerValue, DYN),
1038
+ loc,
1039
+ };
1040
+ completer = { kind: "varRef", localId: local.id, type: DYN, loc };
1041
+ completerChecked = completerValue.type.kind !== "func";
1042
+ }
1043
+ if (pre.length === 0 &&
1044
+ !tabSize &&
1045
+ !escapeTimeout &&
1046
+ !historySize &&
1047
+ !history &&
1048
+ !removeDups &&
1049
+ !completer &&
1050
+ terminalMode === null) {
1051
+ return create;
1052
+ }
1053
+ // The numeric options are evaluated once, checked in Node's order
1054
+ // before the interface opens, then stored on it with the history.
1055
+ const stmts = [...pre];
1056
+ const temp = (name, v) => {
1057
+ if (v === null)
1058
+ return numLit(0, loc);
1059
+ const l = lowerer.declareHiddenLocal(name, F64);
1060
+ stmts.push({ kind: "varDecl", localId: l.id, init: v, loc });
1061
+ return { kind: "varRef", localId: l.id, type: F64, loc };
1062
+ };
1063
+ const flags = (tabSize ? 1 : 0) | (escapeTimeout ? 2 : 0) | (historySize ? 4 : 0);
1064
+ const tab = temp("%rlTabSize", tabSize);
1065
+ const esc = temp("%rlEscapeCodeTimeout", escapeTimeout);
1066
+ const size = temp("%rlHistorySize", historySize);
1067
+ if (flags !== 0) {
1068
+ stmts.push({
1069
+ kind: "exprStmt",
1070
+ expr: {
1071
+ kind: "libCall",
1072
+ fn: "rl.checkOptions",
1073
+ args: [numLit(flags, loc), tab, esc, size],
1074
+ type: VOID,
1075
+ loc,
1076
+ },
1077
+ loc,
1078
+ });
1079
+ }
1080
+ if (completer && completerChecked) {
1081
+ stmts.push({
1082
+ kind: "exprStmt",
1083
+ expr: { kind: "libCall", fn: "rl.checkCompleter", args: [completer], type: VOID, loc },
1084
+ loc,
1085
+ });
1086
+ }
1087
+ const id = lowerer.declareHiddenLocal("%rl", F64);
1088
+ const idRef = { kind: "varRef", localId: id.id, type: F64, loc };
1089
+ stmts.push({ kind: "varDecl", localId: id.id, init: create, loc });
1090
+ stmts.push({
1091
+ kind: "exprStmt",
1092
+ expr: {
1093
+ kind: "libCall",
1094
+ fn: "rl.setOptions",
1095
+ args: [idRef, numLit(flags, loc), size, removeDups ?? boolLit(false, loc), tab, esc],
1096
+ type: VOID,
1097
+ loc,
1098
+ },
1099
+ loc,
1100
+ });
1101
+ if (history) {
1102
+ stmts.push({
1103
+ kind: "exprStmt",
1104
+ expr: { kind: "libCall", fn: "rl.setHistory", args: [idRef, history], type: VOID, loc },
1105
+ loc,
1106
+ });
1107
+ }
1108
+ if (terminalMode !== null) {
1109
+ stmts.push({
1110
+ kind: "exprStmt",
1111
+ expr: {
1112
+ kind: "libCall",
1113
+ fn: "rl.terminal",
1114
+ args: [
1115
+ idRef,
1116
+ numLit(terminalMode, loc),
1117
+ terminal ?? boolLit(false, loc),
1118
+ completer ?? dynUndefinedExpr(loc),
1119
+ boolLit(promises, loc),
1120
+ ],
1121
+ type: VOID,
1122
+ loc,
1123
+ },
1124
+ loc,
1125
+ });
1126
+ }
1127
+ return { kind: "seqExpr", stmts, result: idRef, type: F64, loc };
1128
+ }
1129
+ /** Property reads on an Interface: `history` (the history option itself,
1130
+ * or the interface's own empty array), `historySize`, `historyIndex`,
1131
+ * `crlfDelay`, `tabSize`, `escapeCodeTimeout`, `line`, `terminal` and
1132
+ * `cursor` (a non-terminal interface's undefined cursor throws SC2020).
1133
+ * Null for other receivers. */
1134
+ export function lowerReadlineProperty(lowerer, access) {
1135
+ if (access.questionDotToken)
1136
+ return null;
1137
+ if (!isReadlineTyped(lowerer, access.expression))
1138
+ return null;
1139
+ if (!lowerer.isStdlibMember(access))
1140
+ return null;
1141
+ const name = access.name.text;
1142
+ const loc = locOf(access);
1143
+ const numeric = {
1144
+ historySize: 0,
1145
+ historyIndex: 1,
1146
+ crlfDelay: 2,
1147
+ tabSize: 3,
1148
+ escapeCodeTimeout: 4,
1149
+ };
1150
+ if (name === "history") {
1151
+ const recv = lowerer.lowerExprExpecting(access.expression, F64);
1152
+ return { kind: "libCall", fn: "rl.history", args: [recv], type: arrayOf(STRING), loc };
1153
+ }
1154
+ if (numeric[name] !== undefined) {
1155
+ const recv = lowerer.lowerExprExpecting(access.expression, F64);
1156
+ return {
1157
+ kind: "libCall",
1158
+ fn: "rl.numProp",
1159
+ args: [recv, numLit(numeric[name], loc)],
1160
+ type: F64,
1161
+ loc,
1162
+ };
1163
+ }
1164
+ const reads = {
1165
+ line: ["rl.line", STRING],
1166
+ terminal: ["rl.isTerminal", BOOL],
1167
+ cursor: ["rl.cursor", F64],
1168
+ };
1169
+ const read = reads[name];
1170
+ if (read !== undefined) {
1171
+ const recv = lowerer.lowerExprExpecting(access.expression, F64);
1172
+ return { kind: "libCall", fn: read[0], args: [recv], type: read[1], loc };
1173
+ }
1174
+ return null;
313
1175
  }
314
1176
  //# sourceMappingURL=readline.js.map