@scriptc/compiler 0.2.10 → 0.3.1

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 (584) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +7 -38
  2. package/ambient/scriptc-overrides.d.ts +1 -25
  3. package/ambient/scriptc.d.ts +1 -9
  4. package/dist/backend/cycle-analysis.test.js +1 -1
  5. package/dist/backend/cycle-mutability.d.ts +1 -1
  6. package/dist/backend/cycle-mutability.js +1 -18
  7. package/dist/backend/cycle-mutability.js.map +1 -1
  8. package/dist/backend/executable-features.d.ts +1 -1
  9. package/dist/backend/executable-features.js +3 -8
  10. package/dist/backend/executable-features.js.map +1 -1
  11. package/dist/backend/immutability.d.ts +1 -1
  12. package/dist/backend/immutability.js +1 -1
  13. package/dist/backend/immutability.test.js +1 -1
  14. package/dist/backend/library-pack.js +0 -2
  15. package/dist/backend/library-pack.js.map +1 -1
  16. package/dist/backend/linker.js +1 -1
  17. package/dist/backend/linker.js.map +1 -1
  18. package/dist/backend/llvm/bigint-wrap.d.ts +4 -0
  19. package/dist/backend/llvm/bigint-wrap.js +590 -0
  20. package/dist/backend/llvm/bigint-wrap.js.map +1 -0
  21. package/dist/backend/llvm/blocks.d.ts +2 -0
  22. package/dist/backend/llvm/blocks.js +4 -0
  23. package/dist/backend/llvm/blocks.js.map +1 -1
  24. package/dist/backend/llvm/call-lifetimes.js +15 -4
  25. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  26. package/dist/backend/llvm/call-lifetimes.test.js +14 -3
  27. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  28. package/dist/backend/llvm/checked-narrows.test.js +2 -2
  29. package/dist/backend/llvm/checked-narrows.test.js.map +1 -1
  30. package/dist/backend/llvm/classes.js +60 -21
  31. package/dist/backend/llvm/classes.js.map +1 -1
  32. package/dist/backend/llvm/classes.test.js +11 -11
  33. package/dist/backend/llvm/classes.test.js.map +1 -1
  34. package/dist/backend/llvm/common.d.ts +7 -5
  35. package/dist/backend/llvm/common.js +7 -5
  36. package/dist/backend/llvm/common.js.map +1 -1
  37. package/dist/backend/llvm/constant-callbacks.d.ts +1 -1
  38. package/dist/backend/llvm/constant-callbacks.js +13 -31
  39. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  40. package/dist/backend/llvm/constant-callbacks.test.js +1 -1
  41. package/dist/backend/llvm/dense-array-access.js +133 -45
  42. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  43. package/dist/backend/llvm/dense-array-access.test.js +54 -2
  44. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  45. package/dist/backend/llvm/dyn.d.ts +2 -1
  46. package/dist/backend/llvm/dyn.js +4 -73
  47. package/dist/backend/llvm/dyn.js.map +1 -1
  48. package/dist/backend/llvm/emitter.d.ts +123 -23
  49. package/dist/backend/llvm/emitter.js +729 -258
  50. package/dist/backend/llvm/emitter.js.map +1 -1
  51. package/dist/backend/llvm/emitter.test.js +17 -10
  52. package/dist/backend/llvm/emitter.test.js.map +1 -1
  53. package/dist/backend/llvm/expr-async.js +120 -43
  54. package/dist/backend/llvm/expr-async.js.map +1 -1
  55. package/dist/backend/llvm/expr-async.test.js +2 -2
  56. package/dist/backend/llvm/expr-async.test.js.map +1 -1
  57. package/dist/backend/llvm/expr-bytes.js +51 -36
  58. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  59. package/dist/backend/llvm/expr-callbacks.js +72 -3
  60. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  61. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  62. package/dist/backend/llvm/expr-calls.js +159 -30
  63. package/dist/backend/llvm/expr-calls.js.map +1 -1
  64. package/dist/backend/llvm/expr-calls.test.js +132 -0
  65. package/dist/backend/llvm/expr-calls.test.js.map +1 -0
  66. package/dist/backend/llvm/expr-containers.js +25 -8
  67. package/dist/backend/llvm/expr-containers.js.map +1 -1
  68. package/dist/backend/llvm/expr-context.d.ts +2 -0
  69. package/dist/backend/llvm/expr-control.js +4 -107
  70. package/dist/backend/llvm/expr-control.js.map +1 -1
  71. package/dist/backend/llvm/expr-dispatch.d.ts +1 -2
  72. package/dist/backend/llvm/expr-dispatch.js +3 -41
  73. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  74. package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
  75. package/dist/backend/llvm/expr-dynamic.js +39 -31
  76. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  77. package/dist/backend/llvm/expr-primitives.d.ts +7 -0
  78. package/dist/backend/llvm/expr-primitives.js +80 -22
  79. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  80. package/dist/backend/llvm/expr-primitives.test.js +97 -7
  81. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  82. package/dist/backend/llvm/expr-records.d.ts +9 -0
  83. package/dist/backend/llvm/expr-records.js +134 -16
  84. package/dist/backend/llvm/expr-records.js.map +1 -1
  85. package/dist/backend/llvm/expr-stream-bridges.d.ts +1 -1
  86. package/dist/backend/llvm/expr-stream-bridges.js +80 -1
  87. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  88. package/dist/backend/llvm/expr-stream-bridges.test.js +51 -2
  89. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  90. package/dist/backend/llvm/int32-abi.d.ts +31 -0
  91. package/dist/backend/llvm/int32-abi.js +62 -0
  92. package/dist/backend/llvm/int32-abi.js.map +1 -0
  93. package/dist/backend/llvm/int32-abi.test.js +107 -0
  94. package/dist/backend/llvm/int32-abi.test.js.map +1 -0
  95. package/dist/backend/llvm/int32-locals.d.ts +30 -0
  96. package/dist/backend/llvm/int32-locals.js +95 -0
  97. package/dist/backend/llvm/int32-locals.js.map +1 -0
  98. package/dist/backend/llvm/integer-values.d.ts +4 -0
  99. package/dist/backend/llvm/integer-values.js +30 -1
  100. package/dist/backend/llvm/integer-values.js.map +1 -1
  101. package/dist/backend/llvm/integer-views.d.ts +8 -1
  102. package/dist/backend/llvm/integer-views.js +47 -2
  103. package/dist/backend/llvm/integer-views.js.map +1 -1
  104. package/dist/backend/llvm/lazy-captures.d.ts +16 -0
  105. package/dist/backend/llvm/lazy-captures.js +88 -2
  106. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  107. package/dist/backend/llvm/lazy-captures.test.js +48 -0
  108. package/dist/backend/llvm/lazy-captures.test.js.map +1 -1
  109. package/dist/backend/llvm/lib-dispatch.js +14 -1
  110. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  111. package/dist/backend/llvm/lib-filesystem.js +3 -13
  112. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  113. package/dist/backend/llvm/lib-shared.js +7 -8
  114. package/dist/backend/llvm/lib-shared.js.map +1 -1
  115. package/dist/backend/llvm/local-array-reads.js +21 -2
  116. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  117. package/dist/backend/llvm/local-array-reads.test.js +4 -3
  118. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  119. package/dist/backend/llvm/local-union-storage.test.js +3 -3
  120. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  121. package/dist/backend/llvm/map-number-lookup.d.ts +7 -0
  122. package/dist/backend/llvm/map-number-lookup.js +16 -2
  123. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  124. package/dist/backend/llvm/map-read-lifetimes.js +7 -1
  125. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  126. package/dist/backend/llvm/map-read-lifetimes.test.js +25 -8
  127. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  128. package/dist/backend/llvm/reference-effects.js +2 -0
  129. package/dist/backend/llvm/reference-effects.js.map +1 -1
  130. package/dist/backend/llvm/reference-writes.d.ts +3 -0
  131. package/dist/backend/llvm/reference-writes.js +10 -2
  132. package/dist/backend/llvm/reference-writes.js.map +1 -1
  133. package/dist/backend/llvm/regex-matchers.d.ts +39 -0
  134. package/dist/backend/llvm/regex-matchers.js +1649 -0
  135. package/dist/backend/llvm/regex-matchers.js.map +1 -0
  136. package/dist/backend/llvm/regex-matchers.test.js +96 -0
  137. package/dist/backend/llvm/regex-matchers.test.js.map +1 -0
  138. package/dist/backend/llvm/shapes.d.ts +36 -1
  139. package/dist/backend/llvm/shapes.js +128 -16
  140. package/dist/backend/llvm/shapes.js.map +1 -1
  141. package/dist/backend/llvm/shapes.test.js +3 -3
  142. package/dist/backend/llvm/stack-unions.test.js +2 -2
  143. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  144. package/dist/backend/llvm/string-construction.test.js +3 -3
  145. package/dist/backend/llvm/string-construction.test.js.map +1 -1
  146. package/dist/backend/llvm/string-lifetimes.test.js +6 -6
  147. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  148. package/dist/backend/llvm/string-literal-equality.d.ts +22 -0
  149. package/dist/backend/llvm/string-literal-equality.js +78 -0
  150. package/dist/backend/llvm/string-literal-equality.js.map +1 -0
  151. package/dist/backend/llvm/switch-dispatch.js +59 -13
  152. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  153. package/dist/backend/llvm/switch-dispatch.test.js +72 -7
  154. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
  155. package/dist/backend/llvm/union-retype.test.d.ts +1 -0
  156. package/dist/backend/llvm/union-retype.test.js +229 -0
  157. package/dist/backend/llvm/union-retype.test.js.map +1 -0
  158. package/dist/backend/llvm/wrapping-sums.d.ts +17 -0
  159. package/dist/backend/llvm/wrapping-sums.js +113 -0
  160. package/dist/backend/llvm/wrapping-sums.js.map +1 -0
  161. package/dist/backend/loop-polls.js +1 -0
  162. package/dist/backend/loop-polls.js.map +1 -1
  163. package/dist/backend/mangle.d.ts +9 -0
  164. package/dist/backend/mangle.js +15 -0
  165. package/dist/backend/mangle.js.map +1 -1
  166. package/dist/backend/may-throw.js +6 -12
  167. package/dist/backend/may-throw.js.map +1 -1
  168. package/dist/backend/may-throw.test.js +1 -1
  169. package/dist/backend/native/artifact-stamps.js +0 -2
  170. package/dist/backend/native/artifact-stamps.js.map +1 -1
  171. package/dist/backend/native/cache-warm.d.ts +1 -1
  172. package/dist/backend/native/cache-warm.js +2 -3
  173. package/dist/backend/native/cache-warm.js.map +1 -1
  174. package/dist/backend/native/compiler-fingerprint.d.ts +1 -1
  175. package/dist/backend/native/compiler-fingerprint.js +4 -7
  176. package/dist/backend/native/compiler-fingerprint.js.map +1 -1
  177. package/dist/backend/native/contracts.d.ts +3 -28
  178. package/dist/backend/native/driver.js +1 -3
  179. package/dist/backend/native/driver.js.map +1 -1
  180. package/dist/backend/native/executable.d.ts +0 -15
  181. package/dist/backend/native/executable.js +17 -172
  182. package/dist/backend/native/executable.js.map +1 -1
  183. package/dist/backend/native/tool-identity.js +0 -1
  184. package/dist/backend/native/tool-identity.js.map +1 -1
  185. package/dist/backend/native/vendor.d.ts +1 -1
  186. package/dist/backend/native/vendor.js +1 -1
  187. package/dist/backend/native/vendor.js.map +1 -1
  188. package/dist/backend/native-link-info-core.d.ts +0 -2
  189. package/dist/backend/native-link-info-core.js.map +1 -1
  190. package/dist/backend/native-toolchain.test.js +23 -33
  191. package/dist/backend/native-toolchain.test.js.map +1 -1
  192. package/dist/backend/publication.test.js +1 -1
  193. package/dist/backend/runtime-abi.d.ts +2 -2
  194. package/dist/backend/runtime-abi.js +2 -2
  195. package/dist/backend/runtime-pack-core.d.ts +1 -2
  196. package/dist/backend/runtime-pack-core.js +5 -14
  197. package/dist/backend/runtime-pack-core.js.map +1 -1
  198. package/dist/backend/runtime-pack-targets.test.js +3 -8
  199. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  200. package/dist/backend/runtime-pack.test.js +22 -19
  201. package/dist/backend/runtime-pack.test.js.map +1 -1
  202. package/dist/backend/target-diagnostics.d.ts +0 -5
  203. package/dist/backend/target-diagnostics.js +1 -11
  204. package/dist/backend/target-diagnostics.js.map +1 -1
  205. package/dist/backend/target-diagnostics.test.js +1 -1
  206. package/dist/backend/vendor-archives.d.ts +1 -7
  207. package/dist/backend/vendor-archives.js +9 -189
  208. package/dist/backend/vendor-archives.js.map +1 -1
  209. package/dist/backend/vendor-inputs.d.ts +0 -1
  210. package/dist/backend/vendor-inputs.js +0 -1
  211. package/dist/backend/vendor-inputs.js.map +1 -1
  212. package/dist/backend/warm-cache.js +3 -5
  213. package/dist/backend/warm-cache.js.map +1 -1
  214. package/dist/cli/command.js +4 -8
  215. package/dist/cli/command.js.map +1 -1
  216. package/dist/cli/host.d.ts +1 -1
  217. package/dist/cli/usage.d.ts +1 -5
  218. package/dist/cli/usage.js +4 -9
  219. package/dist/cli/usage.js.map +1 -1
  220. package/dist/compat/fetch-profile.d.ts +2 -2
  221. package/dist/compat/fetch-profile.js +16 -25
  222. package/dist/compat/fetch-profile.js.map +1 -1
  223. package/dist/compile-types.d.ts +2 -17
  224. package/dist/contracts/check.js +6 -6
  225. package/dist/contracts/check.js.map +1 -1
  226. package/dist/coverage/report.d.ts +5 -22
  227. package/dist/coverage/report.js +12 -76
  228. package/dist/coverage/report.js.map +1 -1
  229. package/dist/coverage/surface-manifest.d.ts +3 -3
  230. package/dist/coverage/surface-manifest.js +22 -27
  231. package/dist/coverage/surface-manifest.js.map +1 -1
  232. package/dist/coverage/verdict-cache.d.ts +1 -3
  233. package/dist/coverage/verdict-cache.js +2 -7
  234. package/dist/coverage/verdict-cache.js.map +1 -1
  235. package/dist/diagnostics/diagnostic.d.ts +11 -60
  236. package/dist/diagnostics/diagnostic.js +39 -118
  237. package/dist/diagnostics/diagnostic.js.map +1 -1
  238. package/dist/diagnostics/envelope.d.ts +3 -4
  239. package/dist/diagnostics/envelope.js +0 -9
  240. package/dist/diagnostics/envelope.js.map +1 -1
  241. package/dist/diagnostics/envelope.test.js +1 -1
  242. package/dist/diagnostics/envelope.test.js.map +1 -1
  243. package/dist/executable/executable-cache.d.ts +0 -3
  244. package/dist/executable/executable-cache.js +2 -4
  245. package/dist/executable/executable-cache.js.map +1 -1
  246. package/dist/executable/executable-cache.test.js +0 -4
  247. package/dist/executable/executable-cache.test.js.map +1 -1
  248. package/dist/executable/prepare.js +5 -2
  249. package/dist/executable/prepare.js.map +1 -1
  250. package/dist/frontend/analysis.js +10 -10
  251. package/dist/frontend/analysis.js.map +1 -1
  252. package/dist/frontend/cjs-syntax.js +0 -88
  253. package/dist/frontend/cjs-syntax.js.map +1 -1
  254. package/dist/frontend/dts-paths.d.ts +1 -1
  255. package/dist/frontend/dts-paths.js +1 -1
  256. package/dist/frontend/lowering/abstract-equality.js +1 -4
  257. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  258. package/dist/frontend/lowering/array-values.d.ts +14 -0
  259. package/dist/frontend/lowering/array-values.js +33 -11
  260. package/dist/frontend/lowering/array-values.js.map +1 -1
  261. package/dist/frontend/lowering/builtins/arguments.js +0 -13
  262. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  263. package/dist/frontend/lowering/builtins/crypto.d.ts +0 -4
  264. package/dist/frontend/lowering/builtins/crypto.js +0 -4
  265. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  266. package/dist/frontend/lowering/builtins/json.js +1 -39
  267. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  268. package/dist/frontend/lowering/builtins/module-resolution.d.ts +0 -15
  269. package/dist/frontend/lowering/builtins/module-resolution.js +5 -44
  270. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  271. package/dist/frontend/lowering/builtins/numbers.d.ts +0 -6
  272. package/dist/frontend/lowering/builtins/numbers.js +6 -57
  273. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  274. package/dist/frontend/lowering/builtins/promises.js +4 -67
  275. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  276. package/dist/frontend/lowering/builtins/workers.js +1 -1
  277. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  278. package/dist/frontend/lowering/call-arguments.d.ts +1 -37
  279. package/dist/frontend/lowering/call-arguments.js +11 -94
  280. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  281. package/dist/frontend/lowering/call-signatures.d.ts +1 -6
  282. package/dist/frontend/lowering/call-signatures.js +16 -68
  283. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  284. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +19 -4
  285. package/dist/frontend/lowering/class-dynamic-dispatch.js +168 -98
  286. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  287. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +44 -4
  288. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  289. package/dist/frontend/lowering/class-method-mutations.js +0 -2
  290. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  291. package/dist/frontend/lowering/class-protocols.js +1 -1
  292. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  293. package/dist/frontend/lowering/coercions/function-adapters.js +5 -35
  294. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  295. package/dist/frontend/lowering/coercions/state.d.ts +0 -1
  296. package/dist/frontend/lowering/coercions/state.js +0 -1
  297. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  298. package/dist/frontend/lowering/coercions/structural-plans.js +2 -4
  299. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  300. package/dist/frontend/lowering/coercions/structural.js +2 -12
  301. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  302. package/dist/frontend/lowering/coercions/unions.js +0 -1
  303. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  304. package/dist/frontend/lowering/containers/array-callbacks.js +49 -28
  305. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  306. package/dist/frontend/lowering/containers/array-construction.js +2 -3
  307. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  308. package/dist/frontend/lowering/containers/array-methods.js +10 -54
  309. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  310. package/dist/frontend/lowering/containers/array-pipelines.d.ts +54 -0
  311. package/dist/frontend/lowering/containers/array-pipelines.js +1827 -0
  312. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -0
  313. package/dist/frontend/lowering/containers/bytes.js +0 -1
  314. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  315. package/dist/frontend/lowering/containers/callback-arguments.js +2 -10
  316. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  317. package/dist/frontend/lowering/containers/collection-methods.js +1 -6
  318. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  319. package/dist/frontend/lowering/containers/exec-result-uses.d.ts +10 -0
  320. package/dist/frontend/lowering/containers/exec-result-uses.js +88 -0
  321. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -0
  322. package/dist/frontend/lowering/containers/indexed-objects.js +0 -2
  323. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  324. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +0 -6
  325. package/dist/frontend/lowering/containers/string-and-regexp.js +17 -17
  326. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  327. package/dist/frontend/lowering/containers/string-replacement.d.ts +2 -1
  328. package/dist/frontend/lowering/containers/string-replacement.js +32 -136
  329. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  330. package/dist/frontend/lowering/devirtualize.d.ts +33 -0
  331. package/dist/frontend/lowering/devirtualize.js +199 -0
  332. package/dist/frontend/lowering/devirtualize.js.map +1 -0
  333. package/dist/frontend/lowering/expressions/evaluation-safety.js +0 -3
  334. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  335. package/dist/frontend/lowering/expressions/native-proxy.js +1 -1
  336. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  337. package/dist/frontend/lowering/expressions/nullish-assignment.js +55 -8
  338. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  339. package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -8
  340. package/dist/frontend/lowering/expressions/object-literals.js +8 -35
  341. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  342. package/dist/frontend/lowering/expressions/optional-chains.d.ts +0 -4
  343. package/dist/frontend/lowering/expressions/optional-chains.js +3 -66
  344. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  345. package/dist/frontend/lowering/function-context.js +0 -1
  346. package/dist/frontend/lowering/function-context.js.map +1 -1
  347. package/dist/frontend/lowering/generic-functions.js +0 -1
  348. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  349. package/dist/frontend/lowering/identifier-uses.d.ts +7 -0
  350. package/dist/frontend/lowering/identifier-uses.js +23 -0
  351. package/dist/frontend/lowering/identifier-uses.js.map +1 -0
  352. package/dist/frontend/lowering/iterator-adapters.js +51 -3
  353. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  354. package/dist/frontend/lowering/lib-boundary.js +10 -77
  355. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  356. package/dist/frontend/lowering/lower-array-sort.js +14 -10
  357. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  358. package/dist/frontend/lowering/lower-array-sort.test.js +2 -2
  359. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  360. package/dist/frontend/lowering/lower-assert.js +2 -3
  361. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  362. package/dist/frontend/lowering/lower-async-iteration.js +1 -1
  363. package/dist/frontend/lowering/lower-calls.d.ts +2 -27
  364. package/dist/frontend/lowering/lower-calls.js +111 -493
  365. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  366. package/dist/frontend/lowering/lower-classes.js +12 -60
  367. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  368. package/dist/frontend/lowering/lower-comptime.js +2 -3
  369. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  370. package/dist/frontend/lowering/lower-console.d.ts +14 -0
  371. package/dist/frontend/lowering/lower-console.js +195 -0
  372. package/dist/frontend/lowering/lower-console.js.map +1 -0
  373. package/dist/frontend/lowering/lower-enums.js +5 -8
  374. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  375. package/dist/frontend/lowering/lower-event-emitter.js +3 -4
  376. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  377. package/dist/frontend/lowering/lower-expando.js +3 -5
  378. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  379. package/dist/frontend/lowering/lower-exprs.d.ts +0 -8
  380. package/dist/frontend/lowering/lower-exprs.js +180 -905
  381. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  382. package/dist/frontend/lowering/lower-functions.js +9 -8
  383. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  384. package/dist/frontend/lowering/lower-generators.d.ts +10 -0
  385. package/dist/frontend/lowering/lower-generators.js +108 -41
  386. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  387. package/dist/frontend/lowering/lower-inspect.js +1 -50
  388. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  389. package/dist/frontend/lowering/lower-modules.d.ts +0 -43
  390. package/dist/frontend/lowering/lower-modules.js +29 -329
  391. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  392. package/dist/frontend/lowering/lower-modules.test.js +5 -5
  393. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  394. package/dist/frontend/lowering/lower-server.js +0 -30
  395. package/dist/frontend/lowering/lower-server.js.map +1 -1
  396. package/dist/frontend/lowering/lower-stdlib.d.ts +98 -0
  397. package/dist/frontend/lowering/{lower-island.js → lower-stdlib.js} +97 -1160
  398. package/dist/frontend/lowering/lower-stdlib.js.map +1 -0
  399. package/dist/frontend/lowering/lower-stmts.d.ts +0 -16
  400. package/dist/frontend/lowering/lower-stmts.js +58 -1016
  401. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  402. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  403. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  404. package/dist/frontend/lowering/lower-stream.js +14 -13
  405. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  406. package/dist/frontend/lowering/lowerer.d.ts +42 -155
  407. package/dist/frontend/lowering/lowerer.js +192 -816
  408. package/dist/frontend/lowering/lowerer.js.map +1 -1
  409. package/dist/frontend/lowering/lowerer.test.js +4 -51
  410. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  411. package/dist/frontend/lowering/nan-coded-reads.d.ts +16 -0
  412. package/dist/frontend/lowering/nan-coded-reads.js +108 -1
  413. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  414. package/dist/frontend/lowering/narrowing-stability.js +1 -1
  415. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  416. package/dist/frontend/lowering/optional-arguments.js +0 -2
  417. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  418. package/dist/frontend/lowering/runtime-optional-bounds.d.ts +4 -0
  419. package/dist/frontend/lowering/runtime-optional-bounds.js +2 -0
  420. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  421. package/dist/frontend/lowering/runtime-optional-bounds.test.js +27 -0
  422. package/dist/frontend/lowering/runtime-optional-bounds.test.js.map +1 -1
  423. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  424. package/dist/frontend/lowering/split-consumers.js +2 -18
  425. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  426. package/dist/frontend/lowering/strict-equality.js +1 -1
  427. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  428. package/dist/frontend/lowering/surfaces.d.ts +6 -45
  429. package/dist/frontend/lowering/surfaces.js +8 -73
  430. package/dist/frontend/lowering/surfaces.js.map +1 -1
  431. package/dist/frontend/lowering/union-retag.d.ts +6 -1
  432. package/dist/frontend/lowering/union-retag.js +64 -1
  433. package/dist/frontend/lowering/union-retag.js.map +1 -1
  434. package/dist/frontend/lowering/union-retag.test.js +46 -0
  435. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  436. package/dist/frontend/module-syntax.d.ts +0 -3
  437. package/dist/frontend/module-syntax.js.map +1 -1
  438. package/dist/frontend/npm-node.d.ts +0 -7
  439. package/dist/frontend/npm-node.js +0 -7
  440. package/dist/frontend/npm-node.js.map +1 -1
  441. package/dist/frontend/npm-static-rewrite-syntax.d.ts +1 -1
  442. package/dist/frontend/npm-static-rewrite-syntax.js +6 -82
  443. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  444. package/dist/frontend/npm-static.d.ts +1 -1
  445. package/dist/frontend/npm-static.js +6 -71
  446. package/dist/frontend/npm-static.js.map +1 -1
  447. package/dist/frontend/npm.d.ts +3 -319
  448. package/dist/frontend/npm.js +6 -1007
  449. package/dist/frontend/npm.js.map +1 -1
  450. package/dist/frontend/npm.test.js +2 -197
  451. package/dist/frontend/npm.test.js.map +1 -1
  452. package/dist/frontend/pipeline-native.js +1 -2
  453. package/dist/frontend/pipeline-native.js.map +1 -1
  454. package/dist/frontend/pipeline.d.ts +3 -11
  455. package/dist/frontend/pipeline.js +37 -56
  456. package/dist/frontend/pipeline.js.map +1 -1
  457. package/dist/frontend/pipeline.test.js +12 -6
  458. package/dist/frontend/pipeline.test.js.map +1 -1
  459. package/dist/frontend/program.d.ts +0 -34
  460. package/dist/frontend/program.js +12 -97
  461. package/dist/frontend/program.js.map +1 -1
  462. package/dist/frontend/provenance-core.d.ts +0 -4
  463. package/dist/frontend/provenance-core.js +4 -37
  464. package/dist/frontend/provenance-core.js.map +1 -1
  465. package/dist/frontend/provenance-registry.d.ts +0 -4
  466. package/dist/frontend/provenance-registry.js +0 -20
  467. package/dist/frontend/provenance-registry.js.map +1 -1
  468. package/dist/frontend/resolve.d.ts +0 -12
  469. package/dist/frontend/resolve.js +0 -34
  470. package/dist/frontend/resolve.js.map +1 -1
  471. package/dist/frontend/runtime-resolve.js +2 -2
  472. package/dist/frontend/runtime-resolve.js.map +1 -1
  473. package/dist/frontend/services-node.js +2 -3
  474. package/dist/frontend/services-node.js.map +1 -1
  475. package/dist/frontend/services.d.ts +1 -8
  476. package/dist/frontend/services.js +2 -22
  477. package/dist/frontend/services.js.map +1 -1
  478. package/dist/frontend/services.test.js +0 -38
  479. package/dist/frontend/services.test.js.map +1 -1
  480. package/dist/frontend/tsc-codes.js +0 -11
  481. package/dist/frontend/tsc-codes.js.map +1 -1
  482. package/dist/frontend/type-mapper.d.ts +2 -27
  483. package/dist/frontend/type-mapper.js +58 -156
  484. package/dist/frontend/type-mapper.js.map +1 -1
  485. package/dist/index.d.ts +1 -1
  486. package/dist/index.js +7 -10
  487. package/dist/index.js.map +1 -1
  488. package/dist/ir/api.d.ts +1 -1
  489. package/dist/ir/api.js +1 -1
  490. package/dist/ir/api.js.map +1 -1
  491. package/dist/ir/builtin-effects.js +2 -5
  492. package/dist/ir/builtin-effects.js.map +1 -1
  493. package/dist/ir/builtin-signatures.d.ts +1 -1
  494. package/dist/ir/builtin-signatures.js +13 -56
  495. package/dist/ir/builtin-signatures.js.map +1 -1
  496. package/dist/ir/constant-globals.test.js +1 -1
  497. package/dist/ir/constant-tables.test.js +1 -1
  498. package/dist/ir/final-fields.test.js +1 -1
  499. package/dist/ir/function-references.d.ts +12 -0
  500. package/dist/ir/function-references.js +29 -0
  501. package/dist/ir/function-references.js.map +1 -0
  502. package/dist/ir/function-references.test.d.ts +1 -0
  503. package/dist/ir/function-references.test.js +276 -0
  504. package/dist/ir/function-references.test.js.map +1 -0
  505. package/dist/ir/initializer-bindings.test.js +1 -1
  506. package/dist/ir/int32-slots.d.ts +10 -7
  507. package/dist/ir/int32-slots.js +219 -68
  508. package/dist/ir/int32-slots.js.map +1 -1
  509. package/dist/ir/int32-slots.test.js +39 -2
  510. package/dist/ir/int32-slots.test.js.map +1 -1
  511. package/dist/ir/integer-ranges.d.ts +4 -4
  512. package/dist/ir/integer-ranges.js +89 -64
  513. package/dist/ir/integer-ranges.js.map +1 -1
  514. package/dist/ir/integer-ranges.test.js +71 -9
  515. package/dist/ir/integer-ranges.test.js.map +1 -1
  516. package/dist/ir/intrinsic-signatures.js +1 -0
  517. package/dist/ir/intrinsic-signatures.js.map +1 -1
  518. package/dist/ir/ir.d.ts +64 -290
  519. package/dist/ir/ir.js +11 -259
  520. package/dist/ir/ir.js.map +1 -1
  521. package/dist/ir/ir.test.js +2 -7
  522. package/dist/ir/ir.test.js.map +1 -1
  523. package/dist/ir/runtime-features.d.ts +3 -30
  524. package/dist/ir/runtime-features.js +8 -43
  525. package/dist/ir/runtime-features.js.map +1 -1
  526. package/dist/ir/scalar-records.test.js +1 -1
  527. package/dist/ir/serialize.d.ts +1 -1
  528. package/dist/ir/serialize.js +3 -3
  529. package/dist/ir/serialize.js.map +1 -1
  530. package/dist/ir/traverse.js +4 -21
  531. package/dist/ir/traverse.js.map +1 -1
  532. package/dist/ir/unshare.test.js +1 -1
  533. package/dist/ir/validate.js +66 -213
  534. package/dist/ir/validate.js.map +1 -1
  535. package/dist/ir/validate.test.js +31 -13
  536. package/dist/ir/validate.test.js.map +1 -1
  537. package/dist/library/fence-eval.test.js +1 -1
  538. package/dist/library/int-infer.test.js +4 -4
  539. package/dist/library/library-cache.test.js +5 -5
  540. package/dist/library/prepare.js +5 -20
  541. package/dist/library/prepare.js.map +1 -1
  542. package/dist/native/cli.js +0 -2
  543. package/dist/native/cli.js.map +1 -1
  544. package/dist/native/compiler.test.js +2 -4
  545. package/dist/native/compiler.test.js.map +1 -1
  546. package/dist/native/prepare.js +2 -4
  547. package/dist/native/prepare.js.map +1 -1
  548. package/dist/native/sanitizer.js +2 -16
  549. package/dist/native/sanitizer.js.map +1 -1
  550. package/dist/native/sanitizer.test.js +0 -3
  551. package/dist/native/sanitizer.test.js.map +1 -1
  552. package/dist/startup-cache.js +0 -2
  553. package/dist/startup-cache.js.map +1 -1
  554. package/package.json +20 -20
  555. package/surface-manifest.json +80 -104
  556. package/dist/backend/llvm/expr-island.d.ts +0 -15
  557. package/dist/backend/llvm/expr-island.js +0 -709
  558. package/dist/backend/llvm/expr-island.js.map +0 -1
  559. package/dist/frontend/lowering/coercions/island.d.ts +0 -37
  560. package/dist/frontend/lowering/coercions/island.js +0 -350
  561. package/dist/frontend/lowering/coercions/island.js.map +0 -1
  562. package/dist/frontend/lowering/lower-island.d.ts +0 -229
  563. package/dist/frontend/lowering/lower-island.js.map +0 -1
  564. package/dist/frontend/lowering/lower-island.test.js +0 -56
  565. package/dist/frontend/lowering/lower-island.test.js.map +0 -1
  566. package/dist/frontend/npm-fetch-analysis.d.ts +0 -17
  567. package/dist/frontend/npm-fetch-analysis.js +0 -109
  568. package/dist/frontend/npm-fetch-analysis.js.map +0 -1
  569. package/dist/frontend/npm-fetch-analysis.test.js +0 -130
  570. package/dist/frontend/npm-fetch-analysis.test.js.map +0 -1
  571. package/dist/frontend/npm-fetch-node.d.ts +0 -2
  572. package/dist/frontend/npm-fetch-node.js +0 -12
  573. package/dist/frontend/npm-fetch-node.js.map +0 -1
  574. package/dist/frontend/npm-fetch-syntax.d.ts +0 -6
  575. package/dist/frontend/npm-fetch-syntax.js +0 -202
  576. package/dist/frontend/npm-fetch-syntax.js.map +0 -1
  577. package/dist/native/runtime-typescript.d.ts +0 -4
  578. package/dist/native/runtime-typescript.js +0 -74
  579. package/dist/native/runtime-typescript.js.map +0 -1
  580. package/dist/native/runtime-typescript.test.js +0 -41
  581. package/dist/native/runtime-typescript.test.js.map +0 -1
  582. /package/dist/{frontend/lowering/lower-island.test.d.ts → backend/llvm/expr-calls.test.d.ts} +0 -0
  583. /package/dist/{frontend/npm-fetch-analysis.test.d.ts → backend/llvm/int32-abi.test.d.ts} +0 -0
  584. /package/dist/{native/runtime-typescript.test.d.ts → backend/llvm/regex-matchers.test.d.ts} +0 -0
@@ -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":
@@ -1252,6 +1237,8 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1252
1237
  case "unionKeyGet":
1253
1238
  case "unionIsTag":
1254
1239
  return checkUnionExpr(e);
1240
+ case "unionRetype":
1241
+ return checkUnionRetype(e);
1255
1242
  case "intrinsic":
1256
1243
  return checkIntrinsicExpr(e);
1257
1244
  case "libCall":
@@ -1266,11 +1253,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1266
1253
  case "newPromise":
1267
1254
  case "promiseWithResolvers":
1268
1255
  return checkAsyncExpr(e);
1269
- case "jsMarshal":
1270
- case "jsOp":
1271
- case "jsExit":
1272
- case "jsBridgePromise":
1273
- return checkIslandExpr(e);
1274
1256
  default: {
1275
1257
  const _exhaustive = e;
1276
1258
  void _exhaustive;
@@ -1517,16 +1499,16 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1517
1499
  }
1518
1500
  case "dynDestrCheck": {
1519
1501
  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);
1502
+ if (e.value.type.kind !== "dyn")
1503
+ err("dynDestrCheck value must be dyn", e.loc);
1522
1504
  if (e.type.kind !== e.value.type.kind)
1523
1505
  err("dynDestrCheck must have its value's type", e.loc);
1524
1506
  break;
1525
1507
  }
1526
1508
  case "dynIterN": {
1527
1509
  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);
1510
+ if (e.value.type.kind !== "dyn")
1511
+ err("dynIterN value must be dyn", e.loc);
1530
1512
  if (e.type.kind !== e.value.type.kind)
1531
1513
  err("dynIterN must have its value's type", e.loc);
1532
1514
  if (!Number.isInteger(e.count) || e.count < 0)
@@ -1611,24 +1593,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1611
1593
  break;
1612
1594
  case "optChain": {
1613
1595
  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
1596
  // A dyn (dyn) chain (`rawName?.match(re)` on a JSON.parse result):
1633
1597
  // the nullish test reads the node's kind tag; the body is the
1634
1598
  // validated dynamic dispatch, its result converted back into the
@@ -1817,7 +1781,10 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
1817
1781
  if (want)
1818
1782
  expectType(a, want, `regexIntrinsic ${e.method} arg ${i}`);
1819
1783
  });
1820
- if (e.method === "match" || e.method === "exec") {
1784
+ if (e.method === "execGroups" && e.args[1]?.kind !== "numLit") {
1785
+ err("regexIntrinsic execGroups mask must be a numeric literal", e.loc);
1786
+ }
1787
+ if (e.method === "match" || e.method === "exec" || e.method === "execGroups") {
1821
1788
  // The `string[] | null` union (program-dependent id) — checked
1822
1789
  // by arms, like the libCall case checks process.envGet.
1823
1790
  const def = e.type.kind === "union" ? unions.get(e.type.unionId) : undefined;
@@ -2153,24 +2120,28 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
2153
2120
  ? { argTypes: [], result: e.type } // union-checked below
2154
2121
  : e.method === "sortValues"
2155
2122
  ? { argTypes: [F64, null], result: VOID }
2156
- : { argTypes: [], result: F64 }; // length
2123
+ : e.method === "sortDense"
2124
+ ? { argTypes: [null, BOOL], result: BOOL }
2125
+ : { argTypes: [], result: F64 }; // length
2157
2126
  if ((e.method === "sortPrimitive" || e.method === "toSortedPrimitive") &&
2158
2127
  elem.kind !== "string" &&
2159
2128
  elem.kind !== "f64" &&
2160
2129
  elem.kind !== "bool") {
2161
2130
  err(`arrIntrinsic ${e.method} requires primitive elements, got ${elem.kind}`, e.loc);
2162
2131
  }
2163
- if (e.method === "sortValues") {
2132
+ if (e.method === "sortValues" || e.method === "sortDense") {
2164
2133
  const arms = elem.kind === "union" ? unions.get(elem.unionId)?.arms : undefined;
2165
2134
  if (!isSortValuesElement(elem, arms))
2166
- err(`arrIntrinsic sortValues on ${elem.kind} elements`, e.loc);
2167
- const cmp = e.args[1]?.type;
2135
+ err(`arrIntrinsic ${e.method} on ${elem.kind} elements`, e.loc);
2136
+ const cmp = e.args[e.method === "sortValues" ? 1 : 0]?.type;
2168
2137
  if (!cmp ||
2169
2138
  cmp.kind !== "func" ||
2170
2139
  cmp.params.length > 2 ||
2171
2140
  !cmp.params.every((param) => typeEquals(param, elem)) ||
2172
2141
  cmp.ret.kind !== "f64")
2173
- err("arrIntrinsic sortValues comparator must be (elem, elem) => number", e.loc);
2142
+ err(`arrIntrinsic ${e.method} comparator must be (elem, elem) => number`, e.loc);
2143
+ if (e.method === "sortDense" && e.args[1]?.kind !== "boolLit")
2144
+ err("arrIntrinsic sortDense owned flag must be a boolean literal", e.loc);
2174
2145
  }
2175
2146
  if (e.method === "getNumber" && elem.kind !== "f64") {
2176
2147
  err(`arrIntrinsic getNumber requires f64 elements, got ${elem.kind}`, e.loc);
@@ -2480,7 +2451,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
2480
2451
  // declared params plus that one must match.
2481
2452
  if (e.type.kind === "func") {
2482
2453
  const wantRet = callSiteReturnType(target);
2483
- // ISLAND-REST types (restAbi jsval) SPELL their trailing engine
2484
2454
  // array param — the lifted signature matches directly, no
2485
2455
  // hidden slot.
2486
2456
  const hiddenRest = e.type.rest === true && e.type.restAbi === undefined;
@@ -3037,18 +3007,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
3037
3007
  }
3038
3008
  break;
3039
3009
  }
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
3010
  case "dynCall": {
3053
3011
  checkExpr(e.callee);
3054
3012
  if (e.calleeNameValue !== undefined) {
@@ -3262,6 +3220,26 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
3262
3220
  }
3263
3221
  }
3264
3222
  }
3223
+ function checkUnionRetype(e) {
3224
+ checkExpr(e.value);
3225
+ const from = unions.get(e.fromId);
3226
+ const to = unions.get(e.unionId);
3227
+ if (!from || !to) {
3228
+ err(`unionRetype between undeclared unions "${e.fromId}" and "${e.unionId}"`, e.loc);
3229
+ return;
3230
+ }
3231
+ expectType(e.value, { kind: "union", unionId: e.fromId }, "unionRetype operand");
3232
+ if (!typeEquals(e.type, { kind: "union", unionId: e.unionId }))
3233
+ err(`unionRetype type ${e.type.kind} != union ${e.unionId}`, e.loc);
3234
+ if (e.tags.length === 0)
3235
+ err(`unionRetype with no tags`, e.loc);
3236
+ for (const tag of e.tags) {
3237
+ const arm = from.arms[tag];
3238
+ const target = to.arms[tag];
3239
+ if (!Number.isInteger(tag) || !arm || !target || !typeEquals(arm, target))
3240
+ err(`unionRetype tag ${tag} is not the same arm in ${e.fromId} and ${e.unionId}`, e.loc);
3241
+ }
3242
+ }
3265
3243
  function checkUnionExpr(e) {
3266
3244
  switch (e.kind) {
3267
3245
  case "unionNarrow": {
@@ -4548,14 +4526,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
4548
4526
  return false;
4549
4527
  }
4550
4528
  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
4529
  if (e.fn === "global.undefRead") {
4560
4530
  // Always throws — the result type is whatever the declared type
4561
4531
  // of the undefined global mapped to (never materialized).
@@ -5002,6 +4972,8 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
5002
4972
  }
5003
4973
  if (!fn.async)
5004
4974
  err("await outside an async function", e.loc);
4975
+ if (e.adopt === true && fn.generator !== undefined)
4976
+ err("returned-promise adoption inside a generator", e.loc);
5005
4977
  break;
5006
4978
  }
5007
4979
  case "yieldExpr": {
@@ -5044,6 +5016,26 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
5044
5016
  const genT = e.gen.type;
5045
5017
  if (e.arg !== null)
5046
5018
  checkExpr(e.arg);
5019
+ if (e.mode === "step" || e.mode === "value" || e.mode === "close") {
5020
+ if (genT.async)
5021
+ err(`genResume ${e.mode} on an async generator`, e.loc);
5022
+ if (e.arg !== null)
5023
+ err(`genResume ${e.mode} with an argument`, e.loc);
5024
+ if (e.mode === "step") {
5025
+ if (genT.nextT.kind !== "undefinedT" && genT.nextT.kind !== "dyn")
5026
+ err(`genResume step on a ${typeKey(genT.nextT)} next-channel`, e.loc);
5027
+ if (e.type.kind !== "bool")
5028
+ err(`genResume step result ${typeKey(e.type)}`, e.loc);
5029
+ }
5030
+ else if (e.mode === "close") {
5031
+ if (e.type.kind !== "void")
5032
+ err(`genResume close result ${typeKey(e.type)}`, e.loc);
5033
+ }
5034
+ else if (genT.yieldT.kind === "void" || !typeEquals(e.type, genT.yieldT)) {
5035
+ err(`genResume value ${typeKey(e.type)} != yield channel ${typeKey(genT.yieldT)}`, e.loc);
5036
+ }
5037
+ break;
5038
+ }
5047
5039
  if (e.mode === "next") {
5048
5040
  if (e.arg === null) {
5049
5041
  if (genT.nextT.kind !== "undefinedT" && genT.nextT.kind !== "dyn") {
@@ -5211,145 +5203,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
5211
5203
  }
5212
5204
  }
5213
5205
  }
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
5206
  // `continue` needs an enclosing loop; `break` an enclosing loop OR switch.
5354
5207
  let loopDepth = 0;
5355
5208
  let breakableDepth = 0;