@scriptc/compiler 0.3.3 → 0.3.5

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 (352) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +844 -36
  2. package/dist/backend/cycle-mutability.d.ts +5 -0
  3. package/dist/backend/cycle-mutability.js +62 -3
  4. package/dist/backend/cycle-mutability.js.map +1 -1
  5. package/dist/backend/executable-features.js +1 -0
  6. package/dist/backend/executable-features.js.map +1 -1
  7. package/dist/backend/library-pack.js +1 -0
  8. package/dist/backend/library-pack.js.map +1 -1
  9. package/dist/backend/llvm/array-search.js +1 -1
  10. package/dist/backend/llvm/array-search.js.map +1 -1
  11. package/dist/backend/llvm/call-lifetimes.d.ts +11 -1
  12. package/dist/backend/llvm/call-lifetimes.js +30 -3
  13. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  14. package/dist/backend/llvm/call-lifetimes.test.js +31 -1
  15. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  16. package/dist/backend/llvm/common.d.ts +5 -0
  17. package/dist/backend/llvm/common.js +7 -0
  18. package/dist/backend/llvm/common.js.map +1 -1
  19. package/dist/backend/llvm/constant-callbacks.d.ts +2 -21
  20. package/dist/backend/llvm/constant-callbacks.js +36 -219
  21. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  22. package/dist/backend/llvm/constant-callbacks.test.js +22 -0
  23. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  24. package/dist/backend/llvm/dense-array-access.d.ts +9 -0
  25. package/dist/backend/llvm/dense-array-access.js +29 -3
  26. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  27. package/dist/backend/llvm/dyn.d.ts +46 -1
  28. package/dist/backend/llvm/dyn.js +218 -33
  29. package/dist/backend/llvm/dyn.js.map +1 -1
  30. package/dist/backend/llvm/emitter.d.ts +87 -1
  31. package/dist/backend/llvm/emitter.js +568 -61
  32. package/dist/backend/llvm/emitter.js.map +1 -1
  33. package/dist/backend/llvm/expr-async.js +17 -7
  34. package/dist/backend/llvm/expr-async.js.map +1 -1
  35. package/dist/backend/llvm/expr-bytes.d.ts +9 -0
  36. package/dist/backend/llvm/expr-bytes.js +159 -64
  37. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  38. package/dist/backend/llvm/expr-callbacks.d.ts +11 -0
  39. package/dist/backend/llvm/expr-callbacks.js +53 -0
  40. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  41. package/dist/backend/llvm/expr-calls.d.ts +3 -1
  42. package/dist/backend/llvm/expr-calls.js +137 -3
  43. package/dist/backend/llvm/expr-calls.js.map +1 -1
  44. package/dist/backend/llvm/expr-containers.js +63 -29
  45. package/dist/backend/llvm/expr-containers.js.map +1 -1
  46. package/dist/backend/llvm/expr-primitives.js +9 -1
  47. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  48. package/dist/backend/llvm/expr-stream-bridges.js +4 -0
  49. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  50. package/dist/backend/llvm/integer-clones.d.ts +103 -0
  51. package/dist/backend/llvm/integer-clones.js +1336 -0
  52. package/dist/backend/llvm/integer-clones.js.map +1 -0
  53. package/dist/backend/llvm/integer-clones.test.d.ts +1 -0
  54. package/dist/backend/llvm/integer-clones.test.js +219 -0
  55. package/dist/backend/llvm/integer-clones.test.js.map +1 -0
  56. package/dist/backend/llvm/intern-tables.test.d.ts +1 -0
  57. package/dist/backend/llvm/intern-tables.test.js +77 -0
  58. package/dist/backend/llvm/intern-tables.test.js.map +1 -0
  59. package/dist/backend/llvm/lib-datagram.js +24 -0
  60. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  61. package/dist/backend/llvm/lib-dispatch.js +96 -1
  62. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  63. package/dist/backend/llvm/lib-filesystem.js +51 -0
  64. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  65. package/dist/backend/llvm/lib-network.js +16 -0
  66. package/dist/backend/llvm/lib-network.js.map +1 -1
  67. package/dist/backend/llvm/lib-process.js +24 -0
  68. package/dist/backend/llvm/lib-process.js.map +1 -1
  69. package/dist/backend/llvm/lib-shared.d.ts +5 -0
  70. package/dist/backend/llvm/lib-shared.js +114 -3
  71. package/dist/backend/llvm/lib-shared.js.map +1 -1
  72. package/dist/backend/llvm/lib-stream.js +87 -0
  73. package/dist/backend/llvm/lib-stream.js.map +1 -1
  74. package/dist/backend/llvm/lib-test.js +9 -0
  75. package/dist/backend/llvm/lib-test.js.map +1 -1
  76. package/dist/backend/llvm/lib-tls.js +6 -0
  77. package/dist/backend/llvm/lib-tls.js.map +1 -1
  78. package/dist/backend/llvm/local-array-reads.js +1 -1
  79. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  80. package/dist/backend/llvm/map-entry-fusion.d.ts +28 -0
  81. package/dist/backend/llvm/map-entry-fusion.js +233 -0
  82. package/dist/backend/llvm/map-entry-fusion.js.map +1 -0
  83. package/dist/backend/llvm/map-entry-fusion.test.d.ts +1 -0
  84. package/dist/backend/llvm/map-entry-fusion.test.js +183 -0
  85. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -0
  86. package/dist/backend/llvm/map-number-lookup.d.ts +6 -0
  87. package/dist/backend/llvm/map-number-lookup.js +23 -1
  88. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  89. package/dist/backend/llvm/map-number-lookup.test.js +60 -5
  90. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  91. package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -0
  92. package/dist/backend/llvm/map-read-lifetimes.js +92 -1
  93. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  94. package/dist/backend/llvm/map-read-lifetimes.test.js +131 -3
  95. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  96. package/dist/backend/llvm/publish.d.ts +21 -0
  97. package/dist/backend/llvm/publish.js +101 -11
  98. package/dist/backend/llvm/publish.js.map +1 -1
  99. package/dist/backend/llvm/publish.test.d.ts +1 -0
  100. package/dist/backend/llvm/publish.test.js +94 -0
  101. package/dist/backend/llvm/publish.test.js.map +1 -0
  102. package/dist/backend/llvm/record-results.js +76 -2
  103. package/dist/backend/llvm/record-results.js.map +1 -1
  104. package/dist/backend/llvm/record-sources.d.ts +7 -0
  105. package/dist/backend/llvm/record-sources.js +14 -0
  106. package/dist/backend/llvm/record-sources.js.map +1 -0
  107. package/dist/backend/llvm/reference-writes.js +5 -2
  108. package/dist/backend/llvm/reference-writes.js.map +1 -1
  109. package/dist/backend/llvm/regions.d.ts +4 -1
  110. package/dist/backend/llvm/regions.js +12 -3
  111. package/dist/backend/llvm/regions.js.map +1 -1
  112. package/dist/backend/llvm/shapes.d.ts +9 -3
  113. package/dist/backend/llvm/shapes.js +18 -14
  114. package/dist/backend/llvm/shapes.js.map +1 -1
  115. package/dist/backend/llvm/shapes.test.js +5 -3
  116. package/dist/backend/llvm/shapes.test.js.map +1 -1
  117. package/dist/backend/llvm/string-lifetimes.test.js +75 -1
  118. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  119. package/dist/backend/llvm/string-reads.js +2 -2
  120. package/dist/backend/llvm/string-reads.js.map +1 -1
  121. package/dist/backend/llvm/string-slices.js +2 -2
  122. package/dist/backend/llvm/string-slices.js.map +1 -1
  123. package/dist/backend/llvm/walkers.d.ts +17 -0
  124. package/dist/backend/llvm/walkers.js +123 -0
  125. package/dist/backend/llvm/walkers.js.map +1 -1
  126. package/dist/backend/may-throw.js +4 -0
  127. package/dist/backend/may-throw.js.map +1 -1
  128. package/dist/backend/native/contracts.d.ts +5 -1
  129. package/dist/backend/native/executable.js +16 -6
  130. package/dist/backend/native/executable.js.map +1 -1
  131. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  132. package/dist/backend/native/runtime-inputs.js +1 -0
  133. package/dist/backend/native/runtime-inputs.js.map +1 -1
  134. package/dist/backend/native-codegen-core.d.ts +4 -4
  135. package/dist/backend/native-codegen-core.js +4 -6
  136. package/dist/backend/native-codegen-core.js.map +1 -1
  137. package/dist/backend/native-codegen.test.js +7 -8
  138. package/dist/backend/native-codegen.test.js.map +1 -1
  139. package/dist/backend/native-link-info-core.d.ts +3 -0
  140. package/dist/backend/native-link-info-core.js.map +1 -1
  141. package/dist/backend/publication.js +3 -1
  142. package/dist/backend/publication.js.map +1 -1
  143. package/dist/backend/runtime-abi.d.ts +2 -2
  144. package/dist/backend/runtime-abi.js +2 -2
  145. package/dist/backend/runtime-pack-targets.test.js +2 -1
  146. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  147. package/dist/backend/runtime-pack.test.js +2 -1
  148. package/dist/backend/runtime-pack.test.js.map +1 -1
  149. package/dist/backend/target-diagnostics.js +7 -0
  150. package/dist/backend/target-diagnostics.js.map +1 -1
  151. package/dist/backend/warm-cache.js +1 -0
  152. package/dist/backend/warm-cache.js.map +1 -1
  153. package/dist/executable/executable-cache.d.ts +1 -0
  154. package/dist/executable/executable-cache.js +1 -0
  155. package/dist/executable/executable-cache.js.map +1 -1
  156. package/dist/executable/executable-cache.test.js +1 -0
  157. package/dist/executable/executable-cache.test.js.map +1 -1
  158. package/dist/frontend/experimental-import.d.ts +5 -1
  159. package/dist/frontend/experimental-import.js +28 -3
  160. package/dist/frontend/experimental-import.js.map +1 -1
  161. package/dist/frontend/lowering/assert-instances.d.ts +38 -0
  162. package/dist/frontend/lowering/assert-instances.js +269 -0
  163. package/dist/frontend/lowering/assert-instances.js.map +1 -0
  164. package/dist/frontend/lowering/builtin-calls.js +3 -0
  165. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  166. package/dist/frontend/lowering/builtins/callable-aliases.js +54 -8
  167. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  168. package/dist/frontend/lowering/builtins/child-process-async.d.ts +8 -6
  169. package/dist/frontend/lowering/builtins/child-process-async.js +45 -29
  170. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  171. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  172. package/dist/frontend/lowering/builtins/compression.js +175 -2
  173. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  174. package/dist/frontend/lowering/builtins/constants.js +7 -2
  175. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  176. package/dist/frontend/lowering/builtins/crypto.d.ts +6 -0
  177. package/dist/frontend/lowering/builtins/crypto.js +111 -1
  178. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  179. package/dist/frontend/lowering/builtins/errors.js +23 -0
  180. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  181. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +2 -0
  182. package/dist/frontend/lowering/builtins/filesystem-calls.js +5 -0
  183. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  184. package/dist/frontend/lowering/builtins/filesystem.js +60 -0
  185. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  186. package/dist/frontend/lowering/builtins/fs-streams.d.ts +26 -0
  187. package/dist/frontend/lowering/builtins/fs-streams.js +131 -0
  188. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -0
  189. package/dist/frontend/lowering/builtins/module-calls.js +5 -1
  190. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  191. package/dist/frontend/lowering/builtins/timers.d.ts +3 -0
  192. package/dist/frontend/lowering/builtins/timers.js +109 -23
  193. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  194. package/dist/frontend/lowering/call-signatures.js +6 -0
  195. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  196. package/dist/frontend/lowering/class-dynamic-dispatch.js +216 -20
  197. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  198. package/dist/frontend/lowering/containers/bytes.js +33 -12
  199. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  200. package/dist/frontend/lowering/devirtualize.js +20 -7
  201. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  202. package/dist/frontend/lowering/intern-tables.d.ts +13 -0
  203. package/dist/frontend/lowering/intern-tables.js +536 -0
  204. package/dist/frontend/lowering/intern-tables.js.map +1 -0
  205. package/dist/frontend/lowering/lower-assert.js +700 -61
  206. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  207. package/dist/frontend/lowering/lower-async-iteration.js +11 -2
  208. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  209. package/dist/frontend/lowering/lower-calls.js +75 -6
  210. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  211. package/dist/frontend/lowering/lower-classes.d.ts +3 -0
  212. package/dist/frontend/lowering/lower-classes.js +43 -0
  213. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  214. package/dist/frontend/lowering/lower-dgram.js +132 -67
  215. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  216. package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -1
  217. package/dist/frontend/lowering/lower-event-emitter.js +78 -0
  218. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  219. package/dist/frontend/lowering/lower-exprs.d.ts +4 -0
  220. package/dist/frontend/lowering/lower-exprs.js +144 -58
  221. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  222. package/dist/frontend/lowering/lower-inspect.d.ts +6 -0
  223. package/dist/frontend/lowering/lower-inspect.js +138 -39
  224. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  225. package/dist/frontend/lowering/lower-mock.d.ts +11 -0
  226. package/dist/frontend/lowering/lower-mock.js +504 -0
  227. package/dist/frontend/lowering/lower-mock.js.map +1 -0
  228. package/dist/frontend/lowering/lower-modules.js +7 -0
  229. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  230. package/dist/frontend/lowering/lower-server.d.ts +4 -0
  231. package/dist/frontend/lowering/lower-server.js +448 -30
  232. package/dist/frontend/lowering/lower-server.js.map +1 -1
  233. package/dist/frontend/lowering/lower-stmts.js +35 -8
  234. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  235. package/dist/frontend/lowering/lower-stream.d.ts +10 -6
  236. package/dist/frontend/lowering/lower-stream.js +794 -27
  237. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  238. package/dist/frontend/lowering/lower-test.js +86 -8
  239. package/dist/frontend/lowering/lower-test.js.map +1 -1
  240. package/dist/frontend/lowering/lowerer.d.ts +25 -1
  241. package/dist/frontend/lowering/lowerer.js +74 -9
  242. package/dist/frontend/lowering/lowerer.js.map +1 -1
  243. package/dist/frontend/lowering/pairs-snapshot.d.ts +6 -0
  244. package/dist/frontend/lowering/pairs-snapshot.js +49 -0
  245. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  246. package/dist/frontend/lowering/record-sources.d.ts +15 -0
  247. package/dist/frontend/lowering/record-sources.js +46 -0
  248. package/dist/frontend/lowering/record-sources.js.map +1 -0
  249. package/dist/frontend/lowering/surfaces.d.ts +4 -0
  250. package/dist/frontend/lowering/surfaces.js +94 -16
  251. package/dist/frontend/lowering/surfaces.js.map +1 -1
  252. package/dist/frontend/lowering/zlib-constants.d.ts +1 -0
  253. package/dist/frontend/lowering/zlib-constants.js +181 -0
  254. package/dist/frontend/lowering/zlib-constants.js.map +1 -0
  255. package/dist/frontend/mock-shapes.d.ts +10 -0
  256. package/dist/frontend/mock-shapes.js +76 -0
  257. package/dist/frontend/mock-shapes.js.map +1 -0
  258. package/dist/frontend/pipeline.js +5 -3
  259. package/dist/frontend/pipeline.js.map +1 -1
  260. package/dist/frontend/program.js +6 -1
  261. package/dist/frontend/program.js.map +1 -1
  262. package/dist/frontend/resolve.d.ts +4 -0
  263. package/dist/frontend/resolve.js +14 -0
  264. package/dist/frontend/resolve.js.map +1 -1
  265. package/dist/frontend/tsc-codes.js +1 -0
  266. package/dist/frontend/tsc-codes.js.map +1 -1
  267. package/dist/frontend/type-mapper.d.ts +8 -0
  268. package/dist/frontend/type-mapper.js +155 -9
  269. package/dist/frontend/type-mapper.js.map +1 -1
  270. package/dist/index.js +2 -1
  271. package/dist/index.js.map +1 -1
  272. package/dist/ir/analysis.d.ts +10 -0
  273. package/dist/ir/analysis.js +35 -0
  274. package/dist/ir/analysis.js.map +1 -1
  275. package/dist/ir/analysis.test.js +69 -1
  276. package/dist/ir/analysis.test.js.map +1 -1
  277. package/dist/ir/builtin-effects.js +72 -0
  278. package/dist/ir/builtin-effects.js.map +1 -1
  279. package/dist/ir/builtin-signatures.d.ts +1 -1
  280. package/dist/ir/builtin-signatures.js +238 -15
  281. package/dist/ir/builtin-signatures.js.map +1 -1
  282. package/dist/ir/capture-values.d.ts +107 -0
  283. package/dist/ir/capture-values.js +850 -0
  284. package/dist/ir/capture-values.js.map +1 -0
  285. package/dist/ir/capture-values.test.d.ts +1 -0
  286. package/dist/ir/capture-values.test.js +268 -0
  287. package/dist/ir/capture-values.test.js.map +1 -0
  288. package/dist/ir/field-values.d.ts +16 -0
  289. package/dist/ir/field-values.js +128 -0
  290. package/dist/ir/field-values.js.map +1 -0
  291. package/dist/ir/field-values.test.d.ts +1 -0
  292. package/dist/ir/field-values.test.js +160 -0
  293. package/dist/ir/field-values.test.js.map +1 -0
  294. package/dist/ir/final-fields.d.ts +4 -1
  295. package/dist/ir/final-fields.js +11 -3
  296. package/dist/ir/final-fields.js.map +1 -1
  297. package/dist/ir/function-references.test.js +1 -1
  298. package/dist/ir/function-references.test.js.map +1 -1
  299. package/dist/ir/init-only-globals.d.ts +16 -0
  300. package/dist/ir/init-only-globals.js +121 -0
  301. package/dist/ir/init-only-globals.js.map +1 -0
  302. package/dist/ir/init-only-globals.test.d.ts +1 -0
  303. package/dist/ir/init-only-globals.test.js +115 -0
  304. package/dist/ir/init-only-globals.test.js.map +1 -0
  305. package/dist/ir/initializer-bindings.d.ts +18 -1
  306. package/dist/ir/initializer-bindings.js +91 -1
  307. package/dist/ir/initializer-bindings.js.map +1 -1
  308. package/dist/ir/initializer-bindings.test.js +57 -2
  309. package/dist/ir/initializer-bindings.test.js.map +1 -1
  310. package/dist/ir/int32-slots.d.ts +22 -0
  311. package/dist/ir/int32-slots.js +376 -13
  312. package/dist/ir/int32-slots.js.map +1 -1
  313. package/dist/ir/int32-slots.test.js +91 -8
  314. package/dist/ir/int32-slots.test.js.map +1 -1
  315. package/dist/ir/integer-loop-facts.d.ts +19 -1
  316. package/dist/ir/integer-loop-facts.js +155 -7
  317. package/dist/ir/integer-loop-facts.js.map +1 -1
  318. package/dist/ir/integer-ranges.d.ts +8 -5
  319. package/dist/ir/integer-ranges.js +147 -55
  320. package/dist/ir/integer-ranges.js.map +1 -1
  321. package/dist/ir/integer-ranges.test.js +225 -7
  322. package/dist/ir/integer-ranges.test.js.map +1 -1
  323. package/dist/ir/ir.d.ts +29 -2
  324. package/dist/ir/ir.js +17 -0
  325. package/dist/ir/ir.js.map +1 -1
  326. package/dist/ir/property-bags.d.ts +14 -0
  327. package/dist/ir/property-bags.js +121 -0
  328. package/dist/ir/property-bags.js.map +1 -0
  329. package/dist/ir/receiver-readers.d.ts +21 -0
  330. package/dist/ir/receiver-readers.js +217 -0
  331. package/dist/ir/receiver-readers.js.map +1 -0
  332. package/dist/ir/runtime-features.d.ts +1 -0
  333. package/dist/ir/runtime-features.js +34 -2
  334. package/dist/ir/runtime-features.js.map +1 -1
  335. package/dist/ir/validate.js +221 -5
  336. package/dist/ir/validate.js.map +1 -1
  337. package/dist/ir/validate.test.js +21 -0
  338. package/dist/ir/validate.test.js.map +1 -1
  339. package/dist/library/int-infer.js +3 -0
  340. package/dist/library/int-infer.js.map +1 -1
  341. package/dist/library/ir-policy.js +1 -0
  342. package/dist/library/ir-policy.js.map +1 -1
  343. package/dist/native/cli.js +1 -0
  344. package/dist/native/cli.js.map +1 -1
  345. package/dist/native/compiler.js +1 -3
  346. package/dist/native/compiler.js.map +1 -1
  347. package/dist/native/prepare.js +1 -0
  348. package/dist/native/prepare.js.map +1 -1
  349. package/dist/native/sanitizer.test.js +1 -0
  350. package/dist/native/sanitizer.test.js.map +1 -1
  351. package/package.json +20 -20
  352. package/surface-manifest.json +896 -49
@@ -1,10 +1,11 @@
1
1
  import { type ArraySearchKind } from "./array-search.js";
2
2
  import type { IrBytesElem, IrExpr, IrFfiImport, IrFunction, IrLocal, IrModule, IrRecordShape, IrStmt, IrType, IrUnionDef, SrcLoc } from "../../ir/ir.js";
3
3
  import { type SplitSpan } from "./split-loops.js";
4
- import { type IntegerRanges } from "../../ir/integer-ranges.js";
4
+ import { type IntegerRange, type IntegerRanges } from "../../ir/integer-ranges.js";
5
5
  import { type Int32Slots } from "../../ir/int32-slots.js";
6
6
  import { type Int32Abi } from "./int32-abi.js";
7
7
  import { type Int32Local } from "./int32-locals.js";
8
+ import { type IntegerClones } from "./integer-clones.js";
8
9
  import { type ConstantNumericTable } from "../../ir/constant-tables.js";
9
10
  import { type FfiCallbackAdapter } from "../ffi-callbacks.js";
10
11
  import { type CallLifetimes } from "./call-lifetimes.js";
@@ -15,6 +16,7 @@ import { InlineUnionFields } from "./inline-unions.js";
15
16
  import { OptionalArrayReads, type LocalArrayRead } from "./local-array-reads.js";
16
17
  import { CheckedNarrows } from "./checked-narrows.js";
17
18
  import { type MapReadLifetimes } from "./map-read-lifetimes.js";
19
+ import { type MapEntryFusion } from "./map-entry-fusion.js";
18
20
  import { ReferenceEffects } from "./reference-effects.js";
19
21
  import { ReferenceWrites, type Writes } from "./reference-writes.js";
20
22
  import { StackCallbacks } from "./stack-callbacks.js";
@@ -89,6 +91,10 @@ export declare class LlEmitter {
89
91
  /** The alias tag of a runtime word that emitted code reads and writes
90
92
  * outside every field (the lifetime-region count, owner and cursors). */
91
93
  memoryAliasAttachment(category: string): string;
94
+ /** The `!range` attachment of an array length load: a length is at most
95
+ * 2^32 - 1 (the runtime's SCR_ARR_MAX_LENGTH), so conversions to double
96
+ * and back fold. 32-bit targets load the full range anyway. */
97
+ get arrayLengthRange(): string;
92
98
  fieldAliasAttachment(ptr: string): string;
93
99
  private fieldAliasMetadata;
94
100
  private readonly debug;
@@ -173,6 +179,8 @@ export declare class LlEmitter {
173
179
  /** Interned NUL-terminated C-string constants (scr_jb_puts labels, the
174
180
  * stringify indent text): UTF-8 text → { symbol, byte length }. */
175
181
  private readonly cstrs;
182
+ /** Interned ScrMapOps descriptors (scr_map.h): initializer → symbol. */
183
+ private readonly mapOpsConsts;
176
184
  /** Type-directed walker functions (JSON serializers, the indent
177
185
  * rewriter, union ToString/join) — interned per typeKey/unionId, defs
178
186
  * flushed with the shape helpers. */
@@ -215,6 +223,9 @@ export declare class LlEmitter {
215
223
  readonly checkedNarrows: CheckedNarrows;
216
224
  callArrayReads: Map<IrExpr, LocalArrayRead>;
217
225
  mapReadLifetimes: MapReadLifetimes;
226
+ readNumberMapWrites: ReadonlySet<IrExpr>;
227
+ /** The current function's fused string-key Map get-then-set pairs (map-entry-fusion.ts). */
228
+ mapEntryFusion: MapEntryFusion | null;
218
229
  readonly callLifetimes: CallLifetimes;
219
230
  readonly constantCallbacks: Map<string, Map<string, string>>;
220
231
  currentConstantCallbacks: ReadonlyMap<string, string>;
@@ -373,8 +384,18 @@ export declare class LlEmitter {
373
384
  private readonly initializerBindings;
374
385
  /** Whole-program int32 storage and parameter/result facts. */
375
386
  readonly int32Slots: Int32Slots;
387
+ /** The program has no runtime store into a checked-dynamic value
388
+ * (dynamicFieldStores), so live views of classes and records never
389
+ * commit back into their objects. Library builds keep their commits:
390
+ * their values cross a native boundary. */
391
+ readonly liveViewsReadOnly: boolean;
376
392
  /** Functions whose direct calls use i32 parameters or results. */
377
393
  readonly int32Abis: ReadonlyMap<string, Int32Abi>;
394
+ /** Pure number functions with speculative integer clones. */
395
+ readonly integerClones: IntegerClones;
396
+ /** The IR function being emitted. */
397
+ currentFunctionName: string;
398
+ integerParamRange(fnName: string, localId: string): IntegerRange | null;
378
399
  /** Immutable module constants (contract types) whose graphs become
379
400
  * immortal once initialized: their reads need no reference counting. */
380
401
  readonly immortalGlobals: ReadonlySet<string>;
@@ -406,6 +427,9 @@ export declare class LlEmitter {
406
427
  private byteWindowEntries;
407
428
  bytesBounds: ReadonlySet<IrExpr | IrStmt>;
408
429
  integerViews: Map<string, string>;
430
+ /** Module globals the current function owns outright (initializer
431
+ * bindings): their function-local slot, which stands in for the global. */
432
+ private privateGlobalSlots;
409
433
  /** Number locals of the current function stored only as an i32
410
434
  * (int32-locals.ts); their slots are `alloca i32`. */
411
435
  int32Locals: Map<string, Int32Local>;
@@ -446,7 +470,14 @@ export declare class LlEmitter {
446
470
  finalLabel: string;
447
471
  cleanupLabel: string;
448
472
  suspendLabel: string;
473
+ /** The generator's OUT slot (%ScrGenSlot) for a native body whose
474
+ * yield channel is a number or boolean, which its yields store into
475
+ * inline (see emitGenSlotStore); null otherwise. */
476
+ out: string | null;
449
477
  } | null;
478
+ /** Inline generator slot accesses need the %ScrGenHead/%ScrGenSlot
479
+ * mirrors in the module header. */
480
+ usesGenSlots: boolean;
450
481
  /** The generator channels of the function being emitted (null outside
451
482
  * generator bodies): yieldExpr emission reads them, and emitTryCatch's
452
483
  * catch prologue emits the GENRET sentinel re-unwind exactly here. */
@@ -463,6 +494,8 @@ export declare class LlEmitter {
463
494
  constructor(mod: IrModule, options: LlvmTargetOptions);
464
495
  /** The borrowed parameters of a hierarchy's vtable slot (empty: owned). */
465
496
  virtualSlotBorrowed(rootName: string, slotIndex: number): ReadonlySet<number>;
497
+ /** Optimized emission: no debug-info (dev) posture. */
498
+ get optimizing(): boolean;
466
499
  /** The vtable entry for one implementation (VirtualBorrows.entry). */
467
500
  virtualEntry(implFn: string): string;
468
501
  private implSlotBorrowed;
@@ -581,6 +614,8 @@ export declare class LlEmitter {
581
614
  * stringify-indent currency) — `@`-ref, first-use order. */
582
615
  cstr(text: string): string;
583
616
  needBadTag(): void;
617
+ /** The ScrMapOps descriptor holding these operands (ShapeHost.mapOps). */
618
+ mapOps(operands: readonly string[]): string;
584
619
  /** The interned immortal instance for a UNIT arm of a union — asserts
585
620
  * the arm really is payload-less (undefined/null). Public: class
586
621
  * emission initializes undefined-admitting fields through it
@@ -687,6 +722,11 @@ export declare class LlEmitter {
687
722
  * conditions in expr-calls.ts). */
688
723
  private callTestsPending;
689
724
  private workerLoopBudget;
725
+ /** The amortized cancellation poll, emitted on the loop's back edge (the
726
+ * continue target), after the body. A poll in the header would be a loop
727
+ * exit ahead of the body; LLVM then cannot rotate the loop, so loads that
728
+ * the body repeats on every iteration (a typed array's length, for one)
729
+ * stay in the loop. */
690
730
  private emitWorkerLoopCheck;
691
731
  /** Moves an already-evaluated value into the runtime's exception cell —
692
732
  * the `throw` statement's kind dispatch (stmts.ts's), shared with
@@ -846,11 +886,24 @@ export declare class LlEmitter {
846
886
  * whether the promise waiter list or the ready FIFO owns the continuation;
847
887
  * LLVM keeps all live locals in the coroutine frame. */
848
888
  emitWasiSuspend(promise: string | null): void;
889
+ /** A native generator's OUT slot (scr_async.c's ScrGen.out, mirrored by
890
+ * %ScrGenHead and %ScrGenSlot { kind, f64, b, payload, release_fn }). */
891
+ genOutSlot(gen: string): string;
892
+ /** A yield on a number or boolean channel: scr_gen_slot_f64/bool inline.
893
+ * Such a body's OUT never holds a reference at a yield (only its final
894
+ * completion can park one), so the slot needs no release first. */
895
+ emitGenSlotStore(slot: string, kind: "f64" | "bool", value: string): void;
896
+ /** scr_gen_take_out_f64/bool inline: the slot's value when it holds that
897
+ * kind (otherwise 0 or false), leaving the slot empty. */
898
+ emitGenSlotTake(slot: string, kind: "f64" | "bool"): string;
849
899
  /** Suspend after a target-specific runtime helper already queued the
850
900
  * continuation (used by module awaits, which skip the hop when settled). */
851
901
  emitCoroSuspendPrepared(): void;
852
902
  /** Move a clean async return value into the current fiber's promise. */
853
903
  private emitWasiFulfill;
904
+ /** Number locals declared as a copy of a capture or of a lazily boxed
905
+ * parameter, at the top of the body. */
906
+ private doubleCopies;
854
907
  private emitFunction;
855
908
  /** The double-ABI entry of a function with an i32 entry: every caller
856
909
  * that is not a direct call (closures, dispatch, adapters, the runtime)
@@ -1022,6 +1075,27 @@ export declare class LlEmitter {
1022
1075
  * `s += String.fromCharCode(c)` appends the character without building
1023
1076
  * the one-character string; null for any other suffix. */
1024
1077
  private emitSingleCharCode;
1078
+ /**
1079
+ * Lower `recv.f = recv.f + suffix` on a plain string field like
1080
+ * emitStringSelfConcatAssign does for locals. The field's old value is
1081
+ * snapshotted (+1) and the suffix evaluated in JavaScript order; then the
1082
+ * field unlinks and releases its CURRENT value, so the snapshot is unique
1083
+ * unless a real alias exists and the concat appends in place instead of
1084
+ * copying the whole string on every append. Returns false (emitting
1085
+ * nothing) for every other store.
1086
+ */
1087
+ private emitFieldSelfConcat;
1088
+ /** A snapshot the current statement frames own (+1), or an immortal
1089
+ * value: it stays valid after its container releases the same string. */
1090
+ private ownsSnapshot;
1091
+ /**
1092
+ * `a[i] = a[i] + suffix` on a string array (the canonical statement form
1093
+ * of `a[i] += suffix`): the old element is snapshotted (+1) and the
1094
+ * suffix evaluated in JavaScript order; then, when the slot still holds
1095
+ * the snapshot, the array lets go of it (emitDenseSlotUnlink) so the
1096
+ * concat can append in place, and the result is stored as usual.
1097
+ */
1098
+ private emitArraySelfConcat;
1025
1099
  /** `local = local + suffix` when the suffix cannot read or write the
1026
1100
  * local (an unboxed binding is only reachable through this function's own
1027
1101
  * expressions): reading the binding after the suffix gives the value the
@@ -1036,6 +1110,12 @@ export declare class LlEmitter {
1036
1110
  emitRecordExpr(e: ExprOf<"fieldGet" | "recordGet" | "recordLit" | "recordClone" | "recordKeyGet" | "recordOvfKeys" | "recordOvfHas" | "recordHas" | "fieldAbsent">): LlValue;
1037
1111
  emitDynamicExpr(e: ExprOf<"dynFrom" | "dynCall" | "dynInvoke" | "dynArrLit" | "dynObjLit" | "unionWrap" | "unionNarrow" | "unionDisc" | "unionKeyGet" | "unionIsTag" | "dynKeyGet" | "dynHasKey" | "dynScalarEq" | "dynTest" | "unionEq" | "unionFuncEq" | "caughtTest" | "caughtCheck" | "caughtNarrow" | "caughtToDyn">): LlValue;
1038
1112
  emitIntrinsicExpr(e: ExprOf<"intrinsic">): LlValue;
1113
+ /** InternTable's runtime calls (scr_itable.c). Table and entry handles
1114
+ * are f64 values carrying pointer bits; entry values are 64-bit slots
1115
+ * (double bits, a bool, or a pointer to an immortal value) that the
1116
+ * table neither retains nor releases. Lookups and inserts of array keys
1117
+ * throw a TypeError for keys longer than a table accepts. */
1118
+ private emitInternTableIntrinsic;
1039
1119
  /** Lifetime regions in modules with lifetimeRegions (llvm/regions.ts).
1040
1120
  * Created with the class graph; null elsewhere. */
1041
1121
  private regions;
@@ -1177,6 +1257,12 @@ export declare class LlEmitter {
1177
1257
  fn: string;
1178
1258
  shim: string;
1179
1259
  };
1260
+ emitterOnceAdapter(boxerT: IrType & {
1261
+ kind: "func";
1262
+ }): {
1263
+ fn: string;
1264
+ shim: string;
1265
+ };
1180
1266
  wrapEmitterListener(target: string, adapterFn: string): string;
1181
1267
  unwrapNullableClosure(u: string, funcTag: number): string;
1182
1268
  closeBindThunkFor(cbUnion: IrType, retServer: boolean): string;