@scriptc/compiler 0.2.7 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +2 -0
  2. package/dist/backend/llvm/alloc.d.ts +3 -0
  3. package/dist/backend/llvm/alloc.js +54 -13
  4. package/dist/backend/llvm/alloc.js.map +1 -1
  5. package/dist/backend/llvm/blocks.d.ts +9 -0
  6. package/dist/backend/llvm/blocks.js +9 -0
  7. package/dist/backend/llvm/blocks.js.map +1 -1
  8. package/dist/backend/llvm/borrowed-receivers.d.ts +7 -0
  9. package/dist/backend/llvm/borrowed-receivers.js +39 -0
  10. package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
  11. package/dist/backend/llvm/call-lifetimes.d.ts +4 -1
  12. package/dist/backend/llvm/call-lifetimes.js +14 -3
  13. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  14. package/dist/backend/llvm/call-lifetimes.test.js +8 -3
  15. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  16. package/dist/backend/llvm/checked-narrows.d.ts +24 -0
  17. package/dist/backend/llvm/checked-narrows.js +108 -0
  18. package/dist/backend/llvm/checked-narrows.js.map +1 -0
  19. package/dist/backend/llvm/checked-narrows.test.d.ts +1 -0
  20. package/dist/backend/llvm/checked-narrows.test.js +208 -0
  21. package/dist/backend/llvm/checked-narrows.test.js.map +1 -0
  22. package/dist/backend/llvm/classes.d.ts +13 -1
  23. package/dist/backend/llvm/classes.js +26 -18
  24. package/dist/backend/llvm/classes.js.map +1 -1
  25. package/dist/backend/llvm/classes.test.js +32 -3
  26. package/dist/backend/llvm/classes.test.js.map +1 -1
  27. package/dist/backend/llvm/debug-info.d.ts +6 -2
  28. package/dist/backend/llvm/debug-info.js +11 -1
  29. package/dist/backend/llvm/debug-info.js.map +1 -1
  30. package/dist/backend/llvm/dense-array-access.test.js +89 -0
  31. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  32. package/dist/backend/llvm/dyn.d.ts +4 -0
  33. package/dist/backend/llvm/dyn.js +31 -20
  34. package/dist/backend/llvm/dyn.js.map +1 -1
  35. package/dist/backend/llvm/emitter.d.ts +184 -11
  36. package/dist/backend/llvm/emitter.js +1189 -125
  37. package/dist/backend/llvm/emitter.js.map +1 -1
  38. package/dist/backend/llvm/emitter.test.js +21 -1
  39. package/dist/backend/llvm/emitter.test.js.map +1 -1
  40. package/dist/backend/llvm/expr-async.js +4 -4
  41. package/dist/backend/llvm/expr-async.js.map +1 -1
  42. package/dist/backend/llvm/expr-bytes.d.ts +1 -1
  43. package/dist/backend/llvm/expr-bytes.js +85 -8
  44. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  45. package/dist/backend/llvm/expr-callbacks.js +29 -21
  46. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  47. package/dist/backend/llvm/expr-calls.d.ts +5 -0
  48. package/dist/backend/llvm/expr-calls.js +55 -10
  49. package/dist/backend/llvm/expr-calls.js.map +1 -1
  50. package/dist/backend/llvm/expr-containers.d.ts +7 -1
  51. package/dist/backend/llvm/expr-containers.js +230 -27
  52. package/dist/backend/llvm/expr-containers.js.map +1 -1
  53. package/dist/backend/llvm/expr-control.js +25 -10
  54. package/dist/backend/llvm/expr-control.js.map +1 -1
  55. package/dist/backend/llvm/expr-dynamic.js +72 -21
  56. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  57. package/dist/backend/llvm/expr-island.js +3 -8
  58. package/dist/backend/llvm/expr-island.js.map +1 -1
  59. package/dist/backend/llvm/expr-primitives.js +41 -12
  60. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  61. package/dist/backend/llvm/expr-primitives.test.js +50 -2
  62. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  63. package/dist/backend/llvm/expr-records.js +28 -14
  64. package/dist/backend/llvm/expr-records.js.map +1 -1
  65. package/dist/backend/llvm/expr-stream-bridges.js +41 -31
  66. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  67. package/dist/backend/llvm/expr-stream-callbacks.js +6 -3
  68. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  69. package/dist/backend/llvm/layouts.d.ts +2 -1
  70. package/dist/backend/llvm/layouts.js +2 -2
  71. package/dist/backend/llvm/layouts.js.map +1 -1
  72. package/dist/backend/llvm/lib-abi.js +10 -0
  73. package/dist/backend/llvm/lib-abi.js.map +1 -1
  74. package/dist/backend/llvm/lib-filesystem.js +7 -11
  75. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  76. package/dist/backend/llvm/lib-process.js +8 -8
  77. package/dist/backend/llvm/lib-process.js.map +1 -1
  78. package/dist/backend/llvm/lib-shared.js +1 -0
  79. package/dist/backend/llvm/lib-shared.js.map +1 -1
  80. package/dist/backend/llvm/local-array-reads.js +73 -13
  81. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  82. package/dist/backend/llvm/local-array-reads.test.js +7 -3
  83. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  84. package/dist/backend/llvm/local-union-storage.js +10 -6
  85. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  86. package/dist/backend/llvm/local-union-storage.test.js +3 -2
  87. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  88. package/dist/backend/llvm/map-number-lookup.d.ts +18 -0
  89. package/dist/backend/llvm/map-number-lookup.js +62 -0
  90. package/dist/backend/llvm/map-number-lookup.js.map +1 -0
  91. package/dist/backend/llvm/map-read-lifetimes.d.ts +6 -0
  92. package/dist/backend/llvm/map-read-lifetimes.js +24 -3
  93. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  94. package/dist/backend/llvm/map-read-lifetimes.test.js +38 -19
  95. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  96. package/dist/backend/llvm/nullable-unions.d.ts +68 -0
  97. package/dist/backend/llvm/nullable-unions.js +132 -0
  98. package/dist/backend/llvm/nullable-unions.js.map +1 -0
  99. package/dist/backend/llvm/publish.d.ts +58 -0
  100. package/dist/backend/llvm/publish.js +286 -0
  101. package/dist/backend/llvm/publish.js.map +1 -0
  102. package/dist/backend/llvm/rebound-parameters.d.ts +12 -0
  103. package/dist/backend/llvm/rebound-parameters.js +72 -0
  104. package/dist/backend/llvm/rebound-parameters.js.map +1 -0
  105. package/dist/backend/llvm/rebound-parameters.test.d.ts +1 -0
  106. package/dist/backend/llvm/rebound-parameters.test.js +67 -0
  107. package/dist/backend/llvm/rebound-parameters.test.js.map +1 -0
  108. package/dist/backend/llvm/reference-effects.d.ts +18 -2
  109. package/dist/backend/llvm/reference-effects.js +106 -16
  110. package/dist/backend/llvm/reference-effects.js.map +1 -1
  111. package/dist/backend/llvm/reference-effects.test.js +52 -1
  112. package/dist/backend/llvm/reference-effects.test.js.map +1 -1
  113. package/dist/backend/llvm/shapes.d.ts +45 -17
  114. package/dist/backend/llvm/shapes.js +131 -53
  115. package/dist/backend/llvm/shapes.js.map +1 -1
  116. package/dist/backend/llvm/shapes.test.js +33 -8
  117. package/dist/backend/llvm/shapes.test.js.map +1 -1
  118. package/dist/backend/llvm/stack-unions.test.js +5 -2
  119. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  120. package/dist/backend/llvm/string-construction.d.ts +10 -0
  121. package/dist/backend/llvm/string-construction.js +42 -0
  122. package/dist/backend/llvm/string-construction.js.map +1 -1
  123. package/dist/backend/llvm/string-key-hash.d.ts +9 -2
  124. package/dist/backend/llvm/string-key-hash.js +20 -3
  125. package/dist/backend/llvm/string-key-hash.js.map +1 -1
  126. package/dist/backend/llvm/string-key-hash.test.js +14 -3
  127. package/dist/backend/llvm/string-key-hash.test.js.map +1 -1
  128. package/dist/backend/llvm/string-lifetimes.test.js +24 -11
  129. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  130. package/dist/backend/llvm/string-reads.d.ts +7 -0
  131. package/dist/backend/llvm/string-reads.js +76 -0
  132. package/dist/backend/llvm/string-reads.js.map +1 -0
  133. package/dist/backend/llvm/switch-dispatch.test.js +1 -1
  134. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
  135. package/dist/backend/llvm/test-boxed-unions.d.ts +5 -0
  136. package/dist/backend/llvm/test-boxed-unions.js +13 -0
  137. package/dist/backend/llvm/test-boxed-unions.js.map +1 -0
  138. package/dist/backend/llvm/union-repr.d.ts +15 -0
  139. package/dist/backend/llvm/union-repr.js +89 -0
  140. package/dist/backend/llvm/union-repr.js.map +1 -0
  141. package/dist/backend/llvm/virtual-borrows.d.ts +31 -0
  142. package/dist/backend/llvm/virtual-borrows.js +82 -0
  143. package/dist/backend/llvm/virtual-borrows.js.map +1 -0
  144. package/dist/backend/llvm/walk-borrows.d.ts +43 -0
  145. package/dist/backend/llvm/walk-borrows.js +150 -0
  146. package/dist/backend/llvm/walk-borrows.js.map +1 -0
  147. package/dist/backend/llvm/walk-borrows.test.d.ts +1 -0
  148. package/dist/backend/llvm/walk-borrows.test.js +119 -0
  149. package/dist/backend/llvm/walk-borrows.test.js.map +1 -0
  150. package/dist/backend/llvm/walkers.d.ts +5 -1
  151. package/dist/backend/llvm/walkers.js +24 -21
  152. package/dist/backend/llvm/walkers.js.map +1 -1
  153. package/dist/backend/may-throw.d.ts +29 -1
  154. package/dist/backend/may-throw.js +346 -3
  155. package/dist/backend/may-throw.js.map +1 -1
  156. package/dist/backend/may-throw.test.js +113 -1
  157. package/dist/backend/may-throw.test.js.map +1 -1
  158. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  159. package/dist/backend/native/runtime-inputs.js +1 -0
  160. package/dist/backend/native/runtime-inputs.js.map +1 -1
  161. package/dist/backend/native-codegen-core.d.ts +7 -5
  162. package/dist/backend/native-codegen-core.js +14 -9
  163. package/dist/backend/native-codegen-core.js.map +1 -1
  164. package/dist/backend/native-codegen.d.ts +4 -0
  165. package/dist/backend/native-codegen.js +49 -2
  166. package/dist/backend/native-codegen.js.map +1 -1
  167. package/dist/backend/native-codegen.test.js +41 -10
  168. package/dist/backend/native-codegen.test.js.map +1 -1
  169. package/dist/backend/native-tools.d.ts +2 -0
  170. package/dist/backend/native-tools.js +3 -0
  171. package/dist/backend/native-tools.js.map +1 -1
  172. package/dist/backend/publication.d.ts +28 -0
  173. package/dist/backend/publication.js +155 -0
  174. package/dist/backend/publication.js.map +1 -0
  175. package/dist/backend/publication.test.d.ts +1 -0
  176. package/dist/backend/publication.test.js +72 -0
  177. package/dist/backend/publication.test.js.map +1 -0
  178. package/dist/backend/runtime-abi.d.ts +2 -2
  179. package/dist/backend/runtime-abi.js +2 -2
  180. package/dist/backend/runtime-pack-targets.test.js +1 -1
  181. package/dist/backend/runtime-pack.test.js +1 -1
  182. package/dist/cli/command.js +70 -7
  183. package/dist/cli/command.js.map +1 -1
  184. package/dist/cli/usage.d.ts +4 -1
  185. package/dist/cli/usage.js +8 -1
  186. package/dist/cli/usage.js.map +1 -1
  187. package/dist/compile-types.d.ts +12 -3
  188. package/dist/coverage/report.d.ts +25 -2
  189. package/dist/coverage/report.js +161 -33
  190. package/dist/coverage/report.js.map +1 -1
  191. package/dist/coverage/verdict-cache.d.ts +63 -0
  192. package/dist/coverage/verdict-cache.js +193 -0
  193. package/dist/coverage/verdict-cache.js.map +1 -0
  194. package/dist/coverage/verdict-cache.test.d.ts +1 -0
  195. package/dist/coverage/verdict-cache.test.js +52 -0
  196. package/dist/coverage/verdict-cache.test.js.map +1 -0
  197. package/dist/coverage/verdict-semantic.d.ts +2 -0
  198. package/dist/coverage/verdict-semantic.js +24 -0
  199. package/dist/coverage/verdict-semantic.js.map +1 -0
  200. package/dist/coverage/verdict-startup.d.ts +15 -0
  201. package/dist/coverage/verdict-startup.js +66 -0
  202. package/dist/coverage/verdict-startup.js.map +1 -0
  203. package/dist/diagnostics/diagnostic.d.ts +29 -1
  204. package/dist/diagnostics/diagnostic.js +74 -4
  205. package/dist/diagnostics/diagnostic.js.map +1 -1
  206. package/dist/diagnostics/envelope.d.ts +130 -0
  207. package/dist/diagnostics/envelope.js +257 -0
  208. package/dist/diagnostics/envelope.js.map +1 -0
  209. package/dist/diagnostics/envelope.test.d.ts +1 -0
  210. package/dist/diagnostics/envelope.test.js +91 -0
  211. package/dist/diagnostics/envelope.test.js.map +1 -0
  212. package/dist/diagnostics/render.d.ts +3 -0
  213. package/dist/diagnostics/render.js +13 -2
  214. package/dist/diagnostics/render.js.map +1 -1
  215. package/dist/executable/prepare.d.ts +4 -0
  216. package/dist/executable/prepare.js +7 -1
  217. package/dist/executable/prepare.js.map +1 -1
  218. package/dist/frontend/analysis.js +1 -0
  219. package/dist/frontend/analysis.js.map +1 -1
  220. package/dist/frontend/lowering/array-values.d.ts +7 -0
  221. package/dist/frontend/lowering/array-values.js +120 -4
  222. package/dist/frontend/lowering/array-values.js.map +1 -1
  223. package/dist/frontend/lowering/builtins/numbers.js +29 -1
  224. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  225. package/dist/frontend/lowering/builtins/process.d.ts +4 -0
  226. package/dist/frontend/lowering/builtins/process.js +10 -0
  227. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  228. package/dist/frontend/lowering/builtins/workers.js +4 -2
  229. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  230. package/dist/frontend/lowering/class-assertions.d.ts +8 -0
  231. package/dist/frontend/lowering/class-assertions.js +217 -1
  232. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  233. package/dist/frontend/lowering/class-dynamic-dispatch.js +8 -5
  234. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  235. package/dist/frontend/lowering/coercions/state.d.ts +6 -0
  236. package/dist/frontend/lowering/coercions/state.js +2 -0
  237. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  238. package/dist/frontend/lowering/coercions/unions.d.ts +8 -0
  239. package/dist/frontend/lowering/coercions/unions.js +67 -2
  240. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  241. package/dist/frontend/lowering/collation-repertoire.d.ts +1 -0
  242. package/dist/frontend/lowering/collation-repertoire.js +19 -0
  243. package/dist/frontend/lowering/collation-repertoire.js.map +1 -0
  244. package/dist/frontend/lowering/construction-escapes.d.ts +38 -0
  245. package/dist/frontend/lowering/construction-escapes.js +146 -0
  246. package/dist/frontend/lowering/construction-escapes.js.map +1 -0
  247. package/dist/frontend/lowering/construction-escapes.test.d.ts +1 -0
  248. package/dist/frontend/lowering/construction-escapes.test.js +150 -0
  249. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -0
  250. package/dist/frontend/lowering/containers/array-callbacks.js +81 -44
  251. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  252. package/dist/frontend/lowering/containers/array-construction.js +15 -2
  253. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  254. package/dist/frontend/lowering/containers/array-methods.js +231 -12
  255. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  256. package/dist/frontend/lowering/containers/callback-arguments.js +43 -1
  257. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  258. package/dist/frontend/lowering/containers/string-and-regexp.js +7 -63
  259. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  260. package/dist/frontend/lowering/cycle-initialization.d.ts +6 -1
  261. package/dist/frontend/lowering/cycle-initialization.js +59 -33
  262. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  263. package/dist/frontend/lowering/divergences.d.ts +9 -0
  264. package/dist/frontend/lowering/divergences.js +630 -0
  265. package/dist/frontend/lowering/divergences.js.map +1 -0
  266. package/dist/frontend/lowering/expressions/object-literals.js +40 -2
  267. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  268. package/dist/frontend/lowering/lower-calls.d.ts +5 -0
  269. package/dist/frontend/lowering/lower-calls.js +226 -157
  270. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  271. package/dist/frontend/lowering/lower-classes.d.ts +4 -0
  272. package/dist/frontend/lowering/lower-classes.js +72 -22
  273. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  274. package/dist/frontend/lowering/lower-exprs.d.ts +13 -0
  275. package/dist/frontend/lowering/lower-exprs.js +431 -107
  276. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  277. package/dist/frontend/lowering/lower-generators.d.ts +19 -13
  278. package/dist/frontend/lowering/lower-generators.js +67 -44
  279. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  280. package/dist/frontend/lowering/lower-inspect.js +3 -2
  281. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  282. package/dist/frontend/lowering/lower-island.d.ts +1 -1
  283. package/dist/frontend/lowering/lower-island.js +24 -7
  284. package/dist/frontend/lowering/lower-island.js.map +1 -1
  285. package/dist/frontend/lowering/lower-modules.js +90 -1
  286. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  287. package/dist/frontend/lowering/lower-stmts.js +36 -6
  288. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  289. package/dist/frontend/lowering/lowerer.d.ts +78 -2
  290. package/dist/frontend/lowering/lowerer.js +986 -73
  291. package/dist/frontend/lowering/lowerer.js.map +1 -1
  292. package/dist/frontend/lowering/runtime-optional-bounds.d.ts +19 -0
  293. package/dist/frontend/lowering/runtime-optional-bounds.js +354 -0
  294. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -0
  295. package/dist/frontend/lowering/runtime-optional-bounds.test.d.ts +1 -0
  296. package/dist/frontend/lowering/runtime-optional-bounds.test.js +66 -0
  297. package/dist/frontend/lowering/runtime-optional-bounds.test.js.map +1 -0
  298. package/dist/frontend/lowering/runtime-optional-elements.d.ts +117 -0
  299. package/dist/frontend/lowering/runtime-optional-elements.js +738 -0
  300. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -0
  301. package/dist/frontend/lowering/runtime-optional-guards.d.ts +36 -0
  302. package/dist/frontend/lowering/runtime-optional-guards.js +375 -0
  303. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -0
  304. package/dist/frontend/lowering/runtime-optional-guards.test.d.ts +1 -0
  305. package/dist/frontend/lowering/runtime-optional-guards.test.js +92 -0
  306. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -0
  307. package/dist/frontend/lowering/runtime-optional-ownership.d.ts +63 -0
  308. package/dist/frontend/lowering/runtime-optional-ownership.js +382 -0
  309. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -0
  310. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +2 -1
  311. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -1
  312. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  313. package/dist/frontend/lowering/string-index-bounds.d.ts +36 -0
  314. package/dist/frontend/lowering/string-index-bounds.js +537 -0
  315. package/dist/frontend/lowering/string-index-bounds.js.map +1 -0
  316. package/dist/frontend/lowering/string-index-bounds.test.d.ts +1 -0
  317. package/dist/frontend/lowering/string-index-bounds.test.js +223 -0
  318. package/dist/frontend/lowering/string-index-bounds.test.js.map +1 -0
  319. package/dist/frontend/lowering/union-narrow.d.ts +2 -0
  320. package/dist/frontend/lowering/union-narrow.js +10 -6
  321. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  322. package/dist/frontend/program-analysis.d.ts +10 -0
  323. package/dist/frontend/program-analysis.js +7 -0
  324. package/dist/frontend/program-analysis.js.map +1 -1
  325. package/dist/frontend/program.d.ts +25 -0
  326. package/dist/frontend/program.js +613 -17
  327. package/dist/frontend/program.js.map +1 -1
  328. package/dist/frontend/program.test.js +64 -1
  329. package/dist/frontend/program.test.js.map +1 -1
  330. package/dist/frontend/resolve.d.ts +6 -0
  331. package/dist/frontend/resolve.js +14 -0
  332. package/dist/frontend/resolve.js.map +1 -1
  333. package/dist/frontend/threads-import.d.ts +5 -0
  334. package/dist/frontend/threads-import.js +21 -0
  335. package/dist/frontend/threads-import.js.map +1 -0
  336. package/dist/frontend/type-mapper.d.ts +3 -0
  337. package/dist/frontend/type-mapper.js +72 -6
  338. package/dist/frontend/type-mapper.js.map +1 -1
  339. package/dist/frontend/worker-target.d.ts +4 -0
  340. package/dist/frontend/worker-target.js +8 -1
  341. package/dist/frontend/worker-target.js.map +1 -1
  342. package/dist/index.d.ts +6 -1
  343. package/dist/index.js +47 -9
  344. package/dist/index.js.map +1 -1
  345. package/dist/ir/build.d.ts +5 -0
  346. package/dist/ir/build.js +7 -0
  347. package/dist/ir/build.js.map +1 -1
  348. package/dist/ir/builtin-signatures.d.ts +1 -1
  349. package/dist/ir/builtin-signatures.js +3 -0
  350. package/dist/ir/builtin-signatures.js.map +1 -1
  351. package/dist/ir/int32-slots.d.ts +72 -0
  352. package/dist/ir/int32-slots.js +837 -0
  353. package/dist/ir/int32-slots.js.map +1 -0
  354. package/dist/ir/int32-slots.test.d.ts +1 -0
  355. package/dist/ir/int32-slots.test.js +222 -0
  356. package/dist/ir/int32-slots.test.js.map +1 -0
  357. package/dist/ir/integer-ranges.d.ts +19 -3
  358. package/dist/ir/integer-ranges.js +168 -23
  359. package/dist/ir/integer-ranges.js.map +1 -1
  360. package/dist/ir/integer-ranges.test.js +74 -2
  361. package/dist/ir/integer-ranges.test.js.map +1 -1
  362. package/dist/ir/ir.d.ts +24 -6
  363. package/dist/ir/ir.js.map +1 -1
  364. package/dist/ir/validate.js +21 -2
  365. package/dist/ir/validate.js.map +1 -1
  366. package/dist/ir/validate.test.js +39 -0
  367. package/dist/ir/validate.test.js.map +1 -1
  368. package/dist/native/cache.d.ts +3 -0
  369. package/dist/native/cache.js +49 -1
  370. package/dist/native/cache.js.map +1 -1
  371. package/dist/native/cache.test.js +21 -1
  372. package/dist/native/cache.test.js.map +1 -1
  373. package/dist/native/cli.js +1 -1
  374. package/dist/native/cli.js.map +1 -1
  375. package/dist/native/compiler.d.ts +5 -0
  376. package/dist/native/compiler.js +51 -4
  377. package/dist/native/compiler.js.map +1 -1
  378. package/dist/native/prepare.d.ts +4 -0
  379. package/dist/native/prepare.js +2 -1
  380. package/dist/native/prepare.js.map +1 -1
  381. package/dist/startup-cache.d.ts +2 -0
  382. package/dist/startup-cache.js +2 -0
  383. package/dist/startup-cache.js.map +1 -1
  384. package/package.json +20 -20
  385. package/surface-manifest.json +1 -1
@@ -5,6 +5,7 @@ import { lowerArrayCallbackCall } from "./containers/array-callback-call.js";
5
5
  * own owners; this module selects the applicable call path. */
6
6
  import { dynUndefinedExpr, nodeThrowExpr, countedFor, numLit, varRef } from "../../ir/build.js";
7
7
  import { lowerBuiltinCall } from "./builtin-calls.js";
8
+ import { threadsImportOf } from "../threads-import.js";
8
9
  import { adaptZeroArgTimerCallback, lowerTimersMemberCall, TIMER_MODULE_MEMBERS, } from "./lower-timers.js";
9
10
  import { objectEnumerationReceiver } from "./object-enumeration-receiver.js";
10
11
  import { InternalCompilerError } from "../../errors.js";
@@ -335,7 +336,7 @@ export function lowerCall(lowerer, expr) {
335
336
  // inspect distinction, per arm), Maps/Sets, plain undefined/null,
336
337
  // regexes, symbols, error values, Buffers. Shapes inspect cannot
337
338
  // render fence honestly with the reason.
338
- return lowerConsoleInspectArg(lowerer, a, lowered, surface, loc);
339
+ return lowerConsoleInspectArg(lowerer, a, lowerer.deferredFieldSlot(lowered) ?? lowered, surface, loc);
339
340
  });
340
341
  return withReceiver({
341
342
  kind: "intrinsic",
@@ -795,6 +796,14 @@ export function lowerCall(lowerer, expr) {
795
796
  if (rf)
796
797
  return lowerHttpClientFnCall(lowerer, expr, rf, loc);
797
798
  }
799
+ if (threadsImportOf(lowerer.program, expr.expression) === "publish") {
800
+ // @scriptc/threads publish(value): the same value, its graph made
801
+ // immortal and immutable (backend/llvm/publish.ts).
802
+ if (expr.arguments.length !== 1 || ts.isSpreadElement(expr.arguments[0]))
803
+ lowerer.noLowering(`publish with ${expr.arguments.length} arguments`, expr);
804
+ const value = lowerer.lowerExpr(expr.arguments[0]);
805
+ return { kind: "intrinsic", name: "threads.publish", args: [value], type: value.type, loc };
806
+ }
798
807
  const bi = lowerer.builtinImportOf(expr.expression);
799
808
  if (bi)
800
809
  return lowerBuiltinCall(lowerer, expr, bi, loc);
@@ -850,138 +859,14 @@ export function lowerCall(lowerer, expr) {
850
859
  // checker-pinned (or checked) to number, where the global's ToNumber
851
860
  // coercion is the identity and the tests are Number.isNaN /
852
861
  // Number.isFinite exactly (ms's `isFinite(val)` guard).
853
- if ((expr.expression.text === "parseInt" || expr.expression.text === "isNaN") &&
862
+ if ((expr.expression.text === "parseInt" ||
863
+ expr.expression.text === "isNaN" ||
864
+ expr.expression.text === "parseFloat" ||
865
+ expr.expression.text === "isFinite") &&
854
866
  lowerer.isStdlibSymbol(lowerer.resolveValueSymbol(expr.expression) ?? undefined)) {
855
- const name = expr.expression.text;
856
- const maxArgs = name === "parseInt" ? 2 : 1;
857
- if (expr.arguments.length < 1 || expr.arguments.length > maxArgs) {
858
- lowerer.noLowering(`${name} with ${expr.arguments.length} argument${expr.arguments.length === 1 ? "" : "s"}`, expr);
859
- }
860
- if (name === "isNaN") {
861
- const x = lowerer.lowerExprExpecting(expr.arguments[0], F64);
862
- return { kind: "libCall", fn: "num.isNaN", args: [x], type: BOOL, loc };
863
- }
864
- const radix = expr.arguments[1]
865
- ? lowerer.lowerExprExpecting(expr.arguments[1], F64)
866
- : { kind: "numLit", value: 0, type: F64, loc };
867
- const optional = optionalCallValue(lowerer, expr.arguments[0]);
868
- if (optional?.type.kind === "union") {
869
- const def = lowerer.unions.get(optional.type.unionId);
870
- const stringTag = def?.arms.findIndex((arm) => arm.kind === "string") ?? -1;
871
- if (def &&
872
- stringTag >= 0 &&
873
- def.arms.every((arm) => arm.kind === "string" || isUnitType(arm))) {
874
- const unionT = optional.type;
875
- const key = `parseInt.optional:${unionT.unionId}`;
876
- let helper = lowerer.valueHelpers.get(key);
877
- if (!helper) {
878
- helper = `%parseInt.optional.${lowerer.valueHelpers.size}`;
879
- lowerer.valueHelpers.set(key, helper);
880
- const value = { kind: "varRef", localId: "value.0", type: unionT, loc };
881
- const radixRef = { kind: "varRef", localId: "radix.0", type: F64, loc };
882
- const body = def.arms.flatMap((arm, tag) => isUnitType(arm)
883
- ? [
884
- {
885
- kind: "if",
886
- cond: {
887
- kind: "unionIsTag",
888
- unionId: unionT.unionId,
889
- tag,
890
- negated: false,
891
- value,
892
- type: BOOL,
893
- loc,
894
- },
895
- then: [
896
- {
897
- kind: "return",
898
- value: { kind: "numLit", value: NaN, type: F64, loc },
899
- loc,
900
- },
901
- ],
902
- else_: null,
903
- loc,
904
- },
905
- ]
906
- : []);
907
- body.push({
908
- kind: "return",
909
- value: {
910
- kind: "libCall",
911
- fn: "num.parseInt",
912
- args: [
913
- {
914
- kind: "unionNarrow",
915
- unionId: unionT.unionId,
916
- tag: stringTag,
917
- value,
918
- type: STRING,
919
- loc,
920
- },
921
- radixRef,
922
- ],
923
- type: F64,
924
- loc,
925
- },
926
- loc,
927
- });
928
- lowerer.liftedFns.push({
929
- name: helper,
930
- params: [
931
- { localId: "value.0", name: "value", type: unionT },
932
- { localId: "radix.0", name: "radix", type: F64 },
933
- ],
934
- returnType: F64,
935
- locals: [
936
- { id: "value.0", name: "value", type: unionT, mutable: true },
937
- { id: "radix.0", name: "radix", type: F64, mutable: true },
938
- ],
939
- body,
940
- loc,
941
- });
942
- }
943
- return { kind: "call", callee: helper, args: [optional, radix], type: F64, loc };
944
- }
945
- }
946
- const s = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
947
- return { kind: "libCall", fn: "num.parseInt", args: [s, radix], type: F64, loc };
948
- }
949
- // STATIC parseFloat/isFinite over exactly-typed arguments —
950
- // parseInt's siblings (num.parseFloat is ECMA 19.2.4's decimal-
951
- // literal prefix parse in scr_string.c; a number-typed isFinite IS
952
- // Number.isFinite — the global's ToNumber coercion is the identity
953
- // there, ms's `isFinite(val)` guard). Other argument types fall
954
- // through to today's island path (--dynamic) or its SC2012 fence:
955
- // the ToNumber/ToString coercions on arbitrary values stay engine
956
- // territory. The probe never emits — lowering is IR construction.
957
- if ((expr.expression.text === "parseFloat" || expr.expression.text === "isFinite") &&
958
- expr.arguments.length === 1 &&
959
- lowerer.isStdlibSymbol(lowerer.resolveValueSymbol(expr.expression) ?? undefined)) {
960
- const name = expr.expression.text;
961
- if (name === "parseFloat") {
962
- const optional = optionalCallValue(lowerer, expr.arguments[0]);
963
- if (optional) {
964
- const parsed = lowerOptionalStringNumber(lowerer, optional, loc, "num.parseFloat", "parseFloat");
965
- if (parsed)
966
- return parsed;
967
- }
968
- }
969
- const probed = tryLowerExpression(lowerer, expr.arguments[0]);
970
- if (name === "parseFloat" && probed?.type.kind === "string") {
971
- return { kind: "libCall", fn: "num.parseFloat", args: [probed], type: F64, loc };
972
- }
973
- if (name === "parseFloat" && probed?.type.kind === "dyn") {
974
- return {
975
- kind: "libCall",
976
- fn: "num.parseFloat",
977
- args: [{ kind: "libCall", fn: "dyn.toStringCoerce", args: [probed], type: STRING, loc }],
978
- type: F64,
979
- loc,
980
- };
981
- }
982
- if (name === "isFinite" && probed?.type.kind === "f64") {
983
- return { kind: "libCall", fn: "number.isFinite", args: [probed], type: BOOL, loc };
984
- }
867
+ const parsed = lowerStaticNumberGlobal(lowerer, expr.expression.text, expr, expr.arguments, loc);
868
+ if (parsed !== null)
869
+ return parsed;
985
870
  }
986
871
  // STATIC encodeURIComponent/encodeURI/decodeURIComponent
987
872
  // (str.encodeUriComponent / str.encodeUri / str.decodeUriComponent —
@@ -1074,7 +959,16 @@ export function lowerCall(lowerer, expr) {
1074
959
  lowerer.noLowering(`${name} with ${expr.arguments.length} argument${expr.arguments.length === 1 ? "" : "s"}`, expr);
1075
960
  }
1076
961
  if (islFn && expr.arguments.length === islFn.args.length) {
1077
- lowerer.requireDynamicApi(`'${expr.expression.text}'`, expr);
962
+ // The static forms above already took the exactly-typed argument
963
+ // (a string for parseFloat, a number for isFinite): name the
964
+ // argument type that sent this call to the engine, so the message
965
+ // states the condition rather than reading as if the global itself
966
+ // were unsupported.
967
+ const argText = lowerer.dynamic ? "" : loweredArgumentText(lowerer, expr.arguments[0]);
968
+ const exact = expr.expression.text === "isFinite" ? "number" : "string";
969
+ lowerer.requireDynamicApi(`'${expr.expression.text}' with a '${argText}' argument (only a ${exact} argument compiles statically)`, expr, exact === "string"
970
+ ? "convert the argument explicitly first (for example String(x), or narrow the union), or build with --dynamic to run the coercing call in the embedded engine (adds ~620KB to the binary)"
971
+ : "narrow the argument to a number first (isFinite over a number compiles statically), or build with --dynamic to run the coercing call in the embedded engine (adds ~620KB to the binary)");
1078
972
  const callee = {
1079
973
  kind: "jsOp",
1080
974
  op: "globalGet",
@@ -1889,13 +1783,7 @@ function lowerBufferStaticCallWithNarrowedArg(lowerer, call, access) {
1889
1783
  }
1890
1784
  const narrowedValue = {
1891
1785
  ...lowered,
1892
- source: {
1893
- kind: "call",
1894
- callee: helper,
1895
- args: [lowered.source],
1896
- type: narrowed,
1897
- loc: lowered.source.loc,
1898
- },
1786
+ source: lowerer.checkedNarrowCall(helper, lowered.source, narrowed, lowered.source.loc),
1899
1787
  };
1900
1788
  return branded ? { ...branded, args: [narrowedValue] } : narrowedValue;
1901
1789
  }
@@ -4286,7 +4174,7 @@ function reconcileOverloadReturn(lowerer, expr, call) {
4286
4174
  if (call.type.kind === "union" && rt.kind !== "union") {
4287
4175
  const helper = lowerer.narrowedArmHelper(call.type.unionId, rt, call.loc);
4288
4176
  if (helper)
4289
- return { kind: "call", callee: helper, args: [call], type: rt, loc: call.loc };
4177
+ return lowerer.checkedNarrowCall(helper, call, rt, call.loc);
4290
4178
  }
4291
4179
  return lowerer.coerceInto(expr, call, rt);
4292
4180
  }
@@ -7115,9 +7003,12 @@ function lowerObjectStaticCall(lowerer, call, access) {
7115
7003
  return lowerObjectIterOverIndexShape(lowerer, call, member, argIr, shape);
7116
7004
  }
7117
7005
  const loc = locOf(call);
7118
- const resultT = lowerer.irTypeOf(call);
7119
- if (resultT.kind !== "array")
7006
+ const checkedT = lowerer.irTypeOf(call);
7007
+ if (checkedT.kind !== "array")
7120
7008
  lowerer.badType(call, lowerer.typeOf(call)); // defensive
7009
+ const resultT = member === "entries" && consumesEntryPairs(call)
7010
+ ? runtimeOptionalEntriesType(lowerer, argIr, checkedT)
7011
+ : checkedT;
7121
7012
  const receiver = objectEnumerationReceiver(lowerer, lowerer.lowerExpr(argNode), argIr, loc);
7122
7013
  if (member === "keys") {
7123
7014
  // The keys walk is shared with for-in (which iterates exactly the
@@ -7337,6 +7228,53 @@ function lowerObjectStaticCall(lowerer, call, access) {
7337
7228
  }
7338
7229
  return { kind: "call", callee: helper, args: [receiver], type: resultT, loc };
7339
7230
  }
7231
+ /** An entries array consumed pair by pair right where it is built: a
7232
+ * for-of loop or an array callback method. These consumers bind each pair
7233
+ * from the array's own layout, so the pair's value slot can keep a
7234
+ * runtime-optional field's undefined arm. */
7235
+ function consumesEntryPairs(call) {
7236
+ let node = call;
7237
+ while (ts.isParenthesizedExpression(node.parent))
7238
+ node = node.parent;
7239
+ const parent = node.parent;
7240
+ if (ts.isForOfStatement(parent))
7241
+ return parent.expression === node;
7242
+ return (ts.isPropertyAccessExpression(parent) &&
7243
+ parent.expression === node &&
7244
+ ENTRY_PAIR_CALLBACK_METHODS.has(parent.name.text) &&
7245
+ ts.isCallExpression(parent.parent) &&
7246
+ parent.parent.expression === parent);
7247
+ }
7248
+ const ENTRY_PAIR_CALLBACK_METHODS = new Set([
7249
+ "every",
7250
+ "filter",
7251
+ "find",
7252
+ "findIndex",
7253
+ "flatMap",
7254
+ "forEach",
7255
+ "map",
7256
+ "some",
7257
+ ]);
7258
+ /** The entries array of a record whose runtime-optional fields (unchecked
7259
+ * indexed reads the checker calls present) can hold undefined: the pair's
7260
+ * value slot gains the undefined arm, so such an entry is listed with its
7261
+ * undefined value as Node lists it. Reads of the slot follow the
7262
+ * runtime-optional field rules. */
7263
+ function runtimeOptionalEntriesType(lowerer, record, resultT) {
7264
+ const shape = lowerer.shapes.get(record.shapeId);
7265
+ if (resultT.elem.kind !== "record" || !shape)
7266
+ return resultT;
7267
+ const pair = lowerer.shapes.get(resultT.elem.shapeId);
7268
+ const slot = pair?.tuple ? pair.fields.find((f) => f.name === "1") : undefined;
7269
+ if (!slot)
7270
+ return resultT;
7271
+ const optional = shape.fields.find((f) => lowerer.isRuntimeOptionalField(record.shapeId, f.name) &&
7272
+ lowerer.runtimeOptionalWidening(f.type, slot.type) !== null);
7273
+ if (!optional)
7274
+ return resultT;
7275
+ const widened = lowerer.runtimeOptionalWidening(optional.type, slot.type);
7276
+ return { kind: "array", elem: lowerer.runtimeOptionalRecordField(resultT.elem, "1", widened) };
7277
+ }
7340
7278
  /** `r.f(args)` where `r` is a record and `f` a func-typed field: an
7341
7279
  * ordinary indirect call through the field's closure value. Deliberately
7342
7280
  * record-only — calling a func-typed CLASS field stays rejected (the
@@ -7922,13 +7860,7 @@ export function lowerObjectMethodCall(lowerer, call, access) {
7922
7860
  if (receiver.type.kind === "union") {
7923
7861
  const helper = lowerer.narrowedArmHelper(receiver.type.unionId, receiverIr, locOf(access.expression));
7924
7862
  if (helper !== null)
7925
- return {
7926
- kind: "call",
7927
- callee: helper,
7928
- args: [receiver],
7929
- type: receiverIr,
7930
- loc: locOf(access.expression),
7931
- };
7863
+ return lowerer.checkedNarrowCall(helper, receiver, receiverIr, locOf(access.expression));
7932
7864
  }
7933
7865
  return receiver.type.kind === "dyn"
7934
7866
  ? lowerer.coerceInto(access.expression, receiver, receiverIr)
@@ -8008,13 +7940,7 @@ export function lowerObjectMethodCall(lowerer, call, access) {
8008
7940
  if (callee?.type.kind === "union" && callableType !== null) {
8009
7941
  const helper = lowerer.narrowedArmHelper(callee.type.unionId, callableType, locOf(access));
8010
7942
  if (helper !== null) {
8011
- callee = {
8012
- kind: "call",
8013
- callee: helper,
8014
- args: [callee],
8015
- type: callableType,
8016
- loc: locOf(access),
8017
- };
7943
+ callee = lowerer.checkedNarrowCall(helper, callee, callableType, locOf(access));
8018
7944
  }
8019
7945
  }
8020
7946
  if (callee?.type.kind === "func") {
@@ -8453,4 +8379,147 @@ function unionObjectMethodHelper(lowerer, sourceCall, receiverT, method, plans,
8453
8379
  lowerer.liftedFns.push({ name, params, returnType: resultT, locals, body, loc });
8454
8380
  return name;
8455
8381
  }
8382
+ /** The argument's lowered type for a message (what the static form saw),
8383
+ * or the checker's text when the argument itself does not lower. */
8384
+ function loweredArgumentText(lowerer, arg) {
8385
+ const probed = tryLowerExpression(lowerer, arg);
8386
+ return probed !== null
8387
+ ? lowerer.fmt(probed.type)
8388
+ : lowerer.checker.typeToString(lowerer.checker.getTypeAtLocation(arg));
8389
+ }
8390
+ /** The static global number parsers (parseInt/parseFloat/isNaN/isFinite),
8391
+ * shared by the globals and their Number.* aliases. `call` blames arity
8392
+ * fences; null when the argument shape needs the engine (the caller keeps
8393
+ * its island path or SC2012 fence). */
8394
+ export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
8395
+ if (name === "parseInt" || name === "isNaN") {
8396
+ const maxArgs = name === "parseInt" ? 2 : 1;
8397
+ if (args.length < 1 || args.length > maxArgs) {
8398
+ lowerer.noLowering(`${name} with ${args.length} argument${args.length === 1 ? "" : "s"}`, call);
8399
+ }
8400
+ if (name === "isNaN") {
8401
+ const x = lowerer.lowerExprExpecting(args[0], F64);
8402
+ return { kind: "libCall", fn: "num.isNaN", args: [x], type: BOOL, loc };
8403
+ }
8404
+ const radix = args[1]
8405
+ ? lowerer.lowerExprExpecting(args[1], F64)
8406
+ : { kind: "numLit", value: 0, type: F64, loc };
8407
+ const optional = optionalCallValue(lowerer, args[0]);
8408
+ if (optional?.type.kind === "union") {
8409
+ const def = lowerer.unions.get(optional.type.unionId);
8410
+ const stringTag = def?.arms.findIndex((arm) => arm.kind === "string") ?? -1;
8411
+ if (def &&
8412
+ stringTag >= 0 &&
8413
+ def.arms.every((arm) => arm.kind === "string" || isUnitType(arm))) {
8414
+ const unionT = optional.type;
8415
+ const key = `parseInt.optional:${unionT.unionId}`;
8416
+ let helper = lowerer.valueHelpers.get(key);
8417
+ if (!helper) {
8418
+ helper = `%parseInt.optional.${lowerer.valueHelpers.size}`;
8419
+ lowerer.valueHelpers.set(key, helper);
8420
+ const value = { kind: "varRef", localId: "value.0", type: unionT, loc };
8421
+ const radixRef = { kind: "varRef", localId: "radix.0", type: F64, loc };
8422
+ const body = def.arms.flatMap((arm, tag) => isUnitType(arm)
8423
+ ? [
8424
+ {
8425
+ kind: "if",
8426
+ cond: {
8427
+ kind: "unionIsTag",
8428
+ unionId: unionT.unionId,
8429
+ tag,
8430
+ negated: false,
8431
+ value,
8432
+ type: BOOL,
8433
+ loc,
8434
+ },
8435
+ then: [
8436
+ {
8437
+ kind: "return",
8438
+ value: { kind: "numLit", value: NaN, type: F64, loc },
8439
+ loc,
8440
+ },
8441
+ ],
8442
+ else_: null,
8443
+ loc,
8444
+ },
8445
+ ]
8446
+ : []);
8447
+ body.push({
8448
+ kind: "return",
8449
+ value: {
8450
+ kind: "libCall",
8451
+ fn: "num.parseInt",
8452
+ args: [
8453
+ {
8454
+ kind: "unionNarrow",
8455
+ unionId: unionT.unionId,
8456
+ tag: stringTag,
8457
+ value,
8458
+ type: STRING,
8459
+ loc,
8460
+ },
8461
+ radixRef,
8462
+ ],
8463
+ type: F64,
8464
+ loc,
8465
+ },
8466
+ loc,
8467
+ });
8468
+ lowerer.liftedFns.push({
8469
+ name: helper,
8470
+ params: [
8471
+ { localId: "value.0", name: "value", type: unionT },
8472
+ { localId: "radix.0", name: "radix", type: F64 },
8473
+ ],
8474
+ returnType: F64,
8475
+ locals: [
8476
+ { id: "value.0", name: "value", type: unionT, mutable: true },
8477
+ { id: "radix.0", name: "radix", type: F64, mutable: true },
8478
+ ],
8479
+ body,
8480
+ loc,
8481
+ });
8482
+ }
8483
+ return { kind: "call", callee: helper, args: [optional, radix], type: F64, loc };
8484
+ }
8485
+ }
8486
+ const s = lowerer.lowerExprExpecting(args[0], STRING);
8487
+ return { kind: "libCall", fn: "num.parseInt", args: [s, radix], type: F64, loc };
8488
+ }
8489
+ // STATIC parseFloat/isFinite over exactly-typed arguments —
8490
+ // parseInt's siblings (num.parseFloat is ECMA 19.2.4's decimal-
8491
+ // literal prefix parse in scr_string.c; a number-typed isFinite IS
8492
+ // Number.isFinite — the global's ToNumber coercion is the identity
8493
+ // there, ms's `isFinite(val)` guard). Other argument types fall
8494
+ // through to today's island path (--dynamic) or its SC2012 fence:
8495
+ // the ToNumber/ToString coercions on arbitrary values stay engine
8496
+ // territory. The probe never emits — lowering is IR construction.
8497
+ if ((name === "parseFloat" || name === "isFinite") && args.length === 1) {
8498
+ if (name === "parseFloat") {
8499
+ const optional = optionalCallValue(lowerer, args[0]);
8500
+ if (optional) {
8501
+ const parsed = lowerOptionalStringNumber(lowerer, optional, loc, "num.parseFloat", "parseFloat");
8502
+ if (parsed)
8503
+ return parsed;
8504
+ }
8505
+ }
8506
+ const probed = tryLowerExpression(lowerer, args[0]);
8507
+ if (name === "parseFloat" && probed?.type.kind === "string") {
8508
+ return { kind: "libCall", fn: "num.parseFloat", args: [probed], type: F64, loc };
8509
+ }
8510
+ if (name === "parseFloat" && probed?.type.kind === "dyn") {
8511
+ return {
8512
+ kind: "libCall",
8513
+ fn: "num.parseFloat",
8514
+ args: [{ kind: "libCall", fn: "dyn.toStringCoerce", args: [probed], type: STRING, loc }],
8515
+ type: F64,
8516
+ loc,
8517
+ };
8518
+ }
8519
+ if (name === "isFinite" && probed?.type.kind === "f64") {
8520
+ return { kind: "libCall", fn: "number.isFinite", args: [probed], type: BOOL, loc };
8521
+ }
8522
+ }
8523
+ return null;
8524
+ }
8456
8525
  //# sourceMappingURL=lower-calls.js.map