@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
@@ -1,4 +1,5 @@
1
1
  import { dynUndefinedExpr, numLit, varRef } from "../../ir/build.js";
2
+ import { lowerEventObjectPropertyWrite } from "./lower-event-target.js";
2
3
  import { lowerDynObjectLiteral } from "./expressions/object-literals.js";
3
4
  import { importMetaBindingSource } from "./import-meta.js";
4
5
  import { iteratorCanStep, iteratorValue } from "./iterator-consumption.js";
@@ -40,6 +41,7 @@ import { genericIfaceBindingKeepsClass } from "./lower-classes.js";
40
41
  import { lowerStreamUnderscoreAssign, streamClassAliasDecl } from "./lower-stream.js";
41
42
  import { lowerHttpResPropertyAssignment, lowerHttpServerTimeoutAssignment, lowerServerCloseOverrideAssignment, } from "./lower-server.js";
42
43
  import { lowerUrlAssignment } from "./builtins/url.js";
44
+ import { isFspGlobCall, lowerFspGlobForAwait } from "./builtins/fs-glob.js";
43
45
  import { isNativeFfiRequire, builtinMemberRequireDecl, builtinNamespaceDestructureModuleOf, createRequireBindingDecl, createRequireCalleeFileOf, createRequireNamespaceDecl, createRequireProgramModuleDecl, createRequireProgramModuleOf, } from "./builtins/module-bindings.js";
44
46
  import { lowerNodeModuleCall } from "./builtins/module-resolution.js";
45
47
  import { registerBuiltinCallableAlias } from "./builtins/callable-aliases.js";
@@ -59,6 +61,7 @@ import { probeNodeRequireRefusal } from "../npm.js";
59
61
  import { constituentTypes } from "../ts7/checker.js";
60
62
  import { npmStaticPackageOfPath } from "../npm-static.js";
61
63
  import { fenceNodeModuleMutation } from "./lower-node-module.js";
64
+ import { fencePerfEntryKeyWalk } from "./builtins/performance.js";
62
65
  /** An opted package's directly-returned empty array may take the function's
63
66
  * explicit static return element type. This is the common JS accumulator
64
67
  * shape (`const result = []; result.push(value); return result`) and is
@@ -524,7 +527,7 @@ export function lowerStmts(lowerer, stmts) {
524
527
  // only — a capture wrapper in force means collection owns the
525
528
  // report). The statement's diagnostics move OFF the build and
526
529
  // onto the fence: executing the statement throws the first
527
- // one's message, so nothing is ever silently dropped — either
530
+ // one's message, so no diagnostic is dropped — either
528
531
  // the statement never runs (Node parity: the construct never
529
532
  // executed) or it reports exactly what the compile fence would
530
533
  // have said.
@@ -798,13 +801,14 @@ function varBindingType(lowerer, nameNode) {
798
801
  }
799
802
  if (!type || type.kind === "void")
800
803
  return null;
801
- return type;
804
+ // A binding readable before its first store holds undefined until then.
805
+ return lowerer.runtimeOptionalBindingType(nameNode, type);
802
806
  }
803
807
  /** `var` declarations hoist to their FUNCTION: the binding exists across
804
808
  * the whole enclosing function body regardless of block position, and
805
809
  * every same-name `var` in that function is the SAME binding (tsc merges
806
810
  * the declarations into one symbol, so symbol-keyed resolution gets the
807
- * merge for free). This mints the one function-scoped slot on first
811
+ * merge automatically). This mints the one function-scoped slot on first
808
812
  * encounter: an IrLocal registered in the function's ROOT scope frame
809
813
  * (never popped by block exits) whose `varDecl` is PUSHED into the
810
814
  * function-root statement list at the current position — everything
@@ -849,6 +853,7 @@ function hoistVarBinding(lowerer, symbol, nameNode) {
849
853
  };
850
854
  lowerer.ctx.locals.push(local);
851
855
  lowerer.ctx.scopes[0].set(symbol, local);
856
+ noteEarlyReadVar(lowerer, symbol, local);
852
857
  // A checked-dynamic slot holds the dyn undefined (a NULL dyn is a
853
858
  // trap); everything else rides unassignedSlotInit (interned union arm,
854
859
  const wrapped = type.kind === "dyn"
@@ -869,9 +874,12 @@ function hoistVarBinding(lowerer, symbol, nameNode) {
869
874
  * bindings (the dyn undefined). Everything else returns false
870
875
  * and the reference lands on the named fence in rejectUnresolvedSymbol:
871
876
  * a slot of a narrower type has no bit pattern for the `undefined` Node
872
- * would yield if the capture ran early, and guessing "it won't" is the
873
- * silent-wrong-output sin. */
877
+ * would yield if the capture ran early, and guessing "it won't" would
878
+ * produce wrong output without an error. */
874
879
  export function predeclareForwardVar(lowerer, symbol) {
880
+ // Module-scope vars already have their global storage.
881
+ if (lowerer.globalsBySymbol.has(symbol))
882
+ return false;
875
883
  const decl = lowerer.checker.valueDeclarationOf(symbol);
876
884
  if (!decl || !ts.isVariableDeclaration(decl) || !isVarDeclared(decl))
877
885
  return false;
@@ -921,10 +929,20 @@ export function predeclareForwardVar(lowerer, symbol) {
921
929
  };
922
930
  ctx.locals.push(local);
923
931
  ctx.scopes[0].set(symbol, local);
932
+ noteEarlyReadVar(lowerer, symbol, local);
924
933
  root.out.push({ kind: "varDecl", localId: local.id, init: wrapped, loc: locOf(decl) });
925
934
  ctx.hoistedVars.set(symbol, local);
926
935
  return true;
927
936
  }
937
+ /** A var readable before its first store (the runtime-optional analysis
938
+ * widened it): reads keep the undefined-armed value. */
939
+ function noteEarlyReadVar(lowerer, symbol, local) {
940
+ if (!lowerer.earlyReadVars.has(symbol))
941
+ return;
942
+ const root = lowerer.runtimeOptionalRootOf(local);
943
+ lowerer.runtimeOptionalLocals.add(root);
944
+ lowerer.runtimeOptionalStorageLocals.add(root);
945
+ }
928
946
  /** Records the symbols a poisoned DECLARATION statement would have bound
929
947
  * (identifier and pattern names alike, for-initializers included) so
930
948
  * later references report the SC2004 cascade. Registered bindings win:
@@ -1131,6 +1149,9 @@ export function lowerStmt(lowerer, stmt) {
1131
1149
  else if (lowerer.ctx.returnType.kind !== "void") {
1132
1150
  lowerer.unsupported("SC1090", stmt, `bare 'return' where the declared return type is '${lowerer.fmt(lowerer.ctx.returnType)}' (JS hands the caller undefined, which this representation cannot hold — return a value, or widen the declared return type with undefined)`);
1133
1151
  }
1152
+ // An async generator's bare return has no operand to await.
1153
+ if (lowerer.ctx.isAsync === true && lowerer.ctx.generator)
1154
+ return { kind: "return", value, awaited: true, loc: locOf(stmt) };
1134
1155
  return { kind: "return", value, loc: locOf(stmt) };
1135
1156
  }
1136
1157
  if (ts.isBreakStatement(stmt) || ts.isContinueStatement(stmt)) {
@@ -2101,7 +2122,7 @@ export function lowerBindingPattern(lowerer, pattern, srcRef, srcType, isLet, ou
2101
2122
  // reads (base-chain accessors and setter-only rejections resolve
2102
2123
  // identically). Rest elements, methods, and names no class on the
2103
2124
  // chain declares keep named fences (a detached method would lose its
2104
- // receiver silently; JS binds the prototype function).
2125
+ // receiver without an error; JS binds the prototype function).
2105
2126
  if (srcType.kind === "object") {
2106
2127
  const info = lowerer.classes.get(srcType.className);
2107
2128
  if (!info)
@@ -3018,12 +3039,12 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
3018
3039
  * members (methods and accessors stay behind; the checker's rest type
3019
3040
  * excludes them too, so the two sides agree). The packed record must
3020
3041
  * agree with the checker's rest type field-for-field — a non-public
3021
- * field IS copied by JS but the rest type cannot name it (silent
3042
+ * field IS copied by JS but the rest type cannot name it (undiagnosed
3022
3043
  * divergence; fence) — and key-for-key in ORDER: the packed shape's
3023
3044
  * JSON/Object.keys order is first-seen global metadata, and a checker
3024
3045
  * rest type that reorders (own-before-inherited) would make the
3025
3046
  * enumeration surfaces diverge from Node, so it fences instead of
3026
- * silently reordering. Runtime-provided chains (Error/EventEmitter/
3047
+ * reordering. Runtime-provided chains (Error/EventEmitter/
3027
3048
  * stream roots) carry runtime-internal state no record copy can
3028
3049
  * reproduce — fenced. ES-#private fields are own but non-enumerable:
3029
3050
  * JS skips them and so does the packing. */
@@ -3033,7 +3054,7 @@ function classInstanceRestValue(lowerer, blame, srcRef, srcType, info, consumed,
3033
3054
  lowerer.unsupported("SC1031", blame, "rest bindings over class instances with symbol-keyed fields (the copied symbols have no record form)");
3034
3055
  }
3035
3056
  for (let c = info; c; c = c.base) {
3036
- if (c.builtinError || c.builtinEmitter || c.builtinStream) {
3057
+ if (c.builtinError || c.builtinEmitter || c.builtinStream || c.builtinEventTarget) {
3037
3058
  lowerer.unsupported("SC1031", blame, "rest bindings over runtime-provided class instances (Error/EventEmitter/stream internals have no record form)");
3038
3059
  }
3039
3060
  }
@@ -4062,6 +4083,9 @@ function annotatedInitializerTarget(lowerer, name) {
4062
4083
  function inferredOptionalRecordType(lowerer, decl, declared, actual) {
4063
4084
  if (decl.type || hasJsTypeAnnotation(decl))
4064
4085
  return declared;
4086
+ const symbol = ts.isIdentifier(decl.name) ? lowerer.resolveValueSymbol(decl.name) : undefined;
4087
+ if (symbol && lowerer.runtimeOptionalRecordsKeptDeclared.has(symbol))
4088
+ return declared;
4065
4089
  if (lowerer.isRuntimeOptionalRecordVariant(actual, declared))
4066
4090
  return actual;
4067
4091
  if (declared.kind !== "record" || actual.kind !== "record")
@@ -4855,7 +4879,7 @@ function lowerCjsExportStatement(lowerer, cjs) {
4855
4879
  // through to the declaration) — EXACT for const/function bindings, a
4856
4880
  // live-binding lie for `let`: Node copies the VALUE into the table at
4857
4881
  // this statement, so later reassignments are invisible to importers.
4858
- // Mutable bindings fence instead of diverging silently.
4882
+ // Mutable bindings fence instead of diverging from Node.
4859
4883
  const fenceMutable = (nameNode) => {
4860
4884
  const sym = lowerer.resolveValueSymbol(nameNode);
4861
4885
  const g = sym ? lowerer.globalsBySymbol.get(sym) : undefined;
@@ -5196,6 +5220,12 @@ export function lowerExprStatement(lowerer, expr) {
5196
5220
  return lowerer.lowerElementWrite(expr);
5197
5221
  if (ts.isPropertyAccessExpression(expr.left)) {
5198
5222
  fenceNodeModuleMutation(lowerer, expr.left, "assignment");
5223
+ // The writable Event accessors on Event subclass instances.
5224
+ {
5225
+ const eventWrite = lowerEventObjectPropertyWrite(lowerer, expr.left, expr.right);
5226
+ if (eventWrite)
5227
+ return { kind: "exprStmt", expr: eventWrite, loc: locOf(expr) };
5228
+ }
5199
5229
  // Native arrays have a writable length property. The runtime grows
5200
5230
  // by creating holes and truncates with RC-aware removal; keep this
5201
5231
  // as a statement operation so invalid lengths can use the normal
@@ -5214,7 +5244,7 @@ export function lowerExprStatement(lowerer, expr) {
5214
5244
  // `process.env.NAME = v` — setenv(3): later env reads and spawned
5215
5245
  // children observe the write, exactly Node. Values are strings
5216
5246
  // (Node stringifies everything; a non-string RHS fences instead
5217
- // of silently diverging). The computed-key form lands in
5247
+ // of diverging from Node). The computed-key form lands in
5218
5248
  // lowerElementWrite.
5219
5249
  if (lowerer.isProcessEnv(expr.left.expression) && !expr.left.questionDotToken) {
5220
5250
  const loc = locOf(expr);
@@ -5275,7 +5305,7 @@ export function lowerExprStatement(lowerer, expr) {
5275
5305
  // own name: the field's module global assigns. Writes through a
5276
5306
  // SUBCLASS name (`D.x = v` creates an OWN property on D in JS —
5277
5307
  // different storage) and through class VALUES (the same dynamic
5278
- // story) are named fences, never a silently-wrong global write.
5308
+ // story) are named fences instead of an incorrect global write.
5279
5309
  if (!expr.left.questionDotToken &&
5280
5310
  (ts.isIdentifier(expr.left.expression) ||
5281
5311
  expr.left.expression.kind === ts.SyntaxKind.ThisKeyword)) {
@@ -5412,6 +5442,38 @@ export function lowerExprStatement(lowerer, expr) {
5412
5442
  loc,
5413
5443
  };
5414
5444
  }
5445
+ if (!expr.left.questionDotToken) {
5446
+ const flag = lowerer.stdlibGlobalMember(expr.left, "process");
5447
+ if (flag === "noDeprecation" || flag === "throwDeprecation") {
5448
+ const loc = locOf(expr);
5449
+ const value = lowerer.lowerExprExpecting(expr.right, DYN);
5450
+ return {
5451
+ kind: "exprStmt",
5452
+ expr: {
5453
+ kind: "libCall",
5454
+ fn: "process.setDeprecationFlag",
5455
+ args: [numLit(flag === "noDeprecation" ? 0 : 1, loc), value],
5456
+ type: VOID,
5457
+ loc,
5458
+ },
5459
+ loc,
5460
+ };
5461
+ }
5462
+ // process.title = name: libuv's uv_set_process_title (the
5463
+ // runtime truncates to the original argument area on POSIX).
5464
+ if (flag === "title") {
5465
+ const loc = locOf(expr);
5466
+ const value = lowerer.lowerExpr(expr.right);
5467
+ if (value.type.kind !== "string") {
5468
+ lowerer.noLowering(`process.title writes of '${lowerer.fmt(value.type)}' values`, expr.right, "assign a string");
5469
+ }
5470
+ return {
5471
+ kind: "exprStmt",
5472
+ expr: { kind: "libCall", fn: "process.setTitle", args: [value], type: VOID, loc },
5473
+ loc,
5474
+ };
5475
+ }
5476
+ }
5415
5477
  // `r._read = fn` / `w._write = fn` (and the other underscore
5416
5478
  // methods) on a runtime-stream-rooted receiver: Node's
5417
5479
  // own-property shadow of the prototype method — the runtime
@@ -6641,6 +6703,13 @@ export function lowerForOf(lowerer, stmt) {
6641
6703
  // A synchronous array iterator is also valid in `for await`. Its values
6642
6704
  // take the async-from-sync path below; other async sources retain their
6643
6705
  // dedicated request protocols.
6706
+ if (stmt.awaitModifier) {
6707
+ let head = stmt.expression;
6708
+ while (ts.isParenthesizedExpression(head))
6709
+ head = head.expression;
6710
+ if (isFspGlobCall(lowerer, head))
6711
+ return lowerFspGlobForAwait(lowerer, stmt, head);
6712
+ }
6644
6713
  const awaitArray = !!stmt.awaitModifier && lowerer.mapTypeOf(lowerer.typeOf(stmt.expression))?.kind === "array";
6645
6714
  if (stmt.awaitModifier && !awaitArray) {
6646
6715
  {
@@ -6835,7 +6904,7 @@ export function lowerForOf(lowerer, stmt) {
6835
6904
  if (iterable.type.kind === "string") {
6836
6905
  // JS's string iterator walks code POINTS, not units: each pass
6837
6906
  // yields the whole character (two UTF-16 units for astral chars,
6838
- // where charAt would truncate to U+FFFD).
6907
+ // where charAt returns one surrogate half).
6839
6908
  return lowerForOfString(lowerer, stmt, iterable, labels);
6840
6909
  }
6841
6910
  if (iterable.type.kind === "map") {
@@ -7659,8 +7728,8 @@ function lowerForOfMatchAll(lowerer, stmt, call, stored) {
7659
7728
  }
7660
7729
  /** `for (const ch of s)` over a STRING: JS's string iterator, which walks
7661
7730
  * code POINTS — each pass binds the whole character (a two-unit string
7662
- * for astral chars, where charAt/slice would truncate the halves to
7663
- * U+FFFD). Desugars over the UTF-16 cursor machinery: a hidden unit
7731
+ * for astral chars, where charAt/slice would return one surrogate half).
7732
+ * Desugars over the UTF-16 cursor machinery: a hidden unit
7664
7733
  * index reads the character with the cpAt intrinsic and advances by ITS
7665
7734
  * length before the body runs (so `continue` never skips the advance):
7666
7735
  *
@@ -7668,9 +7737,8 @@ function lowerForOfMatchAll(lowerer, stmt, call, stored) {
7668
7737
  * while (%i < %s.length) { const ch = cpAt(%s, %i); %i += ch.length; <body> } }
7669
7738
  *
7670
7739
  * Strings are immutable, so the length is stable and there is no
7671
- * iterator state to unwind on throw; lone surrogates cannot occur in
7672
- * storage (canonicalized to U+FFFD at creation — the documented
7673
- * divergence), so every step lands on a character start. */
7740
+ * iterator state to unwind on throw; a lone surrogate is a one-unit
7741
+ * character, so every step lands on a character start. */
7674
7742
  /** for-of over a CLASS ITERABLE (classIteratorOf's shape) — the
7675
7743
  * iterator protocol as ordinary method calls:
7676
7744
  *
@@ -8261,15 +8329,35 @@ function lowerForIn(lowerer, stmt) {
8261
8329
  const recv = lowerer.declareHiddenLocal("%indyn", DYN);
8262
8330
  const ref = { kind: "varRef", localId: recv.id, type: DYN, loc };
8263
8331
  const keys = {
8264
- kind: "dynCheck",
8265
- value: { kind: "libCall", fn: "dyn.forInKeys", args: [ref], type: DYN, loc },
8332
+ kind: "libCall",
8333
+ fn: "dyn.forInKeyStrings",
8334
+ args: [ref],
8266
8335
  type: arrayOf(STRING),
8267
8336
  loc,
8268
8337
  };
8269
- const loop = lowerForInOverKeys(lowerer, stmt, keys, labels, (key) => classForInHasKey(lowerer, ref, key, loc));
8338
+ // A stable snapshot (a typed record's fields) needs no live presence
8339
+ // test per visit.
8340
+ const stable = lowerer.declareHiddenLocal("%instable", BOOL);
8341
+ const loop = lowerForInOverKeys(lowerer, stmt, keys, labels, (key) => ({
8342
+ kind: "ternary",
8343
+ cond: { kind: "varRef", localId: stable.id, type: BOOL, loc },
8344
+ then: { kind: "boolLit", value: true, type: BOOL, loc },
8345
+ else_: classForInHasKey(lowerer, ref, key, loc),
8346
+ type: BOOL,
8347
+ loc,
8348
+ }));
8270
8349
  return {
8271
8350
  kind: "block",
8272
- body: [{ kind: "varDecl", localId: recv.id, init: receiver, loc }, loop],
8351
+ body: [
8352
+ { kind: "varDecl", localId: recv.id, init: receiver, loc },
8353
+ {
8354
+ kind: "varDecl",
8355
+ localId: stable.id,
8356
+ init: { kind: "libCall", fn: "dyn.forInStable", args: [ref], type: BOOL, loc },
8357
+ loc,
8358
+ },
8359
+ loop,
8360
+ ],
8273
8361
  loc,
8274
8362
  };
8275
8363
  }
@@ -8286,7 +8374,8 @@ function lowerForIn(lowerer, stmt) {
8286
8374
  // Accessor-carrying shapes: Node's for-in visits the accessor
8287
8375
  // NAMES (own enumerable properties) — the static key walk omits
8288
8376
  // them (accessor slots live outside declaredOrder), so the loop
8289
- // fences rather than silently skip keys.
8377
+ // fences rather than skip keys.
8378
+ fencePerfEntryKeyWalk(lowerer, receiver.type, stmt.expression, "for-in");
8290
8379
  if (shapeHasAccessorSlots(rShape)) {
8291
8380
  lowerer.unsupported("SC1090", stmt.expression, "for-in over a shape carrying get/set accessor properties (Node visits the accessor names — the static key walk cannot; read the properties explicitly)");
8292
8381
  }