@scriptc/compiler 0.0.35 → 0.1.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 (439) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +14 -11
  2. package/ambient/scriptc-overrides.d.ts +0 -7
  3. package/ambient/scriptc.d.ts +1 -1
  4. package/dist/backend/build-cache.d.ts +44 -0
  5. package/dist/backend/build-cache.js +241 -0
  6. package/dist/backend/build-cache.js.map +1 -0
  7. package/dist/backend/{emission/emit-async.d.ts → c/async.d.ts} +21 -30
  8. package/dist/backend/{emission/emit-async.js → c/async.js} +270 -286
  9. package/dist/backend/c/async.js.map +1 -0
  10. package/dist/backend/{emission/emitter.d.ts → c/c-emitter.d.ts} +6 -23
  11. package/dist/backend/{emission/emitter.js → c/c-emitter.js} +53 -107
  12. package/dist/backend/c/c-emitter.js.map +1 -0
  13. package/dist/backend/c/exprs.d.ts +8 -0
  14. package/dist/backend/c/exprs.js +7937 -0
  15. package/dist/backend/c/exprs.js.map +1 -0
  16. package/dist/backend/{emission/emit-island.d.ts → c/island.d.ts} +5 -5
  17. package/dist/backend/{emission/emit-island.js → c/island.js} +24 -22
  18. package/dist/backend/c/island.js.map +1 -0
  19. package/dist/backend/{emission → c}/may-throw.d.ts +1 -1
  20. package/dist/backend/{emission → c}/may-throw.js +4 -1
  21. package/dist/backend/c/may-throw.js.map +1 -0
  22. package/dist/backend/{emission/emit-shapes.d.ts → c/shapes.d.ts} +19 -19
  23. package/dist/backend/{emission/emit-shapes.js → c/shapes.js} +78 -87
  24. package/dist/backend/c/shapes.js.map +1 -0
  25. package/dist/backend/{emission/emit-stmts.d.ts → c/stmts.d.ts} +12 -12
  26. package/dist/backend/{emission/emit-stmts.js → c/stmts.js} +395 -343
  27. package/dist/backend/c/stmts.js.map +1 -0
  28. package/dist/backend/{emission/emit-types.d.ts → c/types.d.ts} +1 -1
  29. package/dist/backend/{emission/emit-types.js → c/types.js} +42 -286
  30. package/dist/backend/c/types.js.map +1 -0
  31. package/dist/backend/c/types.test.js +25 -0
  32. package/dist/backend/c/types.test.js.map +1 -0
  33. package/dist/backend/{emission/emit-walkers.d.ts → c/walkers.d.ts} +19 -41
  34. package/dist/backend/{emission/emit-walkers.js → c/walkers.js} +242 -304
  35. package/dist/backend/c/walkers.js.map +1 -0
  36. package/dist/backend/external-c.d.ts +33 -0
  37. package/dist/backend/external-c.js +51 -0
  38. package/dist/backend/external-c.js.map +1 -0
  39. package/dist/backend/ffi-callbacks.d.ts +1 -1
  40. package/dist/backend/ffi-callbacks.js +4 -3
  41. package/dist/backend/ffi-callbacks.js.map +1 -1
  42. package/dist/backend/{library-identity.d.ts → library-identity-markers.d.ts} +0 -4
  43. package/dist/backend/{library-identity.js → library-identity-markers.js} +10 -9
  44. package/dist/backend/library-identity-markers.js.map +1 -0
  45. package/dist/backend/link-plan.d.ts +37 -0
  46. package/dist/backend/link-plan.js +26 -0
  47. package/dist/backend/link-plan.js.map +1 -0
  48. package/dist/backend/linker.d.ts +22 -0
  49. package/dist/backend/linker.js +236 -0
  50. package/dist/backend/linker.js.map +1 -0
  51. package/dist/backend/llvm/blocks.d.ts +4 -0
  52. package/dist/backend/llvm/blocks.js +29 -0
  53. package/dist/backend/llvm/blocks.js.map +1 -1
  54. package/dist/backend/llvm/classes.d.ts +2 -19
  55. package/dist/backend/llvm/classes.js +20 -52
  56. package/dist/backend/llvm/classes.js.map +1 -1
  57. package/dist/backend/llvm/common.d.ts +4 -0
  58. package/dist/backend/llvm/common.js +27 -0
  59. package/dist/backend/llvm/common.js.map +1 -0
  60. package/dist/backend/llvm/dyn.d.ts +3 -8
  61. package/dist/backend/llvm/dyn.js +159 -224
  62. package/dist/backend/llvm/dyn.js.map +1 -1
  63. package/dist/backend/llvm/emitter.d.ts +4 -1
  64. package/dist/backend/llvm/emitter.js +548 -9988
  65. package/dist/backend/llvm/emitter.js.map +1 -1
  66. package/dist/backend/llvm/expr-async.d.ts +4 -0
  67. package/dist/backend/llvm/expr-async.js +726 -0
  68. package/dist/backend/llvm/expr-async.js.map +1 -0
  69. package/dist/backend/llvm/expr-bytes.d.ts +13 -0
  70. package/dist/backend/llvm/expr-bytes.js +456 -0
  71. package/dist/backend/llvm/expr-bytes.js.map +1 -0
  72. package/dist/backend/llvm/expr-callbacks.d.ts +22 -0
  73. package/dist/backend/llvm/expr-callbacks.js +520 -0
  74. package/dist/backend/llvm/expr-callbacks.js.map +1 -0
  75. package/dist/backend/llvm/expr-calls.d.ts +2 -0
  76. package/dist/backend/llvm/expr-calls.js +618 -0
  77. package/dist/backend/llvm/expr-calls.js.map +1 -0
  78. package/dist/backend/llvm/expr-containers.d.ts +25 -0
  79. package/dist/backend/llvm/expr-containers.js +637 -0
  80. package/dist/backend/llvm/expr-containers.js.map +1 -0
  81. package/dist/backend/llvm/expr-context.d.ts +255 -0
  82. package/dist/backend/llvm/expr-context.js +2 -0
  83. package/dist/backend/llvm/expr-context.js.map +1 -0
  84. package/dist/backend/llvm/expr-control.d.ts +2 -0
  85. package/dist/backend/llvm/expr-control.js +473 -0
  86. package/dist/backend/llvm/expr-control.js.map +1 -0
  87. package/dist/backend/llvm/expr-dispatch.d.ts +4 -0
  88. package/dist/backend/llvm/expr-dispatch.js +153 -0
  89. package/dist/backend/llvm/expr-dispatch.js.map +1 -0
  90. package/dist/backend/llvm/expr-dynamic.d.ts +2 -0
  91. package/dist/backend/llvm/expr-dynamic.js +810 -0
  92. package/dist/backend/llvm/expr-dynamic.js.map +1 -0
  93. package/dist/backend/llvm/expr-island.d.ts +15 -0
  94. package/dist/backend/llvm/expr-island.js +690 -0
  95. package/dist/backend/llvm/expr-island.js.map +1 -0
  96. package/dist/backend/llvm/expr-primitives.d.ts +6 -0
  97. package/dist/backend/llvm/expr-primitives.js +642 -0
  98. package/dist/backend/llvm/expr-primitives.js.map +1 -0
  99. package/dist/backend/llvm/expr-records.d.ts +9 -0
  100. package/dist/backend/llvm/expr-records.js +299 -0
  101. package/dist/backend/llvm/expr-records.js.map +1 -0
  102. package/dist/backend/llvm/expr-stream-bridges.d.ts +13 -0
  103. package/dist/backend/llvm/expr-stream-bridges.js +420 -0
  104. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -0
  105. package/dist/backend/llvm/expr-stream-callbacks.d.ts +12 -0
  106. package/dist/backend/llvm/expr-stream-callbacks.js +360 -0
  107. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -0
  108. package/dist/backend/llvm/lib-dispatch.d.ts +5 -0
  109. package/dist/backend/llvm/lib-dispatch.js +267 -0
  110. package/dist/backend/llvm/lib-dispatch.js.map +1 -0
  111. package/dist/backend/llvm/lib-filesystem.d.ts +6 -0
  112. package/dist/backend/llvm/lib-filesystem.js +594 -0
  113. package/dist/backend/llvm/lib-filesystem.js.map +1 -0
  114. package/dist/backend/llvm/lib-network.d.ts +2 -0
  115. package/dist/backend/llvm/lib-network.js +429 -0
  116. package/dist/backend/llvm/lib-network.js.map +1 -0
  117. package/dist/backend/llvm/lib-process.d.ts +5 -0
  118. package/dist/backend/llvm/lib-process.js +585 -0
  119. package/dist/backend/llvm/lib-process.js.map +1 -0
  120. package/dist/backend/llvm/lib-shared.d.ts +6 -0
  121. package/dist/backend/llvm/lib-shared.js +687 -0
  122. package/dist/backend/llvm/lib-shared.js.map +1 -0
  123. package/dist/backend/llvm/lib-stream.d.ts +2 -0
  124. package/dist/backend/llvm/lib-stream.js +470 -0
  125. package/dist/backend/llvm/lib-stream.js.map +1 -0
  126. package/dist/backend/llvm/shapes.d.ts +12 -2
  127. package/dist/backend/llvm/shapes.js +66 -307
  128. package/dist/backend/llvm/shapes.js.map +1 -1
  129. package/dist/backend/llvm/shapes.test.js +52 -0
  130. package/dist/backend/llvm/shapes.test.js.map +1 -0
  131. package/dist/backend/llvm/unsupported.d.ts +1 -1
  132. package/dist/backend/llvm/walkers.d.ts +2 -3
  133. package/dist/backend/llvm/walkers.js +195 -222
  134. package/dist/backend/llvm/walkers.js.map +1 -1
  135. package/dist/backend/native-codegen.d.ts +45 -0
  136. package/dist/backend/native-codegen.js +275 -0
  137. package/dist/backend/native-codegen.js.map +1 -0
  138. package/dist/backend/native-codegen.test.js +226 -0
  139. package/dist/backend/native-codegen.test.js.map +1 -0
  140. package/dist/backend/native-link-info.d.ts +96 -0
  141. package/dist/backend/native-link-info.js +243 -0
  142. package/dist/backend/native-link-info.js.map +1 -0
  143. package/dist/backend/native-link-info.test.d.ts +1 -0
  144. package/dist/backend/native-link-info.test.js +134 -0
  145. package/dist/backend/native-link-info.test.js.map +1 -0
  146. package/dist/backend/{cc.d.ts → native-toolchain.d.ts} +54 -34
  147. package/dist/backend/{cc.js → native-toolchain.js} +231 -810
  148. package/dist/backend/native-toolchain.js.map +1 -0
  149. package/dist/backend/native-toolchain.test.d.ts +1 -0
  150. package/dist/backend/{cc-cache.test.js → native-toolchain.test.js} +219 -7
  151. package/dist/backend/native-toolchain.test.js.map +1 -0
  152. package/dist/backend/object-localize.js +1 -1
  153. package/dist/backend/runtime-abi.d.ts +10 -0
  154. package/dist/backend/runtime-abi.js +11 -0
  155. package/dist/backend/runtime-abi.js.map +1 -0
  156. package/dist/backend/runtime-pack-targets.test.d.ts +1 -0
  157. package/dist/backend/runtime-pack-targets.test.js +54 -0
  158. package/dist/backend/runtime-pack-targets.test.js.map +1 -0
  159. package/dist/backend/runtime-pack.d.ts +112 -0
  160. package/dist/backend/runtime-pack.js +305 -0
  161. package/dist/backend/runtime-pack.js.map +1 -0
  162. package/dist/backend/runtime-pack.test.d.ts +1 -0
  163. package/dist/backend/runtime-pack.test.js +473 -0
  164. package/dist/backend/runtime-pack.test.js.map +1 -0
  165. package/dist/backend/targets.d.ts +76 -0
  166. package/dist/backend/targets.js +262 -0
  167. package/dist/backend/targets.js.map +1 -0
  168. package/dist/backend/targets.test.d.ts +1 -0
  169. package/dist/backend/targets.test.js +41 -0
  170. package/dist/backend/targets.test.js.map +1 -0
  171. package/dist/backend/vendor-archives.d.ts +41 -0
  172. package/dist/backend/vendor-archives.js +462 -0
  173. package/dist/backend/vendor-archives.js.map +1 -0
  174. package/dist/compat/fetch-profile.d.ts +0 -1
  175. package/dist/compat/fetch-profile.js +0 -1
  176. package/dist/compat/fetch-profile.js.map +1 -1
  177. package/dist/coverage/report.js +3 -3
  178. package/dist/coverage/report.js.map +1 -1
  179. package/dist/coverage/surface-manifest.js +35 -33
  180. package/dist/coverage/surface-manifest.js.map +1 -1
  181. package/dist/diagnostics/diagnostic.d.ts +11 -12
  182. package/dist/diagnostics/diagnostic.js +19 -17
  183. package/dist/diagnostics/diagnostic.js.map +1 -1
  184. package/dist/diagnostics/render.d.ts +1 -1
  185. package/dist/diagnostics/render.js +1 -1
  186. package/dist/diagnostics/render.js.map +1 -1
  187. package/dist/errors.d.ts +5 -0
  188. package/dist/errors.js +9 -0
  189. package/dist/errors.js.map +1 -0
  190. package/dist/executable/{early-cache.d.ts → executable-cache.d.ts} +2 -2
  191. package/dist/executable/{early-cache.js → executable-cache.js} +36 -98
  192. package/dist/executable/executable-cache.js.map +1 -0
  193. package/dist/executable/executable-cache.test.d.ts +1 -0
  194. package/dist/executable/{early-cache.test.js → executable-cache.test.js} +3 -3
  195. package/dist/executable/executable-cache.test.js.map +1 -0
  196. package/dist/ffi/{profile.js → ffi-manifest.js} +1 -1
  197. package/dist/ffi/ffi-manifest.js.map +1 -0
  198. package/dist/frontend/builtin-modules.d.ts +21 -0
  199. package/dist/frontend/builtin-modules.js +82 -0
  200. package/dist/frontend/builtin-modules.js.map +1 -0
  201. package/dist/frontend/cjs-lexer.d.ts +7 -0
  202. package/dist/frontend/cjs-lexer.js +15 -17
  203. package/dist/frontend/cjs-lexer.js.map +1 -1
  204. package/dist/frontend/dts-paths.d.ts +26 -0
  205. package/dist/frontend/dts-paths.js +41 -0
  206. package/dist/frontend/dts-paths.js.map +1 -0
  207. package/dist/frontend/input-tracker.d.ts +0 -2
  208. package/dist/frontend/input-tracker.js +1 -4
  209. package/dist/frontend/input-tracker.js.map +1 -1
  210. package/dist/frontend/lib-contract.d.ts +1 -5
  211. package/dist/frontend/lib-contract.js +1 -1
  212. package/dist/frontend/lib-contract.js.map +1 -1
  213. package/dist/frontend/lib-exports.d.ts +1 -1
  214. package/dist/frontend/lowering/array-values.d.ts +8 -0
  215. package/dist/frontend/lowering/array-values.js +60 -0
  216. package/dist/frontend/lowering/array-values.js.map +1 -0
  217. package/dist/frontend/lowering/call-position.d.ts +4 -0
  218. package/dist/frontend/lowering/call-position.js +7 -0
  219. package/dist/frontend/lowering/call-position.js.map +1 -0
  220. package/dist/frontend/lowering/callback-arg.d.ts +20 -0
  221. package/dist/frontend/lowering/callback-arg.js +44 -0
  222. package/dist/frontend/lowering/callback-arg.js.map +1 -0
  223. package/dist/frontend/lowering/lib-boundary.d.ts +1 -1
  224. package/dist/frontend/lowering/lib-boundary.js +34 -34
  225. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  226. package/dist/frontend/lowering/lower-array-sort.d.ts +22 -0
  227. package/dist/frontend/lowering/lower-array-sort.js +619 -0
  228. package/dist/frontend/lowering/lower-array-sort.js.map +1 -0
  229. package/dist/frontend/lowering/lower-assert.d.ts +3 -3
  230. package/dist/frontend/lowering/lower-assert.js +214 -241
  231. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  232. package/dist/frontend/lowering/lower-builtins.d.ts +74 -146
  233. package/dist/frontend/lowering/lower-builtins.js +1285 -1233
  234. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  235. package/dist/frontend/lowering/lower-calls.d.ts +59 -192
  236. package/dist/frontend/lowering/lower-calls.js +1644 -1506
  237. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  238. package/dist/frontend/lowering/lower-classes.d.ts +62 -125
  239. package/dist/frontend/lowering/lower-classes.js +832 -866
  240. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  241. package/dist/frontend/lowering/lower-comptime.d.ts +5 -12
  242. package/dist/frontend/lowering/lower-comptime.js +32 -31
  243. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  244. package/dist/frontend/lowering/lower-containers.d.ts +35 -135
  245. package/dist/frontend/lowering/lower-containers.js +1984 -2227
  246. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  247. package/dist/frontend/lowering/lower-dgram.d.ts +3 -7
  248. package/dist/frontend/lowering/lower-dgram.js +97 -111
  249. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  250. package/dist/frontend/lowering/lower-enums.d.ts +4 -4
  251. package/dist/frontend/lowering/lower-enums.js +30 -30
  252. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  253. package/dist/frontend/lowering/{lower-emitter.d.ts → lower-event-emitter.d.ts} +7 -18
  254. package/dist/frontend/lowering/{lower-emitter.js → lower-event-emitter.js} +172 -174
  255. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -0
  256. package/dist/frontend/lowering/lower-expando.d.ts +5 -5
  257. package/dist/frontend/lowering/lower-expando.js +40 -40
  258. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  259. package/dist/frontend/lowering/lower-exprs.d.ts +60 -264
  260. package/dist/frontend/lowering/lower-exprs.js +2361 -1765
  261. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  262. package/dist/frontend/lowering/lower-generators.d.ts +6 -6
  263. package/dist/frontend/lowering/lower-generators.js +73 -72
  264. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  265. package/dist/frontend/lowering/lower-inspect.d.ts +5 -17
  266. package/dist/frontend/lowering/lower-inspect.js +273 -261
  267. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  268. package/dist/frontend/lowering/lower-island.d.ts +39 -49
  269. package/dist/frontend/lowering/lower-island.js +447 -513
  270. package/dist/frontend/lowering/lower-island.js.map +1 -1
  271. package/dist/frontend/lowering/lower-mixins.d.ts +7 -10
  272. package/dist/frontend/lowering/lower-mixins.js +85 -85
  273. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  274. package/dist/frontend/lowering/lower-modules.d.ts +12 -18
  275. package/dist/frontend/lowering/lower-modules.js +284 -283
  276. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  277. package/dist/frontend/lowering/lower-namespaces.d.ts +23 -49
  278. package/dist/frontend/lowering/lower-namespaces.js +123 -115
  279. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  280. package/dist/frontend/lowering/lower-server.d.ts +18 -25
  281. package/dist/frontend/lowering/lower-server.js +909 -899
  282. package/dist/frontend/lowering/lower-server.js.map +1 -1
  283. package/dist/frontend/lowering/lower-stmts.d.ts +30 -149
  284. package/dist/frontend/lowering/lower-stmts.js +1463 -1285
  285. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  286. package/dist/frontend/lowering/lower-stream.d.ts +12 -12
  287. package/dist/frontend/lowering/lower-stream.js +300 -301
  288. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  289. package/dist/frontend/lowering/lower-test.d.ts +5 -5
  290. package/dist/frontend/lowering/lower-test.js +82 -82
  291. package/dist/frontend/lowering/lower-test.js.map +1 -1
  292. package/dist/frontend/lowering/lowerer.d.ts +134 -22
  293. package/dist/frontend/lowering/lowerer.js +1277 -126
  294. package/dist/frontend/lowering/lowerer.js.map +1 -1
  295. package/dist/frontend/lowering/pairs-snapshot.d.ts +11 -0
  296. package/dist/frontend/lowering/pairs-snapshot.js +85 -0
  297. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -0
  298. package/dist/frontend/lowering/static-this.d.ts +6 -0
  299. package/dist/frontend/lowering/static-this.js +24 -0
  300. package/dist/frontend/lowering/static-this.js.map +1 -0
  301. package/dist/frontend/lowering/surfaces.d.ts +24 -35
  302. package/dist/frontend/lowering/surfaces.js +78 -66
  303. package/dist/frontend/lowering/surfaces.js.map +1 -1
  304. package/dist/frontend/npm-static-rewrite.js +6 -28
  305. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  306. package/dist/frontend/npm-static.d.ts +0 -10
  307. package/dist/frontend/npm-static.js +4 -7
  308. package/dist/frontend/npm-static.js.map +1 -1
  309. package/dist/frontend/npm.d.ts +0 -24
  310. package/dist/frontend/npm.js +11 -85
  311. package/dist/frontend/npm.js.map +1 -1
  312. package/dist/frontend/program.d.ts +3 -1
  313. package/dist/frontend/program.js +9 -4
  314. package/dist/frontend/program.js.map +1 -1
  315. package/dist/frontend/provenance-registry.d.ts +0 -2
  316. package/dist/frontend/provenance-registry.js +0 -10
  317. package/dist/frontend/provenance-registry.js.map +1 -1
  318. package/dist/frontend/provenance.js +4 -7
  319. package/dist/frontend/provenance.js.map +1 -1
  320. package/dist/frontend/resolve.d.ts +7 -2
  321. package/dist/frontend/resolve.js +12 -17
  322. package/dist/frontend/resolve.js.map +1 -1
  323. package/dist/frontend/resolve.test.d.ts +1 -0
  324. package/dist/frontend/resolve.test.js +29 -0
  325. package/dist/frontend/resolve.test.js.map +1 -0
  326. package/dist/frontend/ts7/adapter.d.ts +2 -2
  327. package/dist/frontend/ts7/adapter.js +1 -1
  328. package/dist/frontend/ts7/adapter.js.map +1 -1
  329. package/dist/frontend/ts7/checker.js +2 -36
  330. package/dist/frontend/ts7/checker.js.map +1 -1
  331. package/dist/frontend/ts7/enums.js +2 -1
  332. package/dist/frontend/ts7/enums.js.map +1 -1
  333. package/dist/frontend/ts7/{program.js → program-adapter.js} +7 -6
  334. package/dist/frontend/ts7/program-adapter.js.map +1 -0
  335. package/dist/frontend/ts7/world-check.d.ts +1 -3
  336. package/dist/frontend/ts7/world-check.js +3 -1
  337. package/dist/frontend/ts7/world-check.js.map +1 -1
  338. package/dist/frontend/tsc-codes.d.ts +8 -0
  339. package/dist/frontend/tsc-codes.js +109 -0
  340. package/dist/frontend/tsc-codes.js.map +1 -0
  341. package/dist/frontend/{types.d.ts → type-mapper.d.ts} +2 -25
  342. package/dist/frontend/{types.js → type-mapper.js} +12 -11
  343. package/dist/frontend/type-mapper.js.map +1 -0
  344. package/dist/frontend/workspace-registry.d.ts +26 -0
  345. package/dist/frontend/workspace-registry.js +71 -0
  346. package/dist/frontend/workspace-registry.js.map +1 -0
  347. package/dist/index.d.ts +113 -31
  348. package/dist/index.js +536 -128
  349. package/dist/index.js.map +1 -1
  350. package/dist/ir/analysis.d.ts +37 -0
  351. package/dist/ir/analysis.js +118 -0
  352. package/dist/ir/analysis.js.map +1 -0
  353. package/dist/ir/analysis.test.d.ts +1 -0
  354. package/dist/ir/analysis.test.js +21 -0
  355. package/dist/ir/analysis.test.js.map +1 -0
  356. package/dist/ir/build.d.ts +9 -0
  357. package/dist/ir/build.js +33 -0
  358. package/dist/ir/build.js.map +1 -0
  359. package/dist/ir/integer-loops.d.ts +1 -1
  360. package/dist/ir/{nodes.d.ts → ir.d.ts} +119 -37
  361. package/dist/ir/{nodes.js → ir.js} +170 -166
  362. package/dist/ir/ir.js.map +1 -0
  363. package/dist/ir/ir.test.d.ts +1 -0
  364. package/dist/ir/ir.test.js +17 -0
  365. package/dist/ir/ir.test.js.map +1 -0
  366. package/dist/ir/serialize.d.ts +2 -2
  367. package/dist/ir/serialize.js +3 -2
  368. package/dist/ir/serialize.js.map +1 -1
  369. package/dist/ir/validate.d.ts +1 -1
  370. package/dist/ir/validate.js +93 -41
  371. package/dist/ir/validate.js.map +1 -1
  372. package/dist/library/cache-primitives.d.ts +24 -0
  373. package/dist/library/cache-primitives.js +83 -0
  374. package/dist/library/cache-primitives.js.map +1 -0
  375. package/dist/library/cache-reset.test.d.ts +1 -0
  376. package/dist/library/cache-reset.test.js +47 -0
  377. package/dist/library/cache-reset.test.js.map +1 -0
  378. package/dist/library/{implementation-identity.js → compiler-self-identity.js} +1 -1
  379. package/dist/library/compiler-self-identity.js.map +1 -0
  380. package/dist/library/fence-eval.d.ts +3 -1
  381. package/dist/library/fence-eval.js +8 -2
  382. package/dist/library/fence-eval.js.map +1 -1
  383. package/dist/library/int-infer.d.ts +1 -36
  384. package/dist/library/int-infer.js +29 -18
  385. package/dist/library/int-infer.js.map +1 -1
  386. package/dist/library/int-infer.test.js +4 -4
  387. package/dist/library/{early-cache.d.ts → library-cache.d.ts} +1 -1
  388. package/dist/library/{early-cache.js → library-cache.js} +34 -89
  389. package/dist/library/library-cache.js.map +1 -0
  390. package/dist/library/library-cache.test.d.ts +1 -0
  391. package/dist/library/{early-cache.test.js → library-cache.test.js} +7 -7
  392. package/dist/library/library-cache.test.js.map +1 -0
  393. package/dist/library/{profile.d.ts → library-profile.d.ts} +4 -7
  394. package/dist/library/{profile.js → library-profile.js} +18 -11
  395. package/dist/library/library-profile.js.map +1 -0
  396. package/dist/library/semantic-source.js +2 -1
  397. package/dist/library/semantic-source.js.map +1 -1
  398. package/dist/library/sidecar.d.ts +5 -2
  399. package/dist/library/sidecar.js +11 -5
  400. package/dist/library/sidecar.js.map +1 -1
  401. package/dist/startup-cache.d.ts +11 -3
  402. package/dist/startup-cache.js +17 -2
  403. package/dist/startup-cache.js.map +1 -1
  404. package/package.json +19 -2
  405. package/surface-manifest.json +5 -5
  406. package/dist/backend/cc-cache.test.js.map +0 -1
  407. package/dist/backend/cc.js.map +0 -1
  408. package/dist/backend/emission/emit-async.js.map +0 -1
  409. package/dist/backend/emission/emit-exprs.d.ts +0 -13
  410. package/dist/backend/emission/emit-exprs.js +0 -7407
  411. package/dist/backend/emission/emit-exprs.js.map +0 -1
  412. package/dist/backend/emission/emit-island.js.map +0 -1
  413. package/dist/backend/emission/emit-shapes.js.map +0 -1
  414. package/dist/backend/emission/emit-stmts.js.map +0 -1
  415. package/dist/backend/emission/emit-types.js.map +0 -1
  416. package/dist/backend/emission/emit-walkers.js.map +0 -1
  417. package/dist/backend/emission/emitter.js.map +0 -1
  418. package/dist/backend/emission/may-throw.js.map +0 -1
  419. package/dist/backend/library-identity.js.map +0 -1
  420. package/dist/executable/early-cache.js.map +0 -1
  421. package/dist/executable/early-cache.test.js.map +0 -1
  422. package/dist/ffi/profile.js.map +0 -1
  423. package/dist/frontend/lowering/lower-emitter.js.map +0 -1
  424. package/dist/frontend/shared.d.ts +0 -82
  425. package/dist/frontend/shared.js +0 -308
  426. package/dist/frontend/shared.js.map +0 -1
  427. package/dist/frontend/ts7/program.js.map +0 -1
  428. package/dist/frontend/types.js.map +0 -1
  429. package/dist/ir/nodes.js.map +0 -1
  430. package/dist/library/early-cache.js.map +0 -1
  431. package/dist/library/early-cache.test.js.map +0 -1
  432. package/dist/library/implementation-identity.js.map +0 -1
  433. package/dist/library/profile.js.map +0 -1
  434. /package/dist/backend/{cc-cache.test.d.ts → c/types.test.d.ts} +0 -0
  435. /package/dist/{executable/early-cache.test.d.ts → backend/llvm/shapes.test.d.ts} +0 -0
  436. /package/dist/{library/early-cache.test.d.ts → backend/native-codegen.test.d.ts} +0 -0
  437. /package/dist/ffi/{profile.d.ts → ffi-manifest.d.ts} +0 -0
  438. /package/dist/frontend/ts7/{program.d.ts → program-adapter.d.ts} +0 -0
  439. /package/dist/library/{implementation-identity.d.ts → compiler-self-identity.d.ts} +0 -0
@@ -0,0 +1,594 @@
1
+ /* Focused LLVM library-call emission extracted from emitter.ts. */
2
+ import { InternalCompilerError } from "../../errors.js";
3
+ import { undefinedArmTag } from "../../ir/analysis.js";
4
+ import { DYN, F64, STRING } from "../../ir/ir.js";
5
+ import { mangleRecordNew } from "../mangle.js";
6
+ import { arrNewCall, traceArg, vAdapters } from "./shapes.js";
7
+ import { f64Lit } from "./common.js";
8
+ import { emitAlwaysThrowLibCall } from "./lib-shared.js";
9
+ const FS_ALWAYS_THROW_SYMS = {
10
+ "fs.mkdtempChk": "scr_fs_mkdtemp_chk",
11
+ "fs.readFileChk": "scr_fs_read_file_chk",
12
+ "fs.opendirChk": "scr_fs_opendir_chk",
13
+ "fs.watchFileChk": "scr_fs_watch_file_chk",
14
+ "fs.lchmodChk": "scr_fs_lchmod_chk",
15
+ "fs.readChk": "scr_fs_read_chk",
16
+ "fs.streamOptsChk": "scr_fs_stream_opts_chk",
17
+ };
18
+ export function emitWebLibCall(host, e) {
19
+ const B = host.B;
20
+ if (e.fn === "fetch.responseText" || e.fn === "fetch.responseBytes") {
21
+ if (e.type.kind !== "promise") {
22
+ throw new InternalCompilerError(`llvm emitter bug: ${e.fn} result`);
23
+ }
24
+ const response = host.emitExpr(e.args[0]);
25
+ const runtimeFn = e.fn === "fetch.responseText"
26
+ ? "scr_fetch_response_text"
27
+ : "scr_fetch_response_bytes";
28
+ host.declare(`declare ptr @${runtimeFn}(ptr)`);
29
+ host.declare(`declare ptr @scr_promise_new()`);
30
+ host.declare(`declare void @scr_promise_race_add(ptr, ptr, ptr)`);
31
+ const sourceRaw = B.tmp();
32
+ B.line(`${sourceRaw} = call ptr @${runtimeFn}(ptr ${response.name})`);
33
+ const source = host.own({
34
+ name: sourceRaw,
35
+ type: { kind: "promise", inner: DYN },
36
+ });
37
+ const resultRaw = B.tmp();
38
+ B.line(`${resultRaw} = call ptr @scr_promise_new()`);
39
+ const result = host.own({ name: resultRaw, type: e.type });
40
+ B.line(`call void @scr_promise_race_add(ptr ${result.name}, ptr ${source.name}, ptr @${host.dynPromiseAdapter(e.type.inner)})`);
41
+ return result;
42
+ }
43
+ if (e.fn === "fetch.readerRead") {
44
+ if (e.type.kind !== "promise" || e.type.inner.kind !== "record") {
45
+ throw new InternalCompilerError("llvm emitter bug: fetch.readerRead result");
46
+ }
47
+ const reader = host.emitExpr(e.args[0]);
48
+ host.declare(`declare ptr @scr_fetch_reader_read(ptr)`);
49
+ host.declare(`declare ptr @scr_promise_new()`);
50
+ host.declare(`declare void @scr_promise_race_add(ptr, ptr, ptr)`);
51
+ const sourceRaw = B.tmp();
52
+ B.line(`${sourceRaw} = call ptr @scr_fetch_reader_read(ptr ${reader.name})`);
53
+ const source = host.own({
54
+ name: sourceRaw,
55
+ type: { kind: "promise", inner: DYN },
56
+ });
57
+ const resultRaw = B.tmp();
58
+ B.line(`${resultRaw} = call ptr @scr_promise_new()`);
59
+ const result = host.own({ name: resultRaw, type: e.type });
60
+ B.line(`call void @scr_promise_race_add(ptr ${result.name}, ptr ${source.name}, ptr @${host.dynPromiseAdapter(e.type.inner)})`);
61
+ return result;
62
+ }
63
+ if (e.fn === "fetch.streamFrom") {
64
+ const source = host.emitExpr(e.args[0]);
65
+ let sym = "scr_fetch_stream_from";
66
+ let extra = "";
67
+ if (source.type.kind === "array") {
68
+ sym = "scr_fetch_stream_from_array";
69
+ extra = `, ptr @${host.streamFromArrayAdapter(source.type)}`;
70
+ }
71
+ else if (source.type.kind === "bytes") {
72
+ sym = "scr_fetch_stream_from_bytes";
73
+ }
74
+ else if (source.type.kind === "string") {
75
+ sym = "scr_fetch_stream_from_string";
76
+ }
77
+ host.declare(`declare ptr @${sym}(ptr${source.type.kind === "array" ? ", ptr" : ""})`);
78
+ const raw = B.tmp();
79
+ B.line(`${raw} = call ptr @${sym}(ptr ${source.name}${extra})`);
80
+ const out = host.own({ name: raw, type: e.type });
81
+ host.emitPendingCheck();
82
+ return out;
83
+ }
84
+ // The handful with non-generic shapes first.
85
+ if (e.fn === "island.castFail") {
86
+ // The deferred boundary failure: the island value was evaluated
87
+ // (its side effects are real), the throw is unconditional
88
+ // (catchable TypeError naming the target type), and the typed
89
+ // dummy is NULL — the pending check abandons it.
90
+ const args = e.args.map((a) => host.emitExpr(a));
91
+ host.declare(`declare void @scr_jsval_cast_fail(ptr, ptr)`);
92
+ B.line(`call void @scr_jsval_cast_fail(ptr ${args[0].name}, ptr ${args[1].name})`);
93
+ const out = host.own({ name: "null", type: e.type });
94
+ host.emitPendingCheck();
95
+ return out;
96
+ }
97
+ return host.emitGenericLibCall(e);
98
+ }
99
+ export function emitDynamicLibCall(host, e) {
100
+ const B = host.B;
101
+ if (e.fn === "global.undefRead") {
102
+ // A declare-d const nothing defines: Node's catchable
103
+ // ReferenceError at the access (always throws — the typed dummy is
104
+ // abandoned by the pending check's unwind; releases are
105
+ // NULL-tolerant). Borrows the name string.
106
+ const name = host.emitExpr(e.args[0]);
107
+ host.declare(`declare void @scr_undef_global_read(ptr)`);
108
+ B.line(`call void @scr_undef_global_read(ptr ${name.name})`);
109
+ const ty = host.llType(e.type);
110
+ const dummy = ty === "double" ? f64Lit(0) : ty === "i1" ? "false" : "null";
111
+ const out = host.own({ name: dummy, type: e.type });
112
+ host.emitPendingCheck();
113
+ return out;
114
+ }
115
+ return host.emitGenericLibCall(e);
116
+ }
117
+ export function emitFilesystemLibCall(host, e) {
118
+ const B = host.B;
119
+ const alwaysThrowSym = FS_ALWAYS_THROW_SYMS[e.fn];
120
+ if (alwaysThrowSym !== undefined) {
121
+ return emitAlwaysThrowLibCall(host, e, alwaysThrowSym);
122
+ }
123
+ if (e.fn === "fs.renameCb") {
124
+ // The callback MOVES into the next-turn operation. Its emitted
125
+ // adapter materializes the callback's Error | null union (or the
126
+ // checkJs dyn argument) from the runtime's borrowed ScrError.
127
+ host.usesTimers = true;
128
+ const args = e.args.map((a) => host.emitExpr(a));
129
+ const cbT = e.args[2].type;
130
+ if (cbT.kind !== "func")
131
+ throw new InternalCompilerError("llvm emitter bug: fs.rename callback not a func");
132
+ host.moveTemp(args[2]);
133
+ const adapter = host.fsRenameThunkFor(cbT);
134
+ host.declare(`declare void @scr_fs_rename_async(ptr, ptr, ptr, ptr)`);
135
+ B.line(`call void @scr_fs_rename_async(ptr ${args[0].name}, ptr ${args[1].name}, ptr ${args[2].name}, ptr @${adapter})`);
136
+ return { name: "", type: e.type };
137
+ }
138
+ if (e.fn === "fileHandle.read" || e.fn === "fileHandle.writeBytes" || e.fn === "fileHandle.writeStr") {
139
+ if (e.type.kind !== "promise" || e.type.inner.kind !== "record") {
140
+ throw new InternalCompilerError(`llvm emitter bug: ${e.fn} result`);
141
+ }
142
+ const args = e.args.map((a) => host.emitExpr(a));
143
+ const sym = e.fn === "fileHandle.read"
144
+ ? "scr_file_handle_read"
145
+ : e.fn === "fileHandle.writeBytes"
146
+ ? "scr_file_handle_write_bytes"
147
+ : "scr_file_handle_write_str";
148
+ const tail = e.fn === "fileHandle.writeStr"
149
+ ? "ptr, ptr, double, ptr"
150
+ : "ptr, ptr, double, double, double, i1 zeroext";
151
+ host.declare(`declare double @${sym}(${tail})`);
152
+ const count = B.tmp();
153
+ B.line(`${count} = call double @${sym}(${args.map((a) => `${host.llType(a.type)} ${a.name}`).join(", ")})`);
154
+ const inner = e.type.inner;
155
+ const rec = B.tmp();
156
+ B.line(`${rec} = call ptr @${mangleRecordNew(inner.shapeId)}()`);
157
+ const countField = e.fn === "fileHandle.read" ? "bytesRead" : "bytesWritten";
158
+ host.storeField(host.recordFieldPtr(rec, inner.shapeId, countField).ptr, F64, count);
159
+ const payload = host.retainValue(args[1].name, e.args[1].type);
160
+ B.line(`store ptr ${payload}, ptr ${host.recordFieldPtr(rec, inner.shapeId, "buffer").ptr}`);
161
+ const rc = vAdapters(host, inner);
162
+ host.declare(`declare ptr @scr_promise_settled_ref(ptr, ptr, ptr, ptr)`);
163
+ const result = B.tmp();
164
+ B.line(`${result} = call ptr @scr_promise_settled_ref(ptr ${rec}, ptr ${rc.retain}, ptr ${rc.release}, ptr ${traceArg(host, inner)})`);
165
+ return host.own({ name: result, type: e.type });
166
+ }
167
+ if (e.fn === "fs.readFileSync" || e.fn === "fs.readFdSync") {
168
+ // args[1] is the (always-"utf8") encoding: evaluated for JS-exact
169
+ // side-effect order, ignored by the runtime. May throw.
170
+ const args = e.args.map((a) => host.emitExpr(a));
171
+ const isFd = e.fn === "fs.readFdSync";
172
+ const sym = isFd ? "scr_fs_read_fd" : "scr_fs_read_file";
173
+ const argTy = isFd ? "double" : "ptr";
174
+ host.declare(`declare ptr @${sym}(${argTy})`);
175
+ const t = B.tmp();
176
+ B.line(`${t} = call ptr @${sym}(${argTy} ${args[0].name})`);
177
+ const out = host.own({ name: t, type: e.type });
178
+ host.emitPendingCheck();
179
+ return out;
180
+ }
181
+ if (e.fn === "fsp.readFile") {
182
+ // fs.promises.readFile(path, "utf8"): args[1] is the encoding —
183
+ // evaluated for JS-exact side-effect order, ignored by the runtime
184
+ // exactly like fs.readFileSync's. The C prototype takes ONLY the
185
+ // path, so the generic path (which passes every evaluated arg)
186
+ // would declare a second parameter the runtime never had. Settles
187
+ // the +1 promise instead of throwing — no pending check.
188
+ const args = e.args.map((a) => host.emitExpr(a));
189
+ host.declare(`declare ptr @scr_fsp_read_file(ptr)`);
190
+ const t = B.tmp();
191
+ B.line(`${t} = call ptr @scr_fsp_read_file(ptr ${args[0].name})`);
192
+ return host.own({ name: t, type: e.type });
193
+ }
194
+ if (e.fn === "fs.watch") {
195
+ // The callback-less form: NULL listener/adapter. Throws Node-shaped
196
+ // fs errors when the path won't open; an open watcher holds the
197
+ // loop (usesTimers).
198
+ host.usesTimers = true;
199
+ const path = host.emitExpr(e.args[0]);
200
+ host.declare(`declare ptr @scr_fs_watch(ptr, ptr, ptr)`);
201
+ const t = B.tmp();
202
+ B.line(`${t} = call ptr @scr_fs_watch(ptr ${path.name}, ptr null, ptr null)`);
203
+ const out = host.own({ name: t, type: e.type });
204
+ host.emitPendingCheck();
205
+ return out;
206
+ }
207
+ if (e.fn === "fs.watchCb") {
208
+ // The callback MOVES into the watcher's registry; the adapter is
209
+ // runtime-provided per listener shape (zero-param, or the eventType
210
+ // string). May throw (ENOENT) — the standard pending check.
211
+ host.usesTimers = true;
212
+ const cbT = e.args[1].type;
213
+ if (cbT.kind !== "func")
214
+ throw new InternalCompilerError("llvm emitter bug: fs.watchCb callback not a func");
215
+ const path = host.emitExpr(e.args[0]);
216
+ const cb = host.emitExpr(e.args[1]);
217
+ host.moveTemp(cb);
218
+ const adapter = cbT.params.length === 0 ? "scr_watch_thunk0" : "scr_watch_thunk_event";
219
+ host.declare(`declare void @${adapter}(ptr, ptr)`);
220
+ host.declare(`declare ptr @scr_fs_watch(ptr, ptr, ptr)`);
221
+ const t = B.tmp();
222
+ B.line(`${t} = call ptr @scr_fs_watch(ptr ${path.name}, ptr ${cb.name}, ptr @${adapter})`);
223
+ const out = host.own({ name: t, type: e.type });
224
+ host.emitPendingCheck();
225
+ return out;
226
+ }
227
+ if (e.fn === "watcher.close") {
228
+ // Idempotent; never throws.
229
+ const w = host.emitExpr(e.args[0]);
230
+ host.declare(`declare void @scr_watcher_close(ptr)`);
231
+ B.line(`call void @scr_watcher_close(ptr ${w.name})`);
232
+ return { name: "", type: e.type };
233
+ }
234
+ if (e.fn === "fs.readdirTypesSync") {
235
+ // Dirent rows assembled inline from one scandir snapshot — the C
236
+ // emitter's flat loop. The snapshot call throws Node's scandir
237
+ // error and answers NULL then, so the pending check runs before
238
+ // any allocation.
239
+ if (e.type.kind !== "array" || e.type.elem.kind !== "record") {
240
+ throw new InternalCompilerError("llvm emitter bug: readdirTypesSync result is not a record array");
241
+ }
242
+ const recT = e.type.elem;
243
+ const path = host.emitExpr(e.args[0]);
244
+ host.declare(`declare ptr @scr_fs_scandir(ptr)`);
245
+ host.declare(`declare ${host.sizeType} @scr_fs_scandir_count(ptr)`);
246
+ host.declare(`declare ptr @scr_fs_scandir_name(ptr, ${host.sizeType})`);
247
+ host.declare(`declare double @scr_fs_scandir_type(ptr, ${host.sizeType})`);
248
+ host.declare(`declare void @scr_fs_scandir_free(ptr)`);
249
+ const snap = B.tmp();
250
+ B.line(`${snap} = call ptr @scr_fs_scandir(ptr ${path.name})`);
251
+ host.emitPendingCheck();
252
+ const cnt = B.tmp();
253
+ B.line(`${cnt} = call ${host.sizeType} @scr_fs_scandir_count(ptr ${snap})`);
254
+ const arr = B.tmp();
255
+ B.line(`${arr} = ${arrNewCall(host, recT, cnt)}`);
256
+ const out = host.own({ name: arr, type: e.type });
257
+ const iSlot = B.slot();
258
+ B.entryAllocas.push(`${iSlot} = alloca ${host.sizeType}`);
259
+ B.line(`store ${host.sizeType} 0, ptr ${iSlot}`);
260
+ const lc = B.newLabel("sd.c");
261
+ const lb = B.newLabel("sd.b");
262
+ const le = B.newLabel("sd.e");
263
+ B.br(lc);
264
+ B.startBlock(lc);
265
+ const i = B.tmp();
266
+ const cont = B.tmp();
267
+ B.line(`${i} = load ${host.sizeType}, ptr ${iSlot}`);
268
+ B.line(`${cont} = icmp ult ${host.sizeType} ${i}, ${cnt}`);
269
+ B.condBr(cont, lb, le);
270
+ B.startBlock(lb);
271
+ const row = B.tmp();
272
+ B.line(`${row} = call ptr @${mangleRecordNew(recT.shapeId)}()`);
273
+ const dt = B.tmp();
274
+ B.line(`${dt} = call double @scr_fs_scandir_type(ptr ${snap}, ${host.sizeType} ${i})`);
275
+ host.storeField(host.recordFieldPtr(row, recT.shapeId, "%dtype").ptr, F64, dt);
276
+ const nm = B.tmp();
277
+ B.line(`${nm} = call ptr @scr_fs_scandir_name(ptr ${snap}, ${host.sizeType} ${i}) ; +1`);
278
+ B.line(`store ptr ${nm}, ptr ${host.recordFieldPtr(row, recT.shapeId, "name").ptr}`);
279
+ B.line(`store ptr ${host.retainValue(path.name, STRING)}, ptr ${host.recordFieldPtr(row, recT.shapeId, "parentPath").ptr}`);
280
+ host.arrPush(arr, "ref", row); // push takes ownership of the row
281
+ const i2 = B.tmp();
282
+ B.line(`${i2} = add ${host.sizeType} ${i}, 1`);
283
+ B.line(`store ${host.sizeType} ${i2}, ptr ${iSlot}`);
284
+ B.br(lc);
285
+ B.startBlock(le);
286
+ B.line(`call void @scr_fs_scandir_free(ptr ${snap})`);
287
+ return out;
288
+ }
289
+ return host.emitGenericLibCall(e);
290
+ }
291
+ export function emitPathUrlLibCall(host, e) {
292
+ const B = host.B;
293
+ if (e.fn === "sp.get") {
294
+ // `string | null` — the sym.desc pattern with a null arm: the
295
+ // runtime answers a +1 string or NULL.
296
+ if (e.type.kind !== "union")
297
+ throw new InternalCompilerError("llvm emitter bug: sp.get result is not a union");
298
+ const def = host.unionsById.get(e.type.unionId);
299
+ const strTag = def ? def.arms.findIndex((a) => a.kind === "string") : -1;
300
+ const nullTag = def ? def.arms.findIndex((a) => a.kind === "nullT") : -1;
301
+ if (strTag < 0 || nullTag < 0)
302
+ throw new InternalCompilerError("llvm emitter bug: sp.get union lacks its arms");
303
+ const args = e.args.map((a) => host.emitExpr(a));
304
+ host.declare(`declare ptr @scr_sp_get(ptr, ptr)`);
305
+ const raw = B.tmp();
306
+ B.line(`${raw} = call ptr @scr_sp_get(ptr ${args[0].name}, ptr ${args[1].name})`);
307
+ return host.wrapNullable(raw, raw, STRING, strTag, e.type, nullTag);
308
+ }
309
+ if (e.fn === "qs.parse") {
310
+ // The ParsedUrlQuery dictionary: a fresh pure-index-signature
311
+ // record whose overflow map the runtime scan fills
312
+ // (scr_qs_parse_into groups repeats into string[] buckets) — the
313
+ // C emitter's shape exactly. The frontend verified the structure;
314
+ // lookups here only guard emitter bugs. Args: qs, sep, eq, maxKeys.
315
+ if (e.type.kind !== "record")
316
+ throw new InternalCompilerError("llvm emitter bug: qs.parse result is not a record");
317
+ const dictShape = host.recordsById.get(e.type.shapeId);
318
+ const iv = dictShape?.indexValue;
319
+ if (!dictShape || iv?.kind !== "union")
320
+ throw new InternalCompilerError("llvm emitter bug: qs.parse dict shape");
321
+ const ivDef = host.unionsById.get(iv.unionId);
322
+ const strTag = ivDef?.arms.findIndex((a) => a.kind === "string") ?? -1;
323
+ const arrTag = ivDef?.arms.findIndex((a) => a.kind === "array") ?? -1;
324
+ if (strTag < 0 || arrTag < 0)
325
+ throw new InternalCompilerError("llvm emitter bug: qs.parse index union lacks its arms");
326
+ const args = e.args.map((a) => host.emitExpr(a));
327
+ host.declare(`declare void @scr_qs_parse_into(ptr, ptr, ptr, ptr, double, i32, i32)`);
328
+ const dict = B.tmp();
329
+ B.line(`${dict} = call ptr @${mangleRecordNew(e.type.shapeId)}()`);
330
+ const out = host.own({ name: dict, type: e.type });
331
+ const ovf = host.recordOvfPtr(dict, e.type.shapeId);
332
+ B.line(`call void @scr_qs_parse_into(ptr ${ovf}, ptr ${args[0].name}, ptr ${args[1].name}, ptr ${args[2].name}, double ${args[3].name}, i32 ${strTag}, i32 ${arrTag})`);
333
+ return out;
334
+ }
335
+ if (e.fn === "os.networkInterfaces") {
336
+ // The Dict<NetworkInterfaceInfo[]> record, built inline from a
337
+ // getifaddrs(3) snapshot — exprs.ts's builder, block-lowered.
338
+ // Every shape/union/tag below comes from the call's own type; the
339
+ // frontend verified the structure, so lookups only guard against
340
+ // emitter bugs. Rows append to their interface's bucket in snapshot
341
+ // order; a first row makes the bucket (a fresh Info[] wrapped into
342
+ // the `Info[] | undefined` union arm the overflow map stores).
343
+ if (e.type.kind !== "record")
344
+ throw new InternalCompilerError("llvm emitter bug: networkInterfaces result is not a record");
345
+ const dictShape = host.recordsById.get(e.type.shapeId);
346
+ const iv = dictShape?.indexValue;
347
+ if (!dictShape || iv?.kind !== "union")
348
+ throw new InternalCompilerError("llvm emitter bug: networkInterfaces dict shape");
349
+ const ivDef = host.unionsById.get(iv.unionId);
350
+ const arrTag = ivDef?.arms.findIndex((a) => a.kind === "array") ?? -1;
351
+ const arrT = ivDef?.arms[arrTag];
352
+ if (arrT?.kind !== "array" || arrT.elem.kind !== "union")
353
+ throw new InternalCompilerError("llvm emitter bug: networkInterfaces bucket type");
354
+ const infoT = arrT.elem;
355
+ const infoDef = host.unionsById.get(infoT.unionId);
356
+ if (!infoDef || infoDef.arms.length !== 2)
357
+ throw new InternalCompilerError("llvm emitter bug: networkInterfaces Info union");
358
+ const tag6 = infoDef.arms.findIndex((a) => a.kind === "record" && host.recordsById.get(a.shapeId)?.fields.find((f) => f.name === "scopeid")?.type.kind === "f64");
359
+ const tag4 = 1 - tag6;
360
+ host.declare(`declare ptr @scr_os_ifaddrs()`);
361
+ host.declare(`declare ${host.sizeType} @scr_os_ifaddrs_count(ptr)`);
362
+ host.declare(`declare ptr @scr_os_ifaddrs_name(ptr, ${host.sizeType})`);
363
+ host.declare(`declare ptr @scr_os_ifaddrs_address(ptr, ${host.sizeType})`);
364
+ host.declare(`declare ptr @scr_os_ifaddrs_netmask(ptr, ${host.sizeType})`);
365
+ host.declare(`declare ptr @scr_os_ifaddrs_family(ptr, ${host.sizeType})`);
366
+ host.declare(`declare ptr @scr_os_ifaddrs_mac(ptr, ${host.sizeType})`);
367
+ host.declare(`declare zeroext i1 @scr_os_ifaddrs_internal(ptr, ${host.sizeType})`);
368
+ host.declare(`declare zeroext i1 @scr_os_ifaddrs_ipv6(ptr, ${host.sizeType})`);
369
+ host.declare(`declare ptr @scr_os_ifaddrs_cidr(ptr, ${host.sizeType})`);
370
+ host.declare(`declare double @scr_os_ifaddrs_scopeid(ptr, ${host.sizeType})`);
371
+ host.declare(`declare void @scr_os_ifaddrs_free(ptr)`);
372
+ host.declare(`declare ptr @scr_union_new_ref(i32, ptr, ptr, ptr, ptr)`);
373
+ host.declare(`declare ptr @scr_union_retain_v(ptr)`);
374
+ host.declare(`declare void @scr_union_release(ptr)`);
375
+ host.declare(`declare ptr @scr_str_retain_v(ptr)`);
376
+ host.declare(`declare void @scr_str_release_v(ptr)`);
377
+ host.declare(`declare void @scr_str_release(ptr)`);
378
+ host.declare(`declare ptr @scr_arr_retain_v(ptr)`);
379
+ host.declare(`declare void @scr_arr_release(ptr)`);
380
+ host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
381
+ host.declare(`declare void @scr_map_set_str_ref(ptr, ptr, ptr)`);
382
+ const dict = B.tmp();
383
+ B.line(`${dict} = call ptr @${mangleRecordNew(e.type.shapeId)}()`);
384
+ const out = host.own({ name: dict, type: e.type });
385
+ const ovf = host.recordOvfPtr(dict, e.type.shapeId);
386
+ const snap = B.tmp();
387
+ const cnt = B.tmp();
388
+ B.line(`${snap} = call ptr @scr_os_ifaddrs()`);
389
+ B.line(`${cnt} = call ${host.sizeType} @scr_os_ifaddrs_count(ptr ${snap})`);
390
+ const iSlot = B.slot();
391
+ const rowSlot = B.slot();
392
+ B.entryAllocas.push(`${iSlot} = alloca ${host.sizeType}`, `${rowSlot} = alloca ptr`);
393
+ B.line(`store ${host.sizeType} 0, ptr ${iSlot}`);
394
+ const lc = B.newLabel("ni.c");
395
+ const lb = B.newLabel("ni.b");
396
+ const le = B.newLabel("ni.e");
397
+ B.br(lc);
398
+ B.startBlock(lc);
399
+ const i = B.tmp();
400
+ const cont = B.tmp();
401
+ B.line(`${i} = load ${host.sizeType}, ptr ${iSlot}`);
402
+ B.line(`${cont} = icmp ult ${host.sizeType} ${i}, ${cnt}`);
403
+ B.condBr(cont, lb, le);
404
+ B.startBlock(lb);
405
+ const isV6 = B.tmp();
406
+ B.line(`${isV6} = call zeroext i1 @scr_os_ifaddrs_ipv6(ptr ${snap}, ${host.sizeType} ${i})`);
407
+ const l6 = B.newLabel("ni.v6");
408
+ const l4 = B.newLabel("ni.v4");
409
+ const lRow = B.newLabel("ni.r");
410
+ B.condBr(isV6, l6, l4);
411
+ const emitRow = (tag, v6) => {
412
+ const t = infoDef.arms[tag];
413
+ if (t?.kind !== "record")
414
+ throw new InternalCompilerError("llvm emitter bug: networkInterfaces Info arm");
415
+ const shape = host.recordsById.get(t.shapeId);
416
+ if (!shape)
417
+ throw new InternalCompilerError("llvm emitter bug: networkInterfaces Info shape");
418
+ const cidrT = shape.fields.find((f) => f.name === "cidr")?.type;
419
+ const cidrDef = cidrT?.kind === "union" ? host.unionsById.get(cidrT.unionId) : undefined;
420
+ if (cidrT?.kind !== "union" || !cidrDef)
421
+ throw new InternalCompilerError("llvm emitter bug: networkInterfaces cidr type");
422
+ const cidrStrTag = cidrDef.arms.findIndex((a) => a.kind === "string");
423
+ const cidrNullTag = cidrDef.arms.findIndex((a) => a.kind === "nullT");
424
+ const r = B.tmp();
425
+ B.line(`${r} = call ptr @${mangleRecordNew(t.shapeId)}()`);
426
+ for (const [field, sym] of [
427
+ ["address", "scr_os_ifaddrs_address"],
428
+ ["netmask", "scr_os_ifaddrs_netmask"],
429
+ ["family", "scr_os_ifaddrs_family"],
430
+ ["mac", "scr_os_ifaddrs_mac"],
431
+ ]) {
432
+ const v = B.tmp();
433
+ B.line(`${v} = call ptr @${sym}(ptr ${snap}, ${host.sizeType} ${i}) ; +1`);
434
+ B.line(`store ptr ${v}, ptr ${host.recordFieldPtr(r, t.shapeId, field).ptr}`);
435
+ }
436
+ const internal = B.tmp();
437
+ B.line(`${internal} = call zeroext i1 @scr_os_ifaddrs_internal(ptr ${snap}, ${host.sizeType} ${i})`);
438
+ host.storeField(host.recordFieldPtr(r, t.shapeId, "internal").ptr, { kind: "bool" }, internal);
439
+ const cs = B.tmp();
440
+ B.line(`${cs} = call ptr @scr_os_ifaddrs_cidr(ptr ${snap}, ${host.sizeType} ${i}) ; +1 or null`);
441
+ const hasCidr = B.tmp();
442
+ B.line(`${hasCidr} = icmp ne ptr ${cs}, null`);
443
+ const lcs = B.newLabel("ni.cs");
444
+ const lcn = B.newLabel("ni.cn");
445
+ const lcj = B.newLabel("ni.cj");
446
+ const cidrSlot = B.slot();
447
+ B.entryAllocas.push(`${cidrSlot} = alloca ptr`);
448
+ B.condBr(hasCidr, lcs, lcn);
449
+ B.startBlock(lcs);
450
+ const cu = B.tmp();
451
+ B.line(`${cu} = call ptr @scr_union_new_ref(i32 ${cidrStrTag}, ptr ${cs}, ptr @scr_str_retain_v, ptr @scr_str_release_v, ptr null)`);
452
+ B.line(`store ptr ${cu}, ptr ${cidrSlot}`);
453
+ B.br(lcj);
454
+ B.startBlock(lcn);
455
+ const cn = B.tmp();
456
+ B.line(`${cn} = call ptr @scr_union_retain_v(ptr ${host.unitInstanceRef(cidrT.unionId, cidrNullTag)})`);
457
+ B.line(`store ptr ${cn}, ptr ${cidrSlot}`);
458
+ B.br(lcj);
459
+ B.startBlock(lcj);
460
+ const cv = B.tmp();
461
+ B.line(`${cv} = load ptr, ptr ${cidrSlot}`);
462
+ B.line(`store ptr ${cv}, ptr ${host.recordFieldPtr(r, t.shapeId, "cidr").ptr}`);
463
+ if (v6) {
464
+ const sc = B.tmp();
465
+ B.line(`${sc} = call double @scr_os_ifaddrs_scopeid(ptr ${snap}, ${host.sizeType} ${i})`);
466
+ host.storeField(host.recordFieldPtr(r, t.shapeId, "scopeid").ptr, F64, sc);
467
+ }
468
+ else {
469
+ const st = shape.fields.find((f) => f.name === "scopeid")?.type;
470
+ if (st?.kind !== "union")
471
+ throw new InternalCompilerError("llvm emitter bug: networkInterfaces IPv4 scopeid type");
472
+ const undefTag = undefinedArmTag(st, host.unionsById);
473
+ const su = B.tmp();
474
+ B.line(`${su} = call ptr @scr_union_retain_v(ptr ${host.unitInstanceRef(st.unionId, undefTag)})`);
475
+ B.line(`store ptr ${su}, ptr ${host.recordFieldPtr(r, t.shapeId, "scopeid").ptr}`);
476
+ }
477
+ const rc = vAdapters(host, t);
478
+ const rowU = B.tmp();
479
+ B.line(`${rowU} = call ptr @scr_union_new_ref(i32 ${tag}, ptr ${r}, ptr ${rc.retain}, ptr ${rc.release}, ptr ${traceArg(host, t)})`);
480
+ B.line(`store ptr ${rowU}, ptr ${rowSlot}`);
481
+ B.br(lRow);
482
+ };
483
+ B.startBlock(l6);
484
+ emitRow(tag6, true);
485
+ B.startBlock(l4);
486
+ emitRow(tag4, false);
487
+ B.startBlock(lRow);
488
+ const row = B.tmp();
489
+ B.line(`${row} = load ptr, ptr ${rowSlot}`);
490
+ const nm = B.tmp();
491
+ B.line(`${nm} = call ptr @scr_os_ifaddrs_name(ptr ${snap}, ${host.sizeType} ${i}) ; +1`);
492
+ const cell = B.tmp();
493
+ B.line(`${cell} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${nm})`);
494
+ const hasCell = B.tmp();
495
+ B.line(`${hasCell} = icmp ne ptr ${cell}, null`);
496
+ const lh = B.newLabel("ni.h");
497
+ const lm = B.newLabel("ni.m");
498
+ const lj = B.newLabel("ni.j");
499
+ const rowsSlot = B.slot();
500
+ B.entryAllocas.push(`${rowsSlot} = alloca ptr`);
501
+ B.condBr(hasCell, lh, lm);
502
+ B.startBlock(lh);
503
+ const peeked = host.unionPeek(cell);
504
+ const retained = B.tmp();
505
+ B.line(`${retained} = call ptr @scr_arr_retain_v(ptr ${peeked})`);
506
+ B.line(`store ptr ${retained}, ptr ${rowsSlot}`);
507
+ B.line(`call void @scr_union_release(ptr ${cell})`);
508
+ B.br(lj);
509
+ B.startBlock(lm);
510
+ const fresh = B.tmp();
511
+ B.line(`${fresh} = ${arrNewCall(host, infoT, "1")}`);
512
+ const arrRc = vAdapters(host, arrT);
513
+ const freshRet = B.tmp();
514
+ B.line(`${freshRet} = call ptr @scr_arr_retain_v(ptr ${fresh})`);
515
+ const bucketU = B.tmp();
516
+ B.line(`${bucketU} = call ptr @scr_union_new_ref(i32 ${arrTag}, ptr ${freshRet}, ptr ${arrRc.retain}, ptr ${arrRc.release}, ptr ${traceArg(host, arrT)})`);
517
+ B.line(`call void @scr_map_set_str_ref(ptr ${ovf}, ptr ${nm}, ptr ${bucketU})`);
518
+ B.line(`store ptr ${fresh}, ptr ${rowsSlot}`);
519
+ B.br(lj);
520
+ B.startBlock(lj);
521
+ const rows = B.tmp();
522
+ B.line(`${rows} = load ptr, ptr ${rowsSlot}`);
523
+ host.arrPush(rows, "ref", row); // push takes ownership of the row
524
+ B.line(`call void @scr_arr_release(ptr ${rows})`);
525
+ B.line(`call void @scr_str_release(ptr ${nm})`);
526
+ const i2 = B.tmp();
527
+ B.line(`${i2} = add ${host.sizeType} ${i}, 1`);
528
+ B.line(`store ${host.sizeType} ${i2}, ptr ${iSlot}`);
529
+ B.br(lc);
530
+ B.startBlock(le);
531
+ B.line(`call void @scr_os_ifaddrs_free(ptr ${snap})`);
532
+ return out;
533
+ }
534
+ return host.emitGenericLibCall(e);
535
+ }
536
+ export function emitPrimitiveLibCall(host, e) {
537
+ const B = host.B;
538
+ if (e.fn === "math.floor" || e.fn === "math.trunc" || e.fn === "math.ceil") {
539
+ const intr = e.fn === "math.floor" ? "floor" : e.fn === "math.trunc" ? "trunc" : "ceil";
540
+ const v = host.emitExpr(e.args[0]);
541
+ host.declare(`declare double @llvm.${intr}.f64(double)`);
542
+ const t = B.tmp();
543
+ B.line(`${t} = call double @llvm.${intr}.f64(double ${v.name})`);
544
+ return { name: t, type: e.type };
545
+ }
546
+ if (e.fn === "math.abs") {
547
+ const v = host.emitExpr(e.args[0]);
548
+ host.declare(`declare double @llvm.fabs.f64(double)`);
549
+ const t = B.tmp();
550
+ B.line(`${t} = call double @llvm.fabs.f64(double ${v.name})`);
551
+ return { name: t, type: e.type };
552
+ }
553
+ if (e.fn === "num.isNaN") {
554
+ const v = host.emitExpr(e.args[0]);
555
+ const t = B.tmp();
556
+ B.line(`${t} = fcmp uno double ${v.name}, ${f64Lit(0)}`);
557
+ return { name: t, type: e.type };
558
+ }
559
+ if (e.fn === "sym.newAnon") {
560
+ host.declare(`declare ptr @scr_sym_new(ptr)`);
561
+ const t = B.tmp();
562
+ B.line(`${t} = call ptr @scr_sym_new(ptr null)`);
563
+ return host.own({ name: t, type: e.type });
564
+ }
565
+ if (e.fn === "sym.desc" || e.fn === "sym.keyFor") {
566
+ // `string | undefined` — the runtime answers a +1 string or NULL;
567
+ // the union construction is type-directed here (envGet convention).
568
+ if (e.type.kind !== "union")
569
+ throw new InternalCompilerError(`llvm emitter bug: ${e.fn} result is not a union`);
570
+ const def = host.unionsById.get(e.type.unionId);
571
+ const strTag = def ? def.arms.findIndex((a) => a.kind === "string") : -1;
572
+ const undefTag = undefinedArmTag(e.type, host.unionsById);
573
+ if (strTag < 0 || undefTag < 0)
574
+ throw new InternalCompilerError(`llvm emitter bug: ${e.fn} union lacks its arms`);
575
+ const v = host.emitExpr(e.args[0]);
576
+ const sym = e.fn === "sym.desc" ? "scr_sym_desc" : "scr_sym_key_for";
577
+ host.declare(`declare ptr @${sym}(ptr)`);
578
+ const raw = B.tmp();
579
+ B.line(`${raw} = call ptr @${sym}(ptr ${v.name})`);
580
+ return host.wrapNullable(raw, raw, STRING, strTag, e.type, undefTag);
581
+ }
582
+ if (e.fn === "string.fromCharCode") {
583
+ // One packed f64[] (the frontend built it) or one bytes value (the
584
+ // spread-typed-array form); +1 string.
585
+ const sym = e.args[0].type.kind === "bytes" ? "scr_str_from_char_code_bytes" : "scr_str_from_char_code";
586
+ const v = host.emitExpr(e.args[0]);
587
+ host.declare(`declare ptr @${sym}(ptr)`);
588
+ const t = B.tmp();
589
+ B.line(`${t} = call ptr @${sym}(ptr ${v.name})`);
590
+ return host.own({ name: t, type: e.type });
591
+ }
592
+ return host.emitGenericLibCall(e);
593
+ }
594
+ //# sourceMappingURL=lib-filesystem.js.map