@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
@@ -39,12 +39,12 @@
39
39
  import * as ts from "../ts7/adapter.js";
40
40
  import { boundIdentifiersOf } from "./lowerer.js";
41
41
  import { locOf, resolveImport } from "../program.js";
42
- import { F64, STRING } from "../../ir/nodes.js";
42
+ import { F64, STRING } from "../../ir/ir.js";
43
43
  /** True when this module declaration produces NO runtime construct at all:
44
44
  * ambient (`declare namespace/module`, `declare global`, string-named
45
45
  * modules — .d.ts surface or user-file declares) or a non-instantiated
46
46
  * body (only type-world statements inside). */
47
- export function nsZeroRuntime(decl) {
47
+ function nsZeroRuntime(decl) {
48
48
  if (isAmbientModuleDecl(decl))
49
49
  return true;
50
50
  if (!ts.isIdentifier(decl.name))
@@ -53,7 +53,7 @@ export function nsZeroRuntime(decl) {
53
53
  }
54
54
  /** Ambient module declaration: carries `declare` itself, sits in an
55
55
  * ambient ancestor, or is the `declare global` augmentation. */
56
- export function isAmbientModuleDecl(decl) {
56
+ function isAmbientModuleDecl(decl) {
57
57
  if (decl.flags & ts.NodeFlags.Ambient)
58
58
  return true;
59
59
  for (let p = decl; p !== undefined && !ts.isSourceFile(p); p = p.parent) {
@@ -89,19 +89,19 @@ function nsTypeOnlyBody(decl) {
89
89
  * declaration's block flattened (the object exists once a block ran;
90
90
  * merged ambient declarations don't subtract), "typeOnly"/"ambient" when
91
91
  * none did. Null for non-namespace symbols. */
92
- export function nsSymbolRuntimeKind(L, sym) {
92
+ function nsSymbolRuntimeKind(lowerer, sym) {
93
93
  if (!(sym.flags & (ts.SymbolFlags.ValueModule | ts.SymbolFlags.NamespaceModule)))
94
94
  return null;
95
95
  let sawTypeOnly = false;
96
96
  let sawNamespace = false;
97
- for (const d of L.checker.declarationsOf(sym)) {
97
+ for (const d of lowerer.checker.declarationsOf(sym)) {
98
98
  if (!ts.isModuleDeclaration(d))
99
99
  continue;
100
100
  sawNamespace = true;
101
101
  let body = d.body;
102
102
  while (body !== undefined && ts.isModuleDeclaration(body))
103
103
  body = body.body;
104
- const kind = body !== undefined ? L.nsBlocks.get(body) : undefined;
104
+ const kind = body !== undefined ? lowerer.nsBlocks.get(body) : undefined;
105
105
  if (kind === "flattened")
106
106
  return "instantiated";
107
107
  if (kind === "typeOnly")
@@ -118,10 +118,10 @@ export function nsSymbolRuntimeKind(L, sym) {
118
118
  * collection lists, everything else joins the init body in source order.
119
119
  * Nested namespaces recurse; dotted declarations (`namespace A.B.C`)
120
120
  * descend to the innermost block. */
121
- export function collectNamespaceStmt(L, decl, fp) {
121
+ export function collectNamespaceStmt(lowerer, decl, fp) {
122
122
  if (nsZeroRuntime(decl)) {
123
123
  if (!isAmbientModuleDecl(decl))
124
- registerTypeOnlyBlocks(L, decl);
124
+ registerTypeOnlyBlocks(lowerer, decl);
125
125
  return;
126
126
  }
127
127
  let body = decl.body;
@@ -129,7 +129,7 @@ export function collectNamespaceStmt(L, decl, fp) {
129
129
  body = body.body;
130
130
  if (body === undefined || !ts.isModuleBlock(body))
131
131
  return; // bodyless non-ambient: tsc-rejected
132
- L.nsBlocks.set(body, "flattened");
132
+ lowerer.nsBlocks.set(body, "flattened");
133
133
  for (const s of body.statements) {
134
134
  if (ts.isFunctionDeclaration(s))
135
135
  fp.fnDecls.push(s);
@@ -138,7 +138,7 @@ export function collectNamespaceStmt(L, decl, fp) {
138
138
  else if (ts.isInterfaceDeclaration(s) || ts.isTypeAliasDeclaration(s))
139
139
  continue;
140
140
  else if (ts.isModuleDeclaration(s))
141
- collectNamespaceStmt(L, s, fp);
141
+ collectNamespaceStmt(lowerer, s, fp);
142
142
  // Everything else — member variables, side-effecting statements,
143
143
  // import= aliases (lowerStmt handles them), enums (their own fence) —
144
144
  // runs in the init body at its source position.
@@ -146,16 +146,16 @@ export function collectNamespaceStmt(L, decl, fp) {
146
146
  fp.topStmts.push(s);
147
147
  }
148
148
  }
149
- function registerTypeOnlyBlocks(L, decl) {
149
+ function registerTypeOnlyBlocks(lowerer, decl) {
150
150
  let body = decl.body;
151
151
  while (body !== undefined && ts.isModuleDeclaration(body))
152
152
  body = body.body;
153
153
  if (body === undefined || !ts.isModuleBlock(body))
154
154
  return;
155
- L.nsBlocks.set(body, "typeOnly");
155
+ lowerer.nsBlocks.set(body, "typeOnly");
156
156
  for (const s of body.statements) {
157
157
  if (ts.isModuleDeclaration(s))
158
- registerTypeOnlyBlocks(L, s);
158
+ registerTypeOnlyBlocks(lowerer, s);
159
159
  }
160
160
  }
161
161
  /** The namespace-path prefix of a declaration's emitted name ("A%B." for
@@ -193,8 +193,8 @@ export function nsPathPrefix(node, modifierDecl) {
193
193
  * non-instantiated one, whose only value members are import= aliases), or
194
194
  * null. The walk stops at class/function boundaries: a static member of a
195
195
  * class INSIDE a namespace is the class's business, not the namespace's. */
196
- export function nsBlockKindOfSymbol(L, sym) {
197
- for (const d of L.checker.declarationsOf(sym)) {
196
+ function nsBlockKindOfSymbol(lowerer, sym) {
197
+ for (const d of lowerer.checker.declarationsOf(sym)) {
198
198
  // TYPE declarations don't make a member a namespace VALUE: a class
199
199
  // static `C.B` whose name also carries `namespace C { export
200
200
  // interface B }` is the static's business — value references consult
@@ -208,7 +208,7 @@ export function nsBlockKindOfSymbol(L, sym) {
208
208
  continue;
209
209
  let blocked = false;
210
210
  for (let p = d.parent; p !== undefined && !ts.isSourceFile(p); p = p.parent) {
211
- const kind = L.nsBlocks.get(p);
211
+ const kind = lowerer.nsBlocks.get(p);
212
212
  if (kind !== undefined) {
213
213
  if (!blocked)
214
214
  return kind;
@@ -231,23 +231,23 @@ export function nsBlockKindOfSymbol(L, sym) {
231
231
  * Builtin/stdlib module namespaces (string-named ambient modules in
232
232
  * .d.ts files) and npm packages answer null — their own chokepoints and
233
233
  * fences keep ownership. */
234
- export function moduleNsSourceFileOf(L, e) {
234
+ function moduleNsSourceFileOf(lowerer, e) {
235
235
  let sym;
236
236
  if (ts.isIdentifier(e)) {
237
- sym = L.checker.getSymbolAtLocation(e);
237
+ sym = lowerer.checker.getSymbolAtLocation(e);
238
238
  }
239
239
  else if (ts.isPropertyAccessExpression(e) &&
240
240
  e.questionDotToken === undefined &&
241
241
  ts.isIdentifier(e.name)) {
242
- sym = L.checker.getSymbolAtLocation(e.name);
242
+ sym = lowerer.checker.getSymbolAtLocation(e.name);
243
243
  }
244
244
  if (!sym)
245
245
  return null;
246
246
  if (sym.flags & ts.SymbolFlags.Alias)
247
- sym = L.checker.getAliasedSymbol(sym);
248
- for (const d of L.checker.declarationsOf(sym)) {
247
+ sym = lowerer.checker.getAliasedSymbol(sym);
248
+ for (const d of lowerer.checker.declarationsOf(sym)) {
249
249
  if (sym.flags & ts.SymbolFlags.ValueModule &&
250
- ts.isSourceFile(d) && !d.isDeclarationFile && L.fileTag.has(d)) {
250
+ ts.isSourceFile(d) && !d.isDeclarationFile && lowerer.fileTag.has(d)) {
251
251
  return d;
252
252
  }
253
253
  // A symbol MERGED with type-world declarations (`export type Drink =
@@ -260,8 +260,8 @@ export function moduleNsSourceFileOf(L, e) {
260
260
  if ((ts.isImportDeclaration(stmt) || ts.isExportDeclaration(stmt)) &&
261
261
  stmt.moduleSpecifier !== undefined &&
262
262
  ts.isStringLiteral(stmt.moduleSpecifier)) {
263
- const dep = resolveImport(L.program, d.getSourceFile(), stmt.moduleSpecifier.text);
264
- if (dep && !dep.isDeclarationFile && L.fileTag.has(dep))
263
+ const dep = resolveImport(lowerer.program, d.getSourceFile(), stmt.moduleSpecifier.text);
264
+ if (dep && !dep.isDeclarationFile && lowerer.fileTag.has(dep))
265
265
  return dep;
266
266
  }
267
267
  }
@@ -279,17 +279,17 @@ export function moduleNsSourceFileOf(L, e) {
279
279
  * reads are LIVE bindings in Node (the namespace object's properties
280
280
  * alias the exporter's storage), which is exactly what resolving to the
281
281
  * exporter's module global gives. */
282
- export function nsMemberIdentOf(L, access) {
282
+ export function nsMemberIdentOf(lowerer, access) {
283
283
  if (access.questionDotToken !== undefined)
284
284
  return null;
285
285
  if (!ts.isIdentifier(access.name))
286
286
  return null;
287
- const memberSym = L.checker.getSymbolAtLocation(access.name);
287
+ const memberSym = lowerer.checker.getSymbolAtLocation(access.name);
288
288
  if (!memberSym)
289
289
  return null;
290
- if (nsBlockKindOfSymbol(L, memberSym) !== null)
290
+ if (nsBlockKindOfSymbol(lowerer, memberSym) !== null)
291
291
  return access.name;
292
- if (moduleNsSourceFileOf(L, access.expression) !== null)
292
+ if (moduleNsSourceFileOf(lowerer, access.expression) !== null)
293
293
  return access.name;
294
294
  return null;
295
295
  }
@@ -298,21 +298,21 @@ export function nsMemberIdentOf(L, access) {
298
298
  * ModuleDeclaration outside the stdlib/@types surface), or null. Reads
299
299
  * through it compile to Node's ReferenceError naming the root — the
300
300
  * ambient namespace object never exists at runtime. */
301
- export function ambientNsRootOf(L, e) {
301
+ export function ambientNsRootOf(lowerer, e) {
302
302
  let root = e;
303
303
  while (ts.isPropertyAccessExpression(root) && root.questionDotToken === undefined) {
304
304
  root = root.expression;
305
305
  }
306
306
  if (!ts.isIdentifier(root))
307
307
  return null;
308
- let sym = L.checker.getSymbolAtLocation(root);
308
+ let sym = lowerer.checker.getSymbolAtLocation(root);
309
309
  if (sym && sym.flags & ts.SymbolFlags.Alias)
310
- sym = L.checker.getAliasedSymbol(sym);
310
+ sym = lowerer.checker.getAliasedSymbol(sym);
311
311
  if (!sym || !(sym.flags & (ts.SymbolFlags.ValueModule | ts.SymbolFlags.NamespaceModule)))
312
312
  return null;
313
- if (L.isStdlibSymbol(sym))
313
+ if (lowerer.isStdlibSymbol(sym))
314
314
  return null;
315
- const decls = L.checker.declarationsOf(sym);
315
+ const decls = lowerer.checker.declarationsOf(sym);
316
316
  if (decls.length === 0)
317
317
  return null;
318
318
  for (const d of decls) {
@@ -344,7 +344,7 @@ export function ambientNsRootOf(L, e) {
344
344
  * defined";
345
345
  * - an ambient `declare function` nothing defines (the same erasure,
346
346
  * ambientUndefinedFnSymbolOf);
347
- * - a TRAP BINDING (L.trapBindings) — a binding whose own initializer
347
+ * - a TRAP BINDING (lowerer.trapBindings) — a binding whose own initializer
348
348
  * provably threw before producing a value, so module init unwound and
349
349
  * no reference to it can ever execute (any lowering is sound there;
350
350
  * the trap keeps the shape honest if reachability analysis is wrong).
@@ -354,11 +354,14 @@ export function ambientNsRootOf(L, e) {
354
354
  * null/undefined AFTER a successful read; it cannot guard the root's own
355
355
  * ReferenceError), calls and `new` (the callee evaluates before any
356
356
  * argument), instantiation expressions, and tagged templates (the tag
357
- * evaluates first). Callers lower the WHOLE expression to the root's
358
- * throw, typed by the use site — and never lower the arguments, exactly
359
- * the order Node dies in. Null for stdlib/@types roots (their own
357
+ * evaluates first). A manifest-validated direct FFI call is the narrow
358
+ * exception: its ambient declaration supplies a native implementation, so
359
+ * the call itself is not an undefined-root read and outer transparent chains
360
+ * retain that native result. Callers lower every other whole expression to
361
+ * the root's throw, typed by the use site — and never lower the arguments,
362
+ * exactly the order Node dies in. Null for stdlib/@types roots (their own
360
363
  * chokepoints stand) and anything declared with a value. */
361
- export function ambientUndefVarRootOf(L, e) {
364
+ export function ambientUndefVarRootOf(lowerer, e) {
362
365
  let root = e;
363
366
  for (;;) {
364
367
  if (ts.isParenthesizedExpression(root) ||
@@ -374,6 +377,11 @@ export function ambientUndefVarRootOf(L, e) {
374
377
  continue;
375
378
  }
376
379
  if (ts.isCallExpression(root) || ts.isNewExpression(root)) {
380
+ // A configured native binding owns this exact call node. Do not walk
381
+ // into its signature-only declaration: the call produces a native
382
+ // result, and normal call lowering must retain its ffiCall IR.
383
+ if (ts.isCallExpression(root) && lowerer.ownsFfiCall(root))
384
+ return null;
377
385
  root = root.expression;
378
386
  continue;
379
387
  }
@@ -399,19 +407,19 @@ export function ambientUndefVarRootOf(L, e) {
399
407
  // PoisonError out of collection entirely. The collect-phase guard
400
408
  // suppresses both; the ordinary lowering that follows a null answer
401
409
  // re-resolves with full effects at its own site.
402
- const wasCollecting = L.collecting;
403
- L.collecting = true;
410
+ const wasCollecting = lowerer.collecting;
411
+ lowerer.collecting = true;
404
412
  try {
405
- const sym = L.resolveValueSymbol(root);
413
+ const sym = lowerer.resolveValueSymbol(root);
406
414
  if (!sym)
407
415
  return null;
408
- if (L.trapBindings.has(sym))
416
+ if (lowerer.trapBindings.has(sym))
409
417
  return root;
410
- if (L.isStdlibSymbol(sym))
418
+ if (lowerer.isStdlibSymbol(sym))
411
419
  return null;
412
- if (ambientUndefinedFnSymbolOf(L, root) !== null)
420
+ if (ambientUndefinedFnSymbolOf(lowerer, root) !== null)
413
421
  return root;
414
- const decls = L.checker.declarationsOf(sym);
422
+ const decls = lowerer.checker.declarationsOf(sym);
415
423
  if (decls.length === 0)
416
424
  return null;
417
425
  for (const d of decls) {
@@ -425,7 +433,7 @@ export function ambientUndefVarRootOf(L, e) {
425
433
  return root;
426
434
  }
427
435
  finally {
428
- L.collecting = wasCollecting;
436
+ lowerer.collecting = wasCollecting;
429
437
  }
430
438
  }
431
439
  /** The declaration-classification form of ambientUndefVarRootOf: the root
@@ -451,16 +459,16 @@ export function ambientUndefVarRootOf(L, e) {
451
459
  * skips the write forms the no-storage lowering already compiles (a
452
460
  * statement-position `x = <ambient-rooted chain>` IS the RHS root's
453
461
  * throw — lowerExprStatement never touches the target's storage). */
454
- export function trapDeclRootOf(L, decl) {
462
+ export function trapDeclRootOf(lowerer, decl) {
455
463
  if (decl.initializer === undefined)
456
464
  return null;
457
- const root = ambientUndefVarRootOf(L, decl.initializer);
465
+ const root = ambientUndefVarRootOf(lowerer, decl.initializer);
458
466
  if (root === null)
459
467
  return null;
460
468
  for (const nameNode of boundIdentifiersOf(decl.name)) {
461
- const sym = L.checker.getSymbolAtLocation(nameNode);
462
- if (sym && bindingEverWritten(L, sym, decl.getSourceFile())) {
463
- const mapped = L.mapTypeOf(L.checker.getTypeOfSymbol(sym));
469
+ const sym = lowerer.checker.getSymbolAtLocation(nameNode);
470
+ if (sym && bindingEverWritten(lowerer, sym, decl.getSourceFile())) {
471
+ const mapped = lowerer.mapTypeOf(lowerer.checker.getTypeOfSymbol(sym));
464
472
  if (mapped !== null && mapped.kind !== "void")
465
473
  return null;
466
474
  }
@@ -483,9 +491,9 @@ export function trapDeclRootOf(L, decl) {
483
491
  * taggedTemplatesWithTypeArguments1 shape, where the decline pushed the
484
492
  * initializer into an ordinary lowering that fences). ambientUndefVarRootOf
485
493
  * carries its own collect-guard, so the extra question stays a probe. */
486
- function bindingEverWritten(L, sym, sf) {
494
+ function bindingEverWritten(lowerer, sym, sf) {
487
495
  const symText = sym.name;
488
- const namesSym = (e) => ts.isIdentifier(e) && e.text === symText && L.checker.getSymbolAtLocation(e) === sym;
496
+ const namesSym = (e) => ts.isIdentifier(e) && e.text === symText && lowerer.checker.getSymbolAtLocation(e) === sym;
489
497
  const patternWrites = (target) => {
490
498
  if (namesSym(target))
491
499
  return true;
@@ -519,7 +527,7 @@ function bindingEverWritten(L, sym, sf) {
519
527
  p = p.parent;
520
528
  if (!ts.isExpressionStatement(p))
521
529
  return false;
522
- return ambientUndefVarRootOf(L, n.right) !== null;
530
+ return ambientUndefVarRootOf(lowerer, n.right) !== null;
523
531
  };
524
532
  if (namesSym(lhs)) {
525
533
  if (!throwsBeforeTheWrite())
@@ -556,10 +564,10 @@ function bindingEverWritten(L, sym, sf) {
556
564
  * type has no mapping (an `any`-typed member off a narrowed ambient), the
557
565
  * type the value flows INTO types the throw instead — sound because the
558
566
  * read never returns, so the typed dummy is never observed. */
559
- export function contextualUndefReadType(L, node) {
560
- const ctx = L.checker.getContextualType(node);
561
- const mapped = ctx ? L.mapTypeOf(ctx) : null;
562
- if (mapped && mapped.kind !== "void" && !L.typeNamesUnregisteredClass(mapped))
567
+ export function contextualUndefReadType(lowerer, node) {
568
+ const ctx = lowerer.checker.getContextualType(node);
569
+ const mapped = ctx ? lowerer.mapTypeOf(ctx) : null;
570
+ if (mapped && mapped.kind !== "void" && !lowerer.typeNamesUnregisteredClass(mapped))
563
571
  return mapped;
564
572
  return null;
565
573
  }
@@ -569,12 +577,12 @@ export function contextualUndefReadType(L, node) {
569
577
  * reads conformance tests are full of), null otherwise (the callers fall
570
578
  * through to their ordinary fences). The read always throws, so the typed
571
579
  * dummy is never observed. */
572
- export function ambientUndefReadType(L, node) {
573
- const declared = L.mapTypeOf(L.typeOf(node));
580
+ export function ambientUndefReadType(lowerer, node) {
581
+ const declared = lowerer.mapTypeOf(lowerer.typeOf(node));
574
582
  // A type naming an UNREGISTERED class (an ambient class's instance —
575
583
  // nothing collected a shape) would make the emitter name a struct that
576
584
  // does not exist; the F64 dummy serves discarded positions instead.
577
- if (declared && declared.kind !== "void" && !L.typeNamesUnregisteredClass(declared)) {
585
+ if (declared && declared.kind !== "void" && !lowerer.typeNamesUnregisteredClass(declared)) {
578
586
  return declared;
579
587
  }
580
588
  const p = node.parent;
@@ -592,14 +600,14 @@ export function ambientUndefReadType(L, node) {
592
600
  * stance. Null for stdlib/@types surfaces (their own chokepoints stand),
593
601
  * for overload signatures (an implementation exists), and for anything
594
602
  * declared in a .d.ts. */
595
- export function ambientUndefinedFnSymbolOf(L, ident) {
596
- const sym = L.resolveValueSymbol(ident);
603
+ export function ambientUndefinedFnSymbolOf(lowerer, ident) {
604
+ const sym = lowerer.resolveValueSymbol(ident);
597
605
  if (!sym || !(sym.flags & ts.SymbolFlags.Function))
598
606
  return null;
599
- if (L.isStdlibSymbol(sym))
607
+ if (lowerer.isStdlibSymbol(sym))
600
608
  return null;
601
609
  let sawFn = false;
602
- for (const d of L.checker.declarationsOf(sym)) {
610
+ for (const d of lowerer.checker.declarationsOf(sym)) {
603
611
  if (ts.isInterfaceDeclaration(d) || ts.isTypeAliasDeclaration(d))
604
612
  continue; // type-world merge partners
605
613
  if (ts.isFunctionDeclaration(d)) {
@@ -620,7 +628,7 @@ export function ambientUndefinedFnSymbolOf(L, ident) {
620
628
  /** Node's ReferenceError at an ambient namespace access — the undefRead
621
629
  * libCall the ambient `declare const` path already uses, typed by the use
622
630
  * site (it always throws; the typed dummy is abandoned by the unwind). */
623
- export function nsUndefRead(L, rootName, node, type) {
631
+ export function nsUndefRead(lowerer, rootName, node, type) {
624
632
  const loc = locOf(node);
625
633
  return {
626
634
  kind: "libCall",
@@ -644,9 +652,9 @@ function initExecutingPosition(node) {
644
652
  }
645
653
  return true;
646
654
  }
647
- function earliestSameFileDeclStart(L, sym, sf) {
655
+ function earliestSameFileDeclStart(lowerer, sym, sf) {
648
656
  let earliest = Infinity;
649
- for (const d of L.checker.declarationsOf(sym)) {
657
+ for (const d of lowerer.checker.declarationsOf(sym)) {
650
658
  if (d.getSourceFile() === sf)
651
659
  earliest = Math.min(earliest, d.getStart());
652
660
  }
@@ -656,11 +664,11 @@ function earliestSameFileDeclStart(L, sym, sf) {
656
664
  * use): the alias statement captures its target's CURRENT value, so an
657
665
  * init-position use above the alias — or an alias above its target — would
658
666
  * observe what Node leaves uninitialized. Fences instead of diverging. */
659
- export function fenceEarlyAliasUse(L, ident, refNode) {
660
- const sym = L.checker.getSymbolAtLocation(ident);
667
+ export function fenceEarlyAliasUse(lowerer, ident, refNode) {
668
+ const sym = lowerer.checker.getSymbolAtLocation(ident);
661
669
  if (!sym || !(sym.flags & ts.SymbolFlags.Alias))
662
670
  return;
663
- const aliasDecl = L.checker.declarationsOf(sym).find(ts.isImportEqualsDeclaration);
671
+ const aliasDecl = lowerer.checker.declarationsOf(sym).find(ts.isImportEqualsDeclaration);
664
672
  if (!aliasDecl || ts.isExternalModuleReference(aliasDecl.moduleReference))
665
673
  return;
666
674
  if (!initExecutingPosition(refNode))
@@ -670,15 +678,15 @@ export function fenceEarlyAliasUse(L, ident, refNode) {
670
678
  return; // cross-file: module init order applies
671
679
  const aliasStart = aliasDecl.getStart();
672
680
  if (refNode.getStart() < aliasStart) {
673
- L.unsupported("SC1090", refNode, `reading '${ident.text}' above its \`import ${ident.text} = ...\` alias (Node binds the alias at its statement — this read would observe an uninitialized binding; move it below the alias)`);
681
+ lowerer.unsupported("SC1090", refNode, `reading '${ident.text}' above its \`import ${ident.text} = ...\` alias (Node binds the alias at its statement — this read would observe an uninitialized binding; move it below the alias)`);
674
682
  }
675
683
  // The alias itself must run AFTER its target exists: a namespace target
676
684
  // needs a contributing block above the alias, a value target its
677
685
  // declaration.
678
- const target = L.checker.getAliasedSymbol(sym);
679
- const targetStart = earliestSameFileDeclStart(L, target, sf);
686
+ const target = lowerer.checker.getAliasedSymbol(sym);
687
+ const targetStart = earliestSameFileDeclStart(lowerer, target, sf);
680
688
  if (targetStart !== Infinity && aliasStart < targetStart) {
681
- L.unsupported("SC1090", refNode, `the \`import ${ident.text} = ...\` alias above its target's declaration (Node binds the alias at its statement, when the target is still uninitialized; move the alias below the target)`);
689
+ lowerer.unsupported("SC1090", refNode, `the \`import ${ident.text} = ...\` alias above its target's declaration (Node binds the alias at its statement, when the target is still uninitialized; move the alias below the target)`);
682
690
  }
683
691
  }
684
692
  /** The source-order guard for a qualified namespace-member reference in
@@ -690,25 +698,25 @@ export function fenceEarlyAliasUse(L, ident, refNode) {
690
698
  * Function-body references are exempt: they take the module-globals stance
691
699
  * the compiler already takes for top-level consts read through early
692
700
  * calls. */
693
- export function fenceEarlyNsMemberRef(L, access, memberSym) {
701
+ export function fenceEarlyNsMemberRef(lowerer, access, memberSym) {
694
702
  if (!initExecutingPosition(access))
695
703
  return;
696
704
  const sf = access.getSourceFile();
697
705
  const refStart = access.getStart();
698
- const memberStart = earliestSameFileDeclStart(L, memberSym, sf);
706
+ const memberStart = earliestSameFileDeclStart(lowerer, memberSym, sf);
699
707
  if (memberStart !== Infinity && refStart < memberStart) {
700
- L.unsupported("SC1090", access, `reading namespace member '${access.name.text}' above its declaration (Node evaluates namespace bodies in source order — this read would observe an uninitialized binding; move it below the declaring block)`);
708
+ lowerer.unsupported("SC1090", access, `reading namespace member '${access.name.text}' above its declaration (Node evaluates namespace bodies in source order — this read would observe an uninitialized binding; move it below the declaring block)`);
701
709
  }
702
710
  // Alias segments in the qualifier chain (`C.a.Origin` where `a` is
703
711
  // `import a = A`): each captures its target at ITS statement.
704
712
  for (let e = access.expression;;) {
705
713
  if (ts.isPropertyAccessExpression(e) && ts.isIdentifier(e.name)) {
706
- fenceEarlyAliasUse(L, e.name, access);
714
+ fenceEarlyAliasUse(lowerer, e.name, access);
707
715
  e = e.expression;
708
716
  continue;
709
717
  }
710
718
  if (ts.isIdentifier(e))
711
- fenceEarlyAliasUse(L, e, access);
719
+ fenceEarlyAliasUse(lowerer, e, access);
712
720
  break;
713
721
  }
714
722
  }
@@ -726,8 +734,8 @@ export function fenceEarlyNsMemberRef(L, access, memberSym) {
726
734
  * machinery carries its own guards. Called from resolveValueSymbol with
727
735
  * the PRE-alias symbol; property NAMES (qualified reads — runtime
728
736
  * property lookups, always fine) never reach it. */
729
- export function fenceCrossBlockNsRef(L, ident, symbol) {
730
- if (L.nsBlocks.size === 0 || L.collecting)
737
+ export function fenceCrossBlockNsRef(lowerer, ident, symbol) {
738
+ if (lowerer.nsBlocks.size === 0 || lowerer.collecting)
731
739
  return;
732
740
  if (symbol.flags & ts.SymbolFlags.Alias)
733
741
  return;
@@ -737,12 +745,12 @@ export function fenceCrossBlockNsRef(L, ident, symbol) {
737
745
  // The registered blocks enclosing the REFERENCE, innermost first.
738
746
  const refBlocks = [];
739
747
  for (let q = ident.parent; q !== undefined && !ts.isSourceFile(q); q = q.parent) {
740
- if (L.nsBlocks.has(q))
748
+ if (lowerer.nsBlocks.has(q))
741
749
  refBlocks.push(q);
742
750
  }
743
- for (const d of L.checker.declarationsOf(symbol)) {
751
+ for (const d of lowerer.checker.declarationsOf(symbol)) {
744
752
  for (let q = d.parent; q !== undefined && !ts.isSourceFile(q); q = q.parent) {
745
- if (!L.nsBlocks.has(q))
753
+ if (!lowerer.nsBlocks.has(q))
746
754
  continue;
747
755
  // Declared in a registered block: fine when that block encloses the
748
756
  // reference too (same block, or an enclosing namespace's block).
@@ -752,7 +760,7 @@ export function fenceCrossBlockNsRef(L, ident, symbol) {
752
760
  const m = q.parent;
753
761
  return m !== undefined && ts.isModuleDeclaration(m) && ts.isIdentifier(m.name) ? m.name.text : "N";
754
762
  })();
755
- L.unsupported("SC1090", ident, `the bare reference to '${ident.text}' from a different block of the merged namespace (Node's TypeScript transform does not bind exported members across namespace blocks — it throws ReferenceError where tsc's emit would qualify; write ${nsName}.${ident.text})`);
763
+ lowerer.unsupported("SC1090", ident, `the bare reference to '${ident.text}' from a different block of the merged namespace (Node's TypeScript transform does not bind exported members across namespace blocks — it throws ReferenceError where tsc's emit would qualify; write ${nsName}.${ident.text})`);
756
764
  }
757
765
  }
758
766
  }
@@ -762,17 +770,17 @@ export function fenceCrossBlockNsRef(L, ident, symbol) {
762
770
  * to consts/functions/classes through the qualifier). Null when `access`
763
771
  * is not a lowered-namespace member at all; a member whose declaration
764
772
  * never registered storage takes the blocked-binding cascade. */
765
- export function nsWritableTarget(L, access) {
766
- const nsMember = nsMemberIdentOf(L, access);
773
+ export function nsWritableTarget(lowerer, access) {
774
+ const nsMember = nsMemberIdentOf(lowerer, access);
767
775
  if (!nsMember)
768
776
  return null;
769
- const memberSym = L.checker.getSymbolAtLocation(nsMember);
777
+ const memberSym = lowerer.checker.getSymbolAtLocation(nsMember);
770
778
  if (memberSym)
771
- fenceEarlyNsMemberRef(L, access, memberSym);
772
- const resolved = L.resolveValueSymbol(nsMember);
773
- const g = resolved ? L.globalsBySymbol.get(resolved) : undefined;
779
+ fenceEarlyNsMemberRef(lowerer, access, memberSym);
780
+ const resolved = lowerer.resolveValueSymbol(nsMember);
781
+ const g = resolved ? lowerer.globalsBySymbol.get(resolved) : undefined;
774
782
  if (!g) {
775
- L.rejectUnresolved(nsMember, `assignment to namespace member '${nsMember.text}' (not a writable module global)`);
783
+ lowerer.rejectUnresolved(nsMember, `assignment to namespace member '${nsMember.text}' (not a writable module global)`);
776
784
  }
777
785
  return { id: g.id, type: g.type };
778
786
  }
@@ -786,19 +794,19 @@ export function nsWritableTarget(L, access) {
786
794
  * collection registered the alias its own const global (keyed by the
787
795
  * pre-alias symbol — resolveValueSymbol stops there) and this statement
788
796
  * assigns it from the target's storage, exactly when Node does. */
789
- export function lowerImportEquals(L, stmt) {
797
+ export function lowerImportEquals(lowerer, stmt) {
790
798
  if (stmt.isTypeOnly)
791
799
  return null;
792
800
  if (ts.isExternalModuleReference(stmt.moduleReference)) {
793
- L.unsupported("SC1013", stmt, "import = require(...) assignments");
801
+ lowerer.unsupported("SC1013", stmt, "import = require(...) assignments");
794
802
  }
795
803
  // A BARE-identifier entity target (`import g = f` inside a block):
796
804
  // Node emits `var g = f` — the same cross-block bare-reference hole as
797
805
  // any other bare use; the shared fence applies at the alias statement.
798
806
  if (ts.isIdentifier(stmt.moduleReference)) {
799
- const refSym = L.checker.getSymbolAtLocation(stmt.moduleReference);
807
+ const refSym = lowerer.checker.getSymbolAtLocation(stmt.moduleReference);
800
808
  if (refSym)
801
- fenceCrossBlockNsRef(L, stmt.moduleReference, refSym);
809
+ fenceCrossBlockNsRef(lowerer, stmt.moduleReference, refSym);
802
810
  }
803
811
  // Node's transform ALWAYS emits `var x = <entity>` — it never elides
804
812
  // type-only aliases the way tsc's emit does — so an alias whose entity
@@ -811,32 +819,32 @@ export function lowerImportEquals(L, stmt) {
811
819
  while (ts.isQualifiedName(root))
812
820
  root = root.left;
813
821
  if (ts.isIdentifier(root)) {
814
- let rootSym = L.checker.getSymbolAtLocation(root);
822
+ let rootSym = lowerer.checker.getSymbolAtLocation(root);
815
823
  if (rootSym && rootSym.flags & ts.SymbolFlags.Alias) {
816
- rootSym = L.checker.getAliasedSymbol(rootSym);
824
+ rootSym = lowerer.checker.getAliasedSymbol(rootSym);
817
825
  }
818
- const kind = rootSym ? nsSymbolRuntimeKind(L, rootSym) : null;
826
+ const kind = rootSym ? nsSymbolRuntimeKind(lowerer, rootSym) : null;
819
827
  if (kind === "typeOnly" || kind === "ambient") {
820
828
  const loc = locOf(stmt);
821
829
  return {
822
830
  kind: "exprStmt",
823
- expr: nsUndefRead(L, root.text, stmt, F64),
831
+ expr: nsUndefRead(lowerer, root.text, stmt, F64),
824
832
  loc,
825
833
  };
826
834
  }
827
835
  }
828
836
  }
829
- const nameSym = L.checker.getSymbolAtLocation(stmt.name);
830
- const aliasG = nameSym ? L.globalsBySymbol.get(nameSym) : undefined;
837
+ const nameSym = lowerer.checker.getSymbolAtLocation(stmt.name);
838
+ const aliasG = nameSym ? lowerer.globalsBySymbol.get(nameSym) : undefined;
831
839
  if (nameSym && aliasG) {
832
840
  // The snapshot assignment. The target is a mutable binding with its
833
841
  // own module global (a namespace `export var` member, a top-level
834
842
  // var reached through an alias chain); a target whose declaration
835
843
  // never registered storage takes the blocked-binding cascade.
836
- const target = L.checker.getAliasedSymbol(nameSym);
837
- const targetG = L.globalsBySymbol.get(target);
844
+ const target = lowerer.checker.getAliasedSymbol(nameSym);
845
+ const targetG = lowerer.globalsBySymbol.get(target);
838
846
  if (!targetG) {
839
- L.rejectUnresolvedSymbol(target, stmt.name.text, stmt.name, `the alias target of '${stmt.name.text}' (no lowered storage)`);
847
+ lowerer.rejectUnresolvedSymbol(target, stmt.name.text, stmt.name, `the alias target of '${stmt.name.text}' (no lowered storage)`);
840
848
  }
841
849
  const loc = locOf(stmt);
842
850
  return {
@@ -854,30 +862,30 @@ export function lowerImportEquals(L, stmt) {
854
862
  * ReferenceError instead when the use site's type maps (the object never
855
863
  * exists at runtime). Returns null when `ident` is not a namespace
856
864
  * reference at all. */
857
- export function lowerNsIdentifierValue(L, ident) {
858
- const sym = L.resolveValueSymbol(ident);
865
+ export function lowerNsIdentifierValue(lowerer, ident) {
866
+ const sym = lowerer.resolveValueSymbol(ident);
859
867
  if (!sym || !(sym.flags & (ts.SymbolFlags.ValueModule | ts.SymbolFlags.NamespaceModule))) {
860
868
  return null;
861
869
  }
862
870
  if (sym.flags & (ts.SymbolFlags.Class | ts.SymbolFlags.Function | ts.SymbolFlags.RegularEnum | ts.SymbolFlags.ConstEnum | ts.SymbolFlags.Variable)) {
863
871
  return null; // merged with a value declaration — its own paths and fences apply
864
872
  }
865
- const ambientRoot = ambientNsRootOf(L, ident);
873
+ const ambientRoot = ambientNsRootOf(lowerer, ident);
866
874
  if (ambientRoot !== null) {
867
- const t = ambientUndefReadType(L, ident);
875
+ const t = ambientUndefReadType(lowerer, ident);
868
876
  if (t)
869
- return nsUndefRead(L, ambientRoot.text, ident, t);
877
+ return nsUndefRead(lowerer, ambientRoot.text, ident, t);
870
878
  }
871
- if (L.isStdlibSymbol(sym))
879
+ if (lowerer.isStdlibSymbol(sym))
872
880
  return null; // stdlib namespaces keep their chokepoints
873
881
  // A MODULE namespace object as a first-class value (`import * as ns`
874
882
  // passed/stored/iterated): member accesses resolve statically, but the
875
883
  // object itself has no runtime representation — Node's frozen,
876
884
  // alphabetically-keyed namespace object is not materialized. Named
877
885
  // residual of the SC1013 lowering.
878
- if (moduleNsSourceFileOf(L, ident) !== null) {
879
- L.unsupported("SC1013", ident, `module namespace objects as first-class values (access '${ident.text}' members directly: ${ident.text}.<member>)`);
886
+ if (moduleNsSourceFileOf(lowerer, ident) !== null) {
887
+ lowerer.unsupported("SC1013", ident, `module namespace objects as first-class values (access '${ident.text}' members directly: ${ident.text}.<member>)`);
880
888
  }
881
- L.unsupported("SC1090", ident, `namespace objects as first-class values (access '${ident.text}' members directly: ${ident.text}.<member>)`);
889
+ lowerer.unsupported("SC1090", ident, `namespace objects as first-class values (access '${ident.text}' members directly: ${ident.text}.<member>)`);
882
890
  }
883
891
  //# sourceMappingURL=lower-namespaces.js.map