@scriptc/compiler 0.3.1 → 0.3.3

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 (492) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +832 -55
  2. package/dist/backend/cycle-analysis.js +6 -1
  3. package/dist/backend/cycle-analysis.js.map +1 -1
  4. package/dist/backend/executable-features.js +1 -0
  5. package/dist/backend/executable-features.js.map +1 -1
  6. package/dist/backend/literals.d.ts +7 -0
  7. package/dist/backend/literals.js +32 -0
  8. package/dist/backend/literals.js.map +1 -1
  9. package/dist/backend/literals.test.js +17 -1
  10. package/dist/backend/literals.test.js.map +1 -1
  11. package/dist/backend/llvm/alloc.d.ts +15 -4
  12. package/dist/backend/llvm/alloc.js +63 -25
  13. package/dist/backend/llvm/alloc.js.map +1 -1
  14. package/dist/backend/llvm/alloc.test.js +62 -2
  15. package/dist/backend/llvm/alloc.test.js.map +1 -1
  16. package/dist/backend/llvm/appended-array-literals.d.ts +2 -0
  17. package/dist/backend/llvm/appended-array-literals.js +109 -0
  18. package/dist/backend/llvm/appended-array-literals.js.map +1 -0
  19. package/dist/backend/llvm/appended-array-literals.test.d.ts +1 -0
  20. package/dist/backend/llvm/appended-array-literals.test.js +90 -0
  21. package/dist/backend/llvm/appended-array-literals.test.js.map +1 -0
  22. package/dist/backend/llvm/array-search.d.ts +8 -0
  23. package/dist/backend/llvm/array-search.js +52 -0
  24. package/dist/backend/llvm/array-search.js.map +1 -0
  25. package/dist/backend/llvm/array-search.test.d.ts +1 -0
  26. package/dist/backend/llvm/array-search.test.js +72 -0
  27. package/dist/backend/llvm/array-search.test.js.map +1 -0
  28. package/dist/backend/llvm/call-lifetimes.d.ts +11 -1
  29. package/dist/backend/llvm/call-lifetimes.js +74 -4
  30. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  31. package/dist/backend/llvm/call-lifetimes.test.js +54 -0
  32. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  33. package/dist/backend/llvm/classes.js +97 -38
  34. package/dist/backend/llvm/classes.js.map +1 -1
  35. package/dist/backend/llvm/classes.test.js +2 -2
  36. package/dist/backend/llvm/common.d.ts +1 -1
  37. package/dist/backend/llvm/common.js +1 -1
  38. package/dist/backend/llvm/dense-array-access.d.ts +5 -0
  39. package/dist/backend/llvm/dense-array-access.js +18 -13
  40. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  41. package/dist/backend/llvm/dense-array-access.test.js +15 -2
  42. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  43. package/dist/backend/llvm/dyn.d.ts +6 -0
  44. package/dist/backend/llvm/dyn.js +84 -11
  45. package/dist/backend/llvm/dyn.js.map +1 -1
  46. package/dist/backend/llvm/emitter.d.ts +108 -16
  47. package/dist/backend/llvm/emitter.js +598 -108
  48. package/dist/backend/llvm/emitter.js.map +1 -1
  49. package/dist/backend/llvm/emitter.test.js +26 -3
  50. package/dist/backend/llvm/emitter.test.js.map +1 -1
  51. package/dist/backend/llvm/expr-async.js +174 -7
  52. package/dist/backend/llvm/expr-async.js.map +1 -1
  53. package/dist/backend/llvm/expr-bytes.js +11 -0
  54. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  55. package/dist/backend/llvm/expr-callbacks.d.ts +8 -0
  56. package/dist/backend/llvm/expr-callbacks.js +96 -2
  57. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  58. package/dist/backend/llvm/expr-calls.d.ts +12 -1
  59. package/dist/backend/llvm/expr-calls.js +133 -54
  60. package/dist/backend/llvm/expr-calls.js.map +1 -1
  61. package/dist/backend/llvm/expr-containers.d.ts +7 -0
  62. package/dist/backend/llvm/expr-containers.js +80 -22
  63. package/dist/backend/llvm/expr-containers.js.map +1 -1
  64. package/dist/backend/llvm/expr-context.d.ts +2 -0
  65. package/dist/backend/llvm/expr-control.d.ts +8 -0
  66. package/dist/backend/llvm/expr-control.js +103 -69
  67. package/dist/backend/llvm/expr-control.js.map +1 -1
  68. package/dist/backend/llvm/expr-dynamic.js +21 -10
  69. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  70. package/dist/backend/llvm/expr-primitives.d.ts +7 -0
  71. package/dist/backend/llvm/expr-primitives.js +53 -51
  72. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  73. package/dist/backend/llvm/expr-records.js +19 -5
  74. package/dist/backend/llvm/expr-records.js.map +1 -1
  75. package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
  76. package/dist/backend/llvm/expr-stream-bridges.js +111 -39
  77. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  78. package/dist/backend/llvm/expr-stream-bridges.test.js +49 -1
  79. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  80. package/dist/backend/llvm/expr-stream-callbacks.d.ts +13 -2
  81. package/dist/backend/llvm/expr-stream-callbacks.js +80 -5
  82. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  83. package/dist/backend/llvm/inline-unions.d.ts +48 -0
  84. package/dist/backend/llvm/inline-unions.js +134 -0
  85. package/dist/backend/llvm/inline-unions.js.map +1 -0
  86. package/dist/backend/llvm/inline-unions.test.d.ts +1 -0
  87. package/dist/backend/llvm/inline-unions.test.js +124 -0
  88. package/dist/backend/llvm/inline-unions.test.js.map +1 -0
  89. package/dist/backend/llvm/int32-abi.d.ts +18 -2
  90. package/dist/backend/llvm/int32-abi.js +23 -2
  91. package/dist/backend/llvm/int32-abi.js.map +1 -1
  92. package/dist/backend/llvm/int32-abi.test.js +75 -1
  93. package/dist/backend/llvm/int32-abi.test.js.map +1 -1
  94. package/dist/backend/llvm/integer-remainder.d.ts +28 -5
  95. package/dist/backend/llvm/integer-remainder.js +80 -9
  96. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  97. package/dist/backend/llvm/lib-dispatch.js +170 -28
  98. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  99. package/dist/backend/llvm/lib-filesystem.js +181 -5
  100. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  101. package/dist/backend/llvm/lib-network.js +9 -6
  102. package/dist/backend/llvm/lib-network.js.map +1 -1
  103. package/dist/backend/llvm/lib-process.js +2 -2
  104. package/dist/backend/llvm/lib-process.js.map +1 -1
  105. package/dist/backend/llvm/lib-shared.js +208 -9
  106. package/dist/backend/llvm/lib-shared.js.map +1 -1
  107. package/dist/backend/llvm/lib-stream.js +97 -0
  108. package/dist/backend/llvm/lib-stream.js.map +1 -1
  109. package/dist/backend/llvm/local-array-reads.js +12 -6
  110. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  111. package/dist/backend/llvm/local-array-reads.test.js +6 -3
  112. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  113. package/dist/backend/llvm/local-union-storage.d.ts +26 -2
  114. package/dist/backend/llvm/local-union-storage.js +132 -12
  115. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  116. package/dist/backend/llvm/local-union-storage.test.js +107 -1
  117. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  118. package/dist/backend/llvm/loop-array-borrows.d.ts +8 -2
  119. package/dist/backend/llvm/loop-array-borrows.js +93 -13
  120. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  121. package/dist/backend/llvm/map-number-lookup.d.ts +20 -0
  122. package/dist/backend/llvm/map-number-lookup.js +66 -0
  123. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  124. package/dist/backend/llvm/map-number-lookup.test.d.ts +1 -0
  125. package/dist/backend/llvm/map-number-lookup.test.js +102 -0
  126. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
  127. package/dist/backend/llvm/map-read-lifetimes.js +1 -0
  128. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  129. package/dist/backend/llvm/publish.d.ts +4 -0
  130. package/dist/backend/llvm/publish.js +3 -1
  131. package/dist/backend/llvm/publish.js.map +1 -1
  132. package/dist/backend/llvm/record-results.d.ts +29 -0
  133. package/dist/backend/llvm/record-results.js +260 -0
  134. package/dist/backend/llvm/record-results.js.map +1 -0
  135. package/dist/backend/llvm/reference-effects.js +15 -0
  136. package/dist/backend/llvm/reference-effects.js.map +1 -1
  137. package/dist/backend/llvm/reference-writes.js +29 -9
  138. package/dist/backend/llvm/reference-writes.js.map +1 -1
  139. package/dist/backend/llvm/regions.d.ts +68 -0
  140. package/dist/backend/llvm/regions.js +314 -0
  141. package/dist/backend/llvm/regions.js.map +1 -0
  142. package/dist/backend/llvm/regions.test.d.ts +1 -0
  143. package/dist/backend/llvm/regions.test.js +173 -0
  144. package/dist/backend/llvm/regions.test.js.map +1 -0
  145. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  146. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  147. package/dist/backend/llvm/shapes.d.ts +86 -13
  148. package/dist/backend/llvm/shapes.js +208 -54
  149. package/dist/backend/llvm/shapes.js.map +1 -1
  150. package/dist/backend/llvm/shapes.test.js +68 -9
  151. package/dist/backend/llvm/shapes.test.js.map +1 -1
  152. package/dist/backend/llvm/split-loops.js +1 -1
  153. package/dist/backend/llvm/split-loops.js.map +1 -1
  154. package/dist/backend/llvm/stack-objects.d.ts +29 -0
  155. package/dist/backend/llvm/stack-objects.js +142 -0
  156. package/dist/backend/llvm/stack-objects.js.map +1 -0
  157. package/dist/backend/llvm/stack-objects.test.d.ts +1 -0
  158. package/dist/backend/llvm/stack-objects.test.js +255 -0
  159. package/dist/backend/llvm/stack-objects.test.js.map +1 -0
  160. package/dist/backend/llvm/string-reads.d.ts +4 -1
  161. package/dist/backend/llvm/string-reads.js +89 -9
  162. package/dist/backend/llvm/string-reads.js.map +1 -1
  163. package/dist/backend/llvm/switch-dispatch.js +5 -4
  164. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  165. package/dist/backend/llvm/walkers.d.ts +13 -0
  166. package/dist/backend/llvm/walkers.js +108 -10
  167. package/dist/backend/llvm/walkers.js.map +1 -1
  168. package/dist/backend/may-throw.js +10 -4
  169. package/dist/backend/may-throw.js.map +1 -1
  170. package/dist/backend/native/contracts.d.ts +7 -2
  171. package/dist/backend/native/executable.js +28 -2
  172. package/dist/backend/native/executable.js.map +1 -1
  173. package/dist/backend/native/library.js +1 -1
  174. package/dist/backend/native/library.js.map +1 -1
  175. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  176. package/dist/backend/native/runtime-inputs.js +3 -0
  177. package/dist/backend/native/runtime-inputs.js.map +1 -1
  178. package/dist/backend/native-link-info-core.d.ts +1 -0
  179. package/dist/backend/native-link-info-core.js.map +1 -1
  180. package/dist/backend/native-toolchain.test.js +1 -1
  181. package/dist/backend/native-toolchain.test.js.map +1 -1
  182. package/dist/backend/runtime-abi.d.ts +2 -2
  183. package/dist/backend/runtime-abi.js +2 -2
  184. package/dist/backend/runtime-pack-core.d.ts +1 -0
  185. package/dist/backend/runtime-pack-core.js +1 -0
  186. package/dist/backend/runtime-pack-core.js.map +1 -1
  187. package/dist/backend/runtime-pack-targets.test.js +1 -1
  188. package/dist/backend/runtime-pack.test.js +1 -1
  189. package/dist/backend/target-diagnostics.js +17 -0
  190. package/dist/backend/target-diagnostics.js.map +1 -1
  191. package/dist/backend/target-diagnostics.test.js +16 -0
  192. package/dist/backend/target-diagnostics.test.js.map +1 -1
  193. package/dist/compat/fetch-profile.js +4 -4
  194. package/dist/compat/fetch-profile.js.map +1 -1
  195. package/dist/contracts/check.js +2 -0
  196. package/dist/contracts/check.js.map +1 -1
  197. package/dist/coverage/report.js +1 -1
  198. package/dist/coverage/report.js.map +1 -1
  199. package/dist/diagnostics/diagnostic.d.ts +6 -5
  200. package/dist/diagnostics/diagnostic.js +7 -6
  201. package/dist/diagnostics/diagnostic.js.map +1 -1
  202. package/dist/executable/executable-cache.d.ts +1 -0
  203. package/dist/executable/executable-cache.js.map +1 -1
  204. package/dist/frontend/builtin-modules.d.ts +1 -1
  205. package/dist/frontend/builtin-modules.js +1 -0
  206. package/dist/frontend/builtin-modules.js.map +1 -1
  207. package/dist/frontend/comptime-node.js +2 -2
  208. package/dist/frontend/comptime-node.js.map +1 -1
  209. package/dist/frontend/experimental-import.d.ts +12 -0
  210. package/dist/frontend/experimental-import.js +63 -0
  211. package/dist/frontend/experimental-import.js.map +1 -0
  212. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  213. package/dist/frontend/lowering/binding-analysis.js +1 -1
  214. package/dist/frontend/lowering/builtin-calls.d.ts +6 -1
  215. package/dist/frontend/lowering/builtin-calls.js +36 -0
  216. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  217. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  218. package/dist/frontend/lowering/builtins/arguments.js +8 -4
  219. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  220. package/dist/frontend/lowering/builtins/blob.d.ts +20 -0
  221. package/dist/frontend/lowering/builtins/blob.js +167 -0
  222. package/dist/frontend/lowering/builtins/blob.js.map +1 -0
  223. package/dist/frontend/lowering/builtins/child-process-async.d.ts +2 -2
  224. package/dist/frontend/lowering/builtins/child-process-async.js +2 -2
  225. package/dist/frontend/lowering/builtins/child-process-methods.js +1 -1
  226. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  227. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -1
  228. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  229. package/dist/frontend/lowering/builtins/compression.js +3 -2
  230. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  231. package/dist/frontend/lowering/builtins/console.d.ts +16 -6
  232. package/dist/frontend/lowering/builtins/console.js +33 -9
  233. package/dist/frontend/lowering/builtins/console.js.map +1 -1
  234. package/dist/frontend/lowering/builtins/crypto.js +415 -120
  235. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  236. package/dist/frontend/lowering/builtins/errors.js +20 -0
  237. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  238. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +10 -0
  239. package/dist/frontend/lowering/builtins/filesystem-calls.js +89 -1
  240. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  241. package/dist/frontend/lowering/builtins/filesystem.d.ts +16 -7
  242. package/dist/frontend/lowering/builtins/filesystem.js +97 -15
  243. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  244. package/dist/frontend/lowering/builtins/fs-glob.d.ts +23 -0
  245. package/dist/frontend/lowering/builtins/fs-glob.js +224 -0
  246. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -0
  247. package/dist/frontend/lowering/builtins/json.d.ts +2 -2
  248. package/dist/frontend/lowering/builtins/json.js +13 -4
  249. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  250. package/dist/frontend/lowering/builtins/key-object.d.ts +13 -0
  251. package/dist/frontend/lowering/builtins/key-object.js +56 -0
  252. package/dist/frontend/lowering/builtins/key-object.js.map +1 -0
  253. package/dist/frontend/lowering/builtins/module-calls.js +60 -12
  254. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  255. package/dist/frontend/lowering/builtins/numbers.d.ts +1 -0
  256. package/dist/frontend/lowering/builtins/numbers.js +17 -0
  257. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  258. package/dist/frontend/lowering/builtins/operating-system.d.ts +18 -0
  259. package/dist/frontend/lowering/builtins/operating-system.js +361 -1
  260. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  261. package/dist/frontend/lowering/builtins/performance.d.ts +25 -3
  262. package/dist/frontend/lowering/builtins/performance.js +340 -5
  263. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  264. package/dist/frontend/lowering/builtins/process.d.ts +2 -2
  265. package/dist/frontend/lowering/builtins/process.js +122 -17
  266. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  267. package/dist/frontend/lowering/builtins/promises.js +109 -2
  268. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  269. package/dist/frontend/lowering/builtins/properties.d.ts +0 -7
  270. package/dist/frontend/lowering/builtins/properties.js +39 -11
  271. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  272. package/dist/frontend/lowering/builtins/readline.d.ts +23 -8
  273. package/dist/frontend/lowering/builtins/readline.js +266 -90
  274. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  275. package/dist/frontend/lowering/builtins/text-codecs.d.ts +3 -4
  276. package/dist/frontend/lowering/builtins/text-codecs.js +3 -4
  277. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  278. package/dist/frontend/lowering/builtins/url.d.ts +8 -0
  279. package/dist/frontend/lowering/builtins/url.js +36 -0
  280. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  281. package/dist/frontend/lowering/call-arguments.js +1 -1
  282. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  283. package/dist/frontend/lowering/call-signatures.js +20 -2
  284. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  285. package/dist/frontend/lowering/checked-promise-all.d.ts +10 -3
  286. package/dist/frontend/lowering/checked-promise-all.js +52 -6
  287. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  288. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +8 -3
  289. package/dist/frontend/lowering/class-dynamic-dispatch.js +159 -32
  290. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  291. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
  292. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  293. package/dist/frontend/lowering/class-protocol-dispatch.d.ts +45 -0
  294. package/dist/frontend/lowering/class-protocol-dispatch.js +516 -0
  295. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -0
  296. package/dist/frontend/lowering/coercions/structural-plans.js +2 -1
  297. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  298. package/dist/frontend/lowering/coercions/structural.js +3 -3
  299. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  300. package/dist/frontend/lowering/collation-repertoire.js +6 -5
  301. package/dist/frontend/lowering/collation-repertoire.js.map +1 -1
  302. package/dist/frontend/lowering/containers/array-callbacks.js +33 -6
  303. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  304. package/dist/frontend/lowering/containers/array-construction.js +8 -4
  305. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  306. package/dist/frontend/lowering/containers/array-methods.d.ts +0 -7
  307. package/dist/frontend/lowering/containers/array-methods.js +43 -2
  308. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  309. package/dist/frontend/lowering/containers/array-pipelines.js +1 -1
  310. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  311. package/dist/frontend/lowering/containers/bytes.js +38 -26
  312. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  313. package/dist/frontend/lowering/containers/for-of.d.ts +1 -1
  314. package/dist/frontend/lowering/containers/for-of.js +5 -1
  315. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  316. package/dist/frontend/lowering/containers/indexed-objects.js +1 -1
  317. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  318. package/dist/frontend/lowering/containers/string-and-regexp.js +91 -0
  319. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  320. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  321. package/dist/frontend/lowering/crypto-tables.js +77 -12
  322. package/dist/frontend/lowering/crypto-tables.js.map +1 -1
  323. package/dist/frontend/lowering/cycle-initialization.d.ts +18 -2
  324. package/dist/frontend/lowering/cycle-initialization.js +166 -12
  325. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  326. package/dist/frontend/lowering/deferred-module-initializers.js +7 -2
  327. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  328. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  329. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  330. package/dist/frontend/lowering/expressions/nullish-assignment.js +10 -0
  331. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  332. package/dist/frontend/lowering/expressions/object-literals.js +21 -68
  333. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  334. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  335. package/dist/frontend/lowering/generator-delegation.js +231 -10
  336. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  337. package/dist/frontend/lowering/generic-functions.d.ts +2 -2
  338. package/dist/frontend/lowering/generic-functions.js +2 -2
  339. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  340. package/dist/frontend/lowering/http2-constants.js +1 -1
  341. package/dist/frontend/lowering/lifetime-regions.d.ts +11 -0
  342. package/dist/frontend/lowering/lifetime-regions.js +216 -0
  343. package/dist/frontend/lowering/lifetime-regions.js.map +1 -0
  344. package/dist/frontend/lowering/lower-array-sort.d.ts +40 -3
  345. package/dist/frontend/lowering/lower-array-sort.js +661 -194
  346. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  347. package/dist/frontend/lowering/lower-array-sort.test.js +103 -4
  348. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  349. package/dist/frontend/lowering/lower-assert.js +2 -2
  350. package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
  351. package/dist/frontend/lowering/lower-async-iteration.js +248 -2
  352. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  353. package/dist/frontend/lowering/lower-calls.js +173 -111
  354. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  355. package/dist/frontend/lowering/lower-classes.d.ts +12 -5
  356. package/dist/frontend/lowering/lower-classes.js +156 -11
  357. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  358. package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
  359. package/dist/frontend/lowering/lower-comptime.js +4 -4
  360. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  361. package/dist/frontend/lowering/lower-console.d.ts +13 -0
  362. package/dist/frontend/lowering/lower-console.js +460 -4
  363. package/dist/frontend/lowering/lower-console.js.map +1 -1
  364. package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -0
  365. package/dist/frontend/lowering/lower-event-emitter.js +124 -38
  366. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  367. package/dist/frontend/lowering/lower-event-target.d.ts +63 -0
  368. package/dist/frontend/lowering/lower-event-target.js +362 -0
  369. package/dist/frontend/lowering/lower-event-target.js.map +1 -0
  370. package/dist/frontend/lowering/lower-expando.js +2 -2
  371. package/dist/frontend/lowering/lower-exprs.js +247 -42
  372. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  373. package/dist/frontend/lowering/lower-generators.d.ts +15 -7
  374. package/dist/frontend/lowering/lower-generators.js +183 -99
  375. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  376. package/dist/frontend/lowering/lower-inspect.d.ts +8 -1
  377. package/dist/frontend/lowering/lower-inspect.js +247 -28
  378. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  379. package/dist/frontend/lowering/lower-mixins.js +1 -1
  380. package/dist/frontend/lowering/lower-modules.d.ts +1 -1
  381. package/dist/frontend/lowering/lower-modules.js +27 -17
  382. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  383. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -2
  384. package/dist/frontend/lowering/lower-namespaces.js +2 -2
  385. package/dist/frontend/lowering/lower-server.js +39 -14
  386. package/dist/frontend/lowering/lower-server.js.map +1 -1
  387. package/dist/frontend/lowering/lower-stdlib.d.ts +11 -1
  388. package/dist/frontend/lowering/lower-stdlib.js +45 -4
  389. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  390. package/dist/frontend/lowering/lower-stmts.d.ts +2 -2
  391. package/dist/frontend/lowering/lower-stmts.js +112 -23
  392. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  393. package/dist/frontend/lowering/lower-stream.js +234 -22
  394. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  395. package/dist/frontend/lowering/lower-timers.js +1 -1
  396. package/dist/frontend/lowering/lowerer.d.ts +45 -6
  397. package/dist/frontend/lowering/lowerer.js +360 -48
  398. package/dist/frontend/lowering/lowerer.js.map +1 -1
  399. package/dist/frontend/lowering/native-ffi.js +2 -2
  400. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  401. package/dist/frontend/lowering/regex-span-reads.d.ts +12 -0
  402. package/dist/frontend/lowering/regex-span-reads.js +164 -0
  403. package/dist/frontend/lowering/regex-span-reads.js.map +1 -0
  404. package/dist/frontend/lowering/runtime-optional-records.d.ts +115 -0
  405. package/dist/frontend/lowering/runtime-optional-records.js +715 -0
  406. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -0
  407. package/dist/frontend/lowering/runtime-optional-records.test.d.ts +1 -0
  408. package/dist/frontend/lowering/runtime-optional-records.test.js +175 -0
  409. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -0
  410. package/dist/frontend/lowering/surfaces.d.ts +7 -3
  411. package/dist/frontend/lowering/surfaces.js +385 -32
  412. package/dist/frontend/lowering/surfaces.js.map +1 -1
  413. package/dist/frontend/lowering/var-hoisting.d.ts +3 -0
  414. package/dist/frontend/lowering/var-hoisting.js +261 -0
  415. package/dist/frontend/lowering/var-hoisting.js.map +1 -0
  416. package/dist/frontend/module-syntax.d.ts +1 -1
  417. package/dist/frontend/module-syntax.js +1 -1
  418. package/dist/frontend/npm-static-prune.js +1 -1
  419. package/dist/frontend/npm-static-prune.js.map +1 -1
  420. package/dist/frontend/npm-static-rewrite-syntax.js +4 -3
  421. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  422. package/dist/frontend/pipeline.js +6 -4
  423. package/dist/frontend/pipeline.js.map +1 -1
  424. package/dist/frontend/program.d.ts +6 -5
  425. package/dist/frontend/program.js +42 -22
  426. package/dist/frontend/program.js.map +1 -1
  427. package/dist/frontend/program.test.js +13 -0
  428. package/dist/frontend/program.test.js.map +1 -1
  429. package/dist/frontend/resolve.js +1 -1
  430. package/dist/frontend/ts7/adapter.js +1 -1
  431. package/dist/frontend/ts7/ast-bytes.d.ts +1 -1
  432. package/dist/frontend/ts7/ast-bytes.js +1 -1
  433. package/dist/frontend/ts7/semantic-json.d.ts +1 -1
  434. package/dist/frontend/ts7/semantic-json.js +1 -1
  435. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  436. package/dist/frontend/ts7/world-check.js +1 -1
  437. package/dist/frontend/tsc-codes.js +2 -2
  438. package/dist/frontend/tsc-codes.js.map +1 -1
  439. package/dist/frontend/type-mapper.d.ts +28 -1
  440. package/dist/frontend/type-mapper.js +288 -30
  441. package/dist/frontend/type-mapper.js.map +1 -1
  442. package/dist/index.js +6 -4
  443. package/dist/index.js.map +1 -1
  444. package/dist/ir/analysis.d.ts +12 -6
  445. package/dist/ir/analysis.js +26 -10
  446. package/dist/ir/analysis.js.map +1 -1
  447. package/dist/ir/analysis.test.js +15 -3
  448. package/dist/ir/analysis.test.js.map +1 -1
  449. package/dist/ir/builtin-effects.js +108 -2
  450. package/dist/ir/builtin-effects.js.map +1 -1
  451. package/dist/ir/builtin-signatures.d.ts +1 -1
  452. package/dist/ir/builtin-signatures.js +436 -53
  453. package/dist/ir/builtin-signatures.js.map +1 -1
  454. package/dist/ir/function-references.test.js +1 -0
  455. package/dist/ir/function-references.test.js.map +1 -1
  456. package/dist/ir/int32-slots.js +2 -0
  457. package/dist/ir/int32-slots.js.map +1 -1
  458. package/dist/ir/intrinsic-signatures.js +2 -0
  459. package/dist/ir/intrinsic-signatures.js.map +1 -1
  460. package/dist/ir/ir.d.ts +129 -36
  461. package/dist/ir/ir.js +42 -1
  462. package/dist/ir/ir.js.map +1 -1
  463. package/dist/ir/runtime-features.d.ts +1 -0
  464. package/dist/ir/runtime-features.js +116 -5
  465. package/dist/ir/runtime-features.js.map +1 -1
  466. package/dist/ir/scalar-records.js +1 -2
  467. package/dist/ir/scalar-records.js.map +1 -1
  468. package/dist/ir/serialize.js +1 -1
  469. package/dist/ir/serialize.js.map +1 -1
  470. package/dist/ir/traverse.js +1 -0
  471. package/dist/ir/traverse.js.map +1 -1
  472. package/dist/ir/validate.js +250 -34
  473. package/dist/ir/validate.js.map +1 -1
  474. package/dist/ir/validate.test.js +125 -0
  475. package/dist/ir/validate.test.js.map +1 -1
  476. package/dist/library/fence-eval.d.ts +1 -1
  477. package/dist/library/fence-eval.js +5 -4
  478. package/dist/library/fence-eval.js.map +1 -1
  479. package/dist/library/ir-policy.js +11 -4
  480. package/dist/library/ir-policy.js.map +1 -1
  481. package/dist/library/library-profile.js +13 -13
  482. package/dist/library/library-profile.js.map +1 -1
  483. package/dist/library/prepare.js +1 -1
  484. package/dist/library/prepare.js.map +1 -1
  485. package/dist/library/sidecar.js +3 -3
  486. package/dist/library/sidecar.js.map +1 -1
  487. package/dist/native/prepare.js +3 -2
  488. package/dist/native/prepare.js.map +1 -1
  489. package/dist/native/sanitizer.test.js +1 -0
  490. package/dist/native/sanitizer.test.js.map +1 -1
  491. package/package.json +20 -20
  492. package/surface-manifest.json +537 -142
@@ -33,6 +33,12 @@ export interface ComputedEventPattern {
33
33
  suffix: string;
34
34
  listener: boolean;
35
35
  }
36
+ /** The compile-time key of `events.errorMonitor`. Node keys it by a
37
+ * symbol, so no string event name may share it: literal names are keyed
38
+ * through literalEventKey, which never yields this key, and the runtime
39
+ * receives the emitter.errorMonitor key object (matched by identity)
40
+ * instead of any string. */
41
+ export declare const ERROR_MONITOR_EVENT = "\0events.errorMonitor";
36
42
  /** `recv.<member>(...)` over an emitter-rooted receiver — the whole
37
43
  * EventEmitter method surface. Returns null only for members this spoke
38
44
  * does not own (the caller falls through to its own fences).
@@ -49,6 +49,7 @@ import { arrayOf, BOOL, canBoxFuncIntoDyn, canConvertToDyn, DYN, F64, isUnitType
49
49
  import { STREAM_FORCED_EVENT_NAMES, streamForcedTuple, streamSidesOf } from "./lower-stream.js";
50
50
  import { boolLit, strLit, varRef } from "../../ir/build.js";
51
51
  import { tryLowerExpression } from "./expressions/try-lower-expression.js";
52
+ import { lowerAddAbortListener } from "./builtin-calls.js";
52
53
  /** True when the class descends from (or is) the runtime emitter. */
53
54
  export function emitterRooted(lowerer, info) {
54
55
  for (let c = info ?? null; c; c = c.base) {
@@ -122,14 +123,17 @@ function emitterEvents(lowerer) {
122
123
  }));
123
124
  return sig;
124
125
  };
125
- // The two forced tuples (see the header comment).
126
- table.set("error", {
127
- tuple: [{ kind: "object", className: "%Error" }],
128
- fromEmit: true,
129
- conflict: null,
130
- dynListener: false,
131
- hasListener: false,
132
- });
126
+ // The forced tuples (see the header comment); errorMonitor listeners
127
+ // receive the 'error' payload.
128
+ for (const name of ["error", ERROR_MONITOR_EVENT]) {
129
+ table.set(name, {
130
+ tuple: [{ kind: "object", className: "%Error" }],
131
+ fromEmit: true,
132
+ conflict: null,
133
+ dynListener: false,
134
+ hasListener: false,
135
+ });
136
+ }
133
137
  table.set("newListener", {
134
138
  tuple: [STRING],
135
139
  fromEmit: true,
@@ -241,7 +245,12 @@ function emitterEvents(lowerer) {
241
245
  const info = scannedEmitterInfo(lowerer, recvT);
242
246
  if (!info)
243
247
  return;
244
- if (!nameT.isStringLiteralType()) {
248
+ const literal = isErrorMonitorRef(lowerer, arg0)
249
+ ? ERROR_MONITOR_EVENT
250
+ : nameT.isStringLiteralType()
251
+ ? literalEventKey(nameT.value)
252
+ : null;
253
+ if (literal === null) {
245
254
  const pattern = computedEventPatternOf(lowerer, arg0);
246
255
  if (pattern &&
247
256
  streamSidesOf(lowerer, info) === null &&
@@ -250,8 +259,8 @@ function emitterEvents(lowerer) {
250
259
  }
251
260
  return;
252
261
  }
253
- const name = nameT.value;
254
- if (META_EVENTS.has(name) || name === "error")
262
+ const name = literal;
263
+ if (META_EVENTS.has(name) || name === "error" || name === ERROR_MONITOR_EVENT)
255
264
  return; // forced tuples
256
265
  // Stream receivers' runtime-emitted events carry PER-BASE forced
257
266
  // tuples (lower-stream.ts) — their sites never join the program-
@@ -304,13 +313,78 @@ function computedPatternsOverlap(left, right) {
304
313
  return ((left.prefix.startsWith(right.prefix) || right.prefix.startsWith(left.prefix)) &&
305
314
  (left.suffix.endsWith(right.suffix) || right.suffix.endsWith(left.suffix)));
306
315
  }
307
- /** The compile-time name for a literal-only operation, or a pointed fence
308
- * (string-literal TYPE, so const bindings and literal unions of one
309
- * member count — the staticHeaderKeyOf stance). */
310
- function eventNameOf(lowerer, member, arg) {
316
+ /** The compile-time key of `events.errorMonitor`. Node keys it by a
317
+ * symbol, so no string event name may share it: literal names are keyed
318
+ * through literalEventKey, which never yields this key, and the runtime
319
+ * receives the emitter.errorMonitor key object (matched by identity)
320
+ * instead of any string. */
321
+ export const ERROR_MONITOR_EVENT = "\u0000events.errorMonitor";
322
+ /** A string event name's compile-time key: the name itself, with one more
323
+ * leading NUL when it already starts with one, so a key of one NUL and
324
+ * then a non-NUL (ERROR_MONITOR_EVENT) belongs to no string. */
325
+ function literalEventKey(name) {
326
+ return name.startsWith("\u0000") ? `\u0000${name}` : name;
327
+ }
328
+ /** The string name of a key that is not ERROR_MONITOR_EVENT. */
329
+ function eventKeyName(key) {
330
+ return key.startsWith("\u0000") ? key.slice(1) : key;
331
+ }
332
+ /** The runtime event-name argument for a compile-time key. */
333
+ function eventNameExpr(key, loc) {
334
+ if (key === ERROR_MONITOR_EVENT) {
335
+ return { kind: "libCall", fn: "emitter.errorMonitor", args: [], type: STRING, loc };
336
+ }
337
+ return strLit(eventKeyName(key), loc);
338
+ }
339
+ /** `errorMonitor` / `EventEmitter.errorMonitor` / `events.errorMonitor`:
340
+ * the events module's unique symbol, by declaration provenance. */
341
+ function isErrorMonitorRef(lowerer, arg) {
342
+ const isMonitorType = (t) => {
343
+ if (!(t.flags & ts.TypeFlags.UniqueESSymbol))
344
+ return false;
345
+ const symbol = t.getSymbol();
346
+ return symbol?.name === "errorMonitor" && lowerer.isStdlibSymbol(symbol);
347
+ };
348
+ // The unique symbol TYPE names its declaration through any alias.
349
+ if (isMonitorType(lowerer.typeOf(arg)))
350
+ return true;
351
+ // A const destructuring (`const { errorMonitor } = events`) widens the
352
+ // binding's type in JavaScript; its source property still names it.
353
+ if (!ts.isIdentifier(arg))
354
+ return false;
355
+ const symbol = lowerer.resolveValueSymbol(arg);
356
+ const declaration = symbol ? lowerer.checker.valueDeclarationOf(symbol) : undefined;
357
+ if (!declaration || !ts.isBindingElement(declaration))
358
+ return false;
359
+ const pattern = declaration.parent;
360
+ const variable = pattern?.parent;
361
+ if (!pattern ||
362
+ !variable ||
363
+ !ts.isObjectBindingPattern(pattern) ||
364
+ !ts.isVariableDeclaration(variable) ||
365
+ !variable.initializer ||
366
+ !(ts.getCombinedNodeFlags(variable) & ts.NodeFlags.Const))
367
+ return false;
368
+ const key = declaration.propertyName ?? declaration.name;
369
+ if (!ts.isIdentifier(key))
370
+ return false;
371
+ const property = lowerer.checker.getPropertyOfType(lowerer.typeOf(variable.initializer), key.text);
372
+ return property !== undefined && isMonitorType(lowerer.checker.getTypeOfSymbol(property));
373
+ }
374
+ /** A compile-time event key (literalEventKey): a string-literal TYPE
375
+ * (const bindings and literal unions of one member count — the
376
+ * staticHeaderKeyOf stance) or the errorMonitor symbol. */
377
+ function literalEventName(lowerer, arg) {
378
+ if (isErrorMonitorRef(lowerer, arg))
379
+ return ERROR_MONITOR_EVENT;
311
380
  const t = lowerer.typeOf(arg);
312
- if (t.isStringLiteralType())
313
- return t.value;
381
+ return t.isStringLiteralType() ? literalEventKey(t.value) : null;
382
+ }
383
+ /** The compile-time key for a literal-only operation, or a pointed fence. */
384
+ function eventNameOf(lowerer, member, arg) {
385
+ const name = literalEventName(lowerer, arg);
386
+ if (name !== null)
387
+ return name;
314
388
  lowerer.noLowering(`${member} with a non-literal event name`, arg, "this operation needs a compile-time string literal (symbol names have no lowering)");
315
389
  }
316
390
  function staticStringPrefixOf(lowerer, node, seen = new Set()) {
@@ -373,7 +447,12 @@ function computedEventPatternOf(lowerer, node) {
373
447
  const suffix = staticStringSuffixOf(lowerer, node) ?? "";
374
448
  return prefix || suffix ? { prefix, suffix, listener: false } : null;
375
449
  }
376
- function patternMatchesName(pattern, name) {
450
+ /** Whether a computed name could equal the event keyed `key` (never the
451
+ * errorMonitor key: computed names are strings). */
452
+ function patternMatchesName(pattern, key) {
453
+ if (key === ERROR_MONITOR_EVENT)
454
+ return false;
455
+ const name = eventKeyName(key);
377
456
  return name.startsWith(pattern.prefix) && name.endsWith(pattern.suffix);
378
457
  }
379
458
  /** A computed event can use the variable-arity dyn path only when its
@@ -689,8 +768,8 @@ streamData) {
689
768
  kind: "call",
690
769
  callee: helper,
691
770
  args: registering
692
- ? [receiver, strLit(name, loc), cbDyn, boolLit(once, loc), boolLit(prepend, loc)]
693
- : [receiver, strLit(name, loc), cbDyn],
771
+ ? [receiver, eventNameExpr(name, loc), cbDyn, boolLit(once, loc), boolLit(prepend, loc)]
772
+ : [receiver, eventNameExpr(name, loc), cbDyn],
694
773
  type: recvT,
695
774
  loc,
696
775
  };
@@ -801,6 +880,8 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
801
880
  // everything else fences by its static name.
802
881
  if (superRecv === undefined &&
803
882
  lowerer.checker.getConstructSignatures(lowerer.typeOf(access.expression)).length > 0) {
883
+ if (member === "addAbortListener")
884
+ return lowerAddAbortListener(lowerer, call, loc);
804
885
  if (member === "setMaxListeners" && args.length === 1) {
805
886
  if (lowerer.mapTypeOf(lowerer.typeOf(args[0]))?.kind !== "f64") {
806
887
  // Node's runtime ladder over the dyn value ("setMaxListeners" is
@@ -873,7 +954,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
873
954
  lowerer.noLowering(`${member} with ${args.length} arguments`, call, "the supported form is (eventName, listener)");
874
955
  }
875
956
  const registering = REGISTER_MEMBERS.has(member);
876
- if (!lowerer.typeOf(args[0]).isStringLiteralType()) {
957
+ if (literalEventName(lowerer, args[0]) === null) {
877
958
  computedEventPattern(lowerer, info, member, args[0]);
878
959
  const receiver = lowerReceiver();
879
960
  const name = lowerer.lowerExprExpecting(args[0], STRING);
@@ -885,7 +966,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
885
966
  streamForcedTuple(lowerer, info, name) === null &&
886
967
  (flexibleJsEvent(name, table.get(name)) ||
887
968
  computedPatterns(lowerer).some((pattern) => patternMatchesName(pattern, name)))) {
888
- return lowerFlexListenerCall(lowerer, member, strLit(name, loc), lowerReceiver(), args[1], registering, member === "once" || member === "prependOnceListener", member === "prependListener" || member === "prependOnceListener", loc);
969
+ return lowerFlexListenerCall(lowerer, member, eventNameExpr(name, loc), lowerReceiver(), args[1], registering, member === "once" || member === "prependOnceListener", member === "prependListener" || member === "prependOnceListener", loc);
889
970
  }
890
971
  // The runtime fires the meta events INTERNALLY (scr_ee_emit_meta —
891
972
  // Node calls this.emit, which would dispatch through an emit
@@ -927,7 +1008,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
927
1008
  return {
928
1009
  kind: "libCall",
929
1010
  fn: "emitter.off",
930
- args: [receiver, strLit(name, loc), cb],
1011
+ args: [receiver, eventNameExpr(name, loc), cb],
931
1012
  type: receiver.type,
932
1013
  loc,
933
1014
  };
@@ -935,7 +1016,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
935
1016
  return {
936
1017
  kind: "libCall",
937
1018
  fn: "emitter.onData",
938
- args: [receiver, strLit(name, loc), cb, boolLit(once, loc), boolLit(prepend, loc)],
1019
+ args: [receiver, eventNameExpr(name, loc), cb, boolLit(once, loc), boolLit(prepend, loc)],
939
1020
  type: receiver.type,
940
1021
  loc,
941
1022
  };
@@ -953,8 +1034,8 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
953
1034
  kind: "libCall",
954
1035
  fn: registering ? "emitter.on" : "emitter.off",
955
1036
  args: registering
956
- ? [receiver, strLit(name, loc), cb, boolLit(once, loc), boolLit(prepend, loc)]
957
- : [receiver, strLit(name, loc), cb],
1037
+ ? [receiver, eventNameExpr(name, loc), cb, boolLit(once, loc), boolLit(prepend, loc)]
1038
+ : [receiver, eventNameExpr(name, loc), cb],
958
1039
  type: receiver.type,
959
1040
  loc,
960
1041
  };
@@ -963,8 +1044,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
963
1044
  if (args.length === 0) {
964
1045
  lowerer.noLowering("emit without an event name", call);
965
1046
  }
966
- const nameType = lowerer.typeOf(args[0]);
967
- if (!nameType.isStringLiteralType()) {
1047
+ if (literalEventName(lowerer, args[0]) === null) {
968
1048
  const pattern = computedEventPatternOf(lowerer, args[0]);
969
1049
  const mayBeObserved = pattern === null ||
970
1050
  computedPatternOverlapsReserved(pattern) ||
@@ -996,7 +1076,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
996
1076
  streamForcedTuple(lowerer, info, name) === null &&
997
1077
  (flexibleJsEvent(name, table.get(name)) ||
998
1078
  computedPatterns(lowerer).some((pattern) => patternMatchesName(pattern, name))))
999
- return lowerFlexEmit(strLit(name, loc), flexibleJsEvent(name, table.get(name)) ? "variable-arity" : "computed-name");
1079
+ return lowerFlexEmit(eventNameExpr(name, loc), flexibleJsEvent(name, table.get(name)) ? "variable-arity" : "computed-name");
1000
1080
  const receiver = lowerReceiver();
1001
1081
  if (name === "error") {
1002
1082
  // The special event: exactly one %Error-rooted payload; no listener
@@ -1034,7 +1114,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1034
1114
  return {
1035
1115
  kind: "libCall",
1036
1116
  fn: "emitter.emitData",
1037
- args: [receiver, strLit(name, loc), chunk],
1117
+ args: [receiver, eventNameExpr(name, loc), chunk],
1038
1118
  type: BOOL,
1039
1119
  loc,
1040
1120
  };
@@ -1055,7 +1135,11 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1055
1135
  }
1056
1136
  const all = args.length === 0;
1057
1137
  const receiver = lowerReceiver();
1058
- const name = all ? strLit("", loc) : lowerer.lowerExprExpecting(args[0], STRING);
1138
+ const name = all
1139
+ ? strLit("", loc)
1140
+ : isErrorMonitorRef(lowerer, args[0])
1141
+ ? eventNameExpr(ERROR_MONITOR_EVENT, loc)
1142
+ : lowerer.lowerExprExpecting(args[0], STRING);
1059
1143
  if (name.type.kind !== "string") {
1060
1144
  lowerer.noLowering(`removeAllListeners with a '${lowerer.fmt(name.type)}' event name`, args[0] ?? call);
1061
1145
  }
@@ -1072,7 +1156,9 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1072
1156
  lowerer.noLowering(`listenerCount with ${args.length} arguments`, call);
1073
1157
  }
1074
1158
  const receiver = lowerReceiver();
1075
- const name = lowerer.lowerExprExpecting(args[0], STRING);
1159
+ const name = isErrorMonitorRef(lowerer, args[0])
1160
+ ? eventNameExpr(ERROR_MONITOR_EVENT, loc)
1161
+ : lowerer.lowerExprExpecting(args[0], STRING);
1076
1162
  if (name.type.kind !== "string") {
1077
1163
  lowerer.noLowering(`listenerCount with a '${lowerer.fmt(name.type)}' event name`, args[0]);
1078
1164
  }
@@ -1123,7 +1209,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1123
1209
  return {
1124
1210
  kind: "libCall",
1125
1211
  fn: "emitter.listeners",
1126
- args: [receiver, strLit(name, loc)],
1212
+ args: [receiver, eventNameExpr(name, loc)],
1127
1213
  type: arrayOf({ kind: "func", params: tuple, ret: { kind: "void" } }),
1128
1214
  loc,
1129
1215
  };
@@ -1424,7 +1510,7 @@ export function lowerEmitOverrideSpec(lowerer, req) {
1424
1510
  const eventDecl = ov.decl.parameters[0];
1425
1511
  const eventLocal = lowerer.declareLocal(eventDecl.name, ts.isIdentifier(eventDecl.name) ? eventDecl.name.text : "event", STRING, true);
1426
1512
  const prologue = [
1427
- { kind: "varDecl", localId: eventLocal.id, init: strLit(event, loc), loc },
1513
+ { kind: "varDecl", localId: eventLocal.id, init: eventNameExpr(event, loc), loc },
1428
1514
  ];
1429
1515
  lowerer.emitSpecCtx = {
1430
1516
  info,
@@ -1497,7 +1583,7 @@ export function emitSpecSuperForward(lowerer, call, access) {
1497
1583
  return {
1498
1584
  kind: "libCall",
1499
1585
  fn: "emitter.emitError",
1500
- args: [thisRef, strLit(ctx.event, loc), payload[0]],
1586
+ args: [thisRef, eventNameExpr(ctx.event, loc), payload[0]],
1501
1587
  type: BOOL,
1502
1588
  loc,
1503
1589
  };
@@ -1505,7 +1591,7 @@ export function emitSpecSuperForward(lowerer, call, access) {
1505
1591
  return {
1506
1592
  kind: "libCall",
1507
1593
  fn: "emitter.emit",
1508
- args: [thisRef, strLit(ctx.event, loc), ...payload],
1594
+ args: [thisRef, eventNameExpr(ctx.event, loc), ...payload],
1509
1595
  type: BOOL,
1510
1596
  loc,
1511
1597
  };
@@ -1533,14 +1619,14 @@ function emitDispatchExpr(lowerer, info, name, tuple, receiver, payload, superOf
1533
1619
  ? {
1534
1620
  kind: "libCall",
1535
1621
  fn: "emitter.emitError",
1536
- args: [recv, strLit(name, loc), args[0]],
1622
+ args: [recv, eventNameExpr(name, loc), args[0]],
1537
1623
  type: BOOL,
1538
1624
  loc,
1539
1625
  }
1540
1626
  : {
1541
1627
  kind: "libCall",
1542
1628
  fn: "emitter.emit",
1543
- args: [recv, strLit(name, loc), ...args],
1629
+ args: [recv, eventNameExpr(name, loc), ...args],
1544
1630
  type: BOOL,
1545
1631
  loc,
1546
1632
  };