@scriptc/compiler 0.3.2 → 0.3.4

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 (454) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +1202 -64
  2. package/dist/backend/cycle-analysis.js +6 -1
  3. package/dist/backend/cycle-analysis.js.map +1 -1
  4. package/dist/backend/cycle-mutability.d.ts +5 -0
  5. package/dist/backend/cycle-mutability.js +62 -3
  6. package/dist/backend/cycle-mutability.js.map +1 -1
  7. package/dist/backend/executable-features.js +1 -0
  8. package/dist/backend/executable-features.js.map +1 -1
  9. package/dist/backend/library-pack.js +1 -0
  10. package/dist/backend/library-pack.js.map +1 -1
  11. package/dist/backend/llvm/alloc.js +24 -10
  12. package/dist/backend/llvm/alloc.js.map +1 -1
  13. package/dist/backend/llvm/alloc.test.js +47 -1
  14. package/dist/backend/llvm/alloc.test.js.map +1 -1
  15. package/dist/backend/llvm/array-search.d.ts +8 -0
  16. package/dist/backend/llvm/array-search.js +52 -0
  17. package/dist/backend/llvm/array-search.js.map +1 -0
  18. package/dist/backend/llvm/array-search.test.d.ts +1 -0
  19. package/dist/backend/llvm/array-search.test.js +72 -0
  20. package/dist/backend/llvm/array-search.test.js.map +1 -0
  21. package/dist/backend/llvm/call-lifetimes.d.ts +12 -1
  22. package/dist/backend/llvm/call-lifetimes.js +41 -11
  23. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  24. package/dist/backend/llvm/call-lifetimes.test.js +85 -1
  25. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  26. package/dist/backend/llvm/classes.js +87 -36
  27. package/dist/backend/llvm/classes.js.map +1 -1
  28. package/dist/backend/llvm/common.d.ts +6 -1
  29. package/dist/backend/llvm/common.js +8 -1
  30. package/dist/backend/llvm/common.js.map +1 -1
  31. package/dist/backend/llvm/dense-array-access.d.ts +5 -0
  32. package/dist/backend/llvm/dense-array-access.js +3 -3
  33. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  34. package/dist/backend/llvm/dyn.d.ts +44 -1
  35. package/dist/backend/llvm/dyn.js +251 -36
  36. package/dist/backend/llvm/dyn.js.map +1 -1
  37. package/dist/backend/llvm/emitter.d.ts +77 -14
  38. package/dist/backend/llvm/emitter.js +461 -108
  39. package/dist/backend/llvm/emitter.js.map +1 -1
  40. package/dist/backend/llvm/emitter.test.js +26 -3
  41. package/dist/backend/llvm/emitter.test.js.map +1 -1
  42. package/dist/backend/llvm/expr-async.js +52 -1
  43. package/dist/backend/llvm/expr-async.js.map +1 -1
  44. package/dist/backend/llvm/expr-bytes.d.ts +9 -0
  45. package/dist/backend/llvm/expr-bytes.js +169 -63
  46. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  47. package/dist/backend/llvm/expr-callbacks.js +16 -2
  48. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  49. package/dist/backend/llvm/expr-calls.d.ts +3 -1
  50. package/dist/backend/llvm/expr-calls.js +57 -2
  51. package/dist/backend/llvm/expr-calls.js.map +1 -1
  52. package/dist/backend/llvm/expr-containers.js +57 -19
  53. package/dist/backend/llvm/expr-containers.js.map +1 -1
  54. package/dist/backend/llvm/expr-dynamic.js +19 -8
  55. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  56. package/dist/backend/llvm/expr-primitives.js +28 -30
  57. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  58. package/dist/backend/llvm/expr-records.js +8 -4
  59. package/dist/backend/llvm/expr-records.js.map +1 -1
  60. package/dist/backend/llvm/expr-stream-bridges.js +35 -32
  61. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  62. package/dist/backend/llvm/expr-stream-callbacks.d.ts +13 -2
  63. package/dist/backend/llvm/expr-stream-callbacks.js +80 -5
  64. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  65. package/dist/backend/llvm/inline-unions.d.ts +48 -0
  66. package/dist/backend/llvm/inline-unions.js +134 -0
  67. package/dist/backend/llvm/inline-unions.js.map +1 -0
  68. package/dist/backend/llvm/inline-unions.test.d.ts +1 -0
  69. package/dist/backend/llvm/inline-unions.test.js +124 -0
  70. package/dist/backend/llvm/inline-unions.test.js.map +1 -0
  71. package/dist/backend/llvm/integer-remainder.d.ts +28 -5
  72. package/dist/backend/llvm/integer-remainder.js +80 -9
  73. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  74. package/dist/backend/llvm/intern-tables.test.d.ts +1 -0
  75. package/dist/backend/llvm/intern-tables.test.js +77 -0
  76. package/dist/backend/llvm/intern-tables.test.js.map +1 -0
  77. package/dist/backend/llvm/lib-datagram.js +10 -0
  78. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  79. package/dist/backend/llvm/lib-dispatch.js +255 -29
  80. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  81. package/dist/backend/llvm/lib-filesystem.js +176 -7
  82. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  83. package/dist/backend/llvm/lib-network.js +25 -6
  84. package/dist/backend/llvm/lib-network.js.map +1 -1
  85. package/dist/backend/llvm/lib-process.js +2 -2
  86. package/dist/backend/llvm/lib-process.js.map +1 -1
  87. package/dist/backend/llvm/lib-shared.d.ts +5 -0
  88. package/dist/backend/llvm/lib-shared.js +212 -1
  89. package/dist/backend/llvm/lib-shared.js.map +1 -1
  90. package/dist/backend/llvm/lib-stream.js +184 -0
  91. package/dist/backend/llvm/lib-stream.js.map +1 -1
  92. package/dist/backend/llvm/lib-test.js +9 -0
  93. package/dist/backend/llvm/lib-test.js.map +1 -1
  94. package/dist/backend/llvm/local-array-reads.js +7 -3
  95. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  96. package/dist/backend/llvm/local-array-reads.test.js +6 -3
  97. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  98. package/dist/backend/llvm/local-union-storage.d.ts +2 -0
  99. package/dist/backend/llvm/local-union-storage.js +5 -0
  100. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  101. package/dist/backend/llvm/local-union-storage.test.js +1 -0
  102. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  103. package/dist/backend/llvm/loop-array-borrows.d.ts +8 -2
  104. package/dist/backend/llvm/loop-array-borrows.js +93 -13
  105. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  106. package/dist/backend/llvm/map-number-lookup.d.ts +24 -0
  107. package/dist/backend/llvm/map-number-lookup.js +88 -0
  108. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  109. package/dist/backend/llvm/map-number-lookup.test.d.ts +1 -0
  110. package/dist/backend/llvm/map-number-lookup.test.js +158 -0
  111. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
  112. package/dist/backend/llvm/map-read-lifetimes.d.ts +9 -0
  113. package/dist/backend/llvm/map-read-lifetimes.js +90 -1
  114. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  115. package/dist/backend/llvm/map-read-lifetimes.test.js +129 -1
  116. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  117. package/dist/backend/llvm/publish.d.ts +9 -0
  118. package/dist/backend/llvm/publish.js +25 -4
  119. package/dist/backend/llvm/publish.js.map +1 -1
  120. package/dist/backend/llvm/record-results.d.ts +8 -5
  121. package/dist/backend/llvm/record-results.js +20 -12
  122. package/dist/backend/llvm/record-results.js.map +1 -1
  123. package/dist/backend/llvm/reference-effects.js +13 -0
  124. package/dist/backend/llvm/reference-effects.js.map +1 -1
  125. package/dist/backend/llvm/reference-writes.js +19 -2
  126. package/dist/backend/llvm/reference-writes.js.map +1 -1
  127. package/dist/backend/llvm/regions.d.ts +5 -1
  128. package/dist/backend/llvm/regions.js +24 -10
  129. package/dist/backend/llvm/regions.js.map +1 -1
  130. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  131. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  132. package/dist/backend/llvm/shapes.d.ts +56 -10
  133. package/dist/backend/llvm/shapes.js +178 -39
  134. package/dist/backend/llvm/shapes.js.map +1 -1
  135. package/dist/backend/llvm/shapes.test.js +61 -3
  136. package/dist/backend/llvm/shapes.test.js.map +1 -1
  137. package/dist/backend/llvm/stack-objects.js +16 -4
  138. package/dist/backend/llvm/stack-objects.js.map +1 -1
  139. package/dist/backend/llvm/stack-objects.test.js +3 -0
  140. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  141. package/dist/backend/llvm/string-reads.js +2 -2
  142. package/dist/backend/llvm/string-reads.js.map +1 -1
  143. package/dist/backend/llvm/string-slices.js +2 -2
  144. package/dist/backend/llvm/string-slices.js.map +1 -1
  145. package/dist/backend/llvm/walkers.d.ts +11 -0
  146. package/dist/backend/llvm/walkers.js +106 -10
  147. package/dist/backend/llvm/walkers.js.map +1 -1
  148. package/dist/backend/may-throw.js +13 -4
  149. package/dist/backend/may-throw.js.map +1 -1
  150. package/dist/backend/native/contracts.d.ts +5 -2
  151. package/dist/backend/native/executable.js +27 -8
  152. package/dist/backend/native/executable.js.map +1 -1
  153. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  154. package/dist/backend/native/runtime-inputs.js +2 -0
  155. package/dist/backend/native/runtime-inputs.js.map +1 -1
  156. package/dist/backend/native-codegen-core.d.ts +4 -4
  157. package/dist/backend/native-codegen-core.js +4 -6
  158. package/dist/backend/native-codegen-core.js.map +1 -1
  159. package/dist/backend/native-codegen.test.js +7 -8
  160. package/dist/backend/native-codegen.test.js.map +1 -1
  161. package/dist/backend/native-link-info-core.d.ts +3 -0
  162. package/dist/backend/native-link-info-core.js.map +1 -1
  163. package/dist/backend/native-toolchain.test.js +1 -1
  164. package/dist/backend/native-toolchain.test.js.map +1 -1
  165. package/dist/backend/publication.js +3 -1
  166. package/dist/backend/publication.js.map +1 -1
  167. package/dist/backend/runtime-abi.d.ts +2 -2
  168. package/dist/backend/runtime-abi.js +2 -2
  169. package/dist/backend/runtime-pack-targets.test.js +2 -1
  170. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  171. package/dist/backend/runtime-pack.test.js +2 -1
  172. package/dist/backend/runtime-pack.test.js.map +1 -1
  173. package/dist/backend/target-diagnostics.js +11 -1
  174. package/dist/backend/target-diagnostics.js.map +1 -1
  175. package/dist/backend/target-diagnostics.test.js +4 -1
  176. package/dist/backend/target-diagnostics.test.js.map +1 -1
  177. package/dist/backend/warm-cache.js +1 -0
  178. package/dist/backend/warm-cache.js.map +1 -1
  179. package/dist/compat/fetch-profile.js +4 -4
  180. package/dist/compat/fetch-profile.js.map +1 -1
  181. package/dist/contracts/check.js +2 -0
  182. package/dist/contracts/check.js.map +1 -1
  183. package/dist/coverage/report.js +1 -1
  184. package/dist/coverage/report.js.map +1 -1
  185. package/dist/diagnostics/diagnostic.d.ts +6 -5
  186. package/dist/diagnostics/diagnostic.js +7 -6
  187. package/dist/diagnostics/diagnostic.js.map +1 -1
  188. package/dist/executable/executable-cache.d.ts +1 -0
  189. package/dist/executable/executable-cache.js +1 -0
  190. package/dist/executable/executable-cache.js.map +1 -1
  191. package/dist/executable/executable-cache.test.js +1 -0
  192. package/dist/executable/executable-cache.test.js.map +1 -1
  193. package/dist/frontend/builtin-modules.d.ts +1 -1
  194. package/dist/frontend/builtin-modules.js +1 -0
  195. package/dist/frontend/builtin-modules.js.map +1 -1
  196. package/dist/frontend/comptime-node.js +2 -2
  197. package/dist/frontend/comptime-node.js.map +1 -1
  198. package/dist/frontend/experimental-import.d.ts +5 -1
  199. package/dist/frontend/experimental-import.js +28 -3
  200. package/dist/frontend/experimental-import.js.map +1 -1
  201. package/dist/frontend/lowering/assert-instances.d.ts +38 -0
  202. package/dist/frontend/lowering/assert-instances.js +269 -0
  203. package/dist/frontend/lowering/assert-instances.js.map +1 -0
  204. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  205. package/dist/frontend/lowering/binding-analysis.js +1 -1
  206. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  207. package/dist/frontend/lowering/builtins/arguments.js +8 -4
  208. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  209. package/dist/frontend/lowering/builtins/blob.d.ts +20 -0
  210. package/dist/frontend/lowering/builtins/blob.js +167 -0
  211. package/dist/frontend/lowering/builtins/blob.js.map +1 -0
  212. package/dist/frontend/lowering/builtins/child-process-async.d.ts +2 -2
  213. package/dist/frontend/lowering/builtins/child-process-async.js +2 -2
  214. package/dist/frontend/lowering/builtins/child-process-methods.js +1 -1
  215. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  216. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -1
  217. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  218. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  219. package/dist/frontend/lowering/builtins/compression.js +178 -4
  220. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  221. package/dist/frontend/lowering/builtins/constants.js +7 -2
  222. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  223. package/dist/frontend/lowering/builtins/crypto.d.ts +6 -0
  224. package/dist/frontend/lowering/builtins/crypto.js +526 -121
  225. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  226. package/dist/frontend/lowering/builtins/errors.js +23 -0
  227. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  228. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +10 -0
  229. package/dist/frontend/lowering/builtins/filesystem-calls.js +89 -1
  230. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  231. package/dist/frontend/lowering/builtins/filesystem.d.ts +16 -7
  232. package/dist/frontend/lowering/builtins/filesystem.js +97 -15
  233. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  234. package/dist/frontend/lowering/builtins/fs-glob.d.ts +23 -0
  235. package/dist/frontend/lowering/builtins/fs-glob.js +224 -0
  236. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -0
  237. package/dist/frontend/lowering/builtins/key-object.d.ts +13 -0
  238. package/dist/frontend/lowering/builtins/key-object.js +56 -0
  239. package/dist/frontend/lowering/builtins/key-object.js.map +1 -0
  240. package/dist/frontend/lowering/builtins/module-calls.js +44 -11
  241. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  242. package/dist/frontend/lowering/builtins/performance.d.ts +25 -3
  243. package/dist/frontend/lowering/builtins/performance.js +340 -5
  244. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  245. package/dist/frontend/lowering/builtins/process.d.ts +2 -2
  246. package/dist/frontend/lowering/builtins/process.js +107 -14
  247. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  248. package/dist/frontend/lowering/builtins/properties.d.ts +0 -7
  249. package/dist/frontend/lowering/builtins/properties.js +39 -11
  250. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  251. package/dist/frontend/lowering/builtins/readline.d.ts +23 -8
  252. package/dist/frontend/lowering/builtins/readline.js +266 -90
  253. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  254. package/dist/frontend/lowering/builtins/timers.d.ts +3 -0
  255. package/dist/frontend/lowering/builtins/timers.js +109 -23
  256. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  257. package/dist/frontend/lowering/builtins/url.d.ts +8 -0
  258. package/dist/frontend/lowering/builtins/url.js +36 -0
  259. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  260. package/dist/frontend/lowering/call-arguments.js +1 -1
  261. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  262. package/dist/frontend/lowering/call-signatures.js +26 -2
  263. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  264. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +2 -0
  265. package/dist/frontend/lowering/class-dynamic-dispatch.js +171 -13
  266. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  267. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
  268. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  269. package/dist/frontend/lowering/class-protocol-dispatch.d.ts +45 -0
  270. package/dist/frontend/lowering/class-protocol-dispatch.js +516 -0
  271. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -0
  272. package/dist/frontend/lowering/coercions/structural-plans.js +2 -1
  273. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  274. package/dist/frontend/lowering/coercions/structural.js +3 -3
  275. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  276. package/dist/frontend/lowering/collation-repertoire.js +6 -5
  277. package/dist/frontend/lowering/collation-repertoire.js.map +1 -1
  278. package/dist/frontend/lowering/containers/array-callbacks.js +4 -7
  279. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  280. package/dist/frontend/lowering/containers/array-methods.d.ts +0 -7
  281. package/dist/frontend/lowering/containers/array-methods.js +43 -2
  282. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  283. package/dist/frontend/lowering/containers/bytes.js +38 -26
  284. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  285. package/dist/frontend/lowering/containers/for-of.d.ts +1 -1
  286. package/dist/frontend/lowering/containers/for-of.js +5 -1
  287. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  288. package/dist/frontend/lowering/containers/indexed-objects.js +1 -1
  289. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  290. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  291. package/dist/frontend/lowering/crypto-tables.js +77 -12
  292. package/dist/frontend/lowering/crypto-tables.js.map +1 -1
  293. package/dist/frontend/lowering/expressions/nullish-assignment.js +10 -0
  294. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  295. package/dist/frontend/lowering/expressions/object-literals.js +16 -12
  296. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  297. package/dist/frontend/lowering/generic-functions.d.ts +2 -2
  298. package/dist/frontend/lowering/generic-functions.js +2 -2
  299. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  300. package/dist/frontend/lowering/http2-constants.js +1 -1
  301. package/dist/frontend/lowering/intern-tables.d.ts +13 -0
  302. package/dist/frontend/lowering/intern-tables.js +536 -0
  303. package/dist/frontend/lowering/intern-tables.js.map +1 -0
  304. package/dist/frontend/lowering/lower-array-sort.d.ts +12 -1
  305. package/dist/frontend/lowering/lower-array-sort.js +561 -191
  306. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  307. package/dist/frontend/lowering/lower-array-sort.test.js +4 -2
  308. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  309. package/dist/frontend/lowering/lower-assert.js +702 -63
  310. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  311. package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
  312. package/dist/frontend/lowering/lower-async-iteration.js +259 -4
  313. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  314. package/dist/frontend/lowering/lower-calls.js +118 -12
  315. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  316. package/dist/frontend/lowering/lower-classes.d.ts +11 -2
  317. package/dist/frontend/lowering/lower-classes.js +76 -9
  318. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  319. package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
  320. package/dist/frontend/lowering/lower-comptime.js +4 -4
  321. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  322. package/dist/frontend/lowering/lower-dgram.js +77 -52
  323. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  324. package/dist/frontend/lowering/lower-event-target.d.ts +63 -0
  325. package/dist/frontend/lowering/lower-event-target.js +362 -0
  326. package/dist/frontend/lowering/lower-event-target.js.map +1 -0
  327. package/dist/frontend/lowering/lower-expando.js +2 -2
  328. package/dist/frontend/lowering/lower-exprs.js +124 -22
  329. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  330. package/dist/frontend/lowering/lower-inspect.d.ts +6 -0
  331. package/dist/frontend/lowering/lower-inspect.js +240 -49
  332. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  333. package/dist/frontend/lowering/lower-mixins.js +1 -1
  334. package/dist/frontend/lowering/lower-mock.d.ts +11 -0
  335. package/dist/frontend/lowering/lower-mock.js +504 -0
  336. package/dist/frontend/lowering/lower-mock.js.map +1 -0
  337. package/dist/frontend/lowering/lower-modules.d.ts +1 -1
  338. package/dist/frontend/lowering/lower-modules.js +14 -3
  339. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  340. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -2
  341. package/dist/frontend/lowering/lower-namespaces.js +2 -2
  342. package/dist/frontend/lowering/lower-server.d.ts +3 -0
  343. package/dist/frontend/lowering/lower-server.js +419 -44
  344. package/dist/frontend/lowering/lower-server.js.map +1 -1
  345. package/dist/frontend/lowering/lower-stdlib.d.ts +7 -1
  346. package/dist/frontend/lowering/lower-stdlib.js +10 -3
  347. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  348. package/dist/frontend/lowering/lower-stmts.d.ts +2 -2
  349. package/dist/frontend/lowering/lower-stmts.js +69 -14
  350. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  351. package/dist/frontend/lowering/lower-stream.d.ts +10 -6
  352. package/dist/frontend/lowering/lower-stream.js +1020 -49
  353. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  354. package/dist/frontend/lowering/lower-test.js +86 -8
  355. package/dist/frontend/lowering/lower-test.js.map +1 -1
  356. package/dist/frontend/lowering/lower-timers.js +1 -1
  357. package/dist/frontend/lowering/lowerer.d.ts +45 -5
  358. package/dist/frontend/lowering/lowerer.js +317 -48
  359. package/dist/frontend/lowering/lowerer.js.map +1 -1
  360. package/dist/frontend/lowering/native-ffi.js +2 -2
  361. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  362. package/dist/frontend/lowering/pairs-snapshot.d.ts +6 -0
  363. package/dist/frontend/lowering/pairs-snapshot.js +49 -0
  364. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  365. package/dist/frontend/lowering/runtime-optional-records.d.ts +115 -0
  366. package/dist/frontend/lowering/runtime-optional-records.js +715 -0
  367. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -0
  368. package/dist/frontend/lowering/runtime-optional-records.test.d.ts +1 -0
  369. package/dist/frontend/lowering/runtime-optional-records.test.js +175 -0
  370. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -0
  371. package/dist/frontend/lowering/surfaces.d.ts +11 -3
  372. package/dist/frontend/lowering/surfaces.js +334 -37
  373. package/dist/frontend/lowering/surfaces.js.map +1 -1
  374. package/dist/frontend/lowering/zlib-constants.d.ts +1 -0
  375. package/dist/frontend/lowering/zlib-constants.js +181 -0
  376. package/dist/frontend/lowering/zlib-constants.js.map +1 -0
  377. package/dist/frontend/mock-shapes.d.ts +10 -0
  378. package/dist/frontend/mock-shapes.js +76 -0
  379. package/dist/frontend/mock-shapes.js.map +1 -0
  380. package/dist/frontend/module-syntax.d.ts +1 -1
  381. package/dist/frontend/module-syntax.js +1 -1
  382. package/dist/frontend/npm-static-prune.js +1 -1
  383. package/dist/frontend/npm-static-prune.js.map +1 -1
  384. package/dist/frontend/npm-static-rewrite-syntax.js +4 -3
  385. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  386. package/dist/frontend/pipeline.js +6 -4
  387. package/dist/frontend/pipeline.js.map +1 -1
  388. package/dist/frontend/program.d.ts +3 -3
  389. package/dist/frontend/program.js +25 -18
  390. package/dist/frontend/program.js.map +1 -1
  391. package/dist/frontend/resolve.d.ts +4 -0
  392. package/dist/frontend/resolve.js +15 -1
  393. package/dist/frontend/resolve.js.map +1 -1
  394. package/dist/frontend/ts7/adapter.js +1 -1
  395. package/dist/frontend/ts7/ast-bytes.d.ts +1 -1
  396. package/dist/frontend/ts7/ast-bytes.js +1 -1
  397. package/dist/frontend/ts7/semantic-json.d.ts +1 -1
  398. package/dist/frontend/ts7/semantic-json.js +1 -1
  399. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  400. package/dist/frontend/ts7/world-check.js +1 -1
  401. package/dist/frontend/tsc-codes.js +3 -2
  402. package/dist/frontend/tsc-codes.js.map +1 -1
  403. package/dist/frontend/type-mapper.d.ts +21 -1
  404. package/dist/frontend/type-mapper.js +245 -27
  405. package/dist/frontend/type-mapper.js.map +1 -1
  406. package/dist/index.js +7 -5
  407. package/dist/index.js.map +1 -1
  408. package/dist/ir/analysis.d.ts +12 -6
  409. package/dist/ir/analysis.js +26 -10
  410. package/dist/ir/analysis.js.map +1 -1
  411. package/dist/ir/analysis.test.js +15 -3
  412. package/dist/ir/analysis.test.js.map +1 -1
  413. package/dist/ir/builtin-effects.js +115 -0
  414. package/dist/ir/builtin-effects.js.map +1 -1
  415. package/dist/ir/builtin-signatures.d.ts +1 -1
  416. package/dist/ir/builtin-signatures.js +438 -46
  417. package/dist/ir/builtin-signatures.js.map +1 -1
  418. package/dist/ir/int32-slots.js +1 -0
  419. package/dist/ir/int32-slots.js.map +1 -1
  420. package/dist/ir/ir.d.ts +84 -17
  421. package/dist/ir/ir.js +54 -1
  422. package/dist/ir/ir.js.map +1 -1
  423. package/dist/ir/runtime-features.d.ts +1 -0
  424. package/dist/ir/runtime-features.js +111 -7
  425. package/dist/ir/runtime-features.js.map +1 -1
  426. package/dist/ir/serialize.js +1 -1
  427. package/dist/ir/serialize.js.map +1 -1
  428. package/dist/ir/traverse.js +1 -0
  429. package/dist/ir/traverse.js.map +1 -1
  430. package/dist/ir/validate.js +295 -14
  431. package/dist/ir/validate.js.map +1 -1
  432. package/dist/ir/validate.test.js +60 -0
  433. package/dist/ir/validate.test.js.map +1 -1
  434. package/dist/library/fence-eval.d.ts +1 -1
  435. package/dist/library/fence-eval.js +5 -4
  436. package/dist/library/fence-eval.js.map +1 -1
  437. package/dist/library/ir-policy.js +11 -4
  438. package/dist/library/ir-policy.js.map +1 -1
  439. package/dist/library/library-profile.js +13 -13
  440. package/dist/library/library-profile.js.map +1 -1
  441. package/dist/library/prepare.js +1 -1
  442. package/dist/library/prepare.js.map +1 -1
  443. package/dist/library/sidecar.js +3 -3
  444. package/dist/library/sidecar.js.map +1 -1
  445. package/dist/native/cli.js +1 -0
  446. package/dist/native/cli.js.map +1 -1
  447. package/dist/native/compiler.js +1 -3
  448. package/dist/native/compiler.js.map +1 -1
  449. package/dist/native/prepare.js +4 -2
  450. package/dist/native/prepare.js.map +1 -1
  451. package/dist/native/sanitizer.test.js +1 -0
  452. package/dist/native/sanitizer.test.js.map +1 -1
  453. package/package.json +20 -20
  454. package/surface-manifest.json +1279 -221
@@ -1,13 +1,31 @@
1
1
  import * as ts from "../../ts7/adapter.js";
2
2
  import {} from "../lowerer.js";
3
3
  import { locOf } from "../../program.js";
4
- import { F64, STRING, VOID } from "../../../ir/ir.js";
4
+ import { DYN, F64, STRING, VOID } from "../../../ir/ir.js";
5
+ import { boolLit, numLit } from "../../../ir/build.js";
5
6
  import { READLINE_DOCUMENTED_OPTIONS, fenceOrDropOptionKey } from "../surfaces.js";
6
- /** True when `node`'s checker type is readline's Interface (stdlib
7
- * provenance + the enclosing "readline" ambient module — the name alone
8
- * is too generic). The interface maps to an f64 handle, so the IR type
9
- * cannot discriminate it from a plain number. */
10
- function isReadlineTyped(lowerer, node) {
7
+ import { streamSidesOf } from "../lower-stream.js";
8
+ /** The ambient module declaring `d`, or null. */
9
+ function ambientModuleOf(d) {
10
+ let up = d.parent;
11
+ while (up) {
12
+ if (ts.isModuleDeclaration(up) && ts.isStringLiteral(up.name))
13
+ return up.name.text;
14
+ up = up.parent;
15
+ }
16
+ return null;
17
+ }
18
+ function isReadlineModule(spec) {
19
+ return (spec === "readline" ||
20
+ spec === "node:readline" ||
21
+ spec === "readline/promises" ||
22
+ spec === "node:readline/promises");
23
+ }
24
+ /** True when `node`'s checker type is a readline Interface (stdlib
25
+ * provenance + the enclosing "readline" or "readline/promises" ambient
26
+ * module — the name alone is too generic). The interface maps to an f64
27
+ * handle, so the IR type cannot discriminate it from a plain number. */
28
+ export function isReadlineTyped(lowerer, node) {
11
29
  const t = lowerer.checker.getTypeAtLocation(node);
12
30
  const sym = t.getAliasSymbol() ?? t.getSymbol();
13
31
  if (sym?.name !== "Interface")
@@ -17,24 +35,45 @@ function isReadlineTyped(lowerer, node) {
17
35
  return false;
18
36
  if (!lowerer.isStdlibFile(d.getSourceFile()))
19
37
  return false;
20
- let up = d.parent;
21
- while (up) {
22
- if (ts.isModuleDeclaration(up) && ts.isStringLiteral(up.name)) {
23
- return up.name.text === "readline" || up.name.text === "node:readline";
24
- }
25
- up = up.parent;
26
- }
27
- return false;
38
+ return isReadlineModule(ambientModuleOf(d));
28
39
  });
29
40
  }
30
- /** Method calls on readline Interface receivers: `rl.question(query, cb)`
31
- * writes the query to stdout and delivers the next stdin line's text to
32
- * the callback (one (answer: string) parameter, or none); `rl.close()`
33
- * fires the 'close' listeners synchronously (Node's inline emit) and
34
- * releases the loop; `rl.on("close", cb)` registers a zero-arg
35
- * listener. Everything else the lib declares (on("line"), prompt,
36
- * setPrompt, ...) fences member-qualified. Null for non-Interface
37
- * receivers. */
41
+ /** The runtime's listener event numbers (scr_readline.c). */
42
+ const RL_EVENTS = { line: 0, close: 1, pause: 2, resume: 3, error: 4 };
43
+ /** True when the call's resolved signature answers a Promise — the
44
+ * readline/promises question. */
45
+ function returnsPromise(lowerer, call) {
46
+ const t = lowerer.checker.getTypeAtLocation(call);
47
+ return (t.getSymbol()?.name ?? "") === "Promise";
48
+ }
49
+ /** The `{ signal }` options argument of the promise question: the signal
50
+ * expression, or null when absent. Other members fence by name. */
51
+ function questionSignal(lowerer, node) {
52
+ if (node === undefined)
53
+ return null;
54
+ if (!ts.isObjectLiteralExpression(node)) {
55
+ lowerer.noLowering("readline/promises question options that are not an object literal", node, "write the options inline: question(query, { signal })");
56
+ }
57
+ let signal = null;
58
+ for (const p of node.properties) {
59
+ if (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && p.name.text === "signal") {
60
+ signal = p.initializer;
61
+ continue;
62
+ }
63
+ lowerer.noLowering("readline/promises question with this option", p, "signal is the supported question option");
64
+ }
65
+ return signal;
66
+ }
67
+ /** Method calls on readline Interface receivers (both modules):
68
+ * - question(query, cb) — the callback form; question(query, { signal }?)
69
+ * — the promise form (readline/promises);
70
+ * - close(), pause(), resume(), prompt(), setPrompt(p), getPrompt(),
71
+ * write(data);
72
+ * - 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.
75
+ * Everything else the lib declares fences member-qualified. Null for
76
+ * non-Interface receivers. */
38
77
  export function lowerReadlineMethodCall(lowerer, call, access) {
39
78
  if (call.questionDotToken || access.questionDotToken)
40
79
  return null;
@@ -44,95 +83,232 @@ export function lowerReadlineMethodCall(lowerer, call, access) {
44
83
  return null;
45
84
  const name = access.name.text;
46
85
  const loc = locOf(call);
47
- if (name === "question" && call.arguments.length === 2) {
48
- const receiver = lowerer.lowerExprExpecting(access.expression, F64);
49
- const query = lowerer.lowerExprExpecting(call.arguments[0], STRING);
50
- const cb = lowerer.lowerExpr(call.arguments[1]);
86
+ const args = call.arguments;
87
+ const receiver = () => lowerer.lowerExprExpecting(access.expression, F64);
88
+ if (name === "question" &&
89
+ returnsPromise(lowerer, call) &&
90
+ args.length >= 1 &&
91
+ args.length <= 2) {
92
+ const recv = receiver();
93
+ const query = lowerer.lowerExprExpecting(args[0], STRING);
94
+ const signal = questionSignal(lowerer, args[1]);
95
+ const type = { kind: "promise", inner: STRING };
96
+ if (signal === null) {
97
+ return { kind: "libCall", fn: "rl.questionAsync", args: [recv, query], type, loc };
98
+ }
99
+ const sig = lowerer.lowerExprExpecting(signal, DYN);
100
+ return { kind: "libCall", fn: "rl.questionAsyncSignal", args: [recv, query, sig], type, loc };
101
+ }
102
+ if (name === "question" && args.length === 2) {
103
+ const recv = receiver();
104
+ const query = lowerer.lowerExprExpecting(args[0], STRING);
105
+ const cb = lowerer.lowerExpr(args[1]);
51
106
  if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 1) {
52
- lowerer.unsupported("SC1090", call.arguments[1], "question callbacks with more than one parameter or a return value");
107
+ lowerer.unsupported("SC1090", args[1], "question callbacks with more than one parameter or a return value");
53
108
  }
54
109
  const param = cb.type.params[0];
55
- if (param !== undefined && param.kind !== "string") {
56
- lowerer.unsupported("SC1090", call.arguments[1], `question callbacks whose parameter is not 'string' (got '${lowerer.fmt(param)}')`);
110
+ if (param !== undefined && param.kind !== "string" && param.kind !== "dyn") {
111
+ lowerer.unsupported("SC1090", args[1], `question callbacks whose parameter is not 'string' (got '${lowerer.fmt(param)}')`);
112
+ }
113
+ return { kind: "libCall", fn: "rl.question", args: [recv, query, cb], type: VOID, loc };
114
+ }
115
+ const simple = {
116
+ close: "rl.close",
117
+ pause: "rl.pause",
118
+ resume: "rl.resume",
119
+ prompt: "rl.prompt",
120
+ };
121
+ const simpleFn = simple[name];
122
+ if (simpleFn !== undefined && (args.length === 0 || (name === "prompt" && args.length === 1))) {
123
+ if ((name === "pause" || name === "resume") && !ts.isExpressionStatement(call.parent)) {
124
+ lowerer.unsupported("SC1090", call, `using the result of readline ${name}() (call it as its own statement)`);
125
+ }
126
+ // prompt(preserveCursor) only moves the cursor of a terminal
127
+ // interface: a boolean literal is accepted and has no effect here.
128
+ 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");
57
133
  }
58
- return { kind: "libCall", fn: "rl.question", args: [receiver, query, cb], type: VOID, loc };
134
+ return { kind: "libCall", fn: simpleFn, args: [receiver()], type: VOID, loc };
135
+ }
136
+ if (name === "setPrompt" && args.length === 1) {
137
+ const recv = receiver();
138
+ const prompt = lowerer.lowerExprExpecting(args[0], STRING);
139
+ return { kind: "libCall", fn: "rl.setPrompt", args: [recv, prompt], type: VOID, loc };
59
140
  }
60
- if (name === "close" && call.arguments.length === 0) {
61
- const receiver = lowerer.lowerExprExpecting(access.expression, F64);
62
- return { kind: "libCall", fn: "rl.close", args: [receiver], type: VOID, loc };
141
+ if (name === "getPrompt" && args.length === 0) {
142
+ return { kind: "libCall", fn: "rl.getPrompt", args: [receiver()], type: STRING, loc };
63
143
  }
64
- if (name === "on" && call.arguments.length === 2) {
65
- const evT = lowerer.typeOf(call.arguments[0]);
144
+ if (name === "write" && args.length === 1) {
145
+ const recv = receiver();
146
+ const data = lowerer.lowerExprExpecting(args[0], STRING);
147
+ return { kind: "libCall", fn: "rl.write", args: [recv, data], type: VOID, loc };
148
+ }
149
+ if ((name === "on" || name === "once" || name === "addListener") && args.length === 2) {
150
+ const evT = lowerer.typeOf(args[0]);
66
151
  const event = evT.isStringLiteralType() ? evT.value : null;
67
- if (event !== "close") {
68
- lowerer.noLowering(`readline.Interface.on(${event === null ? "non-literal event" : `"${event}"`}, ...)`, call.arguments[0], '"close" is the supported readline event (question(query, cb) is the line consumer)');
152
+ const ev = event === null ? undefined : RL_EVENTS[event];
153
+ 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');
69
155
  }
70
156
  if (!ts.isExpressionStatement(call.parent)) {
71
- lowerer.unsupported("SC1090", call, "chaining readline listener registration (the result is void here — register each listener as its own statement)");
157
+ lowerer.unsupported("SC1090", call, "chaining readline listener registration (register each listener as its own statement)");
72
158
  }
73
- const receiver = lowerer.lowerExprExpecting(access.expression, F64);
74
- const cb = lowerer.lowerExpr(call.arguments[1]);
75
- if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 0) {
76
- lowerer.unsupported("SC1090", call.arguments[1], "close listeners with parameters or a return value (use ())");
159
+ const recv = receiver();
160
+ const cb = lowerer.lowerExpr(args[1]);
161
+ const want = event === "line" ? "string" : event === "error" ? "error" : null;
162
+ const param = cb.type.kind === "func" ? cb.type.params[0] : undefined;
163
+ const paramOk = param === undefined ||
164
+ (want !== null && param.kind === "dyn") ||
165
+ (want === "string" && param.kind === "string") ||
166
+ (want === "error" && param.kind === "object" && param.className === "Error");
167
+ if (cb.type.kind !== "func" ||
168
+ cb.type.ret.kind !== "void" ||
169
+ cb.type.params.length > (want === null ? 0 : 1) ||
170
+ !paramOk) {
171
+ lowerer.unsupported("SC1090", args[1], want === "string"
172
+ ? "'line' listeners other than (input: string) => void"
173
+ : want === "error"
174
+ ? "'error' listeners other than (err: Error) => void"
175
+ : `'${event}' listeners with parameters or a return value (use ())`);
77
176
  }
78
- return { kind: "libCall", fn: "rl.onClose", args: [receiver, cb], type: VOID, loc };
177
+ return {
178
+ kind: "libCall",
179
+ fn: "rl.on",
180
+ args: [recv, numLit(ev, loc), cb, boolLit(name === "once", loc)],
181
+ type: VOID,
182
+ loc,
183
+ };
184
+ }
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));
186
+ }
187
+ /** The interface's input: process.stdin (null) or a readable stream. */
188
+ function lowerInput(lowerer, node) {
189
+ if (ts.isPropertyAccessExpression(node) &&
190
+ lowerer.stdlibGlobalMember(node, "process") === "stdin") {
191
+ return null;
192
+ }
193
+ const v = lowerer.lowerExpr(node);
194
+ const info = v.type.kind === "object" ? lowerer.classes.get(v.type.className) : undefined;
195
+ const sides = streamSidesOf(lowerer, info);
196
+ if (sides !== "r" && sides !== "rw") {
197
+ lowerer.noLowering("createInterface with this input", node, "process.stdin and readable streams are the supported inputs");
198
+ }
199
+ return v;
200
+ }
201
+ /** The interface's output: "stdout", a writable stream, or "none". */
202
+ function lowerOutput(lowerer, node) {
203
+ if (ts.isPropertyAccessExpression(node) &&
204
+ lowerer.stdlibGlobalMember(node, "process") === "stdout") {
205
+ return "stdout";
79
206
  }
80
- lowerer.noLowering(`readline.Interface.${name}`, call, 'question(query, cb), close(), and on("close", cb) are the supported Interface members', lowerer.checker.getSymbolAtLocation(access.name));
207
+ if (node.kind === ts.SyntaxKind.NullKeyword) {
208
+ return "none";
209
+ }
210
+ if (ts.isIdentifier(node) && node.text === "undefined")
211
+ return "none";
212
+ const v = lowerer.lowerExpr(node);
213
+ const info = v.type.kind === "object" ? lowerer.classes.get(v.type.className) : undefined;
214
+ const sides = streamSidesOf(lowerer, info);
215
+ if (sides !== "w" && sides !== "rw") {
216
+ lowerer.noLowering("createInterface with this output", node, "process.stdout and writable streams are the supported outputs");
217
+ }
218
+ return v;
81
219
  }
82
- // readline.createInterface({ input: process.stdin, output:
83
- // process.stdout }): exactly that options shape — the runtime reads
84
- // fd 0 and writes prompts to stdout, so any OTHER stream would be a
85
- // lie. `terminal` is accepted only as the literal false (the pipe
86
- // behavior this implements); other members fence by name.
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. */
87
228
  export function lowerReadlineCreateCall(lowerer, expr, loc) {
88
- const optsNode = expr.arguments.length === 1 ? expr.arguments[0] : undefined;
89
- if (!optsNode || !ts.isObjectLiteralExpression(optsNode)) {
90
- lowerer.noLowering("createInterface with this argument shape", expr, "the supported form is createInterface({ input: process.stdin, output: process.stdout })");
91
- }
92
- let sawInput = false;
93
- for (const p of optsNode.properties) {
94
- if (!ts.isPropertyAssignment(p) || !ts.isIdentifier(p.name)) {
95
- lowerer.noLowering("createInterface with this options shape", p, "spreads, computed keys, and shorthand options have no lowering — write each member inline");
229
+ let input = null;
230
+ let output = "none";
231
+ let crlf = numLit(0, loc);
232
+ let prompt = null;
233
+ let signal = null;
234
+ const optsNode = expr.arguments[0];
235
+ if (optsNode === undefined) {
236
+ lowerer.noLowering("createInterface without arguments", expr, "pass { input: process.stdin, output: process.stdout } or createInterface(input, output)");
237
+ }
238
+ 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)");
96
241
  }
97
- const member = p.name.text;
98
- const streamOf = (node) => ts.isPropertyAccessExpression(node) ? lowerer.stdlibGlobalMember(node, "process") : null;
99
- if (member === "input") {
100
- if (streamOf(p.initializer) !== "stdin") {
101
- lowerer.noLowering("createInterface with a non-stdin input", p.initializer, "process.stdin is the one supported input stream");
102
- }
103
- sawInput = true;
242
+ input = lowerInput(lowerer, optsNode);
243
+ if (expr.arguments[1] !== undefined)
244
+ output = lowerOutput(lowerer, expr.arguments[1]);
245
+ }
246
+ 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");
104
249
  }
105
- else if (member === "output") {
106
- if (streamOf(p.initializer) !== "stdout") {
107
- lowerer.noLowering("createInterface with a non-stdout output", p.initializer, "process.stdout is the one supported output stream");
250
+ 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");
108
254
  }
109
- }
110
- else if (member === "terminal") {
111
- const t = lowerer.typeOf(p.initializer);
112
- if (!(t.flags & ts.TypeFlags.BooleanLiteral) || lowerer.checker.typeToString(t) !== "false") {
113
- lowerer.noLowering("createInterface with terminal enabled", p.initializer, "terminal line editing has no lowering — the pipe behavior is what compiles");
255
+ const member = p.name.text;
256
+ if (member === "input") {
257
+ input = lowerInput(lowerer, p.initializer);
258
+ sawInput = true;
114
259
  }
115
- }
116
- else if (member === "crlfDelay") {
117
- // Infinity states the lowered behavior: the splitter holds a
118
- // trailing \r until the next chunk decides \r\n vs \r, with no
119
- // time limit (scr_readline.c) — Node's crlfDelay: Infinity.
120
- // Finite delays would need a timer the splitter does not have.
121
- if (!ts.isIdentifier(p.initializer) || p.initializer.text !== "Infinity") {
122
- lowerer.noLowering("createInterface with a finite crlfDelay", p.initializer, "the lowered splitter always joins \\r\\n across chunks (Node's crlfDelay: Infinity) — Infinity is the accepted value");
260
+ else if (member === "output") {
261
+ output = lowerOutput(lowerer, p.initializer);
262
+ }
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");
268
+ }
269
+ }
270
+ else if (member === "crlfDelay") {
271
+ crlf = lowerer.lowerExprExpecting(p.initializer, F64);
272
+ }
273
+ else if (member === "prompt") {
274
+ prompt = lowerer.lowerExprExpecting(p.initializer, STRING);
275
+ }
276
+ 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)");
281
+ }
282
+ else {
283
+ fenceOrDropOptionKey(lowerer, p, member, "createInterface", READLINE_DOCUMENTED_OPTIONS, "input, output, terminal: false, crlfDelay, prompt and signal are the supported options");
284
+ // An undocumented key, dropped like Node drops it.
123
285
  }
124
286
  }
125
- else if (member === "completer") {
126
- lowerer.noLowering("createInterface with a completer", p, "tab completion needs an interactive terminal — the lowered interface reads piped lines (terminal: false)");
127
- }
128
- else {
129
- fenceOrDropOptionKey(lowerer, p, member, "createInterface", READLINE_DOCUMENTED_OPTIONS, "input, output, terminal: false, and crlfDelay: Infinity are the supported options");
130
- // An undocumented key, dropped like Node drops it.
287
+ if (!sawInput) {
288
+ lowerer.noLowering("createInterface without an input stream", optsNode, "pass { input: process.stdin, output: process.stdout }");
131
289
  }
132
290
  }
133
- if (!sawInput) {
134
- lowerer.noLowering("createInterface without an input stream", optsNode, "pass { input: process.stdin, output: process.stdout }");
135
- }
136
- return { kind: "libCall", fn: "rl.create", args: [], type: F64, loc };
291
+ const mode = (input !== null ? 1 : 0) |
292
+ (typeof output === "object" ? 2 : 0) |
293
+ (output === "stdout" ? 4 : 0) |
294
+ (signal !== null ? 8 : 0) |
295
+ (prompt !== null ? 16 : 0);
296
+ const args = [numLit(mode, loc)];
297
+ if (input !== null)
298
+ args.push(input);
299
+ if (typeof output === "object")
300
+ args.push(output);
301
+ args.push(crlf);
302
+ if (prompt !== null)
303
+ args.push(prompt);
304
+ if (signal !== null)
305
+ args.push(signal);
306
+ return {
307
+ kind: "libCall",
308
+ fn: signal !== null ? "rl.createSignal" : "rl.create",
309
+ args,
310
+ type: F64,
311
+ loc,
312
+ };
137
313
  }
138
314
  //# sourceMappingURL=readline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readline.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/readline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"readline.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/readline.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import * as ts from "../../ts7/adapter.js";
2
2
  import { type Lowerer } from "../lowerer.js";
3
3
  import { type IrExpr, type SrcLoc } from "../../../ir/ir.js";
4
+ /** A timers/promises setInterval call, the head a `for await` loop
5
+ * consumes as an async generator. */
6
+ export declare function isTimersPromisesIntervalCall(lowerer: Lowerer, node: ts.Expression): node is ts.CallExpression;
4
7
  /** timers/promises.setInterval(delay, value), the first Node API built on
5
8
  * the generic async-generator protocol. The supported form has an explicit
6
9
  * value and no AbortSignal options. It lowers to a generated typed async
@@ -2,7 +2,39 @@ import * as ts from "../../ts7/adapter.js";
2
2
  import {} from "../lowerer.js";
3
3
  import { locOf } from "../../program.js";
4
4
  import { generatorMeta } from "../call-signatures.js";
5
- import { BOOL, F64, VOID, } from "../../../ir/ir.js";
5
+ import { BOOL, F64, UNDEFINED_T, VOID, isUnitType, } from "../../../ir/ir.js";
6
+ import { genResultRecord } from "../../type-mapper.js";
7
+ import { builtinImportOf } from "./module-bindings.js";
8
+ /** The async generator type of a timers/promises setInterval call. The
9
+ * fallback declarations type it AsyncGenerator<T>; @types/node types it
10
+ * NodeJS.AsyncIterator<T>, which maps to no IR type, so the yielded type
11
+ * comes from its type argument. */
12
+ function timersPromisesIntervalType(lowerer, expr) {
13
+ const callType = lowerer.typeOf(expr);
14
+ const mapped = lowerer.mapTypeOf(callType);
15
+ if (mapped?.kind === "generator" && mapped.async)
16
+ return mapped;
17
+ const arg = lowerer.checker.getTypeArguments(callType)[0];
18
+ const yieldT = arg ? lowerer.mapTypeOf(arg) : null;
19
+ if (!yieldT || yieldT.kind === "void" || isUnitType(yieldT))
20
+ return null;
21
+ if (!genResultRecord(yieldT, VOID, lowerer.shapes, lowerer.unions))
22
+ return null;
23
+ return { kind: "generator", async: true, yieldT, retT: VOID, nextT: UNDEFINED_T };
24
+ }
25
+ /** A timers/promises setInterval call, the head a `for await` loop
26
+ * consumes as an async generator. */
27
+ export function isTimersPromisesIntervalCall(lowerer, node) {
28
+ if (!ts.isCallExpression(node) || node.questionDotToken)
29
+ return false;
30
+ const callee = node.expression;
31
+ const bi = ts.isIdentifier(callee)
32
+ ? builtinImportOf(lowerer, callee)
33
+ : ts.isPropertyAccessExpression(callee) && !callee.questionDotToken
34
+ ? lowerer.builtinMemberOf(callee)
35
+ : null;
36
+ return bi?.module === "timers/promises" && bi.member === "setInterval";
37
+ }
6
38
  /** timers/promises.setInterval(delay, value), the first Node API built on
7
39
  * the generic async-generator protocol. The supported form has an explicit
8
40
  * value and no AbortSignal options. It lowers to a generated typed async
@@ -24,11 +56,9 @@ export function lowerTimersPromisesSetInterval(lowerer, expr, bi, loc) {
24
56
  ? { kind: "numLit", value: 1, type: F64, loc }
25
57
  : lowerer.coerceInto(delayNode, delay, F64);
26
58
  const value = lowerer.lowerExpr(valueNode);
27
- const callType = lowerer.mapTypeOf(lowerer.typeOf(expr));
28
- if (callType?.kind !== "generator" || !callType.async) {
59
+ const genT = timersPromisesIntervalType(lowerer, expr);
60
+ if (genT === null)
29
61
  lowerer.badType(expr, lowerer.typeOf(expr));
30
- }
31
- const genT = callType;
32
62
  const yielded = lowerer.coerceInto(valueNode, value, genT.yieldT);
33
63
  const fnName = `%fn${lowerer.lambdaCounter++}_tpInterval`;
34
64
  const msParam = { id: "%tp.ms", name: "delay", type: F64, mutable: false };
@@ -151,30 +181,86 @@ export function lowerTimeoutMethodCall(lowerer, call, access) {
151
181
  ? "unref(), ref(), and hasRef() are the supported Immediate methods"
152
182
  : "unref(), ref(), hasRef(), and refresh() are the supported Timeout methods", lowerer.checker.getSymbolAtLocation(access.name));
153
183
  }
154
- // node:timers/promises — setTimeout([delay]) and setImmediate(): void
155
- // promises the shared timer heap settles. The omitted delay completes
156
- // to Node's 1ms floor (scr_timer_coerce_ms clamps anyway; the literal
157
- // keeps the emitted call self-describing); the resolve-value and
158
- // options (AbortSignal) forms fence per shape — a promise that
159
- // ignored its cancellation signal would hold the loop open where
160
- // Node exits.
184
+ // node:timers/promises — setTimeout([delay[, value[, options]]]) and
185
+ // setImmediate([value[, options]]): promises the shared timer heap and the
186
+ // immediate queue settle. The omitted delay completes to Node's 1ms floor
187
+ // (scr_timer_coerce_ms clamps anyway; the literal keeps the emitted call
188
+ // self-describing). A resolve value travels as an already-resolved promise
189
+ // of its own type, whose settlement the result copies when it fires. The
190
+ // options object takes `ref`; `signal` fences — a promise that ignored its
191
+ // cancellation signal would hold the loop open where Node exits.
161
192
  export function lowerTimersPromisesCall(lowerer, expr, bi, loc) {
162
193
  const promiseVoid = { kind: "promise", inner: VOID };
163
- if (bi.member === "setTimeout") {
164
- if (expr.arguments.length > 1) {
165
- lowerer.noLowering("timers/promises setTimeout with a resolve value or options", expr.arguments[1], "the lowered form is setTimeout(delay?) resolving undefined — resolve values and AbortSignal cancellation have no lowering");
166
- }
167
- const ms = expr.arguments[0]
194
+ if (bi.member !== "setTimeout" && bi.member !== "setImmediate")
195
+ return null;
196
+ const timeout = bi.member === "setTimeout";
197
+ const [valueNode, optionsNode] = timeout ? expr.arguments.slice(1) : expr.arguments;
198
+ const ms = !timeout
199
+ ? null
200
+ : expr.arguments[0]
168
201
  ? lowerer.lowerExprExpecting(expr.arguments[0], F64)
169
202
  : { kind: "numLit", value: 1, type: F64, loc };
170
- return { kind: "libCall", fn: "tp.setTimeout", args: [ms], type: promiseVoid, loc };
203
+ if (valueNode === undefined) {
204
+ return timeout
205
+ ? { kind: "libCall", fn: "tp.setTimeout", args: [ms], type: promiseVoid, loc }
206
+ : { kind: "libCall", fn: "tp.setImmediate", args: [], type: promiseVoid, loc };
171
207
  }
172
- if (bi.member === "setImmediate") {
173
- if (expr.arguments.length > 0) {
174
- lowerer.noLowering("timers/promises setImmediate with a resolve value", expr.arguments[0], "the lowered form is setImmediate() resolving undefined");
208
+ const resultT = lowerer.mapTypeOf(lowerer.typeOf(expr));
209
+ const inner = resultT?.kind === "promise" ? resultT.inner : null;
210
+ if (inner === null) {
211
+ lowerer.noLowering(`timers/promises ${bi.member} with a resolve value of this type`, valueNode, "the resolve value's type must be representable");
212
+ return null;
213
+ }
214
+ // An undefined resolve value settles the void promise; awaiting it
215
+ // yields undefined either way.
216
+ const voidValue = inner.kind === "void" || isUnitType(inner);
217
+ const value = voidValue
218
+ ? {
219
+ kind: "seqExpr",
220
+ stmts: [lowerer.lowerExprStatement(valueNode)],
221
+ result: { kind: "intrinsic", name: "promise.resolve", args: [], type: promiseVoid, loc },
222
+ type: promiseVoid,
223
+ loc,
224
+ }
225
+ : {
226
+ kind: "intrinsic",
227
+ name: "promise.resolve",
228
+ args: [lowerer.lowerExprExpecting(valueNode, inner)],
229
+ type: resultT,
230
+ loc,
231
+ };
232
+ const ref = timersPromisesRef(lowerer, bi.member, optionsNode, loc);
233
+ return {
234
+ kind: "libCall",
235
+ fn: timeout ? "tp.setTimeoutValue" : "tp.setImmediateValue",
236
+ args: timeout ? [ms, value, ref] : [value, ref],
237
+ type: voidValue ? promiseVoid : resultT,
238
+ loc,
239
+ };
240
+ }
241
+ /** The `ref` option of a timers/promises options object literal (true when
242
+ * absent). `signal` and options that are not an object literal fence. */
243
+ function timersPromisesRef(lowerer, member, optionsNode, loc) {
244
+ const absent = { kind: "boolLit", value: true, type: BOOL, loc };
245
+ if (optionsNode === undefined)
246
+ return absent;
247
+ if (!ts.isObjectLiteralExpression(optionsNode)) {
248
+ lowerer.noLowering(`timers/promises ${member} options that are not an object literal`, optionsNode, "pass the options as an object literal: { ref }");
249
+ return absent;
250
+ }
251
+ let ref = absent;
252
+ for (const prop of optionsNode.properties) {
253
+ const name = prop.name && ts.isIdentifier(prop.name) ? prop.name.text : null;
254
+ if (name === "signal") {
255
+ lowerer.noLowering(`timers/promises ${member} with an AbortSignal`, prop, "a promise that ignored its cancellation signal would keep the process alive where Node exits");
256
+ }
257
+ else if (name === "ref" && ts.isPropertyAssignment(prop)) {
258
+ ref = lowerer.lowerExprExpecting(prop.initializer, BOOL);
259
+ }
260
+ else {
261
+ lowerer.noLowering(`timers/promises ${member} options other than ref`, prop, "the lowered options object takes ref: boolean");
175
262
  }
176
- return { kind: "libCall", fn: "tp.setImmediate", args: [], type: promiseVoid, loc };
177
263
  }
178
- return null;
264
+ return ref;
179
265
  }
180
266
  //# sourceMappingURL=timers.js.map