@scriptc/compiler 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +1202 -64
  2. package/dist/backend/cycle-analysis.js +6 -1
  3. package/dist/backend/cycle-analysis.js.map +1 -1
  4. package/dist/backend/cycle-mutability.d.ts +5 -0
  5. package/dist/backend/cycle-mutability.js +62 -3
  6. package/dist/backend/cycle-mutability.js.map +1 -1
  7. package/dist/backend/executable-features.js +1 -0
  8. package/dist/backend/executable-features.js.map +1 -1
  9. package/dist/backend/library-pack.js +1 -0
  10. package/dist/backend/library-pack.js.map +1 -1
  11. package/dist/backend/llvm/alloc.js +24 -10
  12. package/dist/backend/llvm/alloc.js.map +1 -1
  13. package/dist/backend/llvm/alloc.test.js +47 -1
  14. package/dist/backend/llvm/alloc.test.js.map +1 -1
  15. package/dist/backend/llvm/array-search.d.ts +8 -0
  16. package/dist/backend/llvm/array-search.js +52 -0
  17. package/dist/backend/llvm/array-search.js.map +1 -0
  18. package/dist/backend/llvm/array-search.test.d.ts +1 -0
  19. package/dist/backend/llvm/array-search.test.js +72 -0
  20. package/dist/backend/llvm/array-search.test.js.map +1 -0
  21. package/dist/backend/llvm/call-lifetimes.d.ts +12 -1
  22. package/dist/backend/llvm/call-lifetimes.js +41 -11
  23. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  24. package/dist/backend/llvm/call-lifetimes.test.js +85 -1
  25. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  26. package/dist/backend/llvm/classes.js +87 -36
  27. package/dist/backend/llvm/classes.js.map +1 -1
  28. package/dist/backend/llvm/common.d.ts +6 -1
  29. package/dist/backend/llvm/common.js +8 -1
  30. package/dist/backend/llvm/common.js.map +1 -1
  31. package/dist/backend/llvm/dense-array-access.d.ts +5 -0
  32. package/dist/backend/llvm/dense-array-access.js +3 -3
  33. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  34. package/dist/backend/llvm/dyn.d.ts +44 -1
  35. package/dist/backend/llvm/dyn.js +251 -36
  36. package/dist/backend/llvm/dyn.js.map +1 -1
  37. package/dist/backend/llvm/emitter.d.ts +77 -14
  38. package/dist/backend/llvm/emitter.js +461 -108
  39. package/dist/backend/llvm/emitter.js.map +1 -1
  40. package/dist/backend/llvm/emitter.test.js +26 -3
  41. package/dist/backend/llvm/emitter.test.js.map +1 -1
  42. package/dist/backend/llvm/expr-async.js +52 -1
  43. package/dist/backend/llvm/expr-async.js.map +1 -1
  44. package/dist/backend/llvm/expr-bytes.d.ts +9 -0
  45. package/dist/backend/llvm/expr-bytes.js +169 -63
  46. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  47. package/dist/backend/llvm/expr-callbacks.js +16 -2
  48. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  49. package/dist/backend/llvm/expr-calls.d.ts +3 -1
  50. package/dist/backend/llvm/expr-calls.js +57 -2
  51. package/dist/backend/llvm/expr-calls.js.map +1 -1
  52. package/dist/backend/llvm/expr-containers.js +57 -19
  53. package/dist/backend/llvm/expr-containers.js.map +1 -1
  54. package/dist/backend/llvm/expr-dynamic.js +19 -8
  55. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  56. package/dist/backend/llvm/expr-primitives.js +28 -30
  57. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  58. package/dist/backend/llvm/expr-records.js +8 -4
  59. package/dist/backend/llvm/expr-records.js.map +1 -1
  60. package/dist/backend/llvm/expr-stream-bridges.js +35 -32
  61. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  62. package/dist/backend/llvm/expr-stream-callbacks.d.ts +13 -2
  63. package/dist/backend/llvm/expr-stream-callbacks.js +80 -5
  64. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  65. package/dist/backend/llvm/inline-unions.d.ts +48 -0
  66. package/dist/backend/llvm/inline-unions.js +134 -0
  67. package/dist/backend/llvm/inline-unions.js.map +1 -0
  68. package/dist/backend/llvm/inline-unions.test.d.ts +1 -0
  69. package/dist/backend/llvm/inline-unions.test.js +124 -0
  70. package/dist/backend/llvm/inline-unions.test.js.map +1 -0
  71. package/dist/backend/llvm/integer-remainder.d.ts +28 -5
  72. package/dist/backend/llvm/integer-remainder.js +80 -9
  73. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  74. package/dist/backend/llvm/intern-tables.test.d.ts +1 -0
  75. package/dist/backend/llvm/intern-tables.test.js +77 -0
  76. package/dist/backend/llvm/intern-tables.test.js.map +1 -0
  77. package/dist/backend/llvm/lib-datagram.js +10 -0
  78. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  79. package/dist/backend/llvm/lib-dispatch.js +255 -29
  80. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  81. package/dist/backend/llvm/lib-filesystem.js +176 -7
  82. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  83. package/dist/backend/llvm/lib-network.js +25 -6
  84. package/dist/backend/llvm/lib-network.js.map +1 -1
  85. package/dist/backend/llvm/lib-process.js +2 -2
  86. package/dist/backend/llvm/lib-process.js.map +1 -1
  87. package/dist/backend/llvm/lib-shared.d.ts +5 -0
  88. package/dist/backend/llvm/lib-shared.js +212 -1
  89. package/dist/backend/llvm/lib-shared.js.map +1 -1
  90. package/dist/backend/llvm/lib-stream.js +184 -0
  91. package/dist/backend/llvm/lib-stream.js.map +1 -1
  92. package/dist/backend/llvm/lib-test.js +9 -0
  93. package/dist/backend/llvm/lib-test.js.map +1 -1
  94. package/dist/backend/llvm/local-array-reads.js +7 -3
  95. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  96. package/dist/backend/llvm/local-array-reads.test.js +6 -3
  97. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  98. package/dist/backend/llvm/local-union-storage.d.ts +2 -0
  99. package/dist/backend/llvm/local-union-storage.js +5 -0
  100. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  101. package/dist/backend/llvm/local-union-storage.test.js +1 -0
  102. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  103. package/dist/backend/llvm/loop-array-borrows.d.ts +8 -2
  104. package/dist/backend/llvm/loop-array-borrows.js +93 -13
  105. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  106. package/dist/backend/llvm/map-number-lookup.d.ts +24 -0
  107. package/dist/backend/llvm/map-number-lookup.js +88 -0
  108. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  109. package/dist/backend/llvm/map-number-lookup.test.d.ts +1 -0
  110. package/dist/backend/llvm/map-number-lookup.test.js +158 -0
  111. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
  112. package/dist/backend/llvm/map-read-lifetimes.d.ts +9 -0
  113. package/dist/backend/llvm/map-read-lifetimes.js +90 -1
  114. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  115. package/dist/backend/llvm/map-read-lifetimes.test.js +129 -1
  116. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  117. package/dist/backend/llvm/publish.d.ts +9 -0
  118. package/dist/backend/llvm/publish.js +25 -4
  119. package/dist/backend/llvm/publish.js.map +1 -1
  120. package/dist/backend/llvm/record-results.d.ts +8 -5
  121. package/dist/backend/llvm/record-results.js +20 -12
  122. package/dist/backend/llvm/record-results.js.map +1 -1
  123. package/dist/backend/llvm/reference-effects.js +13 -0
  124. package/dist/backend/llvm/reference-effects.js.map +1 -1
  125. package/dist/backend/llvm/reference-writes.js +19 -2
  126. package/dist/backend/llvm/reference-writes.js.map +1 -1
  127. package/dist/backend/llvm/regions.d.ts +5 -1
  128. package/dist/backend/llvm/regions.js +24 -10
  129. package/dist/backend/llvm/regions.js.map +1 -1
  130. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  131. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  132. package/dist/backend/llvm/shapes.d.ts +56 -10
  133. package/dist/backend/llvm/shapes.js +178 -39
  134. package/dist/backend/llvm/shapes.js.map +1 -1
  135. package/dist/backend/llvm/shapes.test.js +61 -3
  136. package/dist/backend/llvm/shapes.test.js.map +1 -1
  137. package/dist/backend/llvm/stack-objects.js +16 -4
  138. package/dist/backend/llvm/stack-objects.js.map +1 -1
  139. package/dist/backend/llvm/stack-objects.test.js +3 -0
  140. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  141. package/dist/backend/llvm/string-reads.js +2 -2
  142. package/dist/backend/llvm/string-reads.js.map +1 -1
  143. package/dist/backend/llvm/string-slices.js +2 -2
  144. package/dist/backend/llvm/string-slices.js.map +1 -1
  145. package/dist/backend/llvm/walkers.d.ts +11 -0
  146. package/dist/backend/llvm/walkers.js +106 -10
  147. package/dist/backend/llvm/walkers.js.map +1 -1
  148. package/dist/backend/may-throw.js +13 -4
  149. package/dist/backend/may-throw.js.map +1 -1
  150. package/dist/backend/native/contracts.d.ts +5 -2
  151. package/dist/backend/native/executable.js +27 -8
  152. package/dist/backend/native/executable.js.map +1 -1
  153. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  154. package/dist/backend/native/runtime-inputs.js +2 -0
  155. package/dist/backend/native/runtime-inputs.js.map +1 -1
  156. package/dist/backend/native-codegen-core.d.ts +4 -4
  157. package/dist/backend/native-codegen-core.js +4 -6
  158. package/dist/backend/native-codegen-core.js.map +1 -1
  159. package/dist/backend/native-codegen.test.js +7 -8
  160. package/dist/backend/native-codegen.test.js.map +1 -1
  161. package/dist/backend/native-link-info-core.d.ts +3 -0
  162. package/dist/backend/native-link-info-core.js.map +1 -1
  163. package/dist/backend/native-toolchain.test.js +1 -1
  164. package/dist/backend/native-toolchain.test.js.map +1 -1
  165. package/dist/backend/publication.js +3 -1
  166. package/dist/backend/publication.js.map +1 -1
  167. package/dist/backend/runtime-abi.d.ts +2 -2
  168. package/dist/backend/runtime-abi.js +2 -2
  169. package/dist/backend/runtime-pack-targets.test.js +2 -1
  170. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  171. package/dist/backend/runtime-pack.test.js +2 -1
  172. package/dist/backend/runtime-pack.test.js.map +1 -1
  173. package/dist/backend/target-diagnostics.js +11 -1
  174. package/dist/backend/target-diagnostics.js.map +1 -1
  175. package/dist/backend/target-diagnostics.test.js +4 -1
  176. package/dist/backend/target-diagnostics.test.js.map +1 -1
  177. package/dist/backend/warm-cache.js +1 -0
  178. package/dist/backend/warm-cache.js.map +1 -1
  179. package/dist/compat/fetch-profile.js +4 -4
  180. package/dist/compat/fetch-profile.js.map +1 -1
  181. package/dist/contracts/check.js +2 -0
  182. package/dist/contracts/check.js.map +1 -1
  183. package/dist/coverage/report.js +1 -1
  184. package/dist/coverage/report.js.map +1 -1
  185. package/dist/diagnostics/diagnostic.d.ts +6 -5
  186. package/dist/diagnostics/diagnostic.js +7 -6
  187. package/dist/diagnostics/diagnostic.js.map +1 -1
  188. package/dist/executable/executable-cache.d.ts +1 -0
  189. package/dist/executable/executable-cache.js +1 -0
  190. package/dist/executable/executable-cache.js.map +1 -1
  191. package/dist/executable/executable-cache.test.js +1 -0
  192. package/dist/executable/executable-cache.test.js.map +1 -1
  193. package/dist/frontend/builtin-modules.d.ts +1 -1
  194. package/dist/frontend/builtin-modules.js +1 -0
  195. package/dist/frontend/builtin-modules.js.map +1 -1
  196. package/dist/frontend/comptime-node.js +2 -2
  197. package/dist/frontend/comptime-node.js.map +1 -1
  198. package/dist/frontend/experimental-import.d.ts +5 -1
  199. package/dist/frontend/experimental-import.js +28 -3
  200. package/dist/frontend/experimental-import.js.map +1 -1
  201. package/dist/frontend/lowering/assert-instances.d.ts +38 -0
  202. package/dist/frontend/lowering/assert-instances.js +269 -0
  203. package/dist/frontend/lowering/assert-instances.js.map +1 -0
  204. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  205. package/dist/frontend/lowering/binding-analysis.js +1 -1
  206. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  207. package/dist/frontend/lowering/builtins/arguments.js +8 -4
  208. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  209. package/dist/frontend/lowering/builtins/blob.d.ts +20 -0
  210. package/dist/frontend/lowering/builtins/blob.js +167 -0
  211. package/dist/frontend/lowering/builtins/blob.js.map +1 -0
  212. package/dist/frontend/lowering/builtins/child-process-async.d.ts +2 -2
  213. package/dist/frontend/lowering/builtins/child-process-async.js +2 -2
  214. package/dist/frontend/lowering/builtins/child-process-methods.js +1 -1
  215. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  216. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -1
  217. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  218. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  219. package/dist/frontend/lowering/builtins/compression.js +178 -4
  220. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  221. package/dist/frontend/lowering/builtins/constants.js +7 -2
  222. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  223. package/dist/frontend/lowering/builtins/crypto.d.ts +6 -0
  224. package/dist/frontend/lowering/builtins/crypto.js +526 -121
  225. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  226. package/dist/frontend/lowering/builtins/errors.js +23 -0
  227. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  228. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +10 -0
  229. package/dist/frontend/lowering/builtins/filesystem-calls.js +89 -1
  230. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  231. package/dist/frontend/lowering/builtins/filesystem.d.ts +16 -7
  232. package/dist/frontend/lowering/builtins/filesystem.js +97 -15
  233. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  234. package/dist/frontend/lowering/builtins/fs-glob.d.ts +23 -0
  235. package/dist/frontend/lowering/builtins/fs-glob.js +224 -0
  236. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -0
  237. package/dist/frontend/lowering/builtins/key-object.d.ts +13 -0
  238. package/dist/frontend/lowering/builtins/key-object.js +56 -0
  239. package/dist/frontend/lowering/builtins/key-object.js.map +1 -0
  240. package/dist/frontend/lowering/builtins/module-calls.js +44 -11
  241. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  242. package/dist/frontend/lowering/builtins/performance.d.ts +25 -3
  243. package/dist/frontend/lowering/builtins/performance.js +340 -5
  244. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  245. package/dist/frontend/lowering/builtins/process.d.ts +2 -2
  246. package/dist/frontend/lowering/builtins/process.js +107 -14
  247. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  248. package/dist/frontend/lowering/builtins/properties.d.ts +0 -7
  249. package/dist/frontend/lowering/builtins/properties.js +39 -11
  250. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  251. package/dist/frontend/lowering/builtins/readline.d.ts +23 -8
  252. package/dist/frontend/lowering/builtins/readline.js +266 -90
  253. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  254. package/dist/frontend/lowering/builtins/timers.d.ts +3 -0
  255. package/dist/frontend/lowering/builtins/timers.js +109 -23
  256. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  257. package/dist/frontend/lowering/builtins/url.d.ts +8 -0
  258. package/dist/frontend/lowering/builtins/url.js +36 -0
  259. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  260. package/dist/frontend/lowering/call-arguments.js +1 -1
  261. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  262. package/dist/frontend/lowering/call-signatures.js +26 -2
  263. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  264. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +2 -0
  265. package/dist/frontend/lowering/class-dynamic-dispatch.js +171 -13
  266. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  267. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
  268. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  269. package/dist/frontend/lowering/class-protocol-dispatch.d.ts +45 -0
  270. package/dist/frontend/lowering/class-protocol-dispatch.js +516 -0
  271. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -0
  272. package/dist/frontend/lowering/coercions/structural-plans.js +2 -1
  273. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  274. package/dist/frontend/lowering/coercions/structural.js +3 -3
  275. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  276. package/dist/frontend/lowering/collation-repertoire.js +6 -5
  277. package/dist/frontend/lowering/collation-repertoire.js.map +1 -1
  278. package/dist/frontend/lowering/containers/array-callbacks.js +4 -7
  279. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  280. package/dist/frontend/lowering/containers/array-methods.d.ts +0 -7
  281. package/dist/frontend/lowering/containers/array-methods.js +43 -2
  282. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  283. package/dist/frontend/lowering/containers/bytes.js +38 -26
  284. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  285. package/dist/frontend/lowering/containers/for-of.d.ts +1 -1
  286. package/dist/frontend/lowering/containers/for-of.js +5 -1
  287. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  288. package/dist/frontend/lowering/containers/indexed-objects.js +1 -1
  289. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  290. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  291. package/dist/frontend/lowering/crypto-tables.js +77 -12
  292. package/dist/frontend/lowering/crypto-tables.js.map +1 -1
  293. package/dist/frontend/lowering/expressions/nullish-assignment.js +10 -0
  294. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  295. package/dist/frontend/lowering/expressions/object-literals.js +16 -12
  296. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  297. package/dist/frontend/lowering/generic-functions.d.ts +2 -2
  298. package/dist/frontend/lowering/generic-functions.js +2 -2
  299. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  300. package/dist/frontend/lowering/http2-constants.js +1 -1
  301. package/dist/frontend/lowering/intern-tables.d.ts +13 -0
  302. package/dist/frontend/lowering/intern-tables.js +536 -0
  303. package/dist/frontend/lowering/intern-tables.js.map +1 -0
  304. package/dist/frontend/lowering/lower-array-sort.d.ts +12 -1
  305. package/dist/frontend/lowering/lower-array-sort.js +561 -191
  306. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  307. package/dist/frontend/lowering/lower-array-sort.test.js +4 -2
  308. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  309. package/dist/frontend/lowering/lower-assert.js +702 -63
  310. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  311. package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
  312. package/dist/frontend/lowering/lower-async-iteration.js +259 -4
  313. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  314. package/dist/frontend/lowering/lower-calls.js +118 -12
  315. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  316. package/dist/frontend/lowering/lower-classes.d.ts +11 -2
  317. package/dist/frontend/lowering/lower-classes.js +76 -9
  318. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  319. package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
  320. package/dist/frontend/lowering/lower-comptime.js +4 -4
  321. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  322. package/dist/frontend/lowering/lower-dgram.js +77 -52
  323. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  324. package/dist/frontend/lowering/lower-event-target.d.ts +63 -0
  325. package/dist/frontend/lowering/lower-event-target.js +362 -0
  326. package/dist/frontend/lowering/lower-event-target.js.map +1 -0
  327. package/dist/frontend/lowering/lower-expando.js +2 -2
  328. package/dist/frontend/lowering/lower-exprs.js +124 -22
  329. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  330. package/dist/frontend/lowering/lower-inspect.d.ts +6 -0
  331. package/dist/frontend/lowering/lower-inspect.js +240 -49
  332. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  333. package/dist/frontend/lowering/lower-mixins.js +1 -1
  334. package/dist/frontend/lowering/lower-mock.d.ts +11 -0
  335. package/dist/frontend/lowering/lower-mock.js +504 -0
  336. package/dist/frontend/lowering/lower-mock.js.map +1 -0
  337. package/dist/frontend/lowering/lower-modules.d.ts +1 -1
  338. package/dist/frontend/lowering/lower-modules.js +14 -3
  339. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  340. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -2
  341. package/dist/frontend/lowering/lower-namespaces.js +2 -2
  342. package/dist/frontend/lowering/lower-server.d.ts +3 -0
  343. package/dist/frontend/lowering/lower-server.js +419 -44
  344. package/dist/frontend/lowering/lower-server.js.map +1 -1
  345. package/dist/frontend/lowering/lower-stdlib.d.ts +7 -1
  346. package/dist/frontend/lowering/lower-stdlib.js +10 -3
  347. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  348. package/dist/frontend/lowering/lower-stmts.d.ts +2 -2
  349. package/dist/frontend/lowering/lower-stmts.js +69 -14
  350. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  351. package/dist/frontend/lowering/lower-stream.d.ts +10 -6
  352. package/dist/frontend/lowering/lower-stream.js +1020 -49
  353. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  354. package/dist/frontend/lowering/lower-test.js +86 -8
  355. package/dist/frontend/lowering/lower-test.js.map +1 -1
  356. package/dist/frontend/lowering/lower-timers.js +1 -1
  357. package/dist/frontend/lowering/lowerer.d.ts +45 -5
  358. package/dist/frontend/lowering/lowerer.js +317 -48
  359. package/dist/frontend/lowering/lowerer.js.map +1 -1
  360. package/dist/frontend/lowering/native-ffi.js +2 -2
  361. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  362. package/dist/frontend/lowering/pairs-snapshot.d.ts +6 -0
  363. package/dist/frontend/lowering/pairs-snapshot.js +49 -0
  364. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  365. package/dist/frontend/lowering/runtime-optional-records.d.ts +115 -0
  366. package/dist/frontend/lowering/runtime-optional-records.js +715 -0
  367. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -0
  368. package/dist/frontend/lowering/runtime-optional-records.test.d.ts +1 -0
  369. package/dist/frontend/lowering/runtime-optional-records.test.js +175 -0
  370. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -0
  371. package/dist/frontend/lowering/surfaces.d.ts +11 -3
  372. package/dist/frontend/lowering/surfaces.js +334 -37
  373. package/dist/frontend/lowering/surfaces.js.map +1 -1
  374. package/dist/frontend/lowering/zlib-constants.d.ts +1 -0
  375. package/dist/frontend/lowering/zlib-constants.js +181 -0
  376. package/dist/frontend/lowering/zlib-constants.js.map +1 -0
  377. package/dist/frontend/mock-shapes.d.ts +10 -0
  378. package/dist/frontend/mock-shapes.js +76 -0
  379. package/dist/frontend/mock-shapes.js.map +1 -0
  380. package/dist/frontend/module-syntax.d.ts +1 -1
  381. package/dist/frontend/module-syntax.js +1 -1
  382. package/dist/frontend/npm-static-prune.js +1 -1
  383. package/dist/frontend/npm-static-prune.js.map +1 -1
  384. package/dist/frontend/npm-static-rewrite-syntax.js +4 -3
  385. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  386. package/dist/frontend/pipeline.js +6 -4
  387. package/dist/frontend/pipeline.js.map +1 -1
  388. package/dist/frontend/program.d.ts +3 -3
  389. package/dist/frontend/program.js +25 -18
  390. package/dist/frontend/program.js.map +1 -1
  391. package/dist/frontend/resolve.d.ts +4 -0
  392. package/dist/frontend/resolve.js +15 -1
  393. package/dist/frontend/resolve.js.map +1 -1
  394. package/dist/frontend/ts7/adapter.js +1 -1
  395. package/dist/frontend/ts7/ast-bytes.d.ts +1 -1
  396. package/dist/frontend/ts7/ast-bytes.js +1 -1
  397. package/dist/frontend/ts7/semantic-json.d.ts +1 -1
  398. package/dist/frontend/ts7/semantic-json.js +1 -1
  399. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  400. package/dist/frontend/ts7/world-check.js +1 -1
  401. package/dist/frontend/tsc-codes.js +3 -2
  402. package/dist/frontend/tsc-codes.js.map +1 -1
  403. package/dist/frontend/type-mapper.d.ts +21 -1
  404. package/dist/frontend/type-mapper.js +245 -27
  405. package/dist/frontend/type-mapper.js.map +1 -1
  406. package/dist/index.js +7 -5
  407. package/dist/index.js.map +1 -1
  408. package/dist/ir/analysis.d.ts +12 -6
  409. package/dist/ir/analysis.js +26 -10
  410. package/dist/ir/analysis.js.map +1 -1
  411. package/dist/ir/analysis.test.js +15 -3
  412. package/dist/ir/analysis.test.js.map +1 -1
  413. package/dist/ir/builtin-effects.js +115 -0
  414. package/dist/ir/builtin-effects.js.map +1 -1
  415. package/dist/ir/builtin-signatures.d.ts +1 -1
  416. package/dist/ir/builtin-signatures.js +438 -46
  417. package/dist/ir/builtin-signatures.js.map +1 -1
  418. package/dist/ir/int32-slots.js +1 -0
  419. package/dist/ir/int32-slots.js.map +1 -1
  420. package/dist/ir/ir.d.ts +84 -17
  421. package/dist/ir/ir.js +54 -1
  422. package/dist/ir/ir.js.map +1 -1
  423. package/dist/ir/runtime-features.d.ts +1 -0
  424. package/dist/ir/runtime-features.js +111 -7
  425. package/dist/ir/runtime-features.js.map +1 -1
  426. package/dist/ir/serialize.js +1 -1
  427. package/dist/ir/serialize.js.map +1 -1
  428. package/dist/ir/traverse.js +1 -0
  429. package/dist/ir/traverse.js.map +1 -1
  430. package/dist/ir/validate.js +295 -14
  431. package/dist/ir/validate.js.map +1 -1
  432. package/dist/ir/validate.test.js +60 -0
  433. package/dist/ir/validate.test.js.map +1 -1
  434. package/dist/library/fence-eval.d.ts +1 -1
  435. package/dist/library/fence-eval.js +5 -4
  436. package/dist/library/fence-eval.js.map +1 -1
  437. package/dist/library/ir-policy.js +11 -4
  438. package/dist/library/ir-policy.js.map +1 -1
  439. package/dist/library/library-profile.js +13 -13
  440. package/dist/library/library-profile.js.map +1 -1
  441. package/dist/library/prepare.js +1 -1
  442. package/dist/library/prepare.js.map +1 -1
  443. package/dist/library/sidecar.js +3 -3
  444. package/dist/library/sidecar.js.map +1 -1
  445. package/dist/native/cli.js +1 -0
  446. package/dist/native/cli.js.map +1 -1
  447. package/dist/native/compiler.js +1 -3
  448. package/dist/native/compiler.js.map +1 -1
  449. package/dist/native/prepare.js +4 -2
  450. package/dist/native/prepare.js.map +1 -1
  451. package/dist/native/sanitizer.test.js +1 -0
  452. package/dist/native/sanitizer.test.js.map +1 -1
  453. package/package.json +20 -20
  454. package/surface-manifest.json +1279 -221
@@ -1,10 +1,16 @@
1
+ import { lowerProtocolPropertyRead } from "./class-protocol-dispatch.js";
1
2
  import { generatorDrain } from "./iterator-adapters.js";
3
+ import { lowerEventObjectProperty, lowerEventObjectPropertyWrite } from "./lower-event-target.js";
2
4
  import { lowerEventStaticProperty } from "./builtins/numbers.js";
3
5
  import { lowerUnionEquality, tagEqualityMayMissAlias } from "./strict-equality.js";
4
6
  import { isOptionalProcessStreamProperty } from "./builtins/process.js";
5
7
  import { lowerWorkerMetadata } from "./builtins/workers.js";
8
+ import { lowerBlobInstanceof } from "./builtins/blob.js";
9
+ import { lowerKeyObjectInstanceof } from "./builtins/key-object.js";
10
+ import { STATS_TYPE_TESTS } from "./builtins/filesystem.js";
6
11
  import { threadsImportOf } from "../threads-import.js";
7
12
  import { experimentalImportOf, lifetimeRegionMemberOf } from "../experimental-import.js";
13
+ import { lowerInternTableProperty } from "./intern-tables.js";
8
14
  import { dynUndefinedExpr, nodeThrowExpr, numLit, strLit, varRef } from "../../ir/build.js";
9
15
  import { InternalCompilerError } from "../../errors.js";
10
16
  import { SYMBOL_T } from "../../ir/ir.js";
@@ -17,6 +23,7 @@ import { literalUnionArm } from "../union-discriminants.js";
17
23
  * ToBoolean/ToString coercion helpers, and field/element reads and writes
18
24
  * (FieldTarget). */
19
25
  import * as ts from "../ts7/adapter.js";
26
+ import { isZlibStreamMember, lowerZlibStreamBytesWritten } from "./builtins/compression.js";
20
27
  import { constituentTypes } from "../ts7/checker.js";
21
28
  import { dirname } from "node:path";
22
29
  import * as posix from "node:path/posix";
@@ -24,7 +31,7 @@ import { checkedClassAssertion, checkedClassUnionAssertion } from "./class-asser
24
31
  import { checkedArmExtraction } from "./coercions/unions.js";
25
32
  import { narrowClassUnion, narrowStoredClassValue } from "./class-unions.js";
26
33
  import { lowerUnionFieldRead, lowerUnionFieldWrite } from "./expressions/union-fields.js";
27
- import { captureContextArguments } from "./function-context.js";
34
+ import { captureContextArguments, declareContextLocal } from "./function-context.js";
28
35
  import { OBJECT_CALLABLE_VALUES } from "./surfaces.js";
29
36
  import { wasiGuestPath } from "../../wasi-paths.js";
30
37
  import { BIGINT_T, BYTES_ELEMENT_NAME, BOOL, CAUGHT, DYN, DYN_HANDLE_KINDS, F64, NULL_T, REF_TRUTHY_KINDS, REGEX, RUNTIME_ERROR_CLASSES, SEARCH_PARAMS_T, STRING, UNDEFINED_T, VOID, arrayOf, canAdaptDynFuncTo, canDynCheckTo, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isSupportedArrayElem, isUnitType, shapeHasAccessorSlots, typeEquals, typeKey, unionContainerArmsOk, } from "../../ir/ir.js";
@@ -50,7 +57,7 @@ import { funcTypeFromParamShapes } from "./call-signatures.js";
50
57
  import { implicitMonoFile, objLitGenericFnInfoOf, objLitGenericFnNodeOf, requireObjLitGenericReceiver, } from "./generic-functions.js";
51
58
  import { lowerTaggedTemplate } from "./lower-calls.js";
52
59
  import { mixinFnOfCallee } from "./lower-mixins.js";
53
- import { isConstAssertionTypeNode, isGenericCallableMemberType, isOsConstantsType, isParseArgsDynTypeName, underConstAssertion, unitOnlyUnion, withUnitArm, } from "../type-mapper.js";
60
+ import { isConstAssertionTypeNode, isGenericCallableMemberType, isLegacyUrlSymbol, isOsConstantsType, isParseArgsDynTypeName, underConstAssertion, unitOnlyUnion, withUnitArm, } from "../type-mapper.js";
54
61
  import { iteratorResultValueRead, lowerYield } from "./lower-generators.js";
55
62
  import { errorPropertyRead, errorPropertyWrite, errorToStringCall } from "./error-methods.js";
56
63
  import { lowerStreamProperty, lowerStreamStateProperty, streamSidesOf } from "./lower-stream.js";
@@ -79,6 +86,7 @@ import { lowerUrlAssignment } from "./builtins/url.js";
79
86
  import { jsBindingHasOpenWrites } from "./lower-stmts.js";
80
87
  import { checkedClassInstanceOf } from "./class-construction.js";
81
88
  import { lowerModuleNamespaceElement } from "./module-namespace-elements.js";
89
+ import { isPerfEntryType, perfEntryTag } from "./builtins/performance.js";
82
90
  /** A template piece's RAW text (String.raw's contract: escapes stay
83
91
  * characters). 7's client AST ships no rawText at runtime (the typing
84
92
  * declares it; the serialized node data omits it), so the raw span comes
@@ -855,6 +863,8 @@ function lowerExprInner(lowerer, expr) {
855
863
  lowerer.noLowering("publish (@scriptc/threads) as a value", expr, "call publish(value) directly");
856
864
  if (experimentalImportOf(lowerer.program, expr) === "LifetimeRegion")
857
865
  lowerer.noLowering("LifetimeRegion (@scriptc/experimental) as a value", expr, "construct regions with new LifetimeRegion()");
866
+ if (experimentalImportOf(lowerer.program, expr) === "InternTable")
867
+ lowerer.noLowering("InternTable (@scriptc/experimental) as a value", expr, 'open tables with new InternTable("name")');
858
868
  }
859
869
  {
860
870
  const bi = lowerer.builtinImportOf(expr);
@@ -1427,6 +1437,11 @@ function lowerExprInner(lowerer, expr) {
1427
1437
  if (member !== null)
1428
1438
  lowerer.noLowering(`LifetimeRegion.${member} (@scriptc/experimental) as a value`, expr, `call region.${member}(${member === "run" ? "fn" : ""}) directly`);
1429
1439
  }
1440
+ {
1441
+ const table = lowerInternTableProperty(lowerer, expr);
1442
+ if (table)
1443
+ return table;
1444
+ }
1430
1445
  // Expando statics may still be absent even when JS inference sees
1431
1446
  // the eventual assignment's scalar type. Preserve the checked value.
1432
1447
  const staticField = lowerStaticFieldRead(lowerer, expr);
@@ -1786,7 +1801,7 @@ function lowerExprInner(lowerer, expr) {
1786
1801
  // attached this name to it (`exports.<name> =` nowhere in the
1787
1802
  // file), the honest answer is undefined. tsc types the read off the
1788
1803
  // REPLACEMENT (its CJS model is identity-blind), which is exactly
1789
- // the silent divergence this lowering closes. Reads in modules with
1804
+ // the undiagnosed divergence this lowering closes. Reads in modules with
1790
1805
  // real `exports.<name> =` attachments keep their fences.
1791
1806
  {
1792
1807
  const ex = lowerReplacedExportsRead(lowerer, expr);
@@ -1801,6 +1816,13 @@ function lowerExprInner(lowerer, expr) {
1801
1816
  if (tm)
1802
1817
  return tm;
1803
1818
  }
1819
+ // Property signatures of class-backed protocols read implementing
1820
+ // classes' fields directly.
1821
+ if (!hasOptionalChainGuard(expr.expression)) {
1822
+ const typed = lowerProtocolPropertyRead(lowerer, expr);
1823
+ if (typed)
1824
+ return typed;
1825
+ }
1804
1826
  const handled = lowerer.lowerProcessEnvGet(expr) ??
1805
1827
  lowerer.lowerServerProperty(expr) ??
1806
1828
  // diagnostics_channel Channel receivers — name/hasSubscribers
@@ -1831,6 +1853,7 @@ function lowerExprInner(lowerer, expr) {
1831
1853
  // the inner access maps no type of its own.
1832
1854
  lowerStreamStateProperty(lowerer, expr) ??
1833
1855
  lowerStreamObjectProperty(lowerer, expr) ??
1856
+ lowerEventObjectProperty(lowerer, expr) ??
1834
1857
  lowerer.lowerUnionProperty(expr) ??
1835
1858
  lowerer.lowerFieldRead(expr);
1836
1859
  // A union-typed field read narrows like an identifier when the
@@ -2078,7 +2101,8 @@ function lowerExprInner(lowerer, expr) {
2078
2101
  if (isParseArgsDynProperty(lowerer, expr) ||
2079
2102
  isStatFsDynProperty(lowerer, expr) ||
2080
2103
  segmentDataProperty ||
2081
- osConstants) {
2104
+ osConstants ||
2105
+ isLegacyUrlSymbol(lowerer.checker.getSymbolAtLocation(expr.name), lowerer)) {
2082
2106
  const recv = lowerer.lowerExpr(expr.expression);
2083
2107
  if (recv.type.kind === "dyn") {
2084
2108
  const key = {
@@ -4313,10 +4337,10 @@ export function lowerIntrinsicProperty(lowerer, expr) {
4313
4337
  const receiver = lowerer.lowerExpr(expr.expression);
4314
4338
  return { kind: "libCall", fn: "stats.size", args: [receiver], type: F64, loc: locOf(expr) };
4315
4339
  }
4316
- if (name === "isFile" || name === "isDirectory") {
4340
+ if (Object.hasOwn(STATS_TYPE_TESTS, name)) {
4317
4341
  lowerer.unsupported("SC1090", expr, `Stats methods as values (call '${name}' directly)`);
4318
4342
  }
4319
- lowerer.noLowering(`Stats.${name}`, expr, "isFile(), isDirectory(), isSymbolicLink(), dev, ino, size, blocks, nlink, atimeMs, mtimeMs, and ctimeMs are the supported Stats members", lowerer.checker.getSymbolAtLocation(expr.name));
4343
+ lowerer.noLowering(`Stats.${name}`, expr, "isFile(), isDirectory(), isSymbolicLink(), isBlockDevice(), isCharacterDevice(), isFIFO(), isSocket(), dev, mode, nlink, uid, gid, rdev, blksize, ino, size, blocks, atimeMs, mtimeMs, ctimeMs, birthtimeMs, atime, mtime, ctime, and birthtime are the supported Stats members", lowerer.checker.getSymbolAtLocation(expr.name));
4320
4344
  }
4321
4345
  if (kind === "date") {
4322
4346
  const methods = new Set([
@@ -7149,6 +7173,8 @@ export function ensureString(lowerer, e, node) {
7149
7173
  // prints its elements like an array (not lowered — fenced) — every
7150
7174
  // other record is Object.prototype.toString's constant.
7151
7175
  const shape = lowerer.shapes.get(e.type.shapeId);
7176
+ if (isPerfEntryType(lowerer, e.type))
7177
+ return perfEntryTag(lowerer, e, e.type, e.loc);
7152
7178
  if (shape && !shape.tuple && !shape.fields.some((f) => f.name === "toString")) {
7153
7179
  return { kind: "toString", operand: e, type: STRING, loc: e.loc };
7154
7180
  }
@@ -7299,7 +7325,23 @@ export function lowerAsExpression(lowerer, expr) {
7299
7325
  lowerer.unsupported("SC1090", expr, "opaque structural views of classes or accessor records (name the property's concrete type to retain native accessor dispatch)");
7300
7326
  }
7301
7327
  const boxed = lowerer.coerceInto(expr, inner, DYN);
7302
- return boxed.kind === "dynFrom" ? { ...boxed, liveRef: true } : boxed;
7328
+ // Only references box live; a scalar or unit source (`value as
7329
+ // unknown as View`) is an ordinary snapshot.
7330
+ const seen = new Set();
7331
+ const live = (type) => {
7332
+ if (type.kind === "record" ||
7333
+ type.kind === "array" ||
7334
+ type.kind === "bytes" ||
7335
+ isDynTypedRefType(type))
7336
+ return true;
7337
+ if (type.kind !== "union" || seen.has(type.unionId))
7338
+ return false;
7339
+ seen.add(type.unionId);
7340
+ return lowerer.unions.get(type.unionId)?.arms.some(live) ?? false;
7341
+ };
7342
+ return boxed.kind === "dynFrom" && live(boxed.value.type)
7343
+ ? { ...boxed, liveRef: true }
7344
+ : boxed;
7303
7345
  }
7304
7346
  // Collection assertions are interface views only: their backing
7305
7347
  // value must already have the same native key/element/value layout.
@@ -7943,6 +7985,13 @@ export function lowerBinary(lowerer, expr) {
7943
7985
  if (ts.isPropertyAccessExpression(expr.left) || ts.isElementAccessExpression(expr.left)) {
7944
7986
  fenceNodeModuleMutation(lowerer, expr.left, "assignment");
7945
7987
  }
7988
+ // The writable Event accessors on Event subclass instances, in value
7989
+ // position (`const r = (event.returnValue = false)`).
7990
+ if (op === ts.SyntaxKind.EqualsToken && ts.isPropertyAccessExpression(expr.left)) {
7991
+ const eventWrite = lowerEventObjectPropertyWrite(lowerer, expr.left, expr.right);
7992
+ if (eventWrite)
7993
+ return eventWrite;
7994
+ }
7946
7995
  // `x = e` in EXPRESSION position (`while ((idx = s.indexOf("\n")) !== -1)`,
7947
7996
  // `f(x = v)`): evaluate e once, write the binding, yield the assigned
7948
7997
  // value — JS evaluation order. Variable targets only (locals and module
@@ -8279,14 +8328,24 @@ export function lowerBinary(lowerer, expr) {
8279
8328
  reference.kind === "union" ||
8280
8329
  DYN_HANDLE_KINDS.has(reference.kind)) &&
8281
8330
  lowerer.dynConvertible(reference)) {
8331
+ // Records, arrays and byte views compare by the capsule identity
8332
+ // their dyn reads produce, including when they arrive through a
8333
+ // union (an optional array field read from a typed record).
8334
+ const liveArm = (type) => {
8335
+ if (type.kind === "array" || type.kind === "bytes")
8336
+ return true;
8337
+ const shape = type.kind === "record" ? lowerer.shapes.get(type.shapeId) : undefined;
8338
+ return !!shape && (shape.fields.length > 0 || shape.indexValue !== undefined);
8339
+ };
8282
8340
  const boxed = {
8283
8341
  kind: "dynFrom",
8284
8342
  value: scalarSide,
8285
8343
  type: DYN,
8286
8344
  loc: scalarSide.loc,
8287
8345
  ...(reference.kind === "record" ||
8288
- reference.kind === "array" ||
8289
- reference.kind === "bytes"
8346
+ liveArm(reference) ||
8347
+ (reference.kind === "union" &&
8348
+ (lowerer.unions.get(reference.unionId)?.arms.some(liveArm) ?? false))
8290
8349
  ? { liveRef: true }
8291
8350
  : {}),
8292
8351
  };
@@ -8550,8 +8609,8 @@ export function lowerBinary(lowerer, expr) {
8550
8609
  // the checker typed the binding as `string`. An optional string is not
8551
8610
  // itself a string operand for `+`: `undefined + 1` and
8552
8611
  // `undefined + undefined` are NaN, while a present string concatenates.
8553
- // Keep this predicate exact so a nullable string does not silently take
8554
- // the string path either.
8612
+ // Keep this predicate exact so a nullable string does not take the
8613
+ // string path either.
8555
8614
  const optionalStringType = (type) => {
8556
8615
  if (type.kind !== "union")
8557
8616
  return false;
@@ -9545,6 +9604,7 @@ function typeofAnswer(arm) {
9545
9604
  case "searchParams":
9546
9605
  case "stats":
9547
9606
  case "fileHandle":
9607
+ case "dir":
9548
9608
  case "spawnRes":
9549
9609
  case "child":
9550
9610
  case "netServer":
@@ -10175,6 +10235,14 @@ export function lowerInstanceOf(lowerer, expr, loc) {
10175
10235
  return { kind: "libCall", fn: "event.is", args: [value, kind], type: BOOL, loc };
10176
10236
  }
10177
10237
  }
10238
+ {
10239
+ const blob = lowerBlobInstanceof(lowerer, expr);
10240
+ if (blob)
10241
+ return blob;
10242
+ const keyObject = lowerKeyObjectInstanceof(lowerer, expr);
10243
+ if (keyObject)
10244
+ return keyObject;
10245
+ }
10178
10246
  if (lowerer.isStdlibGlobal(expr.right, "SharedArrayBuffer")) {
10179
10247
  const value = lowerer.coerceInto(expr.left, lowerer.lowerExpr(expr.left), DYN);
10180
10248
  return { kind: "libCall", fn: "sharedArrayBuffer.is", args: [value], type: BOOL, loc };
@@ -10629,7 +10697,7 @@ function lowerPrivateIn(lowerer, expr, priv, loc) {
10629
10697
  // A GENERIC family: JS has ONE runtime class and ONE brand for every
10630
10698
  // instantiation, while these layouts mint one class per instantiation
10631
10699
  // — a cross-instantiation check would answer false where Node says
10632
- // true, so the family fences rather than silently splitting the brand.
10700
+ // true, so the family reports SC1090 instead of splitting the brand.
10633
10701
  if (info.generic || info.genericInstance) {
10634
10702
  lowerer.unsupported("SC1090", expr, `'${pname} in …' inside a generic class (JS shares one brand across every instantiation; these layouts mint one class per instantiation)`);
10635
10703
  }
@@ -13027,8 +13095,8 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
13027
13095
  // accounting; dot spelling only — symbol-keyed element targets are
13028
13096
  // static fields): read the member (dynKeyGet), VALIDATE it as a
13029
13097
  // number (dynCheck — a non-number member throws the catchable
13030
- // TypeError where JS would ToNumber-coerce; loud, never a silent
13031
- // NaN — SEMANTICS.md), combine, write back (dyn.keySet). The
13098
+ // TypeError where JS would ToNumber-coerce; it throws instead of
13099
+ // producing NaN — SEMANTICS.md), combine, write back (dyn.keySet). The
13032
13100
  // receiver and member read are saved before evaluating the RHS.
13033
13101
  if (ts.isPropertyAccessExpression(access)) {
13034
13102
  let probed = tryLowerExpression(lowerer, access.expression);
@@ -13102,22 +13170,33 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
13102
13170
  target.obj = save(target.obj, "%compoundReceiver");
13103
13171
  // Accessors observe getter, RHS side effects, then setter, all through
13104
13172
  // the saved receiver.
13105
- const read = save(lowerer.fieldGetExpr(target, locOf(access), access), "%compoundOld");
13173
+ const fieldRead = lowerer.fieldGetExpr(target, locOf(access), access);
13174
+ // `+=` on a stored string field reads it into a mutable local, so the
13175
+ // concat below can append to that local in place.
13176
+ const storedString = op === "+" &&
13177
+ fieldRead.type.kind === "string" &&
13178
+ target.fieldType.kind === "string" &&
13179
+ (target.container === "class" || target.container === "record");
13180
+ let read;
13181
+ if (storedString) {
13182
+ const old = declareContextLocal(lowerer.ctx, "%compoundOld", STRING, true, undefined, undefined);
13183
+ body.push({ kind: "varDecl", localId: old.id, init: fieldRead, loc: fieldRead.loc });
13184
+ read = varRef(old.id, STRING, fieldRead.loc);
13185
+ }
13186
+ else {
13187
+ read = save(fieldRead, "%compoundOld");
13188
+ }
13106
13189
  const rhs = save(rhsNode ? lowerer.lowerExpr(rhsNode) : { kind: "numLit", value: 1, type: F64, loc }, "%compoundRhs");
13107
13190
  const numericRhs = rhs.type.kind === "dyn" && isJsSourceFile(access.getSourceFile())
13108
13191
  ? { kind: "dynCheck", value: rhs, type: F64, loc: rhs.loc }
13109
13192
  : lowerOptionalNumber(lowerer, rhs, loc);
13110
13193
  let value;
13194
+ let appended = null;
13111
13195
  const numericRead = lowerOptionalNumber(lowerer, read, loc, access);
13112
13196
  const bigintValue = rhsNode ? bigintCompoundValue(op, read, rhs, loc) : null;
13113
13197
  if (op === "+" && read.type.kind === "string") {
13114
- value = {
13115
- kind: "strConcat",
13116
- left: read,
13117
- right: lowerer.ensureString(rhs, rhsNode ?? access),
13118
- type: STRING,
13119
- loc,
13120
- };
13198
+ appended = lowerer.ensureString(rhs, rhsNode ?? access);
13199
+ value = { kind: "strConcat", left: read, right: appended, type: STRING, loc };
13121
13200
  }
13122
13201
  else if (numericRead.type.kind === "f64" && numericRhs.type.kind === "f64") {
13123
13202
  value = { kind: "bin", op, left: numericRead, right: numericRhs, type: F64, loc };
@@ -13142,6 +13221,26 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
13142
13221
  else {
13143
13222
  lowerer.unsupported("SC1043", access);
13144
13223
  }
13224
+ if (storedString && rhs.type.kind === "string" && read.kind === "varRef" && appended !== null) {
13225
+ // The field gives up its value before the concat (no code runs in
13226
+ // between: both operands are already strings), and the concat is the
13227
+ // self-append `old = old + rhs`, which hands the local's reference to
13228
+ // the runtime: the old string is then uniquely owned unless something
13229
+ // else holds it, and is appended to in place. Repeated `this.text += s`
13230
+ // is linear rather than a copy per append.
13231
+ const oldId = read.localId;
13232
+ const oldLoc = read.loc;
13233
+ const oldRef = () => varRef(oldId, STRING, oldLoc);
13234
+ const concat = {
13235
+ kind: "strConcat",
13236
+ left: oldRef(),
13237
+ right: appended,
13238
+ type: STRING,
13239
+ loc,
13240
+ };
13241
+ body.push(lowerer.fieldSetStmt(target, { kind: "strLit", value: "", type: STRING, loc }, loc, access), { kind: "assign", localId: oldId, value: concat, loc }, lowerer.fieldSetStmt(target, oldRef(), loc, access));
13242
+ return { kind: "seqExpr", stmts: body, result: oldRef(), type: STRING, loc };
13243
+ }
13145
13244
  const result = save(value, "%compoundResult");
13146
13245
  body.push(lowerer.fieldSetStmt(target, lowerer.coerceInto(access, result, target.fieldType), loc, access));
13147
13246
  return { kind: "seqExpr", stmts: body, result, type: result.type, loc };
@@ -13158,6 +13257,9 @@ function lowerStreamObjectProperty(lowerer, expr) {
13158
13257
  const info = lowerer.classes.get(recvT.className);
13159
13258
  if (!info || streamSidesOf(lowerer, info) === null)
13160
13259
  return null;
13260
+ if (expr.name.text === "bytesWritten" && isZlibStreamMember(lowerer, expr)) {
13261
+ return lowerZlibStreamBytesWritten(lowerer, expr);
13262
+ }
13161
13263
  return lowerStreamProperty(lowerer, expr, info);
13162
13264
  }
13163
13265
  /** The primitive-constructor closure (`String`/`Number`/`Boolean` as a