@scriptc/compiler 0.3.2 → 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 (364) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +490 -39
  2. package/dist/backend/cycle-analysis.js +6 -1
  3. package/dist/backend/cycle-analysis.js.map +1 -1
  4. package/dist/backend/llvm/alloc.js +24 -10
  5. package/dist/backend/llvm/alloc.js.map +1 -1
  6. package/dist/backend/llvm/alloc.test.js +47 -1
  7. package/dist/backend/llvm/alloc.test.js.map +1 -1
  8. package/dist/backend/llvm/array-search.d.ts +8 -0
  9. package/dist/backend/llvm/array-search.js +52 -0
  10. package/dist/backend/llvm/array-search.js.map +1 -0
  11. package/dist/backend/llvm/array-search.test.d.ts +1 -0
  12. package/dist/backend/llvm/array-search.test.js +72 -0
  13. package/dist/backend/llvm/array-search.test.js.map +1 -0
  14. package/dist/backend/llvm/call-lifetimes.d.ts +8 -1
  15. package/dist/backend/llvm/call-lifetimes.js +33 -11
  16. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  17. package/dist/backend/llvm/call-lifetimes.test.js +54 -0
  18. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  19. package/dist/backend/llvm/classes.js +87 -36
  20. package/dist/backend/llvm/classes.js.map +1 -1
  21. package/dist/backend/llvm/common.d.ts +1 -1
  22. package/dist/backend/llvm/common.js +1 -1
  23. package/dist/backend/llvm/dense-array-access.d.ts +5 -0
  24. package/dist/backend/llvm/dense-array-access.js +1 -1
  25. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  26. package/dist/backend/llvm/dyn.d.ts +4 -0
  27. package/dist/backend/llvm/dyn.js +73 -9
  28. package/dist/backend/llvm/dyn.js.map +1 -1
  29. package/dist/backend/llvm/emitter.d.ts +65 -14
  30. package/dist/backend/llvm/emitter.js +297 -81
  31. package/dist/backend/llvm/emitter.js.map +1 -1
  32. package/dist/backend/llvm/emitter.test.js +26 -3
  33. package/dist/backend/llvm/emitter.test.js.map +1 -1
  34. package/dist/backend/llvm/expr-async.js +52 -1
  35. package/dist/backend/llvm/expr-async.js.map +1 -1
  36. package/dist/backend/llvm/expr-bytes.js +11 -0
  37. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  38. package/dist/backend/llvm/expr-callbacks.js +16 -2
  39. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  40. package/dist/backend/llvm/expr-calls.js +8 -1
  41. package/dist/backend/llvm/expr-calls.js.map +1 -1
  42. package/dist/backend/llvm/expr-containers.js +42 -15
  43. package/dist/backend/llvm/expr-containers.js.map +1 -1
  44. package/dist/backend/llvm/expr-dynamic.js +19 -8
  45. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  46. package/dist/backend/llvm/expr-primitives.js +28 -30
  47. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  48. package/dist/backend/llvm/expr-records.js +8 -4
  49. package/dist/backend/llvm/expr-records.js.map +1 -1
  50. package/dist/backend/llvm/expr-stream-bridges.js +35 -32
  51. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  52. package/dist/backend/llvm/expr-stream-callbacks.d.ts +13 -2
  53. package/dist/backend/llvm/expr-stream-callbacks.js +80 -5
  54. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  55. package/dist/backend/llvm/inline-unions.d.ts +48 -0
  56. package/dist/backend/llvm/inline-unions.js +134 -0
  57. package/dist/backend/llvm/inline-unions.js.map +1 -0
  58. package/dist/backend/llvm/inline-unions.test.d.ts +1 -0
  59. package/dist/backend/llvm/inline-unions.test.js +124 -0
  60. package/dist/backend/llvm/inline-unions.test.js.map +1 -0
  61. package/dist/backend/llvm/integer-remainder.d.ts +28 -5
  62. package/dist/backend/llvm/integer-remainder.js +80 -9
  63. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  64. package/dist/backend/llvm/lib-dispatch.js +163 -28
  65. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  66. package/dist/backend/llvm/lib-filesystem.js +125 -7
  67. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  68. package/dist/backend/llvm/lib-network.js +9 -6
  69. package/dist/backend/llvm/lib-network.js.map +1 -1
  70. package/dist/backend/llvm/lib-process.js +2 -2
  71. package/dist/backend/llvm/lib-process.js.map +1 -1
  72. package/dist/backend/llvm/lib-shared.js +132 -0
  73. package/dist/backend/llvm/lib-shared.js.map +1 -1
  74. package/dist/backend/llvm/lib-stream.js +97 -0
  75. package/dist/backend/llvm/lib-stream.js.map +1 -1
  76. package/dist/backend/llvm/local-array-reads.js +7 -3
  77. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  78. package/dist/backend/llvm/local-array-reads.test.js +6 -3
  79. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  80. package/dist/backend/llvm/local-union-storage.d.ts +2 -0
  81. package/dist/backend/llvm/local-union-storage.js +5 -0
  82. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  83. package/dist/backend/llvm/local-union-storage.test.js +1 -0
  84. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  85. package/dist/backend/llvm/loop-array-borrows.d.ts +8 -2
  86. package/dist/backend/llvm/loop-array-borrows.js +93 -13
  87. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  88. package/dist/backend/llvm/map-number-lookup.d.ts +20 -0
  89. package/dist/backend/llvm/map-number-lookup.js +66 -0
  90. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  91. package/dist/backend/llvm/map-number-lookup.test.d.ts +1 -0
  92. package/dist/backend/llvm/map-number-lookup.test.js +102 -0
  93. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
  94. package/dist/backend/llvm/map-read-lifetimes.js +1 -0
  95. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  96. package/dist/backend/llvm/publish.d.ts +4 -0
  97. package/dist/backend/llvm/publish.js +3 -1
  98. package/dist/backend/llvm/publish.js.map +1 -1
  99. package/dist/backend/llvm/record-results.d.ts +8 -5
  100. package/dist/backend/llvm/record-results.js +20 -12
  101. package/dist/backend/llvm/record-results.js.map +1 -1
  102. package/dist/backend/llvm/reference-effects.js +13 -0
  103. package/dist/backend/llvm/reference-effects.js.map +1 -1
  104. package/dist/backend/llvm/reference-writes.js +14 -0
  105. package/dist/backend/llvm/reference-writes.js.map +1 -1
  106. package/dist/backend/llvm/regions.d.ts +1 -0
  107. package/dist/backend/llvm/regions.js +12 -7
  108. package/dist/backend/llvm/regions.js.map +1 -1
  109. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  110. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  111. package/dist/backend/llvm/shapes.d.ts +56 -10
  112. package/dist/backend/llvm/shapes.js +178 -39
  113. package/dist/backend/llvm/shapes.js.map +1 -1
  114. package/dist/backend/llvm/shapes.test.js +61 -3
  115. package/dist/backend/llvm/shapes.test.js.map +1 -1
  116. package/dist/backend/llvm/stack-objects.js +16 -4
  117. package/dist/backend/llvm/stack-objects.js.map +1 -1
  118. package/dist/backend/llvm/stack-objects.test.js +3 -0
  119. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  120. package/dist/backend/llvm/walkers.d.ts +11 -0
  121. package/dist/backend/llvm/walkers.js +106 -10
  122. package/dist/backend/llvm/walkers.js.map +1 -1
  123. package/dist/backend/may-throw.js +9 -4
  124. package/dist/backend/may-throw.js.map +1 -1
  125. package/dist/backend/native/contracts.d.ts +2 -2
  126. package/dist/backend/native/executable.js +14 -3
  127. package/dist/backend/native/executable.js.map +1 -1
  128. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  129. package/dist/backend/native/runtime-inputs.js +1 -0
  130. package/dist/backend/native/runtime-inputs.js.map +1 -1
  131. package/dist/backend/native-toolchain.test.js +1 -1
  132. package/dist/backend/native-toolchain.test.js.map +1 -1
  133. package/dist/backend/runtime-abi.d.ts +2 -2
  134. package/dist/backend/runtime-abi.js +2 -2
  135. package/dist/backend/runtime-pack-targets.test.js +1 -1
  136. package/dist/backend/runtime-pack.test.js +1 -1
  137. package/dist/backend/target-diagnostics.js +4 -1
  138. package/dist/backend/target-diagnostics.js.map +1 -1
  139. package/dist/backend/target-diagnostics.test.js +4 -1
  140. package/dist/backend/target-diagnostics.test.js.map +1 -1
  141. package/dist/compat/fetch-profile.js +4 -4
  142. package/dist/compat/fetch-profile.js.map +1 -1
  143. package/dist/contracts/check.js +2 -0
  144. package/dist/contracts/check.js.map +1 -1
  145. package/dist/coverage/report.js +1 -1
  146. package/dist/coverage/report.js.map +1 -1
  147. package/dist/diagnostics/diagnostic.d.ts +6 -5
  148. package/dist/diagnostics/diagnostic.js +7 -6
  149. package/dist/diagnostics/diagnostic.js.map +1 -1
  150. package/dist/frontend/builtin-modules.d.ts +1 -1
  151. package/dist/frontend/builtin-modules.js +1 -0
  152. package/dist/frontend/builtin-modules.js.map +1 -1
  153. package/dist/frontend/comptime-node.js +2 -2
  154. package/dist/frontend/comptime-node.js.map +1 -1
  155. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  156. package/dist/frontend/lowering/binding-analysis.js +1 -1
  157. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  158. package/dist/frontend/lowering/builtins/arguments.js +8 -4
  159. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  160. package/dist/frontend/lowering/builtins/blob.d.ts +20 -0
  161. package/dist/frontend/lowering/builtins/blob.js +167 -0
  162. package/dist/frontend/lowering/builtins/blob.js.map +1 -0
  163. package/dist/frontend/lowering/builtins/child-process-async.d.ts +2 -2
  164. package/dist/frontend/lowering/builtins/child-process-async.js +2 -2
  165. package/dist/frontend/lowering/builtins/child-process-methods.js +1 -1
  166. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  167. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -1
  168. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  169. package/dist/frontend/lowering/builtins/compression.js +3 -2
  170. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  171. package/dist/frontend/lowering/builtins/crypto.js +415 -120
  172. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  173. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +10 -0
  174. package/dist/frontend/lowering/builtins/filesystem-calls.js +89 -1
  175. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  176. package/dist/frontend/lowering/builtins/filesystem.d.ts +16 -7
  177. package/dist/frontend/lowering/builtins/filesystem.js +97 -15
  178. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  179. package/dist/frontend/lowering/builtins/fs-glob.d.ts +23 -0
  180. package/dist/frontend/lowering/builtins/fs-glob.js +224 -0
  181. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -0
  182. package/dist/frontend/lowering/builtins/key-object.d.ts +13 -0
  183. package/dist/frontend/lowering/builtins/key-object.js +56 -0
  184. package/dist/frontend/lowering/builtins/key-object.js.map +1 -0
  185. package/dist/frontend/lowering/builtins/module-calls.js +44 -11
  186. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  187. package/dist/frontend/lowering/builtins/performance.d.ts +25 -3
  188. package/dist/frontend/lowering/builtins/performance.js +340 -5
  189. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  190. package/dist/frontend/lowering/builtins/process.d.ts +2 -2
  191. package/dist/frontend/lowering/builtins/process.js +107 -14
  192. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  193. package/dist/frontend/lowering/builtins/properties.d.ts +0 -7
  194. package/dist/frontend/lowering/builtins/properties.js +39 -11
  195. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  196. package/dist/frontend/lowering/builtins/readline.d.ts +23 -8
  197. package/dist/frontend/lowering/builtins/readline.js +266 -90
  198. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  199. package/dist/frontend/lowering/builtins/url.d.ts +8 -0
  200. package/dist/frontend/lowering/builtins/url.js +36 -0
  201. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  202. package/dist/frontend/lowering/call-arguments.js +1 -1
  203. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  204. package/dist/frontend/lowering/call-signatures.js +20 -2
  205. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  206. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +2 -0
  207. package/dist/frontend/lowering/class-dynamic-dispatch.js +105 -1
  208. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  209. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
  210. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  211. package/dist/frontend/lowering/class-protocol-dispatch.d.ts +45 -0
  212. package/dist/frontend/lowering/class-protocol-dispatch.js +516 -0
  213. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -0
  214. package/dist/frontend/lowering/coercions/structural-plans.js +2 -1
  215. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  216. package/dist/frontend/lowering/coercions/structural.js +3 -3
  217. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  218. package/dist/frontend/lowering/collation-repertoire.js +6 -5
  219. package/dist/frontend/lowering/collation-repertoire.js.map +1 -1
  220. package/dist/frontend/lowering/containers/array-callbacks.js +4 -7
  221. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  222. package/dist/frontend/lowering/containers/array-methods.d.ts +0 -7
  223. package/dist/frontend/lowering/containers/array-methods.js +43 -2
  224. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  225. package/dist/frontend/lowering/containers/bytes.js +38 -26
  226. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  227. package/dist/frontend/lowering/containers/for-of.d.ts +1 -1
  228. package/dist/frontend/lowering/containers/for-of.js +5 -1
  229. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  230. package/dist/frontend/lowering/containers/indexed-objects.js +1 -1
  231. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  232. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  233. package/dist/frontend/lowering/crypto-tables.js +77 -12
  234. package/dist/frontend/lowering/crypto-tables.js.map +1 -1
  235. package/dist/frontend/lowering/expressions/nullish-assignment.js +10 -0
  236. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  237. package/dist/frontend/lowering/expressions/object-literals.js +16 -12
  238. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  239. package/dist/frontend/lowering/generic-functions.d.ts +2 -2
  240. package/dist/frontend/lowering/generic-functions.js +2 -2
  241. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  242. package/dist/frontend/lowering/http2-constants.js +1 -1
  243. package/dist/frontend/lowering/lower-array-sort.d.ts +12 -1
  244. package/dist/frontend/lowering/lower-array-sort.js +561 -191
  245. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  246. package/dist/frontend/lowering/lower-array-sort.test.js +4 -2
  247. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  248. package/dist/frontend/lowering/lower-assert.js +2 -2
  249. package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
  250. package/dist/frontend/lowering/lower-async-iteration.js +248 -2
  251. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  252. package/dist/frontend/lowering/lower-calls.js +101 -9
  253. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  254. package/dist/frontend/lowering/lower-classes.d.ts +8 -2
  255. package/dist/frontend/lowering/lower-classes.js +40 -9
  256. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  257. package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
  258. package/dist/frontend/lowering/lower-comptime.js +4 -4
  259. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  260. package/dist/frontend/lowering/lower-event-target.d.ts +63 -0
  261. package/dist/frontend/lowering/lower-event-target.js +362 -0
  262. package/dist/frontend/lowering/lower-event-target.js.map +1 -0
  263. package/dist/frontend/lowering/lower-expando.js +2 -2
  264. package/dist/frontend/lowering/lower-exprs.js +112 -22
  265. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  266. package/dist/frontend/lowering/lower-inspect.js +129 -11
  267. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  268. package/dist/frontend/lowering/lower-mixins.js +1 -1
  269. package/dist/frontend/lowering/lower-modules.d.ts +1 -1
  270. package/dist/frontend/lowering/lower-modules.js +7 -3
  271. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  272. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -2
  273. package/dist/frontend/lowering/lower-namespaces.js +2 -2
  274. package/dist/frontend/lowering/lower-server.js +39 -14
  275. package/dist/frontend/lowering/lower-server.js.map +1 -1
  276. package/dist/frontend/lowering/lower-stdlib.d.ts +7 -1
  277. package/dist/frontend/lowering/lower-stdlib.js +10 -3
  278. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  279. package/dist/frontend/lowering/lower-stmts.d.ts +2 -2
  280. package/dist/frontend/lowering/lower-stmts.js +46 -12
  281. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  282. package/dist/frontend/lowering/lower-stream.js +234 -22
  283. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  284. package/dist/frontend/lowering/lower-timers.js +1 -1
  285. package/dist/frontend/lowering/lowerer.d.ts +23 -5
  286. package/dist/frontend/lowering/lowerer.js +245 -41
  287. package/dist/frontend/lowering/lowerer.js.map +1 -1
  288. package/dist/frontend/lowering/native-ffi.js +2 -2
  289. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  290. package/dist/frontend/lowering/runtime-optional-records.d.ts +115 -0
  291. package/dist/frontend/lowering/runtime-optional-records.js +715 -0
  292. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -0
  293. package/dist/frontend/lowering/runtime-optional-records.test.d.ts +1 -0
  294. package/dist/frontend/lowering/runtime-optional-records.test.js +175 -0
  295. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -0
  296. package/dist/frontend/lowering/surfaces.d.ts +7 -3
  297. package/dist/frontend/lowering/surfaces.js +273 -22
  298. package/dist/frontend/lowering/surfaces.js.map +1 -1
  299. package/dist/frontend/module-syntax.d.ts +1 -1
  300. package/dist/frontend/module-syntax.js +1 -1
  301. package/dist/frontend/npm-static-prune.js +1 -1
  302. package/dist/frontend/npm-static-prune.js.map +1 -1
  303. package/dist/frontend/npm-static-rewrite-syntax.js +4 -3
  304. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  305. package/dist/frontend/pipeline.js +1 -1
  306. package/dist/frontend/pipeline.js.map +1 -1
  307. package/dist/frontend/program.d.ts +3 -3
  308. package/dist/frontend/program.js +19 -17
  309. package/dist/frontend/program.js.map +1 -1
  310. package/dist/frontend/resolve.js +1 -1
  311. package/dist/frontend/ts7/adapter.js +1 -1
  312. package/dist/frontend/ts7/ast-bytes.d.ts +1 -1
  313. package/dist/frontend/ts7/ast-bytes.js +1 -1
  314. package/dist/frontend/ts7/semantic-json.d.ts +1 -1
  315. package/dist/frontend/ts7/semantic-json.js +1 -1
  316. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  317. package/dist/frontend/ts7/world-check.js +1 -1
  318. package/dist/frontend/tsc-codes.js +2 -2
  319. package/dist/frontend/tsc-codes.js.map +1 -1
  320. package/dist/frontend/type-mapper.d.ts +16 -1
  321. package/dist/frontend/type-mapper.js +143 -18
  322. package/dist/frontend/type-mapper.js.map +1 -1
  323. package/dist/index.js +5 -4
  324. package/dist/index.js.map +1 -1
  325. package/dist/ir/analysis.d.ts +12 -6
  326. package/dist/ir/analysis.js +26 -10
  327. package/dist/ir/analysis.js.map +1 -1
  328. package/dist/ir/analysis.test.js +15 -3
  329. package/dist/ir/analysis.test.js.map +1 -1
  330. package/dist/ir/builtin-effects.js +79 -0
  331. package/dist/ir/builtin-effects.js.map +1 -1
  332. package/dist/ir/builtin-signatures.d.ts +1 -1
  333. package/dist/ir/builtin-signatures.js +291 -38
  334. package/dist/ir/builtin-signatures.js.map +1 -1
  335. package/dist/ir/int32-slots.js +1 -0
  336. package/dist/ir/int32-slots.js.map +1 -1
  337. package/dist/ir/ir.d.ts +64 -16
  338. package/dist/ir/ir.js +37 -1
  339. package/dist/ir/ir.js.map +1 -1
  340. package/dist/ir/runtime-features.js +83 -6
  341. package/dist/ir/runtime-features.js.map +1 -1
  342. package/dist/ir/serialize.js +1 -1
  343. package/dist/ir/serialize.js.map +1 -1
  344. package/dist/ir/traverse.js +1 -0
  345. package/dist/ir/traverse.js.map +1 -1
  346. package/dist/ir/validate.js +100 -9
  347. package/dist/ir/validate.js.map +1 -1
  348. package/dist/ir/validate.test.js +60 -0
  349. package/dist/ir/validate.test.js.map +1 -1
  350. package/dist/library/fence-eval.d.ts +1 -1
  351. package/dist/library/fence-eval.js +5 -4
  352. package/dist/library/fence-eval.js.map +1 -1
  353. package/dist/library/ir-policy.js +10 -4
  354. package/dist/library/ir-policy.js.map +1 -1
  355. package/dist/library/library-profile.js +13 -13
  356. package/dist/library/library-profile.js.map +1 -1
  357. package/dist/library/prepare.js +1 -1
  358. package/dist/library/prepare.js.map +1 -1
  359. package/dist/library/sidecar.js +3 -3
  360. package/dist/library/sidecar.js.map +1 -1
  361. package/dist/native/prepare.js +3 -2
  362. package/dist/native/prepare.js.map +1 -1
  363. package/package.json +20 -20
  364. package/surface-manifest.json +379 -142
@@ -1,8 +1,13 @@
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";
8
13
  import { dynUndefinedExpr, nodeThrowExpr, numLit, strLit, varRef } from "../../ir/build.js";
@@ -24,7 +29,7 @@ import { checkedClassAssertion, checkedClassUnionAssertion } from "./class-asser
24
29
  import { checkedArmExtraction } from "./coercions/unions.js";
25
30
  import { narrowClassUnion, narrowStoredClassValue } from "./class-unions.js";
26
31
  import { lowerUnionFieldRead, lowerUnionFieldWrite } from "./expressions/union-fields.js";
27
- import { captureContextArguments } from "./function-context.js";
32
+ import { captureContextArguments, declareContextLocal } from "./function-context.js";
28
33
  import { OBJECT_CALLABLE_VALUES } from "./surfaces.js";
29
34
  import { wasiGuestPath } from "../../wasi-paths.js";
30
35
  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 +55,7 @@ import { funcTypeFromParamShapes } from "./call-signatures.js";
50
55
  import { implicitMonoFile, objLitGenericFnInfoOf, objLitGenericFnNodeOf, requireObjLitGenericReceiver, } from "./generic-functions.js";
51
56
  import { lowerTaggedTemplate } from "./lower-calls.js";
52
57
  import { mixinFnOfCallee } from "./lower-mixins.js";
53
- import { isConstAssertionTypeNode, isGenericCallableMemberType, isOsConstantsType, isParseArgsDynTypeName, underConstAssertion, unitOnlyUnion, withUnitArm, } from "../type-mapper.js";
58
+ import { isConstAssertionTypeNode, isGenericCallableMemberType, isLegacyUrlSymbol, isOsConstantsType, isParseArgsDynTypeName, underConstAssertion, unitOnlyUnion, withUnitArm, } from "../type-mapper.js";
54
59
  import { iteratorResultValueRead, lowerYield } from "./lower-generators.js";
55
60
  import { errorPropertyRead, errorPropertyWrite, errorToStringCall } from "./error-methods.js";
56
61
  import { lowerStreamProperty, lowerStreamStateProperty, streamSidesOf } from "./lower-stream.js";
@@ -79,6 +84,7 @@ import { lowerUrlAssignment } from "./builtins/url.js";
79
84
  import { jsBindingHasOpenWrites } from "./lower-stmts.js";
80
85
  import { checkedClassInstanceOf } from "./class-construction.js";
81
86
  import { lowerModuleNamespaceElement } from "./module-namespace-elements.js";
87
+ import { isPerfEntryType, perfEntryTag } from "./builtins/performance.js";
82
88
  /** A template piece's RAW text (String.raw's contract: escapes stay
83
89
  * characters). 7's client AST ships no rawText at runtime (the typing
84
90
  * declares it; the serialized node data omits it), so the raw span comes
@@ -1786,7 +1792,7 @@ function lowerExprInner(lowerer, expr) {
1786
1792
  // attached this name to it (`exports.<name> =` nowhere in the
1787
1793
  // file), the honest answer is undefined. tsc types the read off the
1788
1794
  // REPLACEMENT (its CJS model is identity-blind), which is exactly
1789
- // the silent divergence this lowering closes. Reads in modules with
1795
+ // the undiagnosed divergence this lowering closes. Reads in modules with
1790
1796
  // real `exports.<name> =` attachments keep their fences.
1791
1797
  {
1792
1798
  const ex = lowerReplacedExportsRead(lowerer, expr);
@@ -1801,6 +1807,13 @@ function lowerExprInner(lowerer, expr) {
1801
1807
  if (tm)
1802
1808
  return tm;
1803
1809
  }
1810
+ // Property signatures of class-backed protocols read implementing
1811
+ // classes' fields directly.
1812
+ if (!hasOptionalChainGuard(expr.expression)) {
1813
+ const typed = lowerProtocolPropertyRead(lowerer, expr);
1814
+ if (typed)
1815
+ return typed;
1816
+ }
1804
1817
  const handled = lowerer.lowerProcessEnvGet(expr) ??
1805
1818
  lowerer.lowerServerProperty(expr) ??
1806
1819
  // diagnostics_channel Channel receivers — name/hasSubscribers
@@ -1831,6 +1844,7 @@ function lowerExprInner(lowerer, expr) {
1831
1844
  // the inner access maps no type of its own.
1832
1845
  lowerStreamStateProperty(lowerer, expr) ??
1833
1846
  lowerStreamObjectProperty(lowerer, expr) ??
1847
+ lowerEventObjectProperty(lowerer, expr) ??
1834
1848
  lowerer.lowerUnionProperty(expr) ??
1835
1849
  lowerer.lowerFieldRead(expr);
1836
1850
  // A union-typed field read narrows like an identifier when the
@@ -2078,7 +2092,8 @@ function lowerExprInner(lowerer, expr) {
2078
2092
  if (isParseArgsDynProperty(lowerer, expr) ||
2079
2093
  isStatFsDynProperty(lowerer, expr) ||
2080
2094
  segmentDataProperty ||
2081
- osConstants) {
2095
+ osConstants ||
2096
+ isLegacyUrlSymbol(lowerer.checker.getSymbolAtLocation(expr.name), lowerer)) {
2082
2097
  const recv = lowerer.lowerExpr(expr.expression);
2083
2098
  if (recv.type.kind === "dyn") {
2084
2099
  const key = {
@@ -4313,10 +4328,10 @@ export function lowerIntrinsicProperty(lowerer, expr) {
4313
4328
  const receiver = lowerer.lowerExpr(expr.expression);
4314
4329
  return { kind: "libCall", fn: "stats.size", args: [receiver], type: F64, loc: locOf(expr) };
4315
4330
  }
4316
- if (name === "isFile" || name === "isDirectory") {
4331
+ if (Object.hasOwn(STATS_TYPE_TESTS, name)) {
4317
4332
  lowerer.unsupported("SC1090", expr, `Stats methods as values (call '${name}' directly)`);
4318
4333
  }
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));
4334
+ 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
4335
  }
4321
4336
  if (kind === "date") {
4322
4337
  const methods = new Set([
@@ -7149,6 +7164,8 @@ export function ensureString(lowerer, e, node) {
7149
7164
  // prints its elements like an array (not lowered — fenced) — every
7150
7165
  // other record is Object.prototype.toString's constant.
7151
7166
  const shape = lowerer.shapes.get(e.type.shapeId);
7167
+ if (isPerfEntryType(lowerer, e.type))
7168
+ return perfEntryTag(lowerer, e, e.type, e.loc);
7152
7169
  if (shape && !shape.tuple && !shape.fields.some((f) => f.name === "toString")) {
7153
7170
  return { kind: "toString", operand: e, type: STRING, loc: e.loc };
7154
7171
  }
@@ -7299,7 +7316,23 @@ export function lowerAsExpression(lowerer, expr) {
7299
7316
  lowerer.unsupported("SC1090", expr, "opaque structural views of classes or accessor records (name the property's concrete type to retain native accessor dispatch)");
7300
7317
  }
7301
7318
  const boxed = lowerer.coerceInto(expr, inner, DYN);
7302
- return boxed.kind === "dynFrom" ? { ...boxed, liveRef: true } : boxed;
7319
+ // Only references box live; a scalar or unit source (`value as
7320
+ // unknown as View`) is an ordinary snapshot.
7321
+ const seen = new Set();
7322
+ const live = (type) => {
7323
+ if (type.kind === "record" ||
7324
+ type.kind === "array" ||
7325
+ type.kind === "bytes" ||
7326
+ isDynTypedRefType(type))
7327
+ return true;
7328
+ if (type.kind !== "union" || seen.has(type.unionId))
7329
+ return false;
7330
+ seen.add(type.unionId);
7331
+ return lowerer.unions.get(type.unionId)?.arms.some(live) ?? false;
7332
+ };
7333
+ return boxed.kind === "dynFrom" && live(boxed.value.type)
7334
+ ? { ...boxed, liveRef: true }
7335
+ : boxed;
7303
7336
  }
7304
7337
  // Collection assertions are interface views only: their backing
7305
7338
  // value must already have the same native key/element/value layout.
@@ -7943,6 +7976,13 @@ export function lowerBinary(lowerer, expr) {
7943
7976
  if (ts.isPropertyAccessExpression(expr.left) || ts.isElementAccessExpression(expr.left)) {
7944
7977
  fenceNodeModuleMutation(lowerer, expr.left, "assignment");
7945
7978
  }
7979
+ // The writable Event accessors on Event subclass instances, in value
7980
+ // position (`const r = (event.returnValue = false)`).
7981
+ if (op === ts.SyntaxKind.EqualsToken && ts.isPropertyAccessExpression(expr.left)) {
7982
+ const eventWrite = lowerEventObjectPropertyWrite(lowerer, expr.left, expr.right);
7983
+ if (eventWrite)
7984
+ return eventWrite;
7985
+ }
7946
7986
  // `x = e` in EXPRESSION position (`while ((idx = s.indexOf("\n")) !== -1)`,
7947
7987
  // `f(x = v)`): evaluate e once, write the binding, yield the assigned
7948
7988
  // value — JS evaluation order. Variable targets only (locals and module
@@ -8279,14 +8319,24 @@ export function lowerBinary(lowerer, expr) {
8279
8319
  reference.kind === "union" ||
8280
8320
  DYN_HANDLE_KINDS.has(reference.kind)) &&
8281
8321
  lowerer.dynConvertible(reference)) {
8322
+ // Records, arrays and byte views compare by the capsule identity
8323
+ // their dyn reads produce, including when they arrive through a
8324
+ // union (an optional array field read from a typed record).
8325
+ const liveArm = (type) => {
8326
+ if (type.kind === "array" || type.kind === "bytes")
8327
+ return true;
8328
+ const shape = type.kind === "record" ? lowerer.shapes.get(type.shapeId) : undefined;
8329
+ return !!shape && (shape.fields.length > 0 || shape.indexValue !== undefined);
8330
+ };
8282
8331
  const boxed = {
8283
8332
  kind: "dynFrom",
8284
8333
  value: scalarSide,
8285
8334
  type: DYN,
8286
8335
  loc: scalarSide.loc,
8287
8336
  ...(reference.kind === "record" ||
8288
- reference.kind === "array" ||
8289
- reference.kind === "bytes"
8337
+ liveArm(reference) ||
8338
+ (reference.kind === "union" &&
8339
+ (lowerer.unions.get(reference.unionId)?.arms.some(liveArm) ?? false))
8290
8340
  ? { liveRef: true }
8291
8341
  : {}),
8292
8342
  };
@@ -8550,8 +8600,8 @@ export function lowerBinary(lowerer, expr) {
8550
8600
  // the checker typed the binding as `string`. An optional string is not
8551
8601
  // itself a string operand for `+`: `undefined + 1` and
8552
8602
  // `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.
8603
+ // Keep this predicate exact so a nullable string does not take the
8604
+ // string path either.
8555
8605
  const optionalStringType = (type) => {
8556
8606
  if (type.kind !== "union")
8557
8607
  return false;
@@ -9545,6 +9595,7 @@ function typeofAnswer(arm) {
9545
9595
  case "searchParams":
9546
9596
  case "stats":
9547
9597
  case "fileHandle":
9598
+ case "dir":
9548
9599
  case "spawnRes":
9549
9600
  case "child":
9550
9601
  case "netServer":
@@ -10175,6 +10226,14 @@ export function lowerInstanceOf(lowerer, expr, loc) {
10175
10226
  return { kind: "libCall", fn: "event.is", args: [value, kind], type: BOOL, loc };
10176
10227
  }
10177
10228
  }
10229
+ {
10230
+ const blob = lowerBlobInstanceof(lowerer, expr);
10231
+ if (blob)
10232
+ return blob;
10233
+ const keyObject = lowerKeyObjectInstanceof(lowerer, expr);
10234
+ if (keyObject)
10235
+ return keyObject;
10236
+ }
10178
10237
  if (lowerer.isStdlibGlobal(expr.right, "SharedArrayBuffer")) {
10179
10238
  const value = lowerer.coerceInto(expr.left, lowerer.lowerExpr(expr.left), DYN);
10180
10239
  return { kind: "libCall", fn: "sharedArrayBuffer.is", args: [value], type: BOOL, loc };
@@ -10629,7 +10688,7 @@ function lowerPrivateIn(lowerer, expr, priv, loc) {
10629
10688
  // A GENERIC family: JS has ONE runtime class and ONE brand for every
10630
10689
  // instantiation, while these layouts mint one class per instantiation
10631
10690
  // — a cross-instantiation check would answer false where Node says
10632
- // true, so the family fences rather than silently splitting the brand.
10691
+ // true, so the family reports SC1090 instead of splitting the brand.
10633
10692
  if (info.generic || info.genericInstance) {
10634
10693
  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
10694
  }
@@ -13027,8 +13086,8 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
13027
13086
  // accounting; dot spelling only — symbol-keyed element targets are
13028
13087
  // static fields): read the member (dynKeyGet), VALIDATE it as a
13029
13088
  // 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
13089
+ // TypeError where JS would ToNumber-coerce; it throws instead of
13090
+ // producing NaN — SEMANTICS.md), combine, write back (dyn.keySet). The
13032
13091
  // receiver and member read are saved before evaluating the RHS.
13033
13092
  if (ts.isPropertyAccessExpression(access)) {
13034
13093
  let probed = tryLowerExpression(lowerer, access.expression);
@@ -13102,22 +13161,33 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
13102
13161
  target.obj = save(target.obj, "%compoundReceiver");
13103
13162
  // Accessors observe getter, RHS side effects, then setter, all through
13104
13163
  // the saved receiver.
13105
- const read = save(lowerer.fieldGetExpr(target, locOf(access), access), "%compoundOld");
13164
+ const fieldRead = lowerer.fieldGetExpr(target, locOf(access), access);
13165
+ // `+=` on a stored string field reads it into a mutable local, so the
13166
+ // concat below can append to that local in place.
13167
+ const storedString = op === "+" &&
13168
+ fieldRead.type.kind === "string" &&
13169
+ target.fieldType.kind === "string" &&
13170
+ (target.container === "class" || target.container === "record");
13171
+ let read;
13172
+ if (storedString) {
13173
+ const old = declareContextLocal(lowerer.ctx, "%compoundOld", STRING, true, undefined, undefined);
13174
+ body.push({ kind: "varDecl", localId: old.id, init: fieldRead, loc: fieldRead.loc });
13175
+ read = varRef(old.id, STRING, fieldRead.loc);
13176
+ }
13177
+ else {
13178
+ read = save(fieldRead, "%compoundOld");
13179
+ }
13106
13180
  const rhs = save(rhsNode ? lowerer.lowerExpr(rhsNode) : { kind: "numLit", value: 1, type: F64, loc }, "%compoundRhs");
13107
13181
  const numericRhs = rhs.type.kind === "dyn" && isJsSourceFile(access.getSourceFile())
13108
13182
  ? { kind: "dynCheck", value: rhs, type: F64, loc: rhs.loc }
13109
13183
  : lowerOptionalNumber(lowerer, rhs, loc);
13110
13184
  let value;
13185
+ let appended = null;
13111
13186
  const numericRead = lowerOptionalNumber(lowerer, read, loc, access);
13112
13187
  const bigintValue = rhsNode ? bigintCompoundValue(op, read, rhs, loc) : null;
13113
13188
  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
- };
13189
+ appended = lowerer.ensureString(rhs, rhsNode ?? access);
13190
+ value = { kind: "strConcat", left: read, right: appended, type: STRING, loc };
13121
13191
  }
13122
13192
  else if (numericRead.type.kind === "f64" && numericRhs.type.kind === "f64") {
13123
13193
  value = { kind: "bin", op, left: numericRead, right: numericRhs, type: F64, loc };
@@ -13142,6 +13212,26 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
13142
13212
  else {
13143
13213
  lowerer.unsupported("SC1043", access);
13144
13214
  }
13215
+ if (storedString && rhs.type.kind === "string" && read.kind === "varRef" && appended !== null) {
13216
+ // The field gives up its value before the concat (no code runs in
13217
+ // between: both operands are already strings), and the concat is the
13218
+ // self-append `old = old + rhs`, which hands the local's reference to
13219
+ // the runtime: the old string is then uniquely owned unless something
13220
+ // else holds it, and is appended to in place. Repeated `this.text += s`
13221
+ // is linear rather than a copy per append.
13222
+ const oldId = read.localId;
13223
+ const oldLoc = read.loc;
13224
+ const oldRef = () => varRef(oldId, STRING, oldLoc);
13225
+ const concat = {
13226
+ kind: "strConcat",
13227
+ left: oldRef(),
13228
+ right: appended,
13229
+ type: STRING,
13230
+ loc,
13231
+ };
13232
+ 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));
13233
+ return { kind: "seqExpr", stmts: body, result: oldRef(), type: STRING, loc };
13234
+ }
13145
13235
  const result = save(value, "%compoundResult");
13146
13236
  body.push(lowerer.fieldSetStmt(target, lowerer.coerceInto(access, result, target.fieldType), loc, access));
13147
13237
  return { kind: "seqExpr", stmts: body, result, type: result.type, loc };