@scriptc/compiler 0.2.9 → 0.3.0

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 (505) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +2 -36
  2. package/ambient/scriptc-overrides.d.ts +1 -25
  3. package/ambient/scriptc.d.ts +1 -9
  4. package/dist/backend/cycle-analysis.d.ts +56 -0
  5. package/dist/backend/cycle-analysis.js +175 -14
  6. package/dist/backend/cycle-analysis.js.map +1 -1
  7. package/dist/backend/cycle-analysis.test.js +95 -2
  8. package/dist/backend/cycle-analysis.test.js.map +1 -1
  9. package/dist/backend/cycle-mutability.d.ts +3 -7
  10. package/dist/backend/cycle-mutability.js +4 -30
  11. package/dist/backend/cycle-mutability.js.map +1 -1
  12. package/dist/backend/executable-features.d.ts +1 -1
  13. package/dist/backend/executable-features.js +3 -8
  14. package/dist/backend/executable-features.js.map +1 -1
  15. package/dist/backend/immutability.d.ts +57 -0
  16. package/dist/backend/immutability.js +178 -0
  17. package/dist/backend/immutability.js.map +1 -0
  18. package/dist/backend/immutability.test.js +131 -0
  19. package/dist/backend/immutability.test.js.map +1 -0
  20. package/dist/backend/library-pack.js +0 -2
  21. package/dist/backend/library-pack.js.map +1 -1
  22. package/dist/backend/linker.js +1 -1
  23. package/dist/backend/linker.js.map +1 -1
  24. package/dist/backend/llvm/borrowed-inputs.d.ts +9 -2
  25. package/dist/backend/llvm/borrowed-inputs.js +31 -3
  26. package/dist/backend/llvm/borrowed-inputs.js.map +1 -1
  27. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  28. package/dist/backend/llvm/classes.d.ts +28 -0
  29. package/dist/backend/llvm/classes.js +48 -14
  30. package/dist/backend/llvm/classes.js.map +1 -1
  31. package/dist/backend/llvm/classes.test.js +134 -6
  32. package/dist/backend/llvm/classes.test.js.map +1 -1
  33. package/dist/backend/llvm/common.d.ts +13 -0
  34. package/dist/backend/llvm/common.js +13 -0
  35. package/dist/backend/llvm/common.js.map +1 -1
  36. package/dist/backend/llvm/constant-callbacks.d.ts +1 -1
  37. package/dist/backend/llvm/constant-callbacks.js +3 -3
  38. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  39. package/dist/backend/llvm/constant-callbacks.test.js +1 -1
  40. package/dist/backend/llvm/dense-array-access.js +5 -4
  41. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  42. package/dist/backend/llvm/dense-array-access.test.js +10 -2
  43. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  44. package/dist/backend/llvm/dyn.d.ts +2 -1
  45. package/dist/backend/llvm/dyn.js +3 -76
  46. package/dist/backend/llvm/dyn.js.map +1 -1
  47. package/dist/backend/llvm/emitter.d.ts +67 -19
  48. package/dist/backend/llvm/emitter.js +443 -226
  49. package/dist/backend/llvm/emitter.js.map +1 -1
  50. package/dist/backend/llvm/emitter.test.js +21 -3
  51. package/dist/backend/llvm/emitter.test.js.map +1 -1
  52. package/dist/backend/llvm/expr-async.test.js +1 -1
  53. package/dist/backend/llvm/expr-calls.js +14 -6
  54. package/dist/backend/llvm/expr-calls.js.map +1 -1
  55. package/dist/backend/llvm/expr-containers.js +41 -14
  56. package/dist/backend/llvm/expr-containers.js.map +1 -1
  57. package/dist/backend/llvm/expr-control.js +4 -107
  58. package/dist/backend/llvm/expr-control.js.map +1 -1
  59. package/dist/backend/llvm/expr-dispatch.d.ts +1 -2
  60. package/dist/backend/llvm/expr-dispatch.js +0 -41
  61. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  62. package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
  63. package/dist/backend/llvm/expr-dynamic.js +13 -27
  64. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  65. package/dist/backend/llvm/expr-primitives.js +30 -3
  66. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  67. package/dist/backend/llvm/expr-primitives.test.js +55 -2
  68. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  69. package/dist/backend/llvm/expr-stream-bridges.js +4 -4
  70. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  71. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  72. package/dist/backend/llvm/lib-dispatch.js +0 -1
  73. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  74. package/dist/backend/llvm/lib-filesystem.js +0 -13
  75. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  76. package/dist/backend/llvm/lib-shared.js +0 -8
  77. package/dist/backend/llvm/lib-shared.js.map +1 -1
  78. package/dist/backend/llvm/local-array-reads.js +3 -3
  79. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  80. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  81. package/dist/backend/llvm/local-union-storage.test.js +1 -1
  82. package/dist/backend/llvm/loop-array-borrows.d.ts +5 -2
  83. package/dist/backend/llvm/loop-array-borrows.js +27 -8
  84. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  85. package/dist/backend/llvm/map-number-lookup.d.ts +14 -0
  86. package/dist/backend/llvm/map-number-lookup.js +33 -2
  87. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  88. package/dist/backend/llvm/map-read-lifetimes.d.ts +5 -0
  89. package/dist/backend/llvm/map-read-lifetimes.js +20 -4
  90. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  91. package/dist/backend/llvm/map-read-lifetimes.test.js +25 -3
  92. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  93. package/dist/backend/llvm/reference-writes.d.ts +124 -0
  94. package/dist/backend/llvm/reference-writes.js +1090 -0
  95. package/dist/backend/llvm/reference-writes.js.map +1 -0
  96. package/dist/backend/llvm/shapes.d.ts +8 -5
  97. package/dist/backend/llvm/shapes.js +37 -13
  98. package/dist/backend/llvm/shapes.js.map +1 -1
  99. package/dist/backend/llvm/shapes.test.js +3 -3
  100. package/dist/backend/llvm/stack-unions.test.js +1 -1
  101. package/dist/backend/llvm/string-construction.test.js +1 -1
  102. package/dist/backend/llvm/string-lifetimes.test.js +40 -11
  103. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  104. package/dist/backend/llvm/string-reads.d.ts +3 -0
  105. package/dist/backend/llvm/string-reads.js +31 -0
  106. package/dist/backend/llvm/string-reads.js.map +1 -1
  107. package/dist/backend/llvm/switch-dispatch.d.ts +2 -2
  108. package/dist/backend/llvm/switch-dispatch.js +35 -22
  109. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  110. package/dist/backend/llvm/switch-dispatch.test.js +29 -11
  111. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
  112. package/dist/backend/llvm/walk-borrows.d.ts +8 -1
  113. package/dist/backend/llvm/walk-borrows.js +15 -4
  114. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  115. package/dist/backend/may-throw.d.ts +36 -2
  116. package/dist/backend/may-throw.js +308 -21
  117. package/dist/backend/may-throw.js.map +1 -1
  118. package/dist/backend/may-throw.test.js +147 -2
  119. package/dist/backend/may-throw.test.js.map +1 -1
  120. package/dist/backend/native/artifact-stamps.js +0 -2
  121. package/dist/backend/native/artifact-stamps.js.map +1 -1
  122. package/dist/backend/native/cache-warm.d.ts +1 -1
  123. package/dist/backend/native/cache-warm.js +2 -3
  124. package/dist/backend/native/cache-warm.js.map +1 -1
  125. package/dist/backend/native/compiler-fingerprint.d.ts +1 -1
  126. package/dist/backend/native/compiler-fingerprint.js +4 -7
  127. package/dist/backend/native/compiler-fingerprint.js.map +1 -1
  128. package/dist/backend/native/contracts.d.ts +3 -28
  129. package/dist/backend/native/driver.js +1 -3
  130. package/dist/backend/native/driver.js.map +1 -1
  131. package/dist/backend/native/executable.d.ts +0 -15
  132. package/dist/backend/native/executable.js +17 -172
  133. package/dist/backend/native/executable.js.map +1 -1
  134. package/dist/backend/native/tool-identity.js +0 -1
  135. package/dist/backend/native/tool-identity.js.map +1 -1
  136. package/dist/backend/native/vendor.d.ts +1 -1
  137. package/dist/backend/native/vendor.js +1 -1
  138. package/dist/backend/native/vendor.js.map +1 -1
  139. package/dist/backend/native-link-info-core.d.ts +0 -2
  140. package/dist/backend/native-link-info-core.js.map +1 -1
  141. package/dist/backend/native-toolchain.test.js +23 -33
  142. package/dist/backend/native-toolchain.test.js.map +1 -1
  143. package/dist/backend/publication.d.ts +5 -0
  144. package/dist/backend/publication.js +10 -0
  145. package/dist/backend/publication.js.map +1 -1
  146. package/dist/backend/publication.test.js +1 -1
  147. package/dist/backend/runtime-abi.d.ts +2 -2
  148. package/dist/backend/runtime-abi.js +2 -2
  149. package/dist/backend/runtime-pack-core.d.ts +1 -2
  150. package/dist/backend/runtime-pack-core.js +5 -14
  151. package/dist/backend/runtime-pack-core.js.map +1 -1
  152. package/dist/backend/runtime-pack-targets.test.js +3 -8
  153. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  154. package/dist/backend/runtime-pack.test.js +22 -19
  155. package/dist/backend/runtime-pack.test.js.map +1 -1
  156. package/dist/backend/target-diagnostics.d.ts +0 -5
  157. package/dist/backend/target-diagnostics.js +1 -11
  158. package/dist/backend/target-diagnostics.js.map +1 -1
  159. package/dist/backend/target-diagnostics.test.js +1 -1
  160. package/dist/backend/vendor-archives.d.ts +1 -7
  161. package/dist/backend/vendor-archives.js +9 -189
  162. package/dist/backend/vendor-archives.js.map +1 -1
  163. package/dist/backend/vendor-inputs.d.ts +0 -1
  164. package/dist/backend/vendor-inputs.js +0 -1
  165. package/dist/backend/vendor-inputs.js.map +1 -1
  166. package/dist/backend/warm-cache.js +3 -5
  167. package/dist/backend/warm-cache.js.map +1 -1
  168. package/dist/cli/command.js +4 -8
  169. package/dist/cli/command.js.map +1 -1
  170. package/dist/cli/host.d.ts +1 -1
  171. package/dist/cli/usage.d.ts +1 -5
  172. package/dist/cli/usage.js +4 -9
  173. package/dist/cli/usage.js.map +1 -1
  174. package/dist/compat/fetch-profile.d.ts +2 -2
  175. package/dist/compat/fetch-profile.js +16 -25
  176. package/dist/compat/fetch-profile.js.map +1 -1
  177. package/dist/compile-types.d.ts +2 -17
  178. package/dist/contracts/check.d.ts +8 -0
  179. package/dist/contracts/check.js +1573 -0
  180. package/dist/contracts/check.js.map +1 -0
  181. package/dist/coverage/report.d.ts +5 -22
  182. package/dist/coverage/report.js +12 -76
  183. package/dist/coverage/report.js.map +1 -1
  184. package/dist/coverage/surface-manifest.d.ts +3 -3
  185. package/dist/coverage/surface-manifest.js +22 -27
  186. package/dist/coverage/surface-manifest.js.map +1 -1
  187. package/dist/coverage/verdict-cache.d.ts +1 -3
  188. package/dist/coverage/verdict-cache.js +2 -7
  189. package/dist/coverage/verdict-cache.js.map +1 -1
  190. package/dist/diagnostics/diagnostic.d.ts +11 -60
  191. package/dist/diagnostics/diagnostic.js +39 -118
  192. package/dist/diagnostics/diagnostic.js.map +1 -1
  193. package/dist/diagnostics/envelope.d.ts +3 -4
  194. package/dist/diagnostics/envelope.js +0 -9
  195. package/dist/diagnostics/envelope.js.map +1 -1
  196. package/dist/diagnostics/envelope.test.js +1 -1
  197. package/dist/diagnostics/envelope.test.js.map +1 -1
  198. package/dist/executable/executable-cache.d.ts +0 -3
  199. package/dist/executable/executable-cache.js +2 -4
  200. package/dist/executable/executable-cache.js.map +1 -1
  201. package/dist/executable/executable-cache.test.js +0 -4
  202. package/dist/executable/executable-cache.test.js.map +1 -1
  203. package/dist/executable/prepare.js +14 -2
  204. package/dist/executable/prepare.js.map +1 -1
  205. package/dist/frontend/analysis.js +10 -10
  206. package/dist/frontend/analysis.js.map +1 -1
  207. package/dist/frontend/cjs-syntax.js +0 -88
  208. package/dist/frontend/cjs-syntax.js.map +1 -1
  209. package/dist/frontend/contract-types.d.ts +50 -0
  210. package/dist/frontend/contract-types.js +232 -0
  211. package/dist/frontend/contract-types.js.map +1 -0
  212. package/dist/frontend/dts-paths.d.ts +1 -1
  213. package/dist/frontend/dts-paths.js +1 -1
  214. package/dist/frontend/lowering/abstract-equality.js +1 -4
  215. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  216. package/dist/frontend/lowering/array-values.js +4 -11
  217. package/dist/frontend/lowering/array-values.js.map +1 -1
  218. package/dist/frontend/lowering/builtins/arguments.js +0 -13
  219. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  220. package/dist/frontend/lowering/builtins/crypto.d.ts +0 -4
  221. package/dist/frontend/lowering/builtins/crypto.js +0 -4
  222. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  223. package/dist/frontend/lowering/builtins/json.js +1 -39
  224. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  225. package/dist/frontend/lowering/builtins/module-resolution.d.ts +0 -15
  226. package/dist/frontend/lowering/builtins/module-resolution.js +5 -44
  227. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  228. package/dist/frontend/lowering/builtins/numbers.d.ts +0 -6
  229. package/dist/frontend/lowering/builtins/numbers.js +6 -57
  230. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  231. package/dist/frontend/lowering/builtins/promises.js +4 -67
  232. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  233. package/dist/frontend/lowering/builtins/workers.js +1 -1
  234. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  235. package/dist/frontend/lowering/call-arguments.d.ts +1 -37
  236. package/dist/frontend/lowering/call-arguments.js +11 -94
  237. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  238. package/dist/frontend/lowering/call-signatures.d.ts +1 -6
  239. package/dist/frontend/lowering/call-signatures.js +16 -68
  240. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  241. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +19 -4
  242. package/dist/frontend/lowering/class-dynamic-dispatch.js +168 -98
  243. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  244. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +44 -4
  245. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  246. package/dist/frontend/lowering/class-method-mutations.js +0 -2
  247. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  248. package/dist/frontend/lowering/class-protocols.js +1 -1
  249. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  250. package/dist/frontend/lowering/coercions/function-adapters.js +5 -35
  251. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  252. package/dist/frontend/lowering/coercions/state.d.ts +0 -1
  253. package/dist/frontend/lowering/coercions/state.js +0 -1
  254. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  255. package/dist/frontend/lowering/coercions/structural-plans.js +2 -4
  256. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  257. package/dist/frontend/lowering/coercions/structural.js +2 -12
  258. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  259. package/dist/frontend/lowering/coercions/unions.d.ts +12 -0
  260. package/dist/frontend/lowering/coercions/unions.js +63 -1
  261. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  262. package/dist/frontend/lowering/containers/array-callbacks.js +9 -28
  263. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  264. package/dist/frontend/lowering/containers/array-construction.js +2 -3
  265. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  266. package/dist/frontend/lowering/containers/array-methods.js +10 -54
  267. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  268. package/dist/frontend/lowering/containers/bytes.js +0 -1
  269. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  270. package/dist/frontend/lowering/containers/callback-arguments.js +2 -10
  271. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  272. package/dist/frontend/lowering/containers/collection-methods.js +1 -6
  273. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  274. package/dist/frontend/lowering/containers/indexed-objects.js +0 -2
  275. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  276. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +0 -6
  277. package/dist/frontend/lowering/containers/string-and-regexp.js +2 -10
  278. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  279. package/dist/frontend/lowering/expressions/evaluation-safety.js +0 -3
  280. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  281. package/dist/frontend/lowering/expressions/native-proxy.js +1 -1
  282. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  283. package/dist/frontend/lowering/expressions/nullish-assignment.js +0 -1
  284. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  285. package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -8
  286. package/dist/frontend/lowering/expressions/object-literals.js +8 -35
  287. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  288. package/dist/frontend/lowering/expressions/optional-chains.d.ts +0 -4
  289. package/dist/frontend/lowering/expressions/optional-chains.js +7 -67
  290. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  291. package/dist/frontend/lowering/function-context.js +0 -1
  292. package/dist/frontend/lowering/function-context.js.map +1 -1
  293. package/dist/frontend/lowering/generic-functions.js +0 -1
  294. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  295. package/dist/frontend/lowering/lib-boundary.js +10 -77
  296. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  297. package/dist/frontend/lowering/lower-array-sort.js +1 -10
  298. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  299. package/dist/frontend/lowering/lower-array-sort.test.js +2 -2
  300. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  301. package/dist/frontend/lowering/lower-assert.js +2 -3
  302. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  303. package/dist/frontend/lowering/lower-async-iteration.js +1 -1
  304. package/dist/frontend/lowering/lower-calls.d.ts +2 -27
  305. package/dist/frontend/lowering/lower-calls.js +56 -465
  306. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  307. package/dist/frontend/lowering/lower-classes.js +11 -49
  308. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  309. package/dist/frontend/lowering/lower-comptime.js +2 -3
  310. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  311. package/dist/frontend/lowering/lower-enums.js +5 -8
  312. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  313. package/dist/frontend/lowering/lower-event-emitter.js +3 -4
  314. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  315. package/dist/frontend/lowering/lower-expando.js +3 -5
  316. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  317. package/dist/frontend/lowering/lower-exprs.d.ts +0 -8
  318. package/dist/frontend/lowering/lower-exprs.js +133 -908
  319. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  320. package/dist/frontend/lowering/lower-functions.js +2 -5
  321. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  322. package/dist/frontend/lowering/lower-inspect.js +1 -50
  323. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  324. package/dist/frontend/lowering/lower-modules.d.ts +0 -43
  325. package/dist/frontend/lowering/lower-modules.js +25 -329
  326. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  327. package/dist/frontend/lowering/lower-modules.test.js +5 -5
  328. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  329. package/dist/frontend/lowering/lower-server.js +0 -30
  330. package/dist/frontend/lowering/lower-server.js.map +1 -1
  331. package/dist/frontend/lowering/lower-stdlib.d.ts +98 -0
  332. package/dist/frontend/lowering/{lower-island.js → lower-stdlib.js} +97 -1160
  333. package/dist/frontend/lowering/lower-stdlib.js.map +1 -0
  334. package/dist/frontend/lowering/lower-stmts.d.ts +0 -16
  335. package/dist/frontend/lowering/lower-stmts.js +58 -1016
  336. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  337. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  338. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  339. package/dist/frontend/lowering/lower-stream.js +1 -3
  340. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  341. package/dist/frontend/lowering/lowerer.d.ts +26 -151
  342. package/dist/frontend/lowering/lowerer.js +120 -770
  343. package/dist/frontend/lowering/lowerer.js.map +1 -1
  344. package/dist/frontend/lowering/lowerer.test.js +4 -51
  345. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  346. package/dist/frontend/lowering/narrowing-stability.d.ts +100 -0
  347. package/dist/frontend/lowering/narrowing-stability.js +1174 -0
  348. package/dist/frontend/lowering/narrowing-stability.js.map +1 -0
  349. package/dist/frontend/lowering/narrowing-stability.test.js +150 -0
  350. package/dist/frontend/lowering/narrowing-stability.test.js.map +1 -0
  351. package/dist/frontend/lowering/optional-arguments.js +0 -2
  352. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  353. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  354. package/dist/frontend/lowering/strict-equality.js +1 -1
  355. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  356. package/dist/frontend/lowering/surfaces.d.ts +6 -45
  357. package/dist/frontend/lowering/surfaces.js +5 -65
  358. package/dist/frontend/lowering/surfaces.js.map +1 -1
  359. package/dist/frontend/module-syntax.d.ts +0 -3
  360. package/dist/frontend/module-syntax.js.map +1 -1
  361. package/dist/frontend/npm-node.d.ts +0 -7
  362. package/dist/frontend/npm-node.js +0 -7
  363. package/dist/frontend/npm-node.js.map +1 -1
  364. package/dist/frontend/npm-static-rewrite-syntax.d.ts +1 -1
  365. package/dist/frontend/npm-static-rewrite-syntax.js +6 -82
  366. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  367. package/dist/frontend/npm-static.d.ts +1 -1
  368. package/dist/frontend/npm-static.js +6 -71
  369. package/dist/frontend/npm-static.js.map +1 -1
  370. package/dist/frontend/npm.d.ts +3 -319
  371. package/dist/frontend/npm.js +6 -1007
  372. package/dist/frontend/npm.js.map +1 -1
  373. package/dist/frontend/npm.test.js +2 -197
  374. package/dist/frontend/npm.test.js.map +1 -1
  375. package/dist/frontend/pipeline-native.js +1 -2
  376. package/dist/frontend/pipeline-native.js.map +1 -1
  377. package/dist/frontend/pipeline.d.ts +3 -11
  378. package/dist/frontend/pipeline.js +37 -56
  379. package/dist/frontend/pipeline.js.map +1 -1
  380. package/dist/frontend/pipeline.test.js +12 -6
  381. package/dist/frontend/pipeline.test.js.map +1 -1
  382. package/dist/frontend/program.d.ts +0 -34
  383. package/dist/frontend/program.js +13 -98
  384. package/dist/frontend/program.js.map +1 -1
  385. package/dist/frontend/provenance-core.d.ts +0 -4
  386. package/dist/frontend/provenance-core.js +4 -37
  387. package/dist/frontend/provenance-core.js.map +1 -1
  388. package/dist/frontend/provenance-registry.d.ts +0 -4
  389. package/dist/frontend/provenance-registry.js +0 -20
  390. package/dist/frontend/provenance-registry.js.map +1 -1
  391. package/dist/frontend/resolve.d.ts +0 -12
  392. package/dist/frontend/resolve.js +0 -34
  393. package/dist/frontend/resolve.js.map +1 -1
  394. package/dist/frontend/runtime-resolve.js +2 -2
  395. package/dist/frontend/runtime-resolve.js.map +1 -1
  396. package/dist/frontend/services-node.js +2 -3
  397. package/dist/frontend/services-node.js.map +1 -1
  398. package/dist/frontend/services.d.ts +1 -8
  399. package/dist/frontend/services.js +2 -22
  400. package/dist/frontend/services.js.map +1 -1
  401. package/dist/frontend/services.test.js +0 -38
  402. package/dist/frontend/services.test.js.map +1 -1
  403. package/dist/frontend/tsc-codes.js +0 -11
  404. package/dist/frontend/tsc-codes.js.map +1 -1
  405. package/dist/frontend/type-mapper.d.ts +2 -27
  406. package/dist/frontend/type-mapper.js +85 -153
  407. package/dist/frontend/type-mapper.js.map +1 -1
  408. package/dist/index.d.ts +1 -1
  409. package/dist/index.js +7 -10
  410. package/dist/index.js.map +1 -1
  411. package/dist/ir/api.d.ts +1 -1
  412. package/dist/ir/api.js +1 -1
  413. package/dist/ir/api.js.map +1 -1
  414. package/dist/ir/builtin-effects.js +0 -5
  415. package/dist/ir/builtin-effects.js.map +1 -1
  416. package/dist/ir/builtin-signatures.d.ts +1 -1
  417. package/dist/ir/builtin-signatures.js +1 -55
  418. package/dist/ir/builtin-signatures.js.map +1 -1
  419. package/dist/ir/constant-globals.test.js +1 -1
  420. package/dist/ir/constant-tables.test.js +1 -1
  421. package/dist/ir/final-fields.test.js +1 -1
  422. package/dist/ir/initializer-bindings.test.js +1 -1
  423. package/dist/ir/int32-slots.d.ts +29 -3
  424. package/dist/ir/int32-slots.js +152 -66
  425. package/dist/ir/int32-slots.js.map +1 -1
  426. package/dist/ir/int32-slots.test.js +1 -1
  427. package/dist/ir/integer-loops.js +3 -0
  428. package/dist/ir/integer-loops.js.map +1 -1
  429. package/dist/ir/integer-loops.test.js +26 -1
  430. package/dist/ir/integer-loops.test.js.map +1 -1
  431. package/dist/ir/integer-ranges.d.ts +20 -0
  432. package/dist/ir/integer-ranges.js +178 -21
  433. package/dist/ir/integer-ranges.js.map +1 -1
  434. package/dist/ir/integer-ranges.test.js +148 -3
  435. package/dist/ir/integer-ranges.test.js.map +1 -1
  436. package/dist/ir/ir.d.ts +44 -284
  437. package/dist/ir/ir.js +10 -259
  438. package/dist/ir/ir.js.map +1 -1
  439. package/dist/ir/ir.test.js +2 -7
  440. package/dist/ir/ir.test.js.map +1 -1
  441. package/dist/ir/runtime-features.d.ts +3 -30
  442. package/dist/ir/runtime-features.js +5 -41
  443. package/dist/ir/runtime-features.js.map +1 -1
  444. package/dist/ir/scalar-records.test.js +1 -1
  445. package/dist/ir/serialize.d.ts +6 -2
  446. package/dist/ir/serialize.js +11 -3
  447. package/dist/ir/serialize.js.map +1 -1
  448. package/dist/ir/traverse.js +0 -21
  449. package/dist/ir/traverse.js.map +1 -1
  450. package/dist/ir/unshare.d.ts +14 -0
  451. package/dist/ir/unshare.js +60 -0
  452. package/dist/ir/unshare.js.map +1 -0
  453. package/dist/ir/unshare.test.js +115 -0
  454. package/dist/ir/unshare.test.js.map +1 -0
  455. package/dist/ir/validate.js +9 -207
  456. package/dist/ir/validate.js.map +1 -1
  457. package/dist/ir/validate.test.js +6 -6
  458. package/dist/library/fence-eval.test.js +1 -1
  459. package/dist/library/int-infer.test.js +4 -4
  460. package/dist/library/library-cache.test.js +5 -5
  461. package/dist/library/prepare.js +14 -20
  462. package/dist/library/prepare.js.map +1 -1
  463. package/dist/native/cli.js +0 -2
  464. package/dist/native/cli.js.map +1 -1
  465. package/dist/native/compiler.test.js +2 -4
  466. package/dist/native/compiler.test.js.map +1 -1
  467. package/dist/native/prepare.js +2 -4
  468. package/dist/native/prepare.js.map +1 -1
  469. package/dist/native/sanitizer.js +2 -16
  470. package/dist/native/sanitizer.js.map +1 -1
  471. package/dist/native/sanitizer.test.js +0 -3
  472. package/dist/native/sanitizer.test.js.map +1 -1
  473. package/dist/startup-cache.js +0 -2
  474. package/dist/startup-cache.js.map +1 -1
  475. package/package.json +20 -20
  476. package/surface-manifest.json +80 -88
  477. package/dist/backend/llvm/expr-island.d.ts +0 -15
  478. package/dist/backend/llvm/expr-island.js +0 -709
  479. package/dist/backend/llvm/expr-island.js.map +0 -1
  480. package/dist/frontend/lowering/coercions/island.d.ts +0 -37
  481. package/dist/frontend/lowering/coercions/island.js +0 -350
  482. package/dist/frontend/lowering/coercions/island.js.map +0 -1
  483. package/dist/frontend/lowering/lower-island.d.ts +0 -229
  484. package/dist/frontend/lowering/lower-island.js.map +0 -1
  485. package/dist/frontend/lowering/lower-island.test.js +0 -56
  486. package/dist/frontend/lowering/lower-island.test.js.map +0 -1
  487. package/dist/frontend/npm-fetch-analysis.d.ts +0 -17
  488. package/dist/frontend/npm-fetch-analysis.js +0 -109
  489. package/dist/frontend/npm-fetch-analysis.js.map +0 -1
  490. package/dist/frontend/npm-fetch-analysis.test.js +0 -130
  491. package/dist/frontend/npm-fetch-analysis.test.js.map +0 -1
  492. package/dist/frontend/npm-fetch-node.d.ts +0 -2
  493. package/dist/frontend/npm-fetch-node.js +0 -12
  494. package/dist/frontend/npm-fetch-node.js.map +0 -1
  495. package/dist/frontend/npm-fetch-syntax.d.ts +0 -6
  496. package/dist/frontend/npm-fetch-syntax.js +0 -202
  497. package/dist/frontend/npm-fetch-syntax.js.map +0 -1
  498. package/dist/native/runtime-typescript.d.ts +0 -4
  499. package/dist/native/runtime-typescript.js +0 -74
  500. package/dist/native/runtime-typescript.js.map +0 -1
  501. package/dist/native/runtime-typescript.test.js +0 -41
  502. package/dist/native/runtime-typescript.test.js.map +0 -1
  503. /package/dist/{frontend/lowering/lower-island.test.d.ts → backend/immutability.test.d.ts} +0 -0
  504. /package/dist/frontend/{npm-fetch-analysis.test.d.ts → lowering/narrowing-stability.test.d.ts} +0 -0
  505. /package/dist/{native/runtime-typescript.test.d.ts → ir/unshare.test.d.ts} +0 -0
@@ -0,0 +1,60 @@
1
+ import { reparseExpr, reparseStmt } from "./serialize.js";
2
+ import { everyExprChild, everyStmtChild, mapExprChildren, mapStmtChildren } from "./traverse.js";
3
+ /** Give every occurrence of an executable node its own object.
4
+ *
5
+ * Lowering helpers may place one node at several sites (a binding's varRef
6
+ * read in a loop condition and in its body, a shared `break`). Analyses key
7
+ * their facts by node identity (integer ranges, int32 write proofs, borrow
8
+ * and lifetime facts), so a shared node carries one fact for all of its
9
+ * sites: integer ranges keep the join, which loses what one site proves. A
10
+ * serialized module gives every occurrence its own node; this makes the
11
+ * in-memory module equivalent, so analyses and emission behave the same on
12
+ * a module lowered in memory and on one read back from its artifact.
13
+ * Functions without a repeated node are kept as they are; the input is
14
+ * never mutated. */
15
+ export function unshareNodes(mod) {
16
+ const seen = new Set();
17
+ const repeated = new Set();
18
+ const affected = new Set();
19
+ let current = null;
20
+ // A repeated node marks the function holding the later occurrence. Its
21
+ // subtree is walked again, so every node under it is repeated as well.
22
+ const visit = (node) => {
23
+ if (!seen.has(node))
24
+ seen.add(node);
25
+ else {
26
+ repeated.add(node);
27
+ affected.add(current);
28
+ }
29
+ };
30
+ const findExpr = (node) => {
31
+ visit(node);
32
+ return everyExprChild(node, findExpr, findStmt);
33
+ };
34
+ const findStmt = (node) => {
35
+ visit(node);
36
+ return everyStmtChild(node, findExpr, findStmt);
37
+ };
38
+ for (const fn of mod.functions) {
39
+ current = fn;
40
+ for (const node of fn.body)
41
+ findStmt(node);
42
+ }
43
+ if (affected.size === 0)
44
+ return mod;
45
+ // Rebuilding a function copies every node that has children; a repeated
46
+ // childless node reads back as a fresh object at each of its sites there.
47
+ const expr = (node) => {
48
+ const copy = mapExprChildren(node, expr, stmt);
49
+ return copy !== node || !repeated.has(node) ? copy : reparseExpr(node);
50
+ };
51
+ const stmt = (node) => {
52
+ const copy = mapStmtChildren(node, expr, stmt);
53
+ return copy !== node || !repeated.has(node) ? copy : reparseStmt(node);
54
+ };
55
+ return {
56
+ ...mod,
57
+ functions: mod.functions.map((fn) => affected.has(fn) ? { ...fn, body: fn.body.map(stmt) } : fn),
58
+ };
59
+ }
60
+ //# sourceMappingURL=unshare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unshare.js","sourceRoot":"","sources":["../../src/ir/unshare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEjG;;;;;;;;;;;oBAWoB;AACpB,MAAM,UAAU,YAAY,CAAC,GAAa;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAc,CAAC;IACvC,IAAI,OAAO,GAAsB,IAAI,CAAC;IACtC,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,KAAK,GAAG,CAAC,IAAqB,EAAQ,EAAE;QAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAC/B,CAAC;YACJ,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnB,QAAQ,CAAC,GAAG,CAAC,OAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAW,EAAE;QACzC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAW,EAAE;QACzC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAC/B,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACpC,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE;QACpC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE;QACpC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,OAAO;QACL,GAAG,GAAG;QACN,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAC3D;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,115 @@
1
+ import { expect, test } from "vitest";
2
+ import { emitLlvmModule } from "../backend/llvm/emitter.js";
3
+ import { analyzeIntegerRanges } from "./integer-ranges.js";
4
+ import { F64, VOID } from "./ir.js";
5
+ import { deserializeModule, serializeModule } from "./serialize.js";
6
+ import { everyStmtList } from "./traverse.js";
7
+ import { unshareNodes } from "./unshare.js";
8
+ import { validateModule } from "./validate.js";
9
+ const loc = { file: "unshare.ts", start: 0, end: 1 };
10
+ const num = (value) => ({
11
+ kind: "numLit",
12
+ value,
13
+ type: F64,
14
+ loc,
15
+ });
16
+ const add = (left, right) => ({
17
+ kind: "bin",
18
+ op: "+",
19
+ left,
20
+ right,
21
+ type: F64,
22
+ loc,
23
+ });
24
+ /** One varRef object read at two sites: `x` is unknown at the first and
25
+ * exactly 5 at the second, as lowering helpers that reuse a read produce;
26
+ * and one `p + 2` expression stored at two sites. */
27
+ function sharedRead() {
28
+ const read = { kind: "varRef", localId: "x", type: F64, loc };
29
+ const twice = add({ kind: "varRef", localId: "p", type: F64, loc }, num(2));
30
+ const body = [
31
+ {
32
+ kind: "varDecl",
33
+ localId: "x",
34
+ init: { kind: "varRef", localId: "p", type: F64, loc },
35
+ loc,
36
+ },
37
+ { kind: "varDecl", localId: "a", init: add(read, num(1)), loc },
38
+ { kind: "assign", localId: "x", value: num(5), loc },
39
+ { kind: "varDecl", localId: "b", init: add(read, num(1)), loc },
40
+ // A repeated node with children: its leaves repeat with it.
41
+ { kind: "varDecl", localId: "c", init: twice, loc },
42
+ { kind: "assign", localId: "c", value: twice, loc },
43
+ {
44
+ kind: "return",
45
+ value: add({ kind: "varRef", localId: "a", type: F64, loc }, {
46
+ kind: "varRef",
47
+ localId: "b",
48
+ type: F64,
49
+ loc,
50
+ }),
51
+ loc,
52
+ },
53
+ ];
54
+ const mod = {
55
+ irVersion: 16,
56
+ sourceFile: loc.file,
57
+ entry: "main",
58
+ functions: [
59
+ { name: "main", loc, params: [], locals: [], returnType: VOID, body: [] },
60
+ {
61
+ name: "f",
62
+ loc,
63
+ params: [{ name: "p", localId: "p", type: F64 }],
64
+ locals: ["p", "x", "a", "b", "c"].map((id) => ({
65
+ id,
66
+ name: id,
67
+ type: F64,
68
+ mutable: true,
69
+ })),
70
+ returnType: F64,
71
+ body,
72
+ },
73
+ ],
74
+ };
75
+ return { mod, read };
76
+ }
77
+ function nodes(mod) {
78
+ const out = [];
79
+ const visit = (node) => (out.push(node), true);
80
+ for (const fn of mod.functions)
81
+ everyStmtList(fn.body, { expr: visit, stmt: visit });
82
+ return out;
83
+ }
84
+ test("every occurrence gets its own node without mutating the input", () => {
85
+ const { mod, read } = sharedRead();
86
+ const before = serializeModule(mod);
87
+ const tree = unshareNodes(mod);
88
+ expect(serializeModule(mod)).toBe(before);
89
+ expect(serializeModule(tree)).toBe(before);
90
+ const all = nodes(tree);
91
+ expect(new Set(all).size).toBe(all.length);
92
+ expect(all).not.toContain(read);
93
+ // The entry function had no shared node and is kept as it is.
94
+ expect(tree.functions[0]).toBe(mod.functions[0]);
95
+ expect(unshareNodes(tree)).toBe(tree);
96
+ });
97
+ test("ranges are per occurrence once nodes are unshared", () => {
98
+ const { mod, read } = sharedRead();
99
+ // Keyed by identity, the shared read holds the join of both sites.
100
+ expect(analyzeIntegerRanges(mod.functions[1]).get(read)).toBeNull();
101
+ const fn = unshareNodes(mod).functions[1];
102
+ const reads = nodes({ ...mod, functions: [fn] }).filter((node) => node.kind === "varRef" && node.localId === "x");
103
+ const ranges = analyzeIntegerRanges(fn);
104
+ expect(reads.map((node) => ranges.get(node) ?? null)).toEqual([
105
+ null,
106
+ { min: 5, max: 5 },
107
+ ]);
108
+ });
109
+ test("emission matches the module read back from its serialized form", () => {
110
+ const { mod } = sharedRead();
111
+ expect(validateModule(mod)).toEqual([]);
112
+ const restored = deserializeModule(serializeModule(mod, true));
113
+ expect(emitLlvmModule(mod)).toBe(emitLlvmModule(restored));
114
+ });
115
+ //# sourceMappingURL=unshare.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unshare.test.js","sourceRoot":"","sources":["../../src/ir/unshare.test.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * an ICE that points at source is a gift to whoever debugs it.
5
5
  */
6
6
  import { validByteNumberToken } from "./byte-numbers.js";
7
- import { arrayOf, BYTES_ELEMENT_NAME, BOOL, BYTES_U8, bytesOf, canAdaptDynFuncTo, canDynCheckTo, canConvertToDyn, canExitIslandToType, canMarshalIntoIsland, canMarshalTypedFuncIntoIsland, DYN, DYN_HANDLE_KINDS, F64, ffiClassType, ffiSourceParamTypes, islandPromisePayloadTag, isDynTypedRefType, isFfiCallbackParam, isFfiContextParam, isFfiReleaseParam, isJsonSafeType, isJsonStringifySafeType, isRefCounted, isSortValuesElement, isSupportedArrayElem, isSupportedIndexValue, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, isUnitType, jsOpResultKind, JSVAL, REF_TRUTHY_KINDS, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, shapeHasAccessorSlots, STRING, typeEquals, typeKey, unionContainerArmsOk, VOID, } from "./ir.js";
7
+ import { arrayOf, BYTES_ELEMENT_NAME, BOOL, BYTES_U8, bytesOf, canAdaptDynFuncTo, canDynCheckTo, canConvertToDyn, DYN, DYN_HANDLE_KINDS, F64, ffiClassType, ffiSourceParamTypes, isDynTypedRefType, isFfiCallbackParam, isFfiContextParam, isFfiReleaseParam, isJsonSafeType, isJsonStringifySafeType, isRefCounted, isSortValuesElement, isSupportedArrayElem, isSupportedIndexValue, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, isUnitType, REF_TRUTHY_KINDS, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, shapeHasAccessorSlots, STRING, typeEquals, typeKey, unionContainerArmsOk, VOID, } from "./ir.js";
8
8
  import { DYN_CLASS_PROPERTIES } from "./ir.js";
9
9
  import { unionWideningTags } from "./analysis.js";
10
10
  import { alwaysReturns } from "./control-flow.js";
@@ -55,7 +55,7 @@ export function validateModule(mod) {
55
55
  const moduleLoc = { file: mod.sourceFile, start: 0, end: 0 };
56
56
  if (mod.workers !== undefined && typeof mod.workers !== "boolean")
57
57
  errors.push({ message: "worker execution mode must be a boolean", loc: moduleLoc });
58
- if (mod.workers && (mod.lib !== undefined || mod.embedded !== undefined))
58
+ if (mod.workers && mod.lib !== undefined)
59
59
  errors.push({
60
60
  message: "worker execution requires a native static executable",
61
61
  loc: moduleLoc,
@@ -545,9 +545,8 @@ export function validateModule(mod) {
545
545
  }
546
546
  else
547
547
  fields.set(f.name, f.type);
548
- // Unit kinds (undefinedT/nullT) exist only as union arms — a BARE
549
- // unit field is as malformed as a void one. dyn and jsval slots
550
- // are valid; both are refcounted values held by the record shape.
548
+ // Bare unit and void types have no record-field storage; unit values
549
+ // use their union representation.
551
550
  if (f.type.kind === "void" || isUnitType(f.type)) {
552
551
  errors.push({
553
552
  message: `record ${rec.id}: field "${f.name}" is ${f.type.kind}`,
@@ -688,7 +687,6 @@ export function validateModule(mod) {
688
687
  if (arm.kind === "void" ||
689
688
  arm.kind === "union" ||
690
689
  arm.kind === "dyn" ||
691
- arm.kind === "jsval" ||
692
690
  arm.kind === "date" ||
693
691
  arm.kind === "generator") {
694
692
  errors.push({ message: `union ${u.id}: arm ${i} is ${arm.kind}`, loc: noLoc });
@@ -1017,10 +1015,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1017
1015
  err(`${what}: expected ${want.kind}, got ${expr.type.kind}${detail}`, expr.loc);
1018
1016
  }
1019
1017
  };
1020
- /** Union arms a truthiness helper can answer: units (false), scalars and
1021
- * strings (per-value), ref kinds (always true), jsval (the engine
1022
- * answers). dyn/caught arms have no ToBoolean — the frontend fences them
1023
- * before emitting toBool/logical over the union. */
1024
1018
  const checkTruthyUnion = (unionId, loc) => {
1025
1019
  const def = unions.get(unionId);
1026
1020
  if (!def) {
@@ -1050,13 +1044,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1050
1044
  };
1051
1045
  function checkNullishOperands(e) {
1052
1046
  expectType(e.right, e.type, "nullish right operand");
1053
- // The ISLAND form: `a ?? b` over an engine value — left, right,
1054
- // and result are all handles (the emitters' jsval nullish arm).
1055
- if (e.left.type.kind === "jsval") {
1056
- if (e.type.kind !== "jsval")
1057
- err("jsval nullish must answer jsval", e.loc);
1058
- return;
1059
- }
1060
1047
  // The CHECKED-DYNAMIC form: the runtime kind decides (the
1061
1048
  // emitters' scr_dyn_is_nullish arm) — left, right, and result
1062
1049
  // all live in the checked-dynamic tree.
@@ -1115,10 +1102,9 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1115
1102
  if (e.type.kind !== "f64" &&
1116
1103
  e.type.kind !== "string" &&
1117
1104
  e.type.kind !== "bool" &&
1118
- e.type.kind !== "jsval" &&
1119
1105
  e.type.kind !== "union" &&
1120
1106
  e.type.kind !== "dyn") {
1121
- err(`logical ${e.op} must be f64|string|bool|jsval|union|dyn, got ${e.type.kind}`, e.loc);
1107
+ err(`logical ${e.op} must be f64|string|bool|union|dyn, got ${e.type.kind}`, e.loc);
1122
1108
  }
1123
1109
  if (e.type.kind === "union")
1124
1110
  checkTruthyUnion(e.type.unionId, e.loc);
@@ -1232,7 +1218,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1232
1218
  case "fieldAbsent":
1233
1219
  return checkRecordExpr(e);
1234
1220
  case "dynFrom":
1235
- case "dynFromJsval":
1236
1221
  case "dynCall":
1237
1222
  case "dynInvoke":
1238
1223
  case "dynObjLit":
@@ -1266,11 +1251,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1266
1251
  case "newPromise":
1267
1252
  case "promiseWithResolvers":
1268
1253
  return checkAsyncExpr(e);
1269
- case "jsMarshal":
1270
- case "jsOp":
1271
- case "jsExit":
1272
- case "jsBridgePromise":
1273
- return checkIslandExpr(e);
1274
1254
  default: {
1275
1255
  const _exhaustive = e;
1276
1256
  void _exhaustive;
@@ -1517,16 +1497,16 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1517
1497
  }
1518
1498
  case "dynDestrCheck": {
1519
1499
  checkExpr(e.value);
1520
- if (e.value.type.kind !== "dyn" && e.value.type.kind !== "jsval")
1521
- err("dynDestrCheck value must be dyn or jsval", e.loc);
1500
+ if (e.value.type.kind !== "dyn")
1501
+ err("dynDestrCheck value must be dyn", e.loc);
1522
1502
  if (e.type.kind !== e.value.type.kind)
1523
1503
  err("dynDestrCheck must have its value's type", e.loc);
1524
1504
  break;
1525
1505
  }
1526
1506
  case "dynIterN": {
1527
1507
  checkExpr(e.value);
1528
- if (e.value.type.kind !== "dyn" && e.value.type.kind !== "jsval")
1529
- err("dynIterN value must be dyn or jsval", e.loc);
1508
+ if (e.value.type.kind !== "dyn")
1509
+ err("dynIterN value must be dyn", e.loc);
1530
1510
  if (e.type.kind !== e.value.type.kind)
1531
1511
  err("dynIterN must have its value's type", e.loc);
1532
1512
  if (!Number.isInteger(e.count) || e.count < 0)
@@ -1611,24 +1591,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1611
1591
  break;
1612
1592
  case "optChain": {
1613
1593
  checkExpr(e.receiver);
1614
- // An island-handle chain (`x?.y` on 'any'): the nullish test is a
1615
- // runtime ask of the engine value; the body is the plain island
1616
- // operation over the bound handle, and both body and result stay
1617
- // jsval (the unit path is the engine's undefined).
1618
- if (e.receiver.type.kind === "jsval") {
1619
- if (activeChains.has(e.id))
1620
- err(`optChain id "${e.id}" shadows an active chain`, e.loc);
1621
- activeChains.set(e.id, JSVAL);
1622
- checkExpr(e.body);
1623
- activeChains.delete(e.id);
1624
- if (e.body.type.kind !== "jsval") {
1625
- err(`jsval optChain with ${e.body.type.kind} body`, e.loc);
1626
- }
1627
- if (e.type.kind !== "jsval") {
1628
- err(`jsval optChain must be jsval, got ${e.type.kind}`, e.loc);
1629
- }
1630
- break;
1631
- }
1632
1594
  // A dyn (dyn) chain (`rawName?.match(re)` on a JSON.parse result):
1633
1595
  // the nullish test reads the node's kind tag; the body is the
1634
1596
  // validated dynamic dispatch, its result converted back into the
@@ -2480,7 +2442,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
2480
2442
  // declared params plus that one must match.
2481
2443
  if (e.type.kind === "func") {
2482
2444
  const wantRet = callSiteReturnType(target);
2483
- // ISLAND-REST types (restAbi jsval) SPELL their trailing engine
2484
2445
  // array param — the lifted signature matches directly, no
2485
2446
  // hidden slot.
2486
2447
  const hiddenRest = e.type.rest === true && e.type.restAbi === undefined;
@@ -3037,18 +2998,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
3037
2998
  }
3038
2999
  break;
3039
3000
  }
3040
- case "dynFromJsval": {
3041
- // The jsval→dyn crossing: exactly a jsval operand into a dyn
3042
- // result (the by-reference island wrap; scalars normalize at
3043
- // runtime).
3044
- checkExpr(e.value);
3045
- if (e.type.kind !== "dyn")
3046
- err(`dynFromJsval must be dyn-typed, got ${e.type.kind}`, e.loc);
3047
- if (e.value.type.kind !== "jsval") {
3048
- err(`dynFromJsval operand must be jsval, got ${e.value.type.kind}`, e.loc);
3049
- }
3050
- break;
3051
- }
3052
3001
  case "dynCall": {
3053
3002
  checkExpr(e.callee);
3054
3003
  if (e.calleeNameValue !== undefined) {
@@ -4548,14 +4497,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
4548
4497
  return false;
4549
4498
  }
4550
4499
  function checkLibSpecialCall(e) {
4551
- if (e.fn === "island.castFail") {
4552
- // The deferred boundary failure's typed dummy: a promise (the
4553
- // only cast shape the frontend defers).
4554
- if (e.type.kind !== "promise") {
4555
- err(`libCall island.castFail must return a promise type, got ${e.type.kind}`, e.loc);
4556
- }
4557
- return true;
4558
- }
4559
4500
  if (e.fn === "global.undefRead") {
4560
4501
  // Always throws — the result type is whatever the declared type
4561
4502
  // of the undefined global mapped to (never materialized).
@@ -5211,145 +5152,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
5211
5152
  }
5212
5153
  }
5213
5154
  }
5214
- function checkIslandExpr(e) {
5215
- switch (e.kind) {
5216
- case "jsMarshal": {
5217
- checkExpr(e.value);
5218
- if (e.type.kind !== "jsval")
5219
- err(`jsMarshal must be jsval, got ${e.type.kind}`, e.loc);
5220
- const src = e.value.type;
5221
- // The marshal direction admits qualifying closures (host-function
5222
- // wrapping) on top of the JSON-safe set; jsExit does not. Typed
5223
- // closures (per-param call-time conversion through the exit
5224
- // machinery) are the wider func shape.
5225
- // Typed arrays and URLs marshal IN (an engine typed-array copy /
5226
- // an engine URL built from the components) without ever joining
5227
- // the round-trip (JSON) set — the frontend's union lift narrows
5228
- // union arms before marshaling, so bare bytes/url operands are
5229
- // exactly what it produces.
5230
- if (src.kind !== "bytes" &&
5231
- src.kind !== "url" &&
5232
- src.kind !== "dyn" && // dyn values deep-copy in (data kinds; the runtime throws on boxes)
5233
- // A STATIC promise crosses as a real engine thenable when its
5234
- // fulfillment is in the reverse bridge's payload domain
5235
- // (scr_jsval_from_promise — the async-callback return bridge).
5236
- !(src.kind === "promise" && islandPromisePayloadTag(src.inner) !== null) &&
5237
- !canMarshalIntoIsland(src, (id) => records.get(id), (id) => unions.get(id)) &&
5238
- !canMarshalTypedFuncIntoIsland(src, (id) => records.get(id), (id) => unions.get(id))) {
5239
- err(`jsMarshal of unmarshalable type ${src.kind}`, e.loc);
5240
- }
5241
- break;
5242
- }
5243
- case "jsOp": {
5244
- for (const a of e.args)
5245
- checkExpr(a);
5246
- if (e.type.kind !== jsOpResultKind(e.op)) {
5247
- err(`jsOp ${e.op} must be ${jsOpResultKind(e.op)}, got ${e.type.kind}`, e.loc);
5248
- }
5249
- const named = e.op === "getProp" ||
5250
- e.op === "setProp" ||
5251
- e.op === "callMethod" ||
5252
- e.op === "optCallMethod" ||
5253
- e.op === "globalGet" ||
5254
- e.op === "callSpread"; // the spread expression's source spelling (V8's nullish text spells it)
5255
- if (named !== (e.name !== undefined)) {
5256
- err(`jsOp ${e.op} ${named ? "requires" : "forbids"} a name`, e.loc);
5257
- }
5258
- const arity = {
5259
- add: 2,
5260
- sub: 2,
5261
- mul: 2,
5262
- div: 2,
5263
- mod: 2,
5264
- pow: 2,
5265
- lt: 2,
5266
- le: 2,
5267
- gt: 2,
5268
- ge: 2,
5269
- eq: 2,
5270
- neq: 2,
5271
- instanceOf: 2,
5272
- neg: 1,
5273
- plus: 1,
5274
- truthy: 1,
5275
- not: 1,
5276
- typeof: 1,
5277
- toStr: 1,
5278
- getProp: 1,
5279
- setProp: 2,
5280
- getIdx: 2,
5281
- setIdx: 3,
5282
- globalGet: 0,
5283
- undefLit: 0,
5284
- nullLit: 0,
5285
- iterNew: 1,
5286
- defineGetter: 3,
5287
- objSpread: 2,
5288
- callSpread: 3, // callee + pre array + spread source
5289
- callMethod: null,
5290
- optCallMethod: null,
5291
- callFn: null,
5292
- callFnThis: null,
5293
- construct: null, // receiver/callee + any number of args
5294
- objLit: null,
5295
- arrLit: null,
5296
- tplStrings: null, // variable length (objLit: key/value pairs; tplStrings: n cooked + n raw)
5297
- };
5298
- const want = arity[e.op];
5299
- if (want !== null && want !== undefined && e.args.length !== want) {
5300
- err(`jsOp ${e.op} takes ${want} arg(s), got ${e.args.length}`, e.loc);
5301
- }
5302
- if (want === null &&
5303
- e.op !== "objLit" &&
5304
- e.op !== "arrLit" &&
5305
- e.op !== "tplStrings" &&
5306
- e.args.length < 1) {
5307
- err(`jsOp ${e.op} needs a receiver/callee arg`, e.loc);
5308
- }
5309
- if (e.op === "callFnThis" && e.args.length < 2) {
5310
- err("jsOp callFnThis needs a callee and receiver", e.loc);
5311
- }
5312
- if (e.op === "objLit" && e.args.length % 2 !== 0) {
5313
- err("jsOp objLit takes key/value pairs", e.loc);
5314
- }
5315
- if (e.op === "tplStrings" && e.args.length % 2 !== 0) {
5316
- err("jsOp tplStrings takes n cooked + n raw strings", e.loc);
5317
- }
5318
- for (const a of e.args) {
5319
- if (a.type.kind !== "jsval")
5320
- err(`jsOp ${e.op} arg must be jsval, got ${a.type.kind}`, e.loc);
5321
- }
5322
- break;
5323
- }
5324
- case "jsExit": {
5325
- checkExpr(e.value);
5326
- expectType(e.value, JSVAL, "jsExit operand");
5327
- if (!canExitIslandToType(e.type, (id) => records.get(id), (id) => unions.get(id))) {
5328
- err(`jsExit to non-extractable type ${e.type.kind}`, e.loc);
5329
- }
5330
- break;
5331
- }
5332
- case "jsBridgePromise": {
5333
- checkExpr(e.value);
5334
- expectType(e.value, JSVAL, "jsBridgePromise operand");
5335
- // The settled engine value crosses as a HANDLE (or not at all) —
5336
- // plus the ONE converting payload: an `any[]`-declared
5337
- // fulfillment exits Array.isArray-gated by reference AT THE
5338
- // SETTLE (SCR_ISLP_JSVAL_ARR); every other typed use exits later.
5339
- if (e.type.kind !== "promise" ||
5340
- (e.type.inner.kind !== "jsval" &&
5341
- e.type.inner.kind !== "void" &&
5342
- !(e.type.inner.kind === "array" && e.type.inner.elem.kind === "jsval"))) {
5343
- err("jsBridgePromise must be a promise of jsval, void, or jsval-element array", e.loc);
5344
- }
5345
- break;
5346
- }
5347
- default: {
5348
- const _exhaustive = e;
5349
- void _exhaustive;
5350
- }
5351
- }
5352
- }
5353
5155
  // `continue` needs an enclosing loop; `break` an enclosing loop OR switch.
5354
5156
  let loopDepth = 0;
5355
5157
  let breakableDepth = 0;