@scriptc/compiler 0.2.6 → 0.2.8

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 (588) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +7 -18
  2. package/dist/backend/cycle-analysis.d.ts +21 -9
  3. package/dist/backend/cycle-analysis.js +139 -67
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-analysis.test.js +283 -3
  6. package/dist/backend/cycle-analysis.test.js.map +1 -1
  7. package/dist/backend/cycle-mutability.d.ts +39 -0
  8. package/dist/backend/cycle-mutability.js +205 -0
  9. package/dist/backend/cycle-mutability.js.map +1 -0
  10. package/dist/backend/link-plan-core.d.ts +2 -1
  11. package/dist/backend/link-plan-core.js +15 -3
  12. package/dist/backend/link-plan-core.js.map +1 -1
  13. package/dist/backend/link-plan.d.ts +2 -1
  14. package/dist/backend/link-plan.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +43 -0
  16. package/dist/backend/llvm/alloc.js +246 -0
  17. package/dist/backend/llvm/alloc.js.map +1 -0
  18. package/dist/backend/llvm/alloc.test.d.ts +1 -0
  19. package/dist/backend/llvm/alloc.test.js +102 -0
  20. package/dist/backend/llvm/alloc.test.js.map +1 -0
  21. package/dist/backend/llvm/blocks.d.ts +9 -0
  22. package/dist/backend/llvm/blocks.js +9 -0
  23. package/dist/backend/llvm/blocks.js.map +1 -1
  24. package/dist/backend/llvm/borrowed-receivers.d.ts +7 -0
  25. package/dist/backend/llvm/borrowed-receivers.js +39 -0
  26. package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
  27. package/dist/backend/llvm/call-lifetimes.d.ts +18 -3
  28. package/dist/backend/llvm/call-lifetimes.js +54 -19
  29. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  30. package/dist/backend/llvm/call-lifetimes.test.js +178 -3
  31. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  32. package/dist/backend/llvm/checked-narrows.d.ts +24 -0
  33. package/dist/backend/llvm/checked-narrows.js +108 -0
  34. package/dist/backend/llvm/checked-narrows.js.map +1 -0
  35. package/dist/backend/llvm/checked-narrows.test.d.ts +1 -0
  36. package/dist/backend/llvm/checked-narrows.test.js +208 -0
  37. package/dist/backend/llvm/checked-narrows.test.js.map +1 -0
  38. package/dist/backend/llvm/classes.d.ts +16 -1
  39. package/dist/backend/llvm/classes.js +60 -49
  40. package/dist/backend/llvm/classes.js.map +1 -1
  41. package/dist/backend/llvm/classes.test.js +68 -6
  42. package/dist/backend/llvm/classes.test.js.map +1 -1
  43. package/dist/backend/llvm/common.d.ts +13 -0
  44. package/dist/backend/llvm/common.js +30 -0
  45. package/dist/backend/llvm/common.js.map +1 -1
  46. package/dist/backend/llvm/constant-callbacks.d.ts +19 -3
  47. package/dist/backend/llvm/constant-callbacks.js +289 -52
  48. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  49. package/dist/backend/llvm/constant-callbacks.test.js +140 -3
  50. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  51. package/dist/backend/llvm/debug-info.d.ts +6 -2
  52. package/dist/backend/llvm/debug-info.js +11 -1
  53. package/dist/backend/llvm/debug-info.js.map +1 -1
  54. package/dist/backend/llvm/dense-array-access.d.ts +29 -0
  55. package/dist/backend/llvm/dense-array-access.js +335 -0
  56. package/dist/backend/llvm/dense-array-access.js.map +1 -0
  57. package/dist/backend/llvm/dense-array-access.test.d.ts +1 -0
  58. package/dist/backend/llvm/dense-array-access.test.js +238 -0
  59. package/dist/backend/llvm/dense-array-access.test.js.map +1 -0
  60. package/dist/backend/llvm/dyn.d.ts +38 -0
  61. package/dist/backend/llvm/dyn.js +213 -14
  62. package/dist/backend/llvm/dyn.js.map +1 -1
  63. package/dist/backend/llvm/emitter.d.ts +308 -15
  64. package/dist/backend/llvm/emitter.js +1788 -206
  65. package/dist/backend/llvm/emitter.js.map +1 -1
  66. package/dist/backend/llvm/emitter.test.js +89 -7
  67. package/dist/backend/llvm/emitter.test.js.map +1 -1
  68. package/dist/backend/llvm/expr-async.js +62 -8
  69. package/dist/backend/llvm/expr-async.js.map +1 -1
  70. package/dist/backend/llvm/expr-async.test.d.ts +1 -0
  71. package/dist/backend/llvm/expr-async.test.js +62 -0
  72. package/dist/backend/llvm/expr-async.test.js.map +1 -0
  73. package/dist/backend/llvm/expr-bytes.d.ts +1 -1
  74. package/dist/backend/llvm/expr-bytes.js +85 -8
  75. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  76. package/dist/backend/llvm/expr-callbacks.js +29 -21
  77. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  78. package/dist/backend/llvm/expr-calls.d.ts +5 -0
  79. package/dist/backend/llvm/expr-calls.js +118 -15
  80. package/dist/backend/llvm/expr-calls.js.map +1 -1
  81. package/dist/backend/llvm/expr-containers.d.ts +7 -1
  82. package/dist/backend/llvm/expr-containers.js +246 -32
  83. package/dist/backend/llvm/expr-containers.js.map +1 -1
  84. package/dist/backend/llvm/expr-control.js +113 -8
  85. package/dist/backend/llvm/expr-control.js.map +1 -1
  86. package/dist/backend/llvm/expr-dispatch.js +2 -0
  87. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  88. package/dist/backend/llvm/expr-dynamic.js +244 -44
  89. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  90. package/dist/backend/llvm/expr-island.js +3 -8
  91. package/dist/backend/llvm/expr-island.js.map +1 -1
  92. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  93. package/dist/backend/llvm/expr-primitives.js +93 -36
  94. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  95. package/dist/backend/llvm/expr-primitives.test.js +51 -3
  96. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  97. package/dist/backend/llvm/expr-records.js +31 -17
  98. package/dist/backend/llvm/expr-records.js.map +1 -1
  99. package/dist/backend/llvm/expr-stream-bridges.js +96 -29
  100. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  101. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  102. package/dist/backend/llvm/expr-stream-callbacks.js +6 -3
  103. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  104. package/dist/backend/llvm/integer-remainder.d.ts +11 -0
  105. package/dist/backend/llvm/integer-remainder.js +91 -0
  106. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  107. package/dist/backend/llvm/layouts.d.ts +3 -1
  108. package/dist/backend/llvm/layouts.js +3 -2
  109. package/dist/backend/llvm/layouts.js.map +1 -1
  110. package/dist/backend/llvm/lazy-captures.d.ts +16 -0
  111. package/dist/backend/llvm/lazy-captures.js +96 -0
  112. package/dist/backend/llvm/lazy-captures.js.map +1 -0
  113. package/dist/backend/llvm/lazy-captures.test.d.ts +1 -0
  114. package/dist/backend/llvm/lazy-captures.test.js +78 -0
  115. package/dist/backend/llvm/lazy-captures.test.js.map +1 -0
  116. package/dist/backend/llvm/lib-abi.js +10 -0
  117. package/dist/backend/llvm/lib-abi.js.map +1 -1
  118. package/dist/backend/llvm/lib-filesystem.js +10 -15
  119. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  120. package/dist/backend/llvm/lib-process.js +8 -8
  121. package/dist/backend/llvm/lib-process.js.map +1 -1
  122. package/dist/backend/llvm/lib-shared.js +1 -0
  123. package/dist/backend/llvm/lib-shared.js.map +1 -1
  124. package/dist/backend/llvm/local-array-reads.d.ts +5 -1
  125. package/dist/backend/llvm/local-array-reads.js +147 -26
  126. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  127. package/dist/backend/llvm/local-array-reads.test.js +85 -4
  128. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  129. package/dist/backend/llvm/local-union-storage.d.ts +5 -1
  130. package/dist/backend/llvm/local-union-storage.js +54 -8
  131. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  132. package/dist/backend/llvm/local-union-storage.test.js +94 -6
  133. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  134. package/dist/backend/llvm/map-number-lookup.d.ts +18 -0
  135. package/dist/backend/llvm/map-number-lookup.js +62 -0
  136. package/dist/backend/llvm/map-number-lookup.js.map +1 -0
  137. package/dist/backend/llvm/map-read-lifetimes.d.ts +6 -0
  138. package/dist/backend/llvm/map-read-lifetimes.js +24 -3
  139. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  140. package/dist/backend/llvm/map-read-lifetimes.test.js +39 -20
  141. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  142. package/dist/backend/llvm/nullable-fields.d.ts +28 -0
  143. package/dist/backend/llvm/nullable-fields.js +45 -0
  144. package/dist/backend/llvm/nullable-fields.js.map +1 -0
  145. package/dist/backend/llvm/nullable-fields.test.d.ts +1 -0
  146. package/dist/backend/llvm/nullable-fields.test.js +48 -0
  147. package/dist/backend/llvm/nullable-fields.test.js.map +1 -0
  148. package/dist/backend/llvm/nullable-unions.d.ts +68 -0
  149. package/dist/backend/llvm/nullable-unions.js +132 -0
  150. package/dist/backend/llvm/nullable-unions.js.map +1 -0
  151. package/dist/backend/llvm/publish.d.ts +58 -0
  152. package/dist/backend/llvm/publish.js +286 -0
  153. package/dist/backend/llvm/publish.js.map +1 -0
  154. package/dist/backend/llvm/rebound-parameters.d.ts +12 -0
  155. package/dist/backend/llvm/rebound-parameters.js +72 -0
  156. package/dist/backend/llvm/rebound-parameters.js.map +1 -0
  157. package/dist/backend/llvm/rebound-parameters.test.d.ts +1 -0
  158. package/dist/backend/llvm/rebound-parameters.test.js +67 -0
  159. package/dist/backend/llvm/rebound-parameters.test.js.map +1 -0
  160. package/dist/backend/llvm/reference-effects.d.ts +18 -2
  161. package/dist/backend/llvm/reference-effects.js +106 -16
  162. package/dist/backend/llvm/reference-effects.js.map +1 -1
  163. package/dist/backend/llvm/reference-effects.test.js +52 -1
  164. package/dist/backend/llvm/reference-effects.test.js.map +1 -1
  165. package/dist/backend/llvm/serialized-ir-emission.test.d.ts +1 -0
  166. package/dist/backend/llvm/serialized-ir-emission.test.js +52 -0
  167. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -0
  168. package/dist/backend/llvm/shapes.d.ts +104 -9
  169. package/dist/backend/llvm/shapes.js +356 -46
  170. package/dist/backend/llvm/shapes.js.map +1 -1
  171. package/dist/backend/llvm/shapes.test.js +139 -5
  172. package/dist/backend/llvm/shapes.test.js.map +1 -1
  173. package/dist/backend/llvm/stack-callbacks.js +2 -3
  174. package/dist/backend/llvm/stack-callbacks.js.map +1 -1
  175. package/dist/backend/llvm/stack-captures.d.ts +3 -1
  176. package/dist/backend/llvm/stack-captures.js +5 -3
  177. package/dist/backend/llvm/stack-captures.js.map +1 -1
  178. package/dist/backend/llvm/stack-unions.test.js +43 -3
  179. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  180. package/dist/backend/llvm/string-construction.d.ts +10 -0
  181. package/dist/backend/llvm/string-construction.js +42 -0
  182. package/dist/backend/llvm/string-construction.js.map +1 -1
  183. package/dist/backend/llvm/string-construction.test.js +1 -1
  184. package/dist/backend/llvm/string-key-hash.d.ts +15 -0
  185. package/dist/backend/llvm/string-key-hash.js +76 -0
  186. package/dist/backend/llvm/string-key-hash.js.map +1 -0
  187. package/dist/backend/llvm/string-key-hash.test.d.ts +1 -0
  188. package/dist/backend/llvm/string-key-hash.test.js +45 -0
  189. package/dist/backend/llvm/string-key-hash.test.js.map +1 -0
  190. package/dist/backend/llvm/string-lifetimes.test.js +65 -15
  191. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  192. package/dist/backend/llvm/string-reads.d.ts +7 -0
  193. package/dist/backend/llvm/string-reads.js +76 -0
  194. package/dist/backend/llvm/string-reads.js.map +1 -0
  195. package/dist/backend/llvm/switch-dispatch.js +1 -1
  196. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  197. package/dist/backend/llvm/switch-dispatch.test.js +3 -3
  198. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
  199. package/dist/backend/llvm/test-boxed-unions.d.ts +5 -0
  200. package/dist/backend/llvm/test-boxed-unions.js +13 -0
  201. package/dist/backend/llvm/test-boxed-unions.js.map +1 -0
  202. package/dist/backend/llvm/union-repr.d.ts +15 -0
  203. package/dist/backend/llvm/union-repr.js +89 -0
  204. package/dist/backend/llvm/union-repr.js.map +1 -0
  205. package/dist/backend/llvm/virtual-borrows.d.ts +31 -0
  206. package/dist/backend/llvm/virtual-borrows.js +82 -0
  207. package/dist/backend/llvm/virtual-borrows.js.map +1 -0
  208. package/dist/backend/llvm/walk-borrows.d.ts +43 -0
  209. package/dist/backend/llvm/walk-borrows.js +150 -0
  210. package/dist/backend/llvm/walk-borrows.js.map +1 -0
  211. package/dist/backend/llvm/walk-borrows.test.d.ts +1 -0
  212. package/dist/backend/llvm/walk-borrows.test.js +119 -0
  213. package/dist/backend/llvm/walk-borrows.test.js.map +1 -0
  214. package/dist/backend/llvm/walkers.d.ts +5 -1
  215. package/dist/backend/llvm/walkers.js +24 -21
  216. package/dist/backend/llvm/walkers.js.map +1 -1
  217. package/dist/backend/may-throw.d.ts +29 -1
  218. package/dist/backend/may-throw.js +349 -3
  219. package/dist/backend/may-throw.js.map +1 -1
  220. package/dist/backend/may-throw.test.js +114 -2
  221. package/dist/backend/may-throw.test.js.map +1 -1
  222. package/dist/backend/native/cache-warm.d.ts +2 -1
  223. package/dist/backend/native/cache-warm.js.map +1 -1
  224. package/dist/backend/native/contracts.d.ts +3 -2
  225. package/dist/backend/native/contracts.js.map +1 -1
  226. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  227. package/dist/backend/native/runtime-inputs.js +2 -0
  228. package/dist/backend/native/runtime-inputs.js.map +1 -1
  229. package/dist/backend/native-codegen-core.d.ts +7 -4
  230. package/dist/backend/native-codegen-core.js +14 -9
  231. package/dist/backend/native-codegen-core.js.map +1 -1
  232. package/dist/backend/native-codegen.d.ts +9 -0
  233. package/dist/backend/native-codegen.js +53 -2
  234. package/dist/backend/native-codegen.js.map +1 -1
  235. package/dist/backend/native-codegen.test.js +64 -10
  236. package/dist/backend/native-codegen.test.js.map +1 -1
  237. package/dist/backend/native-link-info-core.d.ts +3 -2
  238. package/dist/backend/native-link-info-core.js.map +1 -1
  239. package/dist/backend/native-link-info.d.ts +2 -1
  240. package/dist/backend/native-link-info.js.map +1 -1
  241. package/dist/backend/native-link-info.test.js +2 -2
  242. package/dist/backend/native-link-info.test.js.map +1 -1
  243. package/dist/backend/native-tools.d.ts +5 -1
  244. package/dist/backend/native-tools.js +3 -1
  245. package/dist/backend/native-tools.js.map +1 -1
  246. package/dist/backend/optimization.d.ts +25 -0
  247. package/dist/backend/optimization.js +21 -0
  248. package/dist/backend/optimization.js.map +1 -0
  249. package/dist/backend/optimization.test.d.ts +1 -0
  250. package/dist/backend/optimization.test.js +24 -0
  251. package/dist/backend/optimization.test.js.map +1 -0
  252. package/dist/backend/publication.d.ts +28 -0
  253. package/dist/backend/publication.js +155 -0
  254. package/dist/backend/publication.js.map +1 -0
  255. package/dist/backend/publication.test.d.ts +1 -0
  256. package/dist/backend/publication.test.js +72 -0
  257. package/dist/backend/publication.test.js.map +1 -0
  258. package/dist/backend/runtime-abi.d.ts +2 -2
  259. package/dist/backend/runtime-abi.js +2 -2
  260. package/dist/backend/runtime-pack-core.d.ts +15 -4
  261. package/dist/backend/runtime-pack-core.js +23 -12
  262. package/dist/backend/runtime-pack-core.js.map +1 -1
  263. package/dist/backend/runtime-pack-native.d.ts +7 -3
  264. package/dist/backend/runtime-pack-native.js +0 -3
  265. package/dist/backend/runtime-pack-native.js.map +1 -1
  266. package/dist/backend/runtime-pack-targets.test.js +1 -1
  267. package/dist/backend/runtime-pack.d.ts +20 -2
  268. package/dist/backend/runtime-pack.js +23 -0
  269. package/dist/backend/runtime-pack.js.map +1 -1
  270. package/dist/backend/runtime-pack.test.js +115 -2
  271. package/dist/backend/runtime-pack.test.js.map +1 -1
  272. package/dist/backend/target-diagnostics.test.js +1 -1
  273. package/dist/backend/targets.d.ts +2 -1
  274. package/dist/backend/targets.js +1 -1
  275. package/dist/backend/targets.js.map +1 -1
  276. package/dist/cli/command.js +75 -11
  277. package/dist/cli/command.js.map +1 -1
  278. package/dist/cli/host.d.ts +2 -1
  279. package/dist/cli/usage.d.ts +4 -1
  280. package/dist/cli/usage.js +13 -3
  281. package/dist/cli/usage.js.map +1 -1
  282. package/dist/compile-types.d.ts +17 -5
  283. package/dist/coverage/report.d.ts +25 -2
  284. package/dist/coverage/report.js +161 -33
  285. package/dist/coverage/report.js.map +1 -1
  286. package/dist/coverage/verdict-cache.d.ts +63 -0
  287. package/dist/coverage/verdict-cache.js +193 -0
  288. package/dist/coverage/verdict-cache.js.map +1 -0
  289. package/dist/coverage/verdict-cache.test.d.ts +1 -0
  290. package/dist/coverage/verdict-cache.test.js +52 -0
  291. package/dist/coverage/verdict-cache.test.js.map +1 -0
  292. package/dist/coverage/verdict-semantic.d.ts +2 -0
  293. package/dist/coverage/verdict-semantic.js +24 -0
  294. package/dist/coverage/verdict-semantic.js.map +1 -0
  295. package/dist/coverage/verdict-startup.d.ts +15 -0
  296. package/dist/coverage/verdict-startup.js +66 -0
  297. package/dist/coverage/verdict-startup.js.map +1 -0
  298. package/dist/diagnostics/diagnostic.d.ts +29 -1
  299. package/dist/diagnostics/diagnostic.js +84 -12
  300. package/dist/diagnostics/diagnostic.js.map +1 -1
  301. package/dist/diagnostics/envelope.d.ts +130 -0
  302. package/dist/diagnostics/envelope.js +257 -0
  303. package/dist/diagnostics/envelope.js.map +1 -0
  304. package/dist/diagnostics/envelope.test.d.ts +1 -0
  305. package/dist/diagnostics/envelope.test.js +91 -0
  306. package/dist/diagnostics/envelope.test.js.map +1 -0
  307. package/dist/diagnostics/render.d.ts +3 -0
  308. package/dist/diagnostics/render.js +13 -2
  309. package/dist/diagnostics/render.js.map +1 -1
  310. package/dist/executable/executable-cache.d.ts +2 -2
  311. package/dist/executable/executable-cache.js +7 -4
  312. package/dist/executable/executable-cache.js.map +1 -1
  313. package/dist/executable/executable-cache.test.js +20 -0
  314. package/dist/executable/executable-cache.test.js.map +1 -1
  315. package/dist/executable/prepare.d.ts +4 -0
  316. package/dist/executable/prepare.js +7 -1
  317. package/dist/executable/prepare.js.map +1 -1
  318. package/dist/frontend/analysis.js +1 -0
  319. package/dist/frontend/analysis.js.map +1 -1
  320. package/dist/frontend/lowering/abstract-equality.js +5 -49
  321. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  322. package/dist/frontend/lowering/array-values.d.ts +30 -0
  323. package/dist/frontend/lowering/array-values.js +246 -1
  324. package/dist/frontend/lowering/array-values.js.map +1 -1
  325. package/dist/frontend/lowering/builtins/errors.js +17 -2
  326. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  327. package/dist/frontend/lowering/builtins/numbers.js +29 -1
  328. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  329. package/dist/frontend/lowering/builtins/process.d.ts +10 -17
  330. package/dist/frontend/lowering/builtins/process.js +66 -29
  331. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  332. package/dist/frontend/lowering/builtins/workers.js +4 -2
  333. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  334. package/dist/frontend/lowering/caught-value-dispatch.d.ts +11 -0
  335. package/dist/frontend/lowering/caught-value-dispatch.js +87 -0
  336. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -0
  337. package/dist/frontend/lowering/class-assertions.d.ts +12 -0
  338. package/dist/frontend/lowering/class-assertions.js +229 -5
  339. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  340. package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
  341. package/dist/frontend/lowering/class-callbacks.js +18 -5
  342. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  343. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +1 -0
  344. package/dist/frontend/lowering/class-dynamic-dispatch.js +12 -6
  345. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  346. package/dist/frontend/lowering/class-method-mutations.d.ts +5 -0
  347. package/dist/frontend/lowering/class-method-mutations.js +472 -0
  348. package/dist/frontend/lowering/class-method-mutations.js.map +1 -0
  349. package/dist/frontend/lowering/class-method-values.js +25 -5
  350. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  351. package/dist/frontend/lowering/class-prototypes.js +8 -2
  352. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  353. package/dist/frontend/lowering/class-unions.d.ts +16 -0
  354. package/dist/frontend/lowering/class-unions.js +127 -0
  355. package/dist/frontend/lowering/class-unions.js.map +1 -0
  356. package/dist/frontend/lowering/coercions/builders.js +8 -1
  357. package/dist/frontend/lowering/coercions/builders.js.map +1 -1
  358. package/dist/frontend/lowering/coercions/function-adapters.js +2 -0
  359. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  360. package/dist/frontend/lowering/coercions/identity.d.ts +7 -0
  361. package/dist/frontend/lowering/coercions/identity.js +26 -0
  362. package/dist/frontend/lowering/coercions/identity.js.map +1 -0
  363. package/dist/frontend/lowering/coercions/state.d.ts +6 -0
  364. package/dist/frontend/lowering/coercions/state.js +2 -0
  365. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  366. package/dist/frontend/lowering/coercions/structural.js +9 -6
  367. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  368. package/dist/frontend/lowering/coercions/unions.d.ts +8 -0
  369. package/dist/frontend/lowering/coercions/unions.js +67 -2
  370. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  371. package/dist/frontend/lowering/collation-repertoire.d.ts +1 -0
  372. package/dist/frontend/lowering/collation-repertoire.js +19 -0
  373. package/dist/frontend/lowering/collation-repertoire.js.map +1 -0
  374. package/dist/frontend/lowering/collection-narrowing.d.ts +6 -0
  375. package/dist/frontend/lowering/collection-narrowing.js +31 -0
  376. package/dist/frontend/lowering/collection-narrowing.js.map +1 -0
  377. package/dist/frontend/lowering/construction-escapes.d.ts +38 -0
  378. package/dist/frontend/lowering/construction-escapes.js +146 -0
  379. package/dist/frontend/lowering/construction-escapes.js.map +1 -0
  380. package/dist/frontend/lowering/construction-escapes.test.d.ts +1 -0
  381. package/dist/frontend/lowering/construction-escapes.test.js +150 -0
  382. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -0
  383. package/dist/frontend/lowering/containers/array-callback-call.d.ts +7 -0
  384. package/dist/frontend/lowering/containers/array-callback-call.js +52 -0
  385. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -0
  386. package/dist/frontend/lowering/containers/array-callbacks.d.ts +1 -1
  387. package/dist/frontend/lowering/containers/array-callbacks.js +416 -65
  388. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  389. package/dist/frontend/lowering/containers/array-concat.d.ts +7 -0
  390. package/dist/frontend/lowering/containers/array-concat.js +130 -0
  391. package/dist/frontend/lowering/containers/array-concat.js.map +1 -0
  392. package/dist/frontend/lowering/containers/array-construction.d.ts +2 -0
  393. package/dist/frontend/lowering/containers/array-construction.js +110 -5
  394. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  395. package/dist/frontend/lowering/containers/array-methods.d.ts +1 -11
  396. package/dist/frontend/lowering/containers/array-methods.js +274 -144
  397. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  398. package/dist/frontend/lowering/containers/callback-arguments.js +43 -1
  399. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  400. package/dist/frontend/lowering/containers/collection-methods.js +10 -1
  401. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  402. package/dist/frontend/lowering/containers/indexed-objects.js +56 -70
  403. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  404. package/dist/frontend/lowering/containers/string-and-regexp.js +7 -63
  405. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  406. package/dist/frontend/lowering/cycle-initialization.d.ts +46 -0
  407. package/dist/frontend/lowering/cycle-initialization.js +303 -0
  408. package/dist/frontend/lowering/cycle-initialization.js.map +1 -0
  409. package/dist/frontend/lowering/divergences.d.ts +9 -0
  410. package/dist/frontend/lowering/divergences.js +630 -0
  411. package/dist/frontend/lowering/divergences.js.map +1 -0
  412. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -0
  413. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  414. package/dist/frontend/lowering/expressions/object-literals.js +178 -34
  415. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  416. package/dist/frontend/lowering/expressions/union-field-write.d.ts +4 -4
  417. package/dist/frontend/lowering/expressions/union-field-write.js +54 -44
  418. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
  419. package/dist/frontend/lowering/iterator-adapters.d.ts +20 -0
  420. package/dist/frontend/lowering/iterator-adapters.js +605 -0
  421. package/dist/frontend/lowering/iterator-adapters.js.map +1 -0
  422. package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
  423. package/dist/frontend/lowering/lower-array-sort.js +44 -5
  424. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  425. package/dist/frontend/lowering/lower-array-sort.test.d.ts +1 -0
  426. package/dist/frontend/lowering/lower-array-sort.test.js +31 -0
  427. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -0
  428. package/dist/frontend/lowering/lower-assert.js +7 -0
  429. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  430. package/dist/frontend/lowering/lower-builtin-values.js +1 -0
  431. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  432. package/dist/frontend/lowering/lower-calls.d.ts +8 -3
  433. package/dist/frontend/lowering/lower-calls.js +388 -278
  434. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  435. package/dist/frontend/lowering/lower-classes.d.ts +6 -0
  436. package/dist/frontend/lowering/lower-classes.js +117 -65
  437. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  438. package/dist/frontend/lowering/lower-exprs.d.ts +22 -2
  439. package/dist/frontend/lowering/lower-exprs.js +811 -254
  440. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  441. package/dist/frontend/lowering/lower-functions.js +32 -19
  442. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  443. package/dist/frontend/lowering/lower-generators.d.ts +19 -13
  444. package/dist/frontend/lowering/lower-generators.js +67 -44
  445. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  446. package/dist/frontend/lowering/lower-inspect.js +29 -4
  447. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  448. package/dist/frontend/lowering/lower-island.d.ts +1 -1
  449. package/dist/frontend/lowering/lower-island.js +24 -7
  450. package/dist/frontend/lowering/lower-island.js.map +1 -1
  451. package/dist/frontend/lowering/lower-modules.js +100 -3
  452. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  453. package/dist/frontend/lowering/lower-stmts.js +82 -64
  454. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  455. package/dist/frontend/lowering/lowerer.d.ts +115 -2
  456. package/dist/frontend/lowering/lowerer.js +1266 -88
  457. package/dist/frontend/lowering/lowerer.js.map +1 -1
  458. package/dist/frontend/lowering/native-ffi.js +3 -1
  459. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  460. package/dist/frontend/lowering/runtime-optional-bounds.d.ts +19 -0
  461. package/dist/frontend/lowering/runtime-optional-bounds.js +354 -0
  462. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -0
  463. package/dist/frontend/lowering/runtime-optional-bounds.test.d.ts +1 -0
  464. package/dist/frontend/lowering/runtime-optional-bounds.test.js +66 -0
  465. package/dist/frontend/lowering/runtime-optional-bounds.test.js.map +1 -0
  466. package/dist/frontend/lowering/runtime-optional-elements.d.ts +117 -0
  467. package/dist/frontend/lowering/runtime-optional-elements.js +738 -0
  468. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -0
  469. package/dist/frontend/lowering/runtime-optional-guards.d.ts +36 -0
  470. package/dist/frontend/lowering/runtime-optional-guards.js +375 -0
  471. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -0
  472. package/dist/frontend/lowering/runtime-optional-guards.test.d.ts +1 -0
  473. package/dist/frontend/lowering/runtime-optional-guards.test.js +92 -0
  474. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -0
  475. package/dist/frontend/lowering/runtime-optional-ownership.d.ts +63 -0
  476. package/dist/frontend/lowering/runtime-optional-ownership.js +382 -0
  477. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -0
  478. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +16 -0
  479. package/dist/frontend/lowering/runtime-optional-provenance.js +41 -0
  480. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -0
  481. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  482. package/dist/frontend/lowering/strict-equality.d.ts +9 -0
  483. package/dist/frontend/lowering/strict-equality.js +116 -0
  484. package/dist/frontend/lowering/strict-equality.js.map +1 -0
  485. package/dist/frontend/lowering/string-index-bounds.d.ts +36 -0
  486. package/dist/frontend/lowering/string-index-bounds.js +537 -0
  487. package/dist/frontend/lowering/string-index-bounds.js.map +1 -0
  488. package/dist/frontend/lowering/string-index-bounds.test.d.ts +1 -0
  489. package/dist/frontend/lowering/string-index-bounds.test.js +223 -0
  490. package/dist/frontend/lowering/string-index-bounds.test.js.map +1 -0
  491. package/dist/frontend/lowering/surfaces.js +3 -0
  492. package/dist/frontend/lowering/surfaces.js.map +1 -1
  493. package/dist/frontend/lowering/union-comparison.d.ts +5 -0
  494. package/dist/frontend/lowering/union-comparison.js +47 -0
  495. package/dist/frontend/lowering/union-comparison.js.map +1 -0
  496. package/dist/frontend/lowering/union-narrow.d.ts +2 -0
  497. package/dist/frontend/lowering/union-narrow.js +10 -6
  498. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  499. package/dist/frontend/program-analysis.d.ts +10 -0
  500. package/dist/frontend/program-analysis.js +7 -0
  501. package/dist/frontend/program-analysis.js.map +1 -1
  502. package/dist/frontend/program.d.ts +63 -2
  503. package/dist/frontend/program.js +1038 -61
  504. package/dist/frontend/program.js.map +1 -1
  505. package/dist/frontend/program.test.js +122 -6
  506. package/dist/frontend/program.test.js.map +1 -1
  507. package/dist/frontend/resolve.d.ts +6 -0
  508. package/dist/frontend/resolve.js +14 -0
  509. package/dist/frontend/resolve.js.map +1 -1
  510. package/dist/frontend/threads-import.d.ts +5 -0
  511. package/dist/frontend/threads-import.js +21 -0
  512. package/dist/frontend/threads-import.js.map +1 -0
  513. package/dist/frontend/type-mapper.d.ts +4 -1
  514. package/dist/frontend/type-mapper.js +161 -20
  515. package/dist/frontend/type-mapper.js.map +1 -1
  516. package/dist/frontend/type-mapper.test.js +15 -3
  517. package/dist/frontend/type-mapper.test.js.map +1 -1
  518. package/dist/frontend/worker-target.d.ts +4 -0
  519. package/dist/frontend/worker-target.js +8 -1
  520. package/dist/frontend/worker-target.js.map +1 -1
  521. package/dist/index.d.ts +6 -1
  522. package/dist/index.js +70 -16
  523. package/dist/index.js.map +1 -1
  524. package/dist/ir/analysis.d.ts +3 -1
  525. package/dist/ir/analysis.js +4 -0
  526. package/dist/ir/analysis.js.map +1 -1
  527. package/dist/ir/build.d.ts +5 -0
  528. package/dist/ir/build.js +7 -0
  529. package/dist/ir/build.js.map +1 -1
  530. package/dist/ir/builtin-signatures.d.ts +1 -1
  531. package/dist/ir/builtin-signatures.js +5 -3
  532. package/dist/ir/builtin-signatures.js.map +1 -1
  533. package/dist/ir/constant-tables.test.js +1 -1
  534. package/dist/ir/initializer-bindings.test.js +1 -1
  535. package/dist/ir/int32-slots.d.ts +72 -0
  536. package/dist/ir/int32-slots.js +837 -0
  537. package/dist/ir/int32-slots.js.map +1 -0
  538. package/dist/ir/int32-slots.test.d.ts +1 -0
  539. package/dist/ir/int32-slots.test.js +222 -0
  540. package/dist/ir/int32-slots.test.js.map +1 -0
  541. package/dist/ir/integer-ranges.d.ts +19 -3
  542. package/dist/ir/integer-ranges.js +168 -23
  543. package/dist/ir/integer-ranges.js.map +1 -1
  544. package/dist/ir/integer-ranges.test.js +74 -2
  545. package/dist/ir/integer-ranges.test.js.map +1 -1
  546. package/dist/ir/ir.d.ts +101 -20
  547. package/dist/ir/ir.js +20 -6
  548. package/dist/ir/ir.js.map +1 -1
  549. package/dist/ir/scalar-records.test.js +1 -1
  550. package/dist/ir/serialize.d.ts +1 -1
  551. package/dist/ir/serialize.js +3 -3
  552. package/dist/ir/serialize.js.map +1 -1
  553. package/dist/ir/traverse.js +8 -0
  554. package/dist/ir/traverse.js.map +1 -1
  555. package/dist/ir/validate.js +139 -22
  556. package/dist/ir/validate.js.map +1 -1
  557. package/dist/ir/validate.test.js +308 -8
  558. package/dist/ir/validate.test.js.map +1 -1
  559. package/dist/library/fence-eval.test.js +1 -1
  560. package/dist/library/int-infer.test.js +4 -4
  561. package/dist/library/library-cache.test.js +5 -5
  562. package/dist/library/library-profile.d.ts +2 -1
  563. package/dist/library/library-profile.js +4 -3
  564. package/dist/library/library-profile.js.map +1 -1
  565. package/dist/native/cache.d.ts +3 -0
  566. package/dist/native/cache.js +49 -1
  567. package/dist/native/cache.js.map +1 -1
  568. package/dist/native/cache.test.js +21 -1
  569. package/dist/native/cache.test.js.map +1 -1
  570. package/dist/native/cli.js +1 -1
  571. package/dist/native/cli.js.map +1 -1
  572. package/dist/native/compiler.d.ts +5 -0
  573. package/dist/native/compiler.js +51 -4
  574. package/dist/native/compiler.js.map +1 -1
  575. package/dist/native/compiler.test.js +2 -2
  576. package/dist/native/library.d.ts +2 -1
  577. package/dist/native/library.js.map +1 -1
  578. package/dist/native/prepare.d.ts +4 -0
  579. package/dist/native/prepare.js +28 -3
  580. package/dist/native/prepare.js.map +1 -1
  581. package/dist/native/sanitizer.d.ts +3 -2
  582. package/dist/native/sanitizer.js +3 -13
  583. package/dist/native/sanitizer.js.map +1 -1
  584. package/dist/startup-cache.d.ts +2 -0
  585. package/dist/startup-cache.js +2 -0
  586. package/dist/startup-cache.js.map +1 -1
  587. package/package.json +20 -20
  588. package/surface-manifest.json +8 -2
@@ -0,0 +1,63 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ /** Program queries for the array-ownership proof. */
3
+ export interface OwnershipHost {
4
+ symbolOf(node: ts.Node): ts.Symbol | null;
5
+ declarationOf(symbol: ts.Symbol): ts.Node | undefined;
6
+ /** The node's checker type; null when the checker cannot answer. */
7
+ typeOf(node: ts.Node): ts.Type | null;
8
+ /** An instance of `owner` can be assigned to a value of type `target`. */
9
+ instanceAssignableTo(owner: ts.ClassLikeDeclaration, target: ts.Type): boolean;
10
+ isGlobal(node: ts.Expression, name: string): boolean;
11
+ isArray(node: ts.Expression): boolean;
12
+ /** Element keys of the native arrays a field's declared type holds. */
13
+ fieldKeys(declaration: ts.PropertyDeclaration): readonly string[];
14
+ /** Element keys of native arrays that some `any` or `unknown` value is
15
+ * converted to. Such a conversion can view an array reached through
16
+ * reflection (`(x as any).field`, `Object.values(x)`). */
17
+ dynamicViewKeys(): ReadonlySet<string>;
18
+ }
19
+ /** Proves that an array is owned by one storage slot: a local variable or
20
+ * a private instance field that only ever holds arrays allocated for it,
21
+ * whose every use reads elements or the length, mutates the array in
22
+ * place, or copies its elements into a new value (a spread, an iteration,
23
+ * a copying method), and never lets the array itself flow anywhere else.
24
+ * Facts about the slot's holes and undefined values then belong to the
25
+ * slot alone rather than to every array with the same element type.
26
+ *
27
+ * A private field can also be reached without naming its symbol: an object
28
+ * spread or destructuring of its instance, a literal-key access, or
29
+ * reflection that yields an `any` value. The first two must not apply to a
30
+ * value that can hold an instance, and no `any` or `unknown` value may be
31
+ * converted to the field's array type, which is the only way a reflected
32
+ * array becomes a native array again. */
33
+ export declare class ArrayOwnership {
34
+ private readonly files;
35
+ private readonly host;
36
+ private references;
37
+ /** Object spreads, which copy every own field out. */
38
+ private readonly copiedObjects;
39
+ /** Object destructuring patterns by the property names they read; ""
40
+ * collects patterns with a computed key or rest, which read any field. */
41
+ private readonly destructurings;
42
+ /** Receivers of `x["name"]` and `x.name`, by name. */
43
+ private readonly literalKeyAccesses;
44
+ private readonly namedAccesses;
45
+ /** Values whose fields are read by a computed key, an object walker, or
46
+ * a for-in loop. */
47
+ private readonly reflected;
48
+ private readonly ownedRoots;
49
+ constructor(files: readonly ts.SourceFile[], host: OwnershipHost);
50
+ /** The owning slot `node` reads, when it directly references one. */
51
+ ownerOf(node: ts.Expression): ts.Symbol | null;
52
+ /** The owning slot a freshly built array initializes or is assigned to. */
53
+ allocationOwner(allocation: ts.Expression): ts.Symbol | null;
54
+ private rootOf;
55
+ private fieldRoot;
56
+ private owned;
57
+ private computeOwned;
58
+ private ownedUse;
59
+ /** Nothing reaches the field's array without naming the field. */
60
+ private unexposed;
61
+ private isFreshArray;
62
+ private index;
63
+ }
@@ -0,0 +1,382 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ /** Array methods returning their receiver: a used result aliases it. */
3
+ const RETURNS_RECEIVER = new Set(["sort", "reverse", "fill", "copyWithin"]);
4
+ /** Array methods whose callback receives the array itself, by the
5
+ * position of that parameter. */
6
+ const ARRAY_ARGUMENT_AT = new Map([
7
+ ["map", 2],
8
+ ["filter", 2],
9
+ ["forEach", 2],
10
+ ["some", 2],
11
+ ["every", 2],
12
+ ["find", 2],
13
+ ["findIndex", 2],
14
+ ["findLast", 2],
15
+ ["findLastIndex", 2],
16
+ ["flatMap", 2],
17
+ ["reduce", 3],
18
+ ["reduceRight", 3],
19
+ ]);
20
+ /** Iterator factories: their iterator reads the array later, so they are
21
+ * only an owned use directly as a for-of source. */
22
+ const ITERATORS = new Set(["values", "entries", "keys"]);
23
+ /** Array methods that return a newly allocated array. */
24
+ const FRESH_METHODS = new Set([
25
+ "map",
26
+ "filter",
27
+ "slice",
28
+ "concat",
29
+ "flat",
30
+ "flatMap",
31
+ "toSorted",
32
+ "toReversed",
33
+ "toSpliced",
34
+ "with",
35
+ ]);
36
+ /** Proves that an array is owned by one storage slot: a local variable or
37
+ * a private instance field that only ever holds arrays allocated for it,
38
+ * whose every use reads elements or the length, mutates the array in
39
+ * place, or copies its elements into a new value (a spread, an iteration,
40
+ * a copying method), and never lets the array itself flow anywhere else.
41
+ * Facts about the slot's holes and undefined values then belong to the
42
+ * slot alone rather than to every array with the same element type.
43
+ *
44
+ * A private field can also be reached without naming its symbol: an object
45
+ * spread or destructuring of its instance, a literal-key access, or
46
+ * reflection that yields an `any` value. The first two must not apply to a
47
+ * value that can hold an instance, and no `any` or `unknown` value may be
48
+ * converted to the field's array type, which is the only way a reflected
49
+ * array becomes a native array again. */
50
+ export class ArrayOwnership {
51
+ files;
52
+ host;
53
+ references = null;
54
+ /** Object spreads, which copy every own field out. */
55
+ copiedObjects = [];
56
+ /** Object destructuring patterns by the property names they read; ""
57
+ * collects patterns with a computed key or rest, which read any field. */
58
+ destructurings = new Map();
59
+ /** Receivers of `x["name"]` and `x.name`, by name. */
60
+ literalKeyAccesses = new Map();
61
+ namedAccesses = new Map();
62
+ /** Values whose fields are read by a computed key, an object walker, or
63
+ * a for-in loop. */
64
+ reflected = [];
65
+ ownedRoots = new Map();
66
+ constructor(files, host) {
67
+ this.files = files;
68
+ this.host = host;
69
+ }
70
+ /** The owning slot `node` reads, when it directly references one. */
71
+ ownerOf(node) {
72
+ const root = this.rootOf(node);
73
+ return root !== null && this.owned(root) ? root.symbol : null;
74
+ }
75
+ /** The owning slot a freshly built array initializes or is assigned to. */
76
+ allocationOwner(allocation) {
77
+ let child = allocation;
78
+ let parent = allocation.parent;
79
+ while (parent &&
80
+ (ts.isParenthesizedExpression(parent) ||
81
+ ts.isAsExpression(parent) ||
82
+ ts.isTypeAssertion(parent) ||
83
+ ts.isSatisfiesExpression(parent))) {
84
+ child = parent;
85
+ parent = parent.parent;
86
+ }
87
+ let root = null;
88
+ if (parent && ts.isVariableDeclaration(parent) && parent.initializer === child) {
89
+ if (ts.isIdentifier(parent.name))
90
+ root = this.rootOf(parent.name);
91
+ }
92
+ else if (parent &&
93
+ ts.isBinaryExpression(parent) &&
94
+ parent.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
95
+ parent.right === child) {
96
+ root = this.rootOf(parent.left);
97
+ }
98
+ else if (parent && ts.isPropertyDeclaration(parent) && parent.initializer === child) {
99
+ root = this.fieldRoot(parent);
100
+ }
101
+ return root !== null && this.owned(root) ? root.symbol : null;
102
+ }
103
+ rootOf(node) {
104
+ const e = peel(node);
105
+ if (ts.isIdentifier(e)) {
106
+ const symbol = this.host.symbolOf(e);
107
+ const declaration = symbol ? this.host.declarationOf(symbol) : undefined;
108
+ if (!symbol ||
109
+ !declaration ||
110
+ !ts.isVariableDeclaration(declaration) ||
111
+ !ts.isIdentifier(declaration.name) ||
112
+ !ts.isVariableDeclarationList(declaration.parent) ||
113
+ !ts.isVariableStatement(declaration.parent.parent))
114
+ return null;
115
+ return { symbol, name: e.text, field: null };
116
+ }
117
+ if (ts.isPropertyAccessExpression(e)) {
118
+ const symbol = this.host.symbolOf(e.name);
119
+ const declaration = symbol ? this.host.declarationOf(symbol) : undefined;
120
+ return declaration && ts.isPropertyDeclaration(declaration)
121
+ ? this.fieldRoot(declaration)
122
+ : null;
123
+ }
124
+ return null;
125
+ }
126
+ fieldRoot(declaration) {
127
+ const owner = declaration.parent;
128
+ if (!ts.isClassDeclaration(owner) && !ts.isClassExpression(owner))
129
+ return null;
130
+ const name = declaration.name;
131
+ const flags = ts.getCombinedModifierFlags(declaration);
132
+ const isPrivate = ts.isPrivateIdentifier(name) ||
133
+ (flags & (ts.ModifierFlags.Private | ts.ModifierFlags.Protected)) !== 0;
134
+ if (!isPrivate || (flags & ts.ModifierFlags.Static) !== 0)
135
+ return null;
136
+ if (!ts.isIdentifier(name) && !ts.isPrivateIdentifier(name))
137
+ return null;
138
+ const symbol = this.host.symbolOf(name);
139
+ return symbol ? { symbol, name: name.text, field: declaration } : null;
140
+ }
141
+ owned(root) {
142
+ const cached = this.ownedRoots.get(root.symbol);
143
+ if (cached !== undefined)
144
+ return cached;
145
+ const result = this.computeOwned(root);
146
+ this.ownedRoots.set(root.symbol, result);
147
+ return result;
148
+ }
149
+ computeOwned(root) {
150
+ const references = this.index().get(root.name) ?? [];
151
+ for (const reference of references) {
152
+ if (this.host.symbolOf(reference) !== root.symbol)
153
+ continue;
154
+ if (!this.ownedUse(reference, root))
155
+ return false;
156
+ }
157
+ return root.field === null || this.unexposed(root, root.field);
158
+ }
159
+ ownedUse(reference, root) {
160
+ const parent = reference.parent;
161
+ if (parent &&
162
+ (ts.isVariableDeclaration(parent) || ts.isPropertyDeclaration(parent)) &&
163
+ parent.name === reference)
164
+ return parent.initializer === undefined || this.isFreshArray(parent.initializer);
165
+ let use = reference;
166
+ if (root.field !== null) {
167
+ if (!parent || !ts.isPropertyAccessExpression(parent) || parent.name !== reference)
168
+ return false;
169
+ use = parent;
170
+ }
171
+ else if (!ts.isIdentifier(reference))
172
+ return false;
173
+ while (use.parent &&
174
+ (ts.isParenthesizedExpression(use.parent) || ts.isNonNullExpression(use.parent)))
175
+ use = use.parent;
176
+ const user = use.parent;
177
+ if (!user)
178
+ return false;
179
+ if (ts.isElementAccessExpression(user) && user.expression === use)
180
+ return true;
181
+ if (ts.isSpreadElement(user))
182
+ return true;
183
+ if (ts.isForOfStatement(user) && user.expression === use)
184
+ return true;
185
+ if (ts.isPropertyAccessExpression(user) && user.expression === use) {
186
+ const method = user.name.text;
187
+ if (method === "length")
188
+ return true;
189
+ const call = user.parent;
190
+ if (!call || !ts.isCallExpression(call) || call.expression !== user)
191
+ return false;
192
+ if (ITERATORS.has(method))
193
+ return !!call.parent && ts.isForOfStatement(call.parent) && call.parent.expression === call;
194
+ if (RETURNS_RECEIVER.has(method))
195
+ return !!call.parent && ts.isExpressionStatement(call.parent);
196
+ const arrayAt = ARRAY_ARGUMENT_AT.get(method);
197
+ if (arrayAt !== undefined) {
198
+ // An inline callback that cannot see its array argument.
199
+ const callback = call.arguments[0];
200
+ return (callback !== undefined &&
201
+ (ts.isArrowFunction(callback) ||
202
+ (ts.isFunctionExpression(callback) && !usesArguments(callback))) &&
203
+ callback.parameters.length <= arrayAt &&
204
+ !callback.parameters.some((parameter) => parameter.dotDotDotToken));
205
+ }
206
+ return this.host.isArray(user.expression);
207
+ }
208
+ if (ts.isBinaryExpression(user) &&
209
+ user.left === use &&
210
+ user.operatorToken.kind === ts.SyntaxKind.EqualsToken)
211
+ return this.isFreshArray(user.right);
212
+ if (ts.isCallExpression(user) && user.arguments[0] === use) {
213
+ const callee = peel(user.expression);
214
+ return (ts.isPropertyAccessExpression(callee) &&
215
+ ((callee.name.text === "hasOwn" && this.host.isGlobal(callee.expression, "Object")) ||
216
+ (callee.name.text === "isArray" && this.host.isGlobal(callee.expression, "Array")) ||
217
+ (callee.name.text === "from" &&
218
+ user.arguments.length === 1 &&
219
+ this.host.isGlobal(callee.expression, "Array"))));
220
+ }
221
+ return false;
222
+ }
223
+ /** Nothing reaches the field's array without naming the field. */
224
+ unexposed(root, field) {
225
+ const owner = field.parent;
226
+ const mayHoldInstance = (node) => {
227
+ const type = this.host.typeOf(node);
228
+ if (type === null)
229
+ return true;
230
+ if ((type.flags &
231
+ (ts.TypeFlags.Any |
232
+ ts.TypeFlags.Unknown |
233
+ ts.TypeFlags.NonPrimitive |
234
+ ts.TypeFlags.TypeParameter)) !==
235
+ 0)
236
+ return true;
237
+ return this.host.instanceAssignableTo(owner, type);
238
+ };
239
+ this.index();
240
+ for (const pattern of [
241
+ ...(this.destructurings.get(root.name) ?? []),
242
+ ...(this.destructurings.get("") ?? []),
243
+ ]) {
244
+ // Only a declaration's initializer names the destructured value.
245
+ const owner = pattern.parent;
246
+ if (!ts.isVariableDeclaration(owner) || !owner.initializer)
247
+ return false;
248
+ if (mayHoldInstance(owner.initializer))
249
+ return false;
250
+ }
251
+ if (this.copiedObjects.some(mayHoldInstance))
252
+ return false;
253
+ if ((this.literalKeyAccesses.get(root.name) ?? []).some(mayHoldInstance))
254
+ return false;
255
+ // A dynamic read can only reach the field through a value whose type
256
+ // admits the instance; its `any` result must then become a native
257
+ // array again.
258
+ const dynamic = (node) => {
259
+ const type = this.host.typeOf(node);
260
+ return type === null || (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.TypeParameter)) !== 0;
261
+ };
262
+ const reflectedReads = this.reflected.some(mayHoldInstance) ||
263
+ (this.namedAccesses.get(root.name) ?? []).some(dynamic);
264
+ if (!reflectedReads)
265
+ return true;
266
+ const views = this.host.dynamicViewKeys();
267
+ if (views.has("*"))
268
+ return false;
269
+ return this.host.fieldKeys(field).every((key) => !views.has(key));
270
+ }
271
+ isFreshArray(node) {
272
+ const e = peel(node);
273
+ if (ts.isArrayLiteralExpression(e))
274
+ return true;
275
+ if (!ts.isNewExpression(e) && !ts.isCallExpression(e))
276
+ return false;
277
+ const callee = peel(e.expression);
278
+ if (ts.isIdentifier(callee))
279
+ return this.host.isGlobal(callee, "Array");
280
+ if (!ts.isPropertyAccessExpression(callee))
281
+ return false;
282
+ const method = callee.name.text;
283
+ if ((method === "from" || method === "of") && this.host.isGlobal(callee.expression, "Array"))
284
+ return true;
285
+ if (method === "fill")
286
+ return this.isFreshArray(callee.expression);
287
+ return FRESH_METHODS.has(method) && this.host.isArray(callee.expression);
288
+ }
289
+ index() {
290
+ if (this.references)
291
+ return this.references;
292
+ const references = new Map();
293
+ const add = (name, node) => {
294
+ const list = references.get(name);
295
+ if (list)
296
+ list.push(node);
297
+ else
298
+ references.set(name, [node]);
299
+ };
300
+ for (const file of this.files) {
301
+ ts.walkPreorder(file, (node) => {
302
+ if (ts.isIdentifier(node) || ts.isPrivateIdentifier(node))
303
+ add(node.text, node);
304
+ else if (ts.isPropertyAccessExpression(node)) {
305
+ const list = this.namedAccesses.get(node.name.text);
306
+ if (list)
307
+ list.push(node.expression);
308
+ else
309
+ this.namedAccesses.set(node.name.text, [node.expression]);
310
+ }
311
+ else if (ts.isElementAccessExpression(node)) {
312
+ const key = peel(node.argumentExpression);
313
+ if (ts.isStringLiteral(key) || ts.isNoSubstitutionTemplateLiteral(key)) {
314
+ const list = this.literalKeyAccesses.get(key.text);
315
+ if (list)
316
+ list.push(node.expression);
317
+ else
318
+ this.literalKeyAccesses.set(key.text, [node.expression]);
319
+ }
320
+ else if (!ts.isNumericLiteral(key))
321
+ this.reflected.push(node.expression);
322
+ }
323
+ else if (ts.isSpreadAssignment(node))
324
+ this.copiedObjects.push(node.expression);
325
+ else if (ts.isForInStatement(node))
326
+ this.reflected.push(node.expression);
327
+ else if (ts.isCallExpression(node)) {
328
+ const callee = peel(node.expression);
329
+ const walker = ts.isPropertyAccessExpression(callee) &&
330
+ (this.host.isGlobal(callee.expression, "Object") ||
331
+ this.host.isGlobal(callee.expression, "Reflect"));
332
+ const clone = ts.isIdentifier(callee) && this.host.isGlobal(callee, "structuredClone");
333
+ if (walker || clone)
334
+ for (const arg of node.arguments)
335
+ this.reflected.push(ts.isSpreadElement(arg) ? arg.expression : arg);
336
+ }
337
+ else if (ts.isObjectBindingPattern(node)) {
338
+ for (const element of node.elements) {
339
+ const name = element.propertyName ?? element.name;
340
+ // A rest element copies every remaining field.
341
+ const key = !element.dotDotDotToken &&
342
+ (ts.isIdentifier(name) || ts.isPrivateIdentifier(name) || ts.isStringLiteral(name))
343
+ ? name.text
344
+ : "";
345
+ const list = this.destructurings.get(key);
346
+ if (list)
347
+ list.push(node);
348
+ else
349
+ this.destructurings.set(key, [node]);
350
+ }
351
+ }
352
+ return undefined;
353
+ });
354
+ }
355
+ this.references = references;
356
+ return references;
357
+ }
358
+ }
359
+ function usesArguments(fn) {
360
+ let found = false;
361
+ const visit = (node) => {
362
+ if (found)
363
+ return;
364
+ if (ts.isIdentifier(node) && node.text === "arguments")
365
+ found = true;
366
+ else if (!ts.isFunctionDeclaration(node) && !ts.isFunctionExpression(node))
367
+ node.forEachChild(visit);
368
+ };
369
+ fn.body?.forEachChild(visit);
370
+ return found;
371
+ }
372
+ function peel(node) {
373
+ let e = node;
374
+ while (ts.isParenthesizedExpression(e) ||
375
+ ts.isAsExpression(e) ||
376
+ ts.isTypeAssertion(e) ||
377
+ ts.isSatisfiesExpression(e) ||
378
+ ts.isNonNullExpression(e))
379
+ e = e.expression;
380
+ return e;
381
+ }
382
+ //# sourceMappingURL=runtime-optional-ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-optional-ownership.js","sourceRoot":"","sources":["../../../src/frontend/lowering/runtime-optional-ownership.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ /** Debug-only record of why the indexed-read analysis widened a binding,
3
+ * parameter, return, or field to a runtime-optional representation, and
4
+ * why an array element ABI can hold undefined values or holes. It is
5
+ * enabled by SCRIPTC_DEBUG_RUNTIME_OPTIONAL=1 and writes one line per
6
+ * widening to stderr; the disabled path records nothing. Not a public API:
7
+ * the output format may change at any time. */
8
+ export declare class RuntimeOptionalProvenance {
9
+ private readonly lines;
10
+ private readonly seen;
11
+ static fromEnvironment(): RuntimeOptionalProvenance | null;
12
+ /** `target` names the widened slot; `cause` is the expression or site
13
+ * whose value made it optional. */
14
+ note(kind: string, target: ts.Node | undefined, cause: ts.Node | undefined, detail?: string): void;
15
+ flush(): void;
16
+ }
@@ -0,0 +1,41 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ /** Debug-only record of why the indexed-read analysis widened a binding,
3
+ * parameter, return, or field to a runtime-optional representation, and
4
+ * why an array element ABI can hold undefined values or holes. It is
5
+ * enabled by SCRIPTC_DEBUG_RUNTIME_OPTIONAL=1 and writes one line per
6
+ * widening to stderr; the disabled path records nothing. Not a public API:
7
+ * the output format may change at any time. */
8
+ export class RuntimeOptionalProvenance {
9
+ lines = [];
10
+ seen = new Set();
11
+ static fromEnvironment() {
12
+ return process.env["SCRIPTC_DEBUG_RUNTIME_OPTIONAL"] === "1"
13
+ ? new RuntimeOptionalProvenance()
14
+ : null;
15
+ }
16
+ /** `target` names the widened slot; `cause` is the expression or site
17
+ * whose value made it optional. */
18
+ note(kind, target, cause, detail = "") {
19
+ const line = `${kind} ${describe(target)}${detail ? ` ${detail}` : ""} <- ${describe(cause)}`;
20
+ if (this.seen.has(line))
21
+ return;
22
+ this.seen.add(line);
23
+ this.lines.push(line);
24
+ }
25
+ flush() {
26
+ for (const line of this.lines)
27
+ process.stderr.write(`scriptc runtime-optional ${line}\n`);
28
+ this.lines.length = 0;
29
+ }
30
+ }
31
+ function describe(node) {
32
+ if (!node)
33
+ return "?";
34
+ const sf = node.getSourceFile();
35
+ const start = node.getStart();
36
+ const pos = ts.getLineAndCharacterOfPosition(sf, start);
37
+ const text = sf.text.slice(start, node.end).replace(/\s+/g, " ");
38
+ const short = text.length > 60 ? `${text.slice(0, 57)}...` : text;
39
+ return `${sf.fileName}:${pos.line + 1}:${pos.character + 1} \`${short}\``;
40
+ }
41
+ //# sourceMappingURL=runtime-optional-provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-optional-provenance.js","sourceRoot":"","sources":["../../../src/frontend/lowering/runtime-optional-provenance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAExC;;;;;+CAK+C;AAC/C,MAAM,OAAO,yBAAyB;IACnB,KAAK,GAAa,EAAE,CAAC;IACrB,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,MAAM,CAAC,eAAe;QACpB,OAAO,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,KAAK,GAAG;YAC1D,CAAC,CAAC,IAAI,yBAAyB,EAAE;YACjC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED;uCACmC;IACnC,IAAI,CAAC,IAAY,EAAE,MAA2B,EAAE,KAA0B,EAAE,MAAM,GAAG,EAAE;QACrF,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9F,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,KAAK;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,IAAyB;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IACtB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,EAAE,CAAC,6BAA6B,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,OAAO,GAAG,EAAE,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC;AAC5E,CAAC"}
@@ -20,7 +20,7 @@ test("fenced instance slots are erased throughout signatures, storage and nested
20
20
  };
21
21
  const ref = (type) => ({ kind: "varRef", localId: "x", type, loc });
22
22
  const module = {
23
- irVersion: 14,
23
+ irVersion: 15,
24
24
  sourceFile: loc.file,
25
25
  entry: "main",
26
26
  globals: [{ id: "g", name: "g", type: composite, mutable: false }],
@@ -106,7 +106,7 @@ test("modules without optional tables and registered class types retain their st
106
106
  const loc = { file: "registered.ts", start: 0, end: 1 };
107
107
  const type = { kind: "object", className: "Registered" };
108
108
  const module = {
109
- irVersion: 14,
109
+ irVersion: 15,
110
110
  sourceFile: loc.file,
111
111
  entry: "main",
112
112
  functions: [
@@ -0,0 +1,9 @@
1
+ import { type IrExpr, type IrType, type SrcLoc } from "../../ir/ir.js";
2
+ import type { Lowerer } from "./lowerer.js";
3
+ /** Related class arms can store the same object under different tags, so
4
+ * comparing a union's tags and payloads alone can miss an identity. */
5
+ export declare function tagEqualityMayMissAlias(lowerer: Lowerer, type: IrType): boolean;
6
+ /** Strict/SameValue comparison across independently represented unions.
7
+ * Parameters preserve left-to-right evaluation and reuse native payloads;
8
+ * equality must never allocate a width copy or adapt a callback signature. */
9
+ export declare function lowerUnionEquality(lowerer: Lowerer, left: IrExpr, right: IrExpr, negated: boolean, sameValue: boolean, loc: SrcLoc): IrExpr | null;