@scriptc/compiler 0.2.5 → 0.2.7

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 (520) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +62 -48
  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/executable-features.js +1 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/link-plan-core.d.ts +4 -1
  13. package/dist/backend/link-plan-core.js +16 -3
  14. package/dist/backend/link-plan-core.js.map +1 -1
  15. package/dist/backend/link-plan.d.ts +3 -1
  16. package/dist/backend/link-plan.js +3 -0
  17. package/dist/backend/link-plan.js.map +1 -1
  18. package/dist/backend/llvm/alloc.d.ts +40 -0
  19. package/dist/backend/llvm/alloc.js +205 -0
  20. package/dist/backend/llvm/alloc.js.map +1 -0
  21. package/dist/backend/llvm/alloc.test.d.ts +1 -0
  22. package/dist/backend/llvm/alloc.test.js +102 -0
  23. package/dist/backend/llvm/alloc.test.js.map +1 -0
  24. package/dist/backend/llvm/byte-numbers.js +32 -4
  25. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  26. package/dist/backend/llvm/byte-windows.d.ts +31 -0
  27. package/dist/backend/llvm/byte-windows.js +334 -0
  28. package/dist/backend/llvm/byte-windows.js.map +1 -0
  29. package/dist/backend/llvm/byte-windows.test.d.ts +1 -0
  30. package/dist/backend/llvm/byte-windows.test.js +244 -0
  31. package/dist/backend/llvm/byte-windows.test.js.map +1 -0
  32. package/dist/backend/llvm/call-lifetimes.d.ts +17 -5
  33. package/dist/backend/llvm/call-lifetimes.js +58 -24
  34. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  35. package/dist/backend/llvm/call-lifetimes.test.js +170 -0
  36. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  37. package/dist/backend/llvm/classes.d.ts +18 -2
  38. package/dist/backend/llvm/classes.js +115 -41
  39. package/dist/backend/llvm/classes.js.map +1 -1
  40. package/dist/backend/llvm/classes.test.d.ts +1 -0
  41. package/dist/backend/llvm/classes.test.js +132 -0
  42. package/dist/backend/llvm/classes.test.js.map +1 -0
  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 +27 -0
  47. package/dist/backend/llvm/constant-callbacks.js +450 -0
  48. package/dist/backend/llvm/constant-callbacks.js.map +1 -0
  49. package/dist/backend/llvm/constant-callbacks.test.d.ts +1 -0
  50. package/dist/backend/llvm/constant-callbacks.test.js +261 -0
  51. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -0
  52. package/dist/backend/llvm/dense-array-access.d.ts +29 -0
  53. package/dist/backend/llvm/dense-array-access.js +335 -0
  54. package/dist/backend/llvm/dense-array-access.js.map +1 -0
  55. package/dist/backend/llvm/dense-array-access.test.d.ts +1 -0
  56. package/dist/backend/llvm/dense-array-access.test.js +149 -0
  57. package/dist/backend/llvm/dense-array-access.test.js.map +1 -0
  58. package/dist/backend/llvm/dyn.d.ts +35 -1
  59. package/dist/backend/llvm/dyn.js +196 -35
  60. package/dist/backend/llvm/dyn.js.map +1 -1
  61. package/dist/backend/llvm/emitter.d.ts +143 -4
  62. package/dist/backend/llvm/emitter.js +882 -136
  63. package/dist/backend/llvm/emitter.js.map +1 -1
  64. package/dist/backend/llvm/emitter.test.js +82 -14
  65. package/dist/backend/llvm/emitter.test.js.map +1 -1
  66. package/dist/backend/llvm/expr-async.js +58 -4
  67. package/dist/backend/llvm/expr-async.js.map +1 -1
  68. package/dist/backend/llvm/expr-async.test.d.ts +1 -0
  69. package/dist/backend/llvm/expr-async.test.js +62 -0
  70. package/dist/backend/llvm/expr-async.test.js.map +1 -0
  71. package/dist/backend/llvm/expr-bytes.js +11 -0
  72. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  73. package/dist/backend/llvm/expr-calls.js +151 -25
  74. package/dist/backend/llvm/expr-calls.js.map +1 -1
  75. package/dist/backend/llvm/expr-containers.js +37 -14
  76. package/dist/backend/llvm/expr-containers.js.map +1 -1
  77. package/dist/backend/llvm/expr-control.js +92 -2
  78. package/dist/backend/llvm/expr-control.js.map +1 -1
  79. package/dist/backend/llvm/expr-dispatch.js +2 -0
  80. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  81. package/dist/backend/llvm/expr-dynamic.js +210 -28
  82. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  83. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  84. package/dist/backend/llvm/expr-primitives.js +58 -23
  85. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  86. package/dist/backend/llvm/expr-primitives.test.js +1 -1
  87. package/dist/backend/llvm/expr-records.js +3 -3
  88. package/dist/backend/llvm/expr-records.js.map +1 -1
  89. package/dist/backend/llvm/expr-stream-bridges.js +59 -2
  90. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  91. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  92. package/dist/backend/llvm/integer-remainder.d.ts +18 -0
  93. package/dist/backend/llvm/integer-remainder.js +117 -0
  94. package/dist/backend/llvm/integer-remainder.js.map +1 -0
  95. package/dist/backend/llvm/layouts.d.ts +2 -1
  96. package/dist/backend/llvm/layouts.js +4 -3
  97. package/dist/backend/llvm/layouts.js.map +1 -1
  98. package/dist/backend/llvm/lazy-captures.d.ts +16 -0
  99. package/dist/backend/llvm/lazy-captures.js +96 -0
  100. package/dist/backend/llvm/lazy-captures.js.map +1 -0
  101. package/dist/backend/llvm/lazy-captures.test.d.ts +1 -0
  102. package/dist/backend/llvm/lazy-captures.test.js +78 -0
  103. package/dist/backend/llvm/lazy-captures.test.js.map +1 -0
  104. package/dist/backend/llvm/lib-abi.js +7 -0
  105. package/dist/backend/llvm/lib-abi.js.map +1 -1
  106. package/dist/backend/llvm/lib-dispatch.js +7 -22
  107. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  108. package/dist/backend/llvm/lib-filesystem.js +3 -4
  109. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  110. package/dist/backend/llvm/lib-shared.js +15 -0
  111. package/dist/backend/llvm/lib-shared.js.map +1 -1
  112. package/dist/backend/llvm/local-array-reads.d.ts +13 -3
  113. package/dist/backend/llvm/local-array-reads.js +159 -77
  114. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  115. package/dist/backend/llvm/local-array-reads.test.js +105 -4
  116. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  117. package/dist/backend/llvm/local-union-storage.d.ts +5 -1
  118. package/dist/backend/llvm/local-union-storage.js +48 -6
  119. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  120. package/dist/backend/llvm/local-union-storage.test.js +91 -4
  121. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  122. package/dist/backend/llvm/loop-array-borrows.d.ts +11 -0
  123. package/dist/backend/llvm/loop-array-borrows.js +70 -0
  124. package/dist/backend/llvm/loop-array-borrows.js.map +1 -0
  125. package/dist/backend/llvm/loop-array-borrows.test.d.ts +1 -0
  126. package/dist/backend/llvm/loop-array-borrows.test.js +145 -0
  127. package/dist/backend/llvm/loop-array-borrows.test.js.map +1 -0
  128. package/dist/backend/llvm/map-read-lifetimes.d.ts +5 -0
  129. package/dist/backend/llvm/map-read-lifetimes.js +20 -5
  130. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  131. package/dist/backend/llvm/map-read-lifetimes.test.js +1 -1
  132. package/dist/backend/llvm/nullable-fields.d.ts +28 -0
  133. package/dist/backend/llvm/nullable-fields.js +45 -0
  134. package/dist/backend/llvm/nullable-fields.js.map +1 -0
  135. package/dist/backend/llvm/nullable-fields.test.d.ts +1 -0
  136. package/dist/backend/llvm/nullable-fields.test.js +48 -0
  137. package/dist/backend/llvm/nullable-fields.test.js.map +1 -0
  138. package/dist/backend/llvm/reference-effects.d.ts +2 -1
  139. package/dist/backend/llvm/reference-effects.js +7 -0
  140. package/dist/backend/llvm/reference-effects.js.map +1 -1
  141. package/dist/backend/llvm/serialized-ir-emission.test.d.ts +1 -0
  142. package/dist/backend/llvm/serialized-ir-emission.test.js +52 -0
  143. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -0
  144. package/dist/backend/llvm/shapes.d.ts +73 -3
  145. package/dist/backend/llvm/shapes.js +281 -34
  146. package/dist/backend/llvm/shapes.js.map +1 -1
  147. package/dist/backend/llvm/shapes.test.js +114 -5
  148. package/dist/backend/llvm/shapes.test.js.map +1 -1
  149. package/dist/backend/llvm/split-loops.d.ts +48 -0
  150. package/dist/backend/llvm/split-loops.js +183 -0
  151. package/dist/backend/llvm/split-loops.js.map +1 -0
  152. package/dist/backend/llvm/split.js +0 -7
  153. package/dist/backend/llvm/split.js.map +1 -1
  154. package/dist/backend/llvm/split.test.js +66 -2
  155. package/dist/backend/llvm/split.test.js.map +1 -1
  156. package/dist/backend/llvm/stack-callbacks.d.ts +14 -0
  157. package/dist/backend/llvm/stack-callbacks.js +72 -0
  158. package/dist/backend/llvm/stack-callbacks.js.map +1 -0
  159. package/dist/backend/llvm/stack-captures.d.ts +27 -0
  160. package/dist/backend/llvm/stack-captures.js +152 -0
  161. package/dist/backend/llvm/stack-captures.js.map +1 -0
  162. package/dist/backend/llvm/stack-unions.test.js +38 -1
  163. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  164. package/dist/backend/llvm/string-construction.test.js +1 -1
  165. package/dist/backend/llvm/string-key-hash.d.ts +8 -0
  166. package/dist/backend/llvm/string-key-hash.js +59 -0
  167. package/dist/backend/llvm/string-key-hash.js.map +1 -0
  168. package/dist/backend/llvm/string-key-hash.test.d.ts +1 -0
  169. package/dist/backend/llvm/string-key-hash.test.js +34 -0
  170. package/dist/backend/llvm/string-key-hash.test.js.map +1 -0
  171. package/dist/backend/llvm/string-lifetimes.test.js +48 -7
  172. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  173. package/dist/backend/llvm/string-slices.d.ts +20 -0
  174. package/dist/backend/llvm/string-slices.js +87 -0
  175. package/dist/backend/llvm/string-slices.js.map +1 -0
  176. package/dist/backend/llvm/string-slices.test.d.ts +1 -0
  177. package/dist/backend/llvm/string-slices.test.js +98 -0
  178. package/dist/backend/llvm/string-slices.test.js.map +1 -0
  179. package/dist/backend/llvm/switch-dispatch.js +1 -1
  180. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  181. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  182. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
  183. package/dist/backend/llvm/walkers.d.ts +4 -14
  184. package/dist/backend/llvm/walkers.js +53 -311
  185. package/dist/backend/llvm/walkers.js.map +1 -1
  186. package/dist/backend/may-throw.js +4 -1
  187. package/dist/backend/may-throw.js.map +1 -1
  188. package/dist/backend/may-throw.test.js +1 -1
  189. package/dist/backend/native/cache-warm.d.ts +2 -1
  190. package/dist/backend/native/cache-warm.js.map +1 -1
  191. package/dist/backend/native/contracts.d.ts +5 -2
  192. package/dist/backend/native/contracts.js.map +1 -1
  193. package/dist/backend/native/executable.js +12 -4
  194. package/dist/backend/native/executable.js.map +1 -1
  195. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  196. package/dist/backend/native/runtime-inputs.js +3 -0
  197. package/dist/backend/native/runtime-inputs.js.map +1 -1
  198. package/dist/backend/native-codegen-core.d.ts +7 -0
  199. package/dist/backend/native-codegen-core.js +21 -0
  200. package/dist/backend/native-codegen-core.js.map +1 -1
  201. package/dist/backend/native-codegen.d.ts +9 -0
  202. package/dist/backend/native-codegen.js +38 -18
  203. package/dist/backend/native-codegen.js.map +1 -1
  204. package/dist/backend/native-codegen.test.js +70 -2
  205. package/dist/backend/native-codegen.test.js.map +1 -1
  206. package/dist/backend/native-link-info-core.d.ts +4 -2
  207. package/dist/backend/native-link-info-core.js.map +1 -1
  208. package/dist/backend/native-link-info.d.ts +2 -1
  209. package/dist/backend/native-link-info.js.map +1 -1
  210. package/dist/backend/native-link-info.test.js +2 -2
  211. package/dist/backend/native-link-info.test.js.map +1 -1
  212. package/dist/backend/native-tools.d.ts +6 -2
  213. package/dist/backend/native-tools.js +6 -5
  214. package/dist/backend/native-tools.js.map +1 -1
  215. package/dist/backend/optimization.d.ts +25 -0
  216. package/dist/backend/optimization.js +21 -0
  217. package/dist/backend/optimization.js.map +1 -0
  218. package/dist/backend/optimization.test.d.ts +1 -0
  219. package/dist/backend/optimization.test.js +24 -0
  220. package/dist/backend/optimization.test.js.map +1 -0
  221. package/dist/backend/runtime-abi.d.ts +2 -2
  222. package/dist/backend/runtime-abi.js +2 -2
  223. package/dist/backend/runtime-pack-core.d.ts +16 -4
  224. package/dist/backend/runtime-pack-core.js +31 -13
  225. package/dist/backend/runtime-pack-core.js.map +1 -1
  226. package/dist/backend/runtime-pack-native.d.ts +7 -3
  227. package/dist/backend/runtime-pack-native.js +0 -3
  228. package/dist/backend/runtime-pack-native.js.map +1 -1
  229. package/dist/backend/runtime-pack-targets.test.js +41 -4
  230. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  231. package/dist/backend/runtime-pack.d.ts +20 -2
  232. package/dist/backend/runtime-pack.js +23 -0
  233. package/dist/backend/runtime-pack.js.map +1 -1
  234. package/dist/backend/runtime-pack.test.js +125 -2
  235. package/dist/backend/runtime-pack.test.js.map +1 -1
  236. package/dist/backend/target-diagnostics.test.js +1 -1
  237. package/dist/backend/targets.d.ts +2 -1
  238. package/dist/backend/targets.js +1 -1
  239. package/dist/backend/targets.js.map +1 -1
  240. package/dist/cli/command.js +5 -4
  241. package/dist/cli/command.js.map +1 -1
  242. package/dist/cli/host.d.ts +2 -1
  243. package/dist/cli/usage.d.ts +1 -1
  244. package/dist/cli/usage.js +5 -2
  245. package/dist/cli/usage.js.map +1 -1
  246. package/dist/compile-types.d.ts +5 -2
  247. package/dist/diagnostics/diagnostic.js +10 -8
  248. package/dist/diagnostics/diagnostic.js.map +1 -1
  249. package/dist/executable/executable-cache.d.ts +3 -2
  250. package/dist/executable/executable-cache.js +8 -4
  251. package/dist/executable/executable-cache.js.map +1 -1
  252. package/dist/executable/executable-cache.test.js +35 -0
  253. package/dist/executable/executable-cache.test.js.map +1 -1
  254. package/dist/frontend/fork-target.d.ts +5 -0
  255. package/dist/frontend/fork-target.js +40 -8
  256. package/dist/frontend/fork-target.js.map +1 -1
  257. package/dist/frontend/fork-target.test.d.ts +1 -0
  258. package/dist/frontend/fork-target.test.js +59 -0
  259. package/dist/frontend/fork-target.test.js.map +1 -0
  260. package/dist/frontend/lowering/abstract-equality.js +5 -49
  261. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  262. package/dist/frontend/lowering/array-values.d.ts +23 -0
  263. package/dist/frontend/lowering/array-values.js +129 -0
  264. package/dist/frontend/lowering/array-values.js.map +1 -1
  265. package/dist/frontend/lowering/binding-analysis.js +2 -2
  266. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  267. package/dist/frontend/lowering/builtins/atomics.d.ts +2 -11
  268. package/dist/frontend/lowering/builtins/atomics.js +64 -28
  269. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  270. package/dist/frontend/lowering/builtins/errors.js +17 -2
  271. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  272. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +3 -0
  273. package/dist/frontend/lowering/builtins/filesystem-calls.js +51 -4
  274. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  275. package/dist/frontend/lowering/builtins/module-calls.js +6 -1
  276. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  277. package/dist/frontend/lowering/builtins/process.d.ts +6 -17
  278. package/dist/frontend/lowering/builtins/process.js +56 -29
  279. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  280. package/dist/frontend/lowering/builtins/workers.d.ts +5 -0
  281. package/dist/frontend/lowering/builtins/workers.js +65 -0
  282. package/dist/frontend/lowering/builtins/workers.js.map +1 -0
  283. package/dist/frontend/lowering/caught-value-dispatch.d.ts +11 -0
  284. package/dist/frontend/lowering/caught-value-dispatch.js +87 -0
  285. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -0
  286. package/dist/frontend/lowering/class-assertions.d.ts +11 -0
  287. package/dist/frontend/lowering/class-assertions.js +104 -0
  288. package/dist/frontend/lowering/class-assertions.js.map +1 -0
  289. package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
  290. package/dist/frontend/lowering/class-callbacks.js +18 -5
  291. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  292. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +1 -0
  293. package/dist/frontend/lowering/class-dynamic-dispatch.js +4 -1
  294. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  295. package/dist/frontend/lowering/class-method-mutations.d.ts +5 -0
  296. package/dist/frontend/lowering/class-method-mutations.js +472 -0
  297. package/dist/frontend/lowering/class-method-mutations.js.map +1 -0
  298. package/dist/frontend/lowering/class-method-values.js +25 -5
  299. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  300. package/dist/frontend/lowering/class-protocols.d.ts +17 -0
  301. package/dist/frontend/lowering/class-protocols.js +126 -0
  302. package/dist/frontend/lowering/class-protocols.js.map +1 -0
  303. package/dist/frontend/lowering/class-prototypes.js +8 -2
  304. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  305. package/dist/frontend/lowering/class-unions.d.ts +16 -0
  306. package/dist/frontend/lowering/class-unions.js +127 -0
  307. package/dist/frontend/lowering/class-unions.js.map +1 -0
  308. package/dist/frontend/lowering/coercions/builders.js +8 -1
  309. package/dist/frontend/lowering/coercions/builders.js.map +1 -1
  310. package/dist/frontend/lowering/coercions/function-adapters.js +2 -0
  311. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  312. package/dist/frontend/lowering/coercions/identity.d.ts +7 -0
  313. package/dist/frontend/lowering/coercions/identity.js +26 -0
  314. package/dist/frontend/lowering/coercions/identity.js.map +1 -0
  315. package/dist/frontend/lowering/coercions/structural.js +9 -6
  316. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  317. package/dist/frontend/lowering/collection-narrowing.d.ts +6 -0
  318. package/dist/frontend/lowering/collection-narrowing.js +31 -0
  319. package/dist/frontend/lowering/collection-narrowing.js.map +1 -0
  320. package/dist/frontend/lowering/containers/array-callback-call.d.ts +7 -0
  321. package/dist/frontend/lowering/containers/array-callback-call.js +52 -0
  322. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -0
  323. package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -12
  324. package/dist/frontend/lowering/containers/array-callbacks.js +415 -136
  325. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  326. package/dist/frontend/lowering/containers/array-concat.d.ts +7 -0
  327. package/dist/frontend/lowering/containers/array-concat.js +130 -0
  328. package/dist/frontend/lowering/containers/array-concat.js.map +1 -0
  329. package/dist/frontend/lowering/containers/array-construction.d.ts +2 -0
  330. package/dist/frontend/lowering/containers/array-construction.js +95 -3
  331. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  332. package/dist/frontend/lowering/containers/array-methods.d.ts +1 -11
  333. package/dist/frontend/lowering/containers/array-methods.js +43 -132
  334. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  335. package/dist/frontend/lowering/containers/bytes.js +12 -34
  336. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  337. package/dist/frontend/lowering/containers/collection-methods.js +10 -1
  338. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  339. package/dist/frontend/lowering/containers/indexed-objects.js +56 -70
  340. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  341. package/dist/frontend/lowering/containers/string-and-regexp.js +22 -3
  342. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  343. package/dist/frontend/lowering/cycle-initialization.d.ts +41 -0
  344. package/dist/frontend/lowering/cycle-initialization.js +277 -0
  345. package/dist/frontend/lowering/cycle-initialization.js.map +1 -0
  346. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -0
  347. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  348. package/dist/frontend/lowering/expressions/object-literals.js +140 -38
  349. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  350. package/dist/frontend/lowering/expressions/union-field-write.d.ts +4 -4
  351. package/dist/frontend/lowering/expressions/union-field-write.js +54 -44
  352. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
  353. package/dist/frontend/lowering/generic-functions.d.ts +2 -5
  354. package/dist/frontend/lowering/generic-functions.js +13 -10
  355. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  356. package/dist/frontend/lowering/instantiation-path.d.ts +8 -0
  357. package/dist/frontend/lowering/instantiation-path.js +10 -0
  358. package/dist/frontend/lowering/instantiation-path.js.map +1 -0
  359. package/dist/frontend/lowering/instantiation-path.test.d.ts +1 -0
  360. package/dist/frontend/lowering/instantiation-path.test.js +23 -0
  361. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -0
  362. package/dist/frontend/lowering/iterator-adapters.d.ts +20 -0
  363. package/dist/frontend/lowering/iterator-adapters.js +605 -0
  364. package/dist/frontend/lowering/iterator-adapters.js.map +1 -0
  365. package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
  366. package/dist/frontend/lowering/lower-array-sort.js +44 -5
  367. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  368. package/dist/frontend/lowering/lower-array-sort.test.d.ts +1 -0
  369. package/dist/frontend/lowering/lower-array-sort.test.js +31 -0
  370. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -0
  371. package/dist/frontend/lowering/lower-assert.js +7 -0
  372. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  373. package/dist/frontend/lowering/lower-builtin-values.js +12 -7
  374. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  375. package/dist/frontend/lowering/lower-calls.d.ts +3 -3
  376. package/dist/frontend/lowering/lower-calls.js +198 -124
  377. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  378. package/dist/frontend/lowering/lower-classes.d.ts +7 -0
  379. package/dist/frontend/lowering/lower-classes.js +166 -96
  380. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  381. package/dist/frontend/lowering/lower-event-emitter.js +1 -1
  382. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  383. package/dist/frontend/lowering/lower-exprs.d.ts +9 -2
  384. package/dist/frontend/lowering/lower-exprs.js +421 -167
  385. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  386. package/dist/frontend/lowering/lower-functions.d.ts +1 -1
  387. package/dist/frontend/lowering/lower-functions.js +33 -20
  388. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  389. package/dist/frontend/lowering/lower-inspect.js +26 -2
  390. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  391. package/dist/frontend/lowering/lower-island.js +1 -1
  392. package/dist/frontend/lowering/lower-island.js.map +1 -1
  393. package/dist/frontend/lowering/lower-modules.d.ts +1 -0
  394. package/dist/frontend/lowering/lower-modules.js +54 -11
  395. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  396. package/dist/frontend/lowering/lower-stmts.js +59 -69
  397. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  398. package/dist/frontend/lowering/lower-stream.js +1 -1
  399. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  400. package/dist/frontend/lowering/lowerer.d.ts +50 -1
  401. package/dist/frontend/lowering/lowerer.js +333 -26
  402. package/dist/frontend/lowering/lowerer.js.map +1 -1
  403. package/dist/frontend/lowering/native-ffi.js +3 -1
  404. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  405. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +15 -0
  406. package/dist/frontend/lowering/runtime-optional-provenance.js +40 -0
  407. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -0
  408. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  409. package/dist/frontend/lowering/split-consumers.d.ts +7 -0
  410. package/dist/frontend/lowering/split-consumers.js +64 -0
  411. package/dist/frontend/lowering/split-consumers.js.map +1 -0
  412. package/dist/frontend/lowering/strict-equality.d.ts +9 -0
  413. package/dist/frontend/lowering/strict-equality.js +116 -0
  414. package/dist/frontend/lowering/strict-equality.js.map +1 -0
  415. package/dist/frontend/lowering/surfaces.d.ts +3 -4
  416. package/dist/frontend/lowering/surfaces.js +38 -7
  417. package/dist/frontend/lowering/surfaces.js.map +1 -1
  418. package/dist/frontend/lowering/union-comparison.d.ts +5 -0
  419. package/dist/frontend/lowering/union-comparison.js +47 -0
  420. package/dist/frontend/lowering/union-comparison.js.map +1 -0
  421. package/dist/frontend/module-source-candidates.d.ts +10 -0
  422. package/dist/frontend/module-source-candidates.js +40 -0
  423. package/dist/frontend/module-source-candidates.js.map +1 -0
  424. package/dist/frontend/module-source-candidates.test.d.ts +1 -0
  425. package/dist/frontend/module-source-candidates.test.js +53 -0
  426. package/dist/frontend/module-source-candidates.test.js.map +1 -0
  427. package/dist/frontend/pipeline.js +2 -2
  428. package/dist/frontend/pipeline.js.map +1 -1
  429. package/dist/frontend/program-analysis.d.ts +2 -0
  430. package/dist/frontend/program-analysis.js +2 -0
  431. package/dist/frontend/program-analysis.js.map +1 -1
  432. package/dist/frontend/program.d.ts +38 -2
  433. package/dist/frontend/program.js +457 -88
  434. package/dist/frontend/program.js.map +1 -1
  435. package/dist/frontend/program.test.js +59 -6
  436. package/dist/frontend/program.test.js.map +1 -1
  437. package/dist/frontend/ts7/ast-node.js +6 -8
  438. package/dist/frontend/ts7/ast-node.js.map +1 -1
  439. package/dist/frontend/ts7/ast-node.test.js +42 -1
  440. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  441. package/dist/frontend/ts7/ast-wire.d.ts +4 -0
  442. package/dist/frontend/ts7/ast-wire.js +28 -0
  443. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  444. package/dist/frontend/ts7/ast.d.ts +2 -1
  445. package/dist/frontend/ts7/ast.js +8 -4
  446. package/dist/frontend/ts7/ast.js.map +1 -1
  447. package/dist/frontend/ts7/checker.d.ts +8 -2
  448. package/dist/frontend/ts7/checker.js +41 -5
  449. package/dist/frontend/ts7/checker.js.map +1 -1
  450. package/dist/frontend/ts7/checker.test.js +42 -0
  451. package/dist/frontend/ts7/checker.test.js.map +1 -1
  452. package/dist/frontend/ts7/program-host.d.ts +7 -0
  453. package/dist/frontend/ts7/program-host.js +26 -2
  454. package/dist/frontend/ts7/program-host.js.map +1 -1
  455. package/dist/frontend/ts7/program-host.test.js +29 -0
  456. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  457. package/dist/frontend/type-mapper.d.ts +4 -1
  458. package/dist/frontend/type-mapper.js +133 -16
  459. package/dist/frontend/type-mapper.js.map +1 -1
  460. package/dist/frontend/type-mapper.test.js +15 -3
  461. package/dist/frontend/type-mapper.test.js.map +1 -1
  462. package/dist/frontend/worker-target.d.ts +6 -0
  463. package/dist/frontend/worker-target.js +108 -0
  464. package/dist/frontend/worker-target.js.map +1 -0
  465. package/dist/frontend/worker-target.test.d.ts +1 -0
  466. package/dist/frontend/worker-target.test.js +71 -0
  467. package/dist/frontend/worker-target.test.js.map +1 -0
  468. package/dist/index.js +47 -14
  469. package/dist/index.js.map +1 -1
  470. package/dist/ir/analysis.d.ts +3 -1
  471. package/dist/ir/analysis.js +4 -0
  472. package/dist/ir/analysis.js.map +1 -1
  473. package/dist/ir/builtin-effects.js +12 -0
  474. package/dist/ir/builtin-effects.js.map +1 -1
  475. package/dist/ir/builtin-signatures.d.ts +1 -1
  476. package/dist/ir/builtin-signatures.js +15 -15
  477. package/dist/ir/builtin-signatures.js.map +1 -1
  478. package/dist/ir/constant-tables.test.js +1 -1
  479. package/dist/ir/initializer-bindings.test.js +1 -1
  480. package/dist/ir/ir.d.ts +85 -23
  481. package/dist/ir/ir.js +20 -6
  482. package/dist/ir/ir.js.map +1 -1
  483. package/dist/ir/numeric-call-specialization.d.ts +8 -0
  484. package/dist/ir/numeric-call-specialization.js +198 -0
  485. package/dist/ir/numeric-call-specialization.js.map +1 -0
  486. package/dist/ir/runtime-features.js +4 -3
  487. package/dist/ir/runtime-features.js.map +1 -1
  488. package/dist/ir/scalar-records.test.js +1 -1
  489. package/dist/ir/serialize.d.ts +1 -1
  490. package/dist/ir/serialize.js +3 -3
  491. package/dist/ir/serialize.js.map +1 -1
  492. package/dist/ir/traverse.js +8 -0
  493. package/dist/ir/traverse.js.map +1 -1
  494. package/dist/ir/validate.js +207 -43
  495. package/dist/ir/validate.js.map +1 -1
  496. package/dist/ir/validate.test.js +356 -8
  497. package/dist/ir/validate.test.js.map +1 -1
  498. package/dist/library/fence-eval.test.js +1 -1
  499. package/dist/library/int-infer.test.js +4 -4
  500. package/dist/library/ir-policy.js +2 -0
  501. package/dist/library/ir-policy.js.map +1 -1
  502. package/dist/library/library-cache.test.js +5 -5
  503. package/dist/library/library-profile.d.ts +2 -1
  504. package/dist/library/library-profile.js +4 -3
  505. package/dist/library/library-profile.js.map +1 -1
  506. package/dist/native/compiler.js +24 -11
  507. package/dist/native/compiler.js.map +1 -1
  508. package/dist/native/compiler.test.js +7 -3
  509. package/dist/native/compiler.test.js.map +1 -1
  510. package/dist/native/library.d.ts +2 -1
  511. package/dist/native/library.js.map +1 -1
  512. package/dist/native/prepare.js +29 -3
  513. package/dist/native/prepare.js.map +1 -1
  514. package/dist/native/sanitizer.d.ts +3 -2
  515. package/dist/native/sanitizer.js +3 -13
  516. package/dist/native/sanitizer.js.map +1 -1
  517. package/dist/native/sanitizer.test.js +1 -0
  518. package/dist/native/sanitizer.test.js.map +1 -1
  519. package/package.json +20 -20
  520. package/surface-manifest.json +37 -3
@@ -250,24 +250,8 @@ declare var process: {
250
250
  * preserved. The boolean is Node's backpressure signal — these synchronous
251
251
  * writes always return true. Static BufferEncoding arguments and the
252
252
  * completion callback overloads match Node's WritableStream surface. */
253
- stdout: {
254
- write(data: string | Uint8Array, callback?: (error?: Error | null) => void): boolean;
255
- write(
256
- data: string | Uint8Array,
257
- encoding: BufferEncoding,
258
- callback?: (error?: Error | null) => void,
259
- ): boolean;
260
- readonly isTTY: boolean;
261
- };
262
- stderr: {
263
- write(data: string | Uint8Array, callback?: (error?: Error | null) => void): boolean;
264
- write(
265
- data: string | Uint8Array,
266
- encoding: BufferEncoding,
267
- callback?: (error?: Error | null) => void,
268
- ): boolean;
269
- readonly isTTY: boolean;
270
- };
253
+ stdout: import("tty").WriteStream;
254
+ stderr: import("tty").WriteStream;
271
255
  /* The stdin stream, the piped-input slice: the TTY probe, the
272
256
  * data/end/error events (on and once — a 'data' listener keeps the
273
257
  * event loop alive until EOF, like Node's flowing stdin), destroy()
@@ -601,7 +585,7 @@ interface BufferConstructor {
601
585
  from(data: string, encoding?: BufferEncoding): Buffer;
602
586
  /* The ArrayBuffer form is the VIEW construction: x.buffer with an
603
587
  * optional byte offset/length shares x's storage (the subarray rule). */
604
- from(data: ArrayBuffer, byteOffset?: number, length?: number): Buffer;
588
+ from(data: ArrayBuffer | SharedArrayBuffer, byteOffset?: number, length?: number): Buffer;
605
589
  from(data: Uint8Array | readonly number[]): Buffer;
606
590
  alloc(size: number, fill?: string | number | Uint8Array, encoding?: BufferEncoding): Buffer;
607
591
  compare(buf1: Uint8Array, buf2: Uint8Array): number;
@@ -1118,24 +1102,13 @@ interface ImportMeta {
1118
1102
  * directory, open 'x'"). `rmSync` removes FILES only (like Node without
1119
1103
  * `recursive`); empty directories go through `rmdirSync`. */
1120
1104
  declare module "node:fs" {
1121
- /* The lowered forms first. The string-encoding overload's result is
1122
- * CONDITIONAL so a runtime encoding value (an untyped JS parameter —
1123
- * test/common fixtures.js's readFixtureKey(name, enc)) infers `any`
1124
- * (the lowering dispatches at runtime: undefined/null read Buffers,
1125
- * utf8 a string, anything else throws) while a literal utf8 keeps the
1126
- * string result TypeScript callers chain on. The encoding-less
1127
- * overload is the Buffer read. */
1128
- export function readFileSync<T extends string>(
1129
- path: string,
1130
- encoding: T,
1131
- ): T extends "utf8" ? string : T extends "utf-8" ? string : any;
1132
- export function readFileSync(path: string): Buffer;
1133
- /* The file-descriptor forms — a read(2) loop to EOF from the current
1134
- * position; the stdin pattern is readFileSync(0, "utf8"). */
1135
- export function readFileSync(fd: number, encoding: "utf8" | "utf-8"): string;
1136
- export function readFileSync(fd: number): Buffer;
1137
- /* The options-object spelling of the utf8 form. */
1138
- export function readFileSync(path: string, options: { encoding: "utf8" | "utf-8" }): string;
1105
+ export function readFileSync(path: string | number, encoding: BufferEncoding): string;
1106
+ export function readFileSync(
1107
+ path: string | number,
1108
+ options: { encoding: BufferEncoding },
1109
+ ): string;
1110
+ export function readFileSync(path: string | number): Buffer;
1111
+ export function readFileSync(path: string, options: unknown): string | Buffer;
1139
1112
  /* Error-first callbacks select string or Buffer data from their encoding.
1140
1113
  * Unknown options retain that union until the caller validates the value. */
1141
1114
  export function readFile(
@@ -4107,23 +4080,61 @@ declare module "node:dns" {
4107
4080
  export * from "dns";
4108
4081
  }
4109
4082
 
4110
- /* node:worker_threads — the MAIN-THREAD slice only. A compiled binary is
4111
- * always the main thread (no JS-engine thread machinery exists), so
4112
- * isMainThread lowers to `true` and threadId to 0 — Node's main-thread
4113
- * answers exactly. Worker itself is declared surface without a lowering:
4114
- * constructing one fences at the site; the CLASS as a value participates
4115
- * in identity-only flows. */
4083
+ /* node:worker_threads — native workers use statically compiled entry points.
4084
+ * Lowering and runtime diagnostics define the supported options and methods. */
4116
4085
  declare module "worker_threads" {
4117
4086
  export const isMainThread: boolean;
4087
+ export const isInternalThread: boolean;
4118
4088
  export const threadId: number;
4089
+ export interface WorkerOptions {
4090
+ workerData?: unknown;
4091
+ transferList?: readonly unknown[];
4092
+ argv?: readonly unknown[];
4093
+ name?: string;
4094
+ [option: string]: unknown;
4095
+ }
4119
4096
  export class Worker {
4120
- constructor(filename: string | URL, options?: unknown);
4121
- on(event: string, listener: (...args: unknown[]) => void): void;
4122
- postMessage(value: unknown): void;
4097
+ constructor(filename: string | URL, options?: WorkerOptions);
4098
+ readonly threadId: number;
4099
+ on(event: "online", listener: () => void): this;
4100
+ on(event: "message", listener: (value: any) => void): this;
4101
+ on(event: "error", listener: (error: Error) => void): this;
4102
+ on(event: "exit", listener: (code: number) => void): this;
4103
+ on(event: string, listener: (...args: any[]) => void): this;
4104
+ once(event: string, listener: (...args: any[]) => void): this;
4105
+ off(event: string, listener: (...args: any[]) => void): this;
4106
+ addListener(event: string, listener: (...args: any[]) => void): this;
4107
+ removeListener(event: string, listener: (...args: any[]) => void): this;
4108
+ prependListener(event: string, listener: (...args: any[]) => void): this;
4109
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
4110
+ postMessage(value: unknown, transferList?: readonly unknown[]): void;
4111
+ ref(): void;
4112
+ unref(): void;
4123
4113
  terminate(): Promise<number>;
4114
+ removeAllListeners(event?: string): this;
4115
+ listenerCount(event: string, listener?: (...args: any[]) => void): number;
4116
+ }
4117
+ export class MessagePort {
4118
+ on(event: "message", listener: (value: any) => void): this;
4119
+ on(event: "close", listener: () => void): this;
4120
+ on(event: string, listener: (...args: any[]) => void): this;
4121
+ once(event: string, listener: (...args: any[]) => void): this;
4122
+ off(event: string, listener: (...args: any[]) => void): this;
4123
+ addListener(event: string, listener: (...args: any[]) => void): this;
4124
+ removeListener(event: string, listener: (...args: any[]) => void): this;
4125
+ prependListener(event: string, listener: (...args: any[]) => void): this;
4126
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
4127
+ postMessage(value: unknown, transferList?: readonly unknown[]): void;
4128
+ start(): void;
4129
+ close(callback?: () => void): void;
4130
+ ref(): void;
4131
+ unref(): void;
4132
+ hasRef(): boolean;
4133
+ removeAllListeners(event?: string): this;
4134
+ listenerCount(event: string, listener?: (...args: any[]) => void): number;
4124
4135
  }
4125
- export const parentPort: unknown;
4126
- export const workerData: unknown;
4136
+ export const parentPort: MessagePort | null;
4137
+ export const workerData: any;
4127
4138
  }
4128
4139
  declare module "node:worker_threads" {
4129
4140
  export * from "worker_threads";
@@ -4176,6 +4187,9 @@ declare module "tty" {
4176
4187
  callback?: (error?: Error | null) => void,
4177
4188
  ): boolean;
4178
4189
  readonly isTTY: boolean;
4190
+ readonly columns: number;
4191
+ readonly rows: number;
4192
+ getWindowSize(): [number, number];
4179
4193
  }
4180
4194
  export function isatty(fd: number): boolean;
4181
4195
  }
@@ -1,14 +1,26 @@
1
1
  import type { IrModule } from "../ir/ir.js";
2
2
  /** Cycle capability for native code generation.
3
- * Greatest fixpoint over shapes and unions: start optimistic (everything
4
- * cycle-capable), repeatedly drop shapes with no cycle-capable field and
5
- * unions with no cycle-capable arm until stable. Closures, checked values and promises
6
- * are always cycle-capable; strings never are; arrays/Sets inherit their
7
- * element type's capability and Maps inherit either key or value capability.
8
- * A HIERARCHY is one unit of capability
9
- * (a base-typed slot can hold any subclass and retain touches the cycle
10
- * header, so header presence must be uniform across an extends tree): a
11
- * unit is cycle-capable iff ANY member is — every backend uses the same grouping. */
3
+ * Nodes are shape units and unions; edges are the references their fields
4
+ * and arms can hold (collections flattened into their element, key and
5
+ * value types). Closures, checked values, class values, caught values and
6
+ * promises are INTRINSIC: they can reach anything, so a unit holding one is
7
+ * on a potential cycle. Strings never are.
8
+ *
9
+ * An edge is IMMUTABLE when it can only be stored while its owner is still
10
+ * under construction (cycle-mutability.ts derives this from the IR): such an
11
+ * object can only point to objects that existed before it, so a heap cycle
12
+ * made only of immutable edges is impossible. Union arms are immutable (the
13
+ * boxes are), and any edge through an array, Map, or Set is mutable because
14
+ * the container's contents are. A strongly connected component is
15
+ * cycle-capable iff it contains an intrinsic unit or a mutable internal
16
+ * edge; a unit or union is traced iff it can reach a cycle-capable
17
+ * component. With every edge mutable this is exactly the earlier greatest
18
+ * fixpoint: traced iff the unit reaches a cycle or an intrinsic reference.
19
+ *
20
+ * A HIERARCHY is one unit of capability (a base-typed slot can hold any
21
+ * subclass and retain touches the cycle header, so header presence must be
22
+ * uniform across an extends tree): a unit is cycle-capable iff ANY member
23
+ * is — every backend uses the same grouping. */
12
24
  export declare function computeTraced(mod: IrModule): {
13
25
  shapes: Set<string>;
14
26
  unions: Set<string>;
@@ -1,36 +1,29 @@
1
1
  import { funcOf, mapOf, RUNTIME_EMITTER_CLASS, STRING, VOID } from "../ir/ir.js";
2
+ import { computeCycleMutability, fieldKey } from "./cycle-mutability.js";
2
3
  /** Cycle capability for native code generation.
3
- * Greatest fixpoint over shapes and unions: start optimistic (everything
4
- * cycle-capable), repeatedly drop shapes with no cycle-capable field and
5
- * unions with no cycle-capable arm until stable. Closures, checked values and promises
6
- * are always cycle-capable; strings never are; arrays/Sets inherit their
7
- * element type's capability and Maps inherit either key or value capability.
8
- * A HIERARCHY is one unit of capability
9
- * (a base-typed slot can hold any subclass and retain touches the cycle
10
- * header, so header presence must be uniform across an extends tree): a
11
- * unit is cycle-capable iff ANY member is — every backend uses the same grouping. */
4
+ * Nodes are shape units and unions; edges are the references their fields
5
+ * and arms can hold (collections flattened into their element, key and
6
+ * value types). Closures, checked values, class values, caught values and
7
+ * promises are INTRINSIC: they can reach anything, so a unit holding one is
8
+ * on a potential cycle. Strings never are.
9
+ *
10
+ * An edge is IMMUTABLE when it can only be stored while its owner is still
11
+ * under construction (cycle-mutability.ts derives this from the IR): such an
12
+ * object can only point to objects that existed before it, so a heap cycle
13
+ * made only of immutable edges is impossible. Union arms are immutable (the
14
+ * boxes are), and any edge through an array, Map, or Set is mutable because
15
+ * the container's contents are. A strongly connected component is
16
+ * cycle-capable iff it contains an intrinsic unit or a mutable internal
17
+ * edge; a unit or union is traced iff it can reach a cycle-capable
18
+ * component. With every edge mutable this is exactly the earlier greatest
19
+ * fixpoint: traced iff the unit reaches a cycle or an intrinsic reference.
20
+ *
21
+ * A HIERARCHY is one unit of capability (a base-typed slot can hold any
22
+ * subclass and retain touches the cycle header, so header presence must be
23
+ * uniform across an extends tree): a unit is cycle-capable iff ANY member
24
+ * is — every backend uses the same grouping. */
12
25
  export function computeTraced(mod) {
13
26
  const classes = mod.classes ?? [];
14
- const shapeDefs = [
15
- ...classes.map((c) => ({
16
- key: `object:${c.name}`,
17
- fields: [
18
- ...c.fields,
19
- ...(c.name === RUNTIME_EMITTER_CLASS
20
- ? [{ name: "<listeners>", type: funcOf([], VOID) }]
21
- : []),
22
- ...(c.localCaptures !== undefined
23
- ? [{ name: "<class>", type: { kind: "classval", className: c.name } }]
24
- : []),
25
- ],
26
- })),
27
- ...(mod.records ?? []).map((r) => ({
28
- key: `record:${r.id}`,
29
- fields: r.indexValue
30
- ? [...r.fields, { name: "<overflow>", type: mapOf(STRING, r.indexValue) }]
31
- : r.fields,
32
- })),
33
- ];
34
27
  // Hierarchy units: root lookup over the base links (classes with a base
35
28
  // or a subclass — and the runtime emitter class — form units under their
36
29
  // root; standalone classes and records stay singleton units).
@@ -51,28 +44,52 @@ export function computeTraced(mod) {
51
44
  roots.set(member, cur);
52
45
  return cur;
53
46
  };
54
- const capability = () => ({
47
+ const unitOfClass = (name) => `object:${rootOf(name)}`;
48
+ const mutability = computeCycleMutability(mod, unitOfClass);
49
+ const shapeDefs = [
50
+ ...classes.map((c) => ({
51
+ key: `object:${c.name}`,
52
+ unit: unitOfClass(c.name),
53
+ fields: [
54
+ ...c.fields,
55
+ ...(c.name === RUNTIME_EMITTER_CLASS
56
+ ? [{ name: "<listeners>", type: funcOf([], VOID) }]
57
+ : []),
58
+ ...(c.localCaptures !== undefined
59
+ ? [{ name: "<class>", type: { kind: "classval", className: c.name } }]
60
+ : []),
61
+ ],
62
+ })),
63
+ ...(mod.records ?? []).map((r) => ({
64
+ key: `record:${r.id}`,
65
+ unit: `record:${r.id}`,
66
+ fields: r.indexValue
67
+ ? [...r.fields, { name: "<overflow>", type: mapOf(STRING, r.indexValue) }]
68
+ : r.fields,
69
+ })),
70
+ ];
71
+ const node = () => ({
55
72
  intrinsic: false,
56
- dependencies: new Set(),
57
- dependents: [],
58
- remaining: 0,
73
+ edges: new Map(),
74
+ index: -1,
75
+ low: 0,
76
+ onStack: false,
77
+ component: -1,
78
+ reverse: [],
79
+ traced: false,
59
80
  });
60
81
  const units = new Map();
61
82
  const shapes = new Map();
62
- const unions = new Map((mod.unions ?? []).map((u) => [u.id, capability()]));
83
+ const unions = new Map((mod.unions ?? []).map((u) => [u.id, node()]));
63
84
  for (const s of shapeDefs) {
64
- const key = s.key.startsWith("object:")
65
- ? `object:${rootOf(s.key.slice("object:".length))}`
66
- : s.key;
67
- let unit = units.get(key);
85
+ let unit = units.get(s.unit);
68
86
  if (!unit)
69
- units.set(key, (unit = capability()));
87
+ units.set(s.unit, (unit = node()));
70
88
  shapes.set(s.key, unit);
71
89
  }
72
- // Each field/arm is an OR of intrinsic capability and referenced units.
73
- // Flatten collections into these edges; repeated references count once.
74
- const addType = (unit, t) => {
75
- if (unit.intrinsic)
90
+ // Each field/arm is an OR of intrinsic capability and referenced nodes.
91
+ const addType = (from, t, mutable) => {
92
+ if (from.intrinsic)
76
93
  return;
77
94
  switch (t.kind) {
78
95
  case "func":
@@ -80,8 +97,8 @@ export function computeTraced(mod) {
80
97
  case "classval":
81
98
  case "promise":
82
99
  case "caught":
83
- unit.intrinsic = true;
84
- unit.dependencies.clear();
100
+ from.intrinsic = true;
101
+ from.edges.clear();
85
102
  break;
86
103
  case "object":
87
104
  case "record":
@@ -90,44 +107,99 @@ export function computeTraced(mod) {
90
107
  ? unions.get(t.unionId)
91
108
  : shapes.get(t.kind === "object" ? `object:${t.className}` : `record:${t.shapeId}`);
92
109
  if (dependency)
93
- unit.dependencies.add(dependency);
110
+ from.edges.set(dependency, (from.edges.get(dependency) ?? false) || mutable);
94
111
  break;
95
112
  }
96
113
  case "map":
97
- addType(unit, t.key);
98
- addType(unit, t.value);
114
+ addType(from, t.key, true);
115
+ addType(from, t.value, true);
99
116
  break;
100
117
  case "set":
101
118
  case "array":
102
- addType(unit, t.elem);
119
+ addType(from, t.elem, true);
103
120
  break;
104
121
  }
105
122
  };
106
- for (const s of shapeDefs)
123
+ for (const s of shapeDefs) {
124
+ const unitMutable = mutability.all || mutability.units.has(s.unit);
107
125
  for (const field of s.fields)
108
- addType(shapes.get(s.key), field.type);
126
+ addType(shapes.get(s.key), field.type, unitMutable || mutability.fields.has(fieldKey(s.unit, field.name)));
127
+ }
109
128
  for (const u of mod.unions ?? [])
110
129
  for (const arm of u.arms)
111
- addType(unions.get(u.id), arm);
112
- const pending = [];
113
- for (const unit of [...units.values(), ...unions.values()]) {
114
- unit.remaining = unit.dependencies.size;
115
- for (const dependency of unit.dependencies)
116
- dependency.dependents.push(unit);
117
- if (!unit.intrinsic && unit.remaining === 0)
118
- pending.push(unit);
130
+ addType(unions.get(u.id), arm, mutability.all);
131
+ // Tarjan's strongly connected components, iteratively (shape chains can
132
+ // be thousands deep).
133
+ const all = [...units.values(), ...unions.values()];
134
+ const stack = [];
135
+ const componentCapable = [];
136
+ let nextIndex = 0;
137
+ for (const start of all) {
138
+ if (start.index >= 0)
139
+ continue;
140
+ const work = [];
141
+ const enter = (n) => {
142
+ n.index = n.low = nextIndex++;
143
+ n.onStack = true;
144
+ stack.push(n);
145
+ work.push({ n, next: [...n.edges.keys()], i: 0 });
146
+ };
147
+ enter(start);
148
+ while (work.length > 0) {
149
+ const frame = work[work.length - 1];
150
+ if (frame.i < frame.next.length) {
151
+ const m = frame.next[frame.i++];
152
+ if (m.index < 0)
153
+ enter(m);
154
+ else if (m.onStack)
155
+ frame.n.low = Math.min(frame.n.low, m.index);
156
+ continue;
157
+ }
158
+ work.pop();
159
+ const n = frame.n;
160
+ if (work.length > 0) {
161
+ const parent = work[work.length - 1].n;
162
+ parent.low = Math.min(parent.low, n.low);
163
+ }
164
+ if (n.low !== n.index)
165
+ continue;
166
+ const id = componentCapable.length;
167
+ const members = [];
168
+ let member;
169
+ do {
170
+ member = stack.pop();
171
+ member.onStack = false;
172
+ member.component = id;
173
+ members.push(member);
174
+ } while (member !== n);
175
+ let capable = false;
176
+ for (const m of members) {
177
+ if (m.intrinsic)
178
+ capable = true;
179
+ for (const [dependency, mutable] of m.edges)
180
+ if (mutable && dependency.component === id)
181
+ capable = true;
182
+ }
183
+ componentCapable.push(capable);
184
+ }
119
185
  }
120
- // Peel incapable leaves. Units in cycles retain a dependency, and units
121
- // containing intrinsic references never enter the removal queue.
186
+ // Traced: reaches a cycle-capable component (reverse reachability).
187
+ for (const n of all)
188
+ for (const dependency of n.edges.keys())
189
+ dependency.reverse.push(n);
190
+ const pending = all.filter((n) => componentCapable[n.component]);
191
+ for (const n of pending)
192
+ n.traced = true;
122
193
  for (let i = 0; i < pending.length; i++) {
123
- for (const dependent of pending[i].dependents) {
124
- if (--dependent.remaining === 0 && !dependent.intrinsic)
125
- pending.push(dependent);
194
+ for (const dependent of pending[i].reverse) {
195
+ if (dependent.traced)
196
+ continue;
197
+ dependent.traced = true;
198
+ pending.push(dependent);
126
199
  }
127
200
  }
128
- const retained = (unit) => unit.intrinsic || unit.remaining > 0;
129
- const tracedShapes = new Set([...shapes].filter(([, unit]) => retained(unit)).map(([key]) => key));
130
- const tracedUnions = new Set([...unions].filter(([, unit]) => retained(unit)).map(([id]) => id));
201
+ const tracedShapes = new Set([...shapes].filter(([, unit]) => unit.traced).map(([key]) => key));
202
+ const tracedUnions = new Set([...unions].filter(([, n]) => n.traced).map(([id]) => id));
131
203
  return { shapes: tracedShapes, unions: tracedUnions };
132
204
  }
133
205
  //# sourceMappingURL=cycle-analysis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cycle-analysis.js","sourceRoot":"","sources":["../../src/backend/cycle-analysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cycle-analysis.js","sourceRoot":"","sources":["../../src/backend/cycle-analysis.ts"],"names":[],"mappings":"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"}