@scriptc/compiler 0.3.0 → 0.3.2

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 (413) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +346 -17
  2. package/dist/backend/executable-features.js +1 -0
  3. package/dist/backend/executable-features.js.map +1 -1
  4. package/dist/backend/literals.d.ts +7 -0
  5. package/dist/backend/literals.js +32 -0
  6. package/dist/backend/literals.js.map +1 -1
  7. package/dist/backend/literals.test.js +17 -1
  8. package/dist/backend/literals.test.js.map +1 -1
  9. package/dist/backend/llvm/alloc.d.ts +15 -4
  10. package/dist/backend/llvm/alloc.js +39 -15
  11. package/dist/backend/llvm/alloc.js.map +1 -1
  12. package/dist/backend/llvm/alloc.test.js +15 -1
  13. package/dist/backend/llvm/alloc.test.js.map +1 -1
  14. package/dist/backend/llvm/appended-array-literals.d.ts +2 -0
  15. package/dist/backend/llvm/appended-array-literals.js +109 -0
  16. package/dist/backend/llvm/appended-array-literals.js.map +1 -0
  17. package/dist/backend/llvm/appended-array-literals.test.d.ts +1 -0
  18. package/dist/backend/llvm/appended-array-literals.test.js +90 -0
  19. package/dist/backend/llvm/appended-array-literals.test.js.map +1 -0
  20. package/dist/backend/llvm/bigint-wrap.d.ts +4 -0
  21. package/dist/backend/llvm/bigint-wrap.js +590 -0
  22. package/dist/backend/llvm/bigint-wrap.js.map +1 -0
  23. package/dist/backend/llvm/blocks.d.ts +2 -0
  24. package/dist/backend/llvm/blocks.js +4 -0
  25. package/dist/backend/llvm/blocks.js.map +1 -1
  26. package/dist/backend/llvm/call-lifetimes.d.ts +4 -1
  27. package/dist/backend/llvm/call-lifetimes.js +66 -7
  28. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  29. package/dist/backend/llvm/call-lifetimes.test.js +14 -3
  30. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  31. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  32. package/dist/backend/llvm/checked-narrows.test.js.map +1 -1
  33. package/dist/backend/llvm/classes.js +67 -14
  34. package/dist/backend/llvm/classes.js.map +1 -1
  35. package/dist/backend/llvm/classes.test.js +6 -6
  36. package/dist/backend/llvm/classes.test.js.map +1 -1
  37. package/dist/backend/llvm/common.d.ts +7 -5
  38. package/dist/backend/llvm/common.js +7 -5
  39. package/dist/backend/llvm/common.js.map +1 -1
  40. package/dist/backend/llvm/constant-callbacks.js +10 -28
  41. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  42. package/dist/backend/llvm/dense-array-access.js +146 -53
  43. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  44. package/dist/backend/llvm/dense-array-access.test.js +68 -3
  45. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  46. package/dist/backend/llvm/dyn.d.ts +4 -0
  47. package/dist/backend/llvm/dyn.js +15 -2
  48. package/dist/backend/llvm/dyn.js.map +1 -1
  49. package/dist/backend/llvm/emitter.d.ts +163 -8
  50. package/dist/backend/llvm/emitter.js +973 -100
  51. package/dist/backend/llvm/emitter.js.map +1 -1
  52. package/dist/backend/llvm/emitter.test.js +14 -7
  53. package/dist/backend/llvm/emitter.test.js.map +1 -1
  54. package/dist/backend/llvm/expr-async.js +242 -49
  55. package/dist/backend/llvm/expr-async.js.map +1 -1
  56. package/dist/backend/llvm/expr-async.test.js +1 -1
  57. package/dist/backend/llvm/expr-async.test.js.map +1 -1
  58. package/dist/backend/llvm/expr-bytes.js +51 -36
  59. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  60. package/dist/backend/llvm/expr-callbacks.d.ts +8 -0
  61. package/dist/backend/llvm/expr-callbacks.js +153 -4
  62. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  63. package/dist/backend/llvm/expr-calls.d.ts +12 -1
  64. package/dist/backend/llvm/expr-calls.js +279 -78
  65. package/dist/backend/llvm/expr-calls.js.map +1 -1
  66. package/dist/backend/llvm/expr-calls.test.d.ts +1 -0
  67. package/dist/backend/llvm/expr-calls.test.js +132 -0
  68. package/dist/backend/llvm/expr-calls.test.js.map +1 -0
  69. package/dist/backend/llvm/expr-containers.d.ts +7 -0
  70. package/dist/backend/llvm/expr-containers.js +49 -5
  71. package/dist/backend/llvm/expr-containers.js.map +1 -1
  72. package/dist/backend/llvm/expr-context.d.ts +4 -0
  73. package/dist/backend/llvm/expr-control.d.ts +8 -0
  74. package/dist/backend/llvm/expr-control.js +103 -69
  75. package/dist/backend/llvm/expr-control.js.map +1 -1
  76. package/dist/backend/llvm/expr-dispatch.js +3 -0
  77. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  78. package/dist/backend/llvm/expr-dynamic.js +28 -6
  79. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  80. package/dist/backend/llvm/expr-primitives.d.ts +14 -0
  81. package/dist/backend/llvm/expr-primitives.js +110 -48
  82. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  83. package/dist/backend/llvm/expr-primitives.test.js +95 -5
  84. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  85. package/dist/backend/llvm/expr-records.d.ts +9 -0
  86. package/dist/backend/llvm/expr-records.js +144 -16
  87. package/dist/backend/llvm/expr-records.js.map +1 -1
  88. package/dist/backend/llvm/expr-stream-bridges.d.ts +9 -1
  89. package/dist/backend/llvm/expr-stream-bridges.js +152 -4
  90. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  91. package/dist/backend/llvm/expr-stream-bridges.test.js +98 -1
  92. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  93. package/dist/backend/llvm/int32-abi.d.ts +47 -0
  94. package/dist/backend/llvm/int32-abi.js +83 -0
  95. package/dist/backend/llvm/int32-abi.js.map +1 -0
  96. package/dist/backend/llvm/int32-abi.test.d.ts +1 -0
  97. package/dist/backend/llvm/int32-abi.test.js +181 -0
  98. package/dist/backend/llvm/int32-abi.test.js.map +1 -0
  99. package/dist/backend/llvm/int32-locals.d.ts +30 -0
  100. package/dist/backend/llvm/int32-locals.js +95 -0
  101. package/dist/backend/llvm/int32-locals.js.map +1 -0
  102. package/dist/backend/llvm/integer-values.d.ts +4 -0
  103. package/dist/backend/llvm/integer-values.js +30 -1
  104. package/dist/backend/llvm/integer-values.js.map +1 -1
  105. package/dist/backend/llvm/integer-views.d.ts +8 -1
  106. package/dist/backend/llvm/integer-views.js +47 -2
  107. package/dist/backend/llvm/integer-views.js.map +1 -1
  108. package/dist/backend/llvm/lazy-captures.d.ts +16 -0
  109. package/dist/backend/llvm/lazy-captures.js +88 -2
  110. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  111. package/dist/backend/llvm/lazy-captures.test.js +48 -0
  112. package/dist/backend/llvm/lazy-captures.test.js.map +1 -1
  113. package/dist/backend/llvm/lib-dispatch.js +21 -0
  114. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  115. package/dist/backend/llvm/lib-filesystem.js +61 -0
  116. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  117. package/dist/backend/llvm/lib-shared.js +83 -9
  118. package/dist/backend/llvm/lib-shared.js.map +1 -1
  119. package/dist/backend/llvm/local-array-reads.js +26 -5
  120. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  121. package/dist/backend/llvm/local-array-reads.test.js +3 -2
  122. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  123. package/dist/backend/llvm/local-union-storage.d.ts +24 -2
  124. package/dist/backend/llvm/local-union-storage.js +127 -12
  125. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  126. package/dist/backend/llvm/local-union-storage.test.js +108 -3
  127. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  128. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  129. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  130. package/dist/backend/llvm/record-results.d.ts +26 -0
  131. package/dist/backend/llvm/record-results.js +252 -0
  132. package/dist/backend/llvm/record-results.js.map +1 -0
  133. package/dist/backend/llvm/reference-effects.js +4 -0
  134. package/dist/backend/llvm/reference-effects.js.map +1 -1
  135. package/dist/backend/llvm/reference-writes.d.ts +3 -0
  136. package/dist/backend/llvm/reference-writes.js +25 -11
  137. package/dist/backend/llvm/reference-writes.js.map +1 -1
  138. package/dist/backend/llvm/regex-matchers.d.ts +39 -0
  139. package/dist/backend/llvm/regex-matchers.js +1649 -0
  140. package/dist/backend/llvm/regex-matchers.js.map +1 -0
  141. package/dist/backend/llvm/regex-matchers.test.d.ts +1 -0
  142. package/dist/backend/llvm/regex-matchers.test.js +96 -0
  143. package/dist/backend/llvm/regex-matchers.test.js.map +1 -0
  144. package/dist/backend/llvm/regions.d.ts +67 -0
  145. package/dist/backend/llvm/regions.js +309 -0
  146. package/dist/backend/llvm/regions.js.map +1 -0
  147. package/dist/backend/llvm/regions.test.d.ts +1 -0
  148. package/dist/backend/llvm/regions.test.js +173 -0
  149. package/dist/backend/llvm/regions.test.js.map +1 -0
  150. package/dist/backend/llvm/shapes.d.ts +70 -8
  151. package/dist/backend/llvm/shapes.js +157 -29
  152. package/dist/backend/llvm/shapes.js.map +1 -1
  153. package/dist/backend/llvm/shapes.test.js +7 -6
  154. package/dist/backend/llvm/shapes.test.js.map +1 -1
  155. package/dist/backend/llvm/split-loops.js +1 -1
  156. package/dist/backend/llvm/split-loops.js.map +1 -1
  157. package/dist/backend/llvm/stack-objects.d.ts +29 -0
  158. package/dist/backend/llvm/stack-objects.js +130 -0
  159. package/dist/backend/llvm/stack-objects.js.map +1 -0
  160. package/dist/backend/llvm/stack-objects.test.d.ts +1 -0
  161. package/dist/backend/llvm/stack-objects.test.js +252 -0
  162. package/dist/backend/llvm/stack-objects.test.js.map +1 -0
  163. package/dist/backend/llvm/stack-unions.test.js +1 -1
  164. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  165. package/dist/backend/llvm/string-construction.test.js +2 -2
  166. package/dist/backend/llvm/string-construction.test.js.map +1 -1
  167. package/dist/backend/llvm/string-lifetimes.test.js +5 -5
  168. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  169. package/dist/backend/llvm/string-literal-equality.d.ts +22 -0
  170. package/dist/backend/llvm/string-literal-equality.js +78 -0
  171. package/dist/backend/llvm/string-literal-equality.js.map +1 -0
  172. package/dist/backend/llvm/string-reads.d.ts +4 -1
  173. package/dist/backend/llvm/string-reads.js +89 -9
  174. package/dist/backend/llvm/string-reads.js.map +1 -1
  175. package/dist/backend/llvm/switch-dispatch.js +60 -13
  176. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  177. package/dist/backend/llvm/switch-dispatch.test.js +71 -6
  178. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
  179. package/dist/backend/llvm/union-retype.test.d.ts +1 -0
  180. package/dist/backend/llvm/union-retype.test.js +229 -0
  181. package/dist/backend/llvm/union-retype.test.js.map +1 -0
  182. package/dist/backend/llvm/walkers.d.ts +2 -0
  183. package/dist/backend/llvm/walkers.js +4 -2
  184. package/dist/backend/llvm/walkers.js.map +1 -1
  185. package/dist/backend/llvm/wrapping-sums.d.ts +17 -0
  186. package/dist/backend/llvm/wrapping-sums.js +113 -0
  187. package/dist/backend/llvm/wrapping-sums.js.map +1 -0
  188. package/dist/backend/loop-polls.js +1 -0
  189. package/dist/backend/loop-polls.js.map +1 -1
  190. package/dist/backend/mangle.d.ts +9 -0
  191. package/dist/backend/mangle.js +15 -0
  192. package/dist/backend/mangle.js.map +1 -1
  193. package/dist/backend/may-throw.js +7 -3
  194. package/dist/backend/may-throw.js.map +1 -1
  195. package/dist/backend/native/contracts.d.ts +5 -0
  196. package/dist/backend/native/executable.js +16 -1
  197. package/dist/backend/native/executable.js.map +1 -1
  198. package/dist/backend/native/library.js +1 -1
  199. package/dist/backend/native/library.js.map +1 -1
  200. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  201. package/dist/backend/native/runtime-inputs.js +2 -0
  202. package/dist/backend/native/runtime-inputs.js.map +1 -1
  203. package/dist/backend/native-link-info-core.d.ts +1 -0
  204. package/dist/backend/native-link-info-core.js.map +1 -1
  205. package/dist/backend/runtime-abi.d.ts +2 -2
  206. package/dist/backend/runtime-abi.js +2 -2
  207. package/dist/backend/runtime-pack-core.d.ts +1 -0
  208. package/dist/backend/runtime-pack-core.js +1 -0
  209. package/dist/backend/runtime-pack-core.js.map +1 -1
  210. package/dist/backend/runtime-pack-targets.test.js +1 -1
  211. package/dist/backend/runtime-pack.test.js +1 -1
  212. package/dist/backend/target-diagnostics.js +14 -0
  213. package/dist/backend/target-diagnostics.js.map +1 -1
  214. package/dist/backend/target-diagnostics.test.js +13 -0
  215. package/dist/backend/target-diagnostics.test.js.map +1 -1
  216. package/dist/contracts/check.js +4 -0
  217. package/dist/contracts/check.js.map +1 -1
  218. package/dist/executable/executable-cache.d.ts +1 -0
  219. package/dist/executable/executable-cache.js.map +1 -1
  220. package/dist/frontend/experimental-import.d.ts +12 -0
  221. package/dist/frontend/experimental-import.js +63 -0
  222. package/dist/frontend/experimental-import.js.map +1 -0
  223. package/dist/frontend/lowering/array-values.d.ts +14 -0
  224. package/dist/frontend/lowering/array-values.js +29 -0
  225. package/dist/frontend/lowering/array-values.js.map +1 -1
  226. package/dist/frontend/lowering/builtin-calls.d.ts +6 -1
  227. package/dist/frontend/lowering/builtin-calls.js +36 -0
  228. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  229. package/dist/frontend/lowering/builtins/console.d.ts +16 -6
  230. package/dist/frontend/lowering/builtins/console.js +33 -9
  231. package/dist/frontend/lowering/builtins/console.js.map +1 -1
  232. package/dist/frontend/lowering/builtins/errors.js +20 -0
  233. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  234. package/dist/frontend/lowering/builtins/json.d.ts +2 -2
  235. package/dist/frontend/lowering/builtins/json.js +13 -4
  236. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  237. package/dist/frontend/lowering/builtins/module-calls.js +16 -1
  238. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  239. package/dist/frontend/lowering/builtins/numbers.d.ts +1 -0
  240. package/dist/frontend/lowering/builtins/numbers.js +17 -0
  241. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  242. package/dist/frontend/lowering/builtins/operating-system.d.ts +18 -0
  243. package/dist/frontend/lowering/builtins/operating-system.js +361 -1
  244. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  245. package/dist/frontend/lowering/builtins/process.js +15 -3
  246. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  247. package/dist/frontend/lowering/builtins/promises.js +109 -2
  248. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  249. package/dist/frontend/lowering/builtins/text-codecs.d.ts +3 -4
  250. package/dist/frontend/lowering/builtins/text-codecs.js +3 -4
  251. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  252. package/dist/frontend/lowering/checked-promise-all.d.ts +10 -3
  253. package/dist/frontend/lowering/checked-promise-all.js +52 -6
  254. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  255. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -3
  256. package/dist/frontend/lowering/class-dynamic-dispatch.js +54 -31
  257. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  258. package/dist/frontend/lowering/containers/array-callbacks.js +74 -4
  259. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  260. package/dist/frontend/lowering/containers/array-construction.js +8 -4
  261. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  262. package/dist/frontend/lowering/containers/array-pipelines.d.ts +54 -0
  263. package/dist/frontend/lowering/containers/array-pipelines.js +1827 -0
  264. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -0
  265. package/dist/frontend/lowering/containers/exec-result-uses.d.ts +10 -0
  266. package/dist/frontend/lowering/containers/exec-result-uses.js +88 -0
  267. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -0
  268. package/dist/frontend/lowering/containers/string-and-regexp.js +106 -7
  269. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  270. package/dist/frontend/lowering/containers/string-replacement.d.ts +2 -1
  271. package/dist/frontend/lowering/containers/string-replacement.js +32 -136
  272. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  273. package/dist/frontend/lowering/cycle-initialization.d.ts +18 -2
  274. package/dist/frontend/lowering/cycle-initialization.js +166 -12
  275. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  276. package/dist/frontend/lowering/deferred-module-initializers.js +7 -2
  277. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  278. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  279. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  280. package/dist/frontend/lowering/devirtualize.d.ts +33 -0
  281. package/dist/frontend/lowering/devirtualize.js +199 -0
  282. package/dist/frontend/lowering/devirtualize.js.map +1 -0
  283. package/dist/frontend/lowering/expressions/nullish-assignment.js +55 -7
  284. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  285. package/dist/frontend/lowering/expressions/object-literals.js +5 -56
  286. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  287. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  288. package/dist/frontend/lowering/generator-delegation.js +231 -10
  289. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  290. package/dist/frontend/lowering/identifier-uses.d.ts +7 -0
  291. package/dist/frontend/lowering/identifier-uses.js +23 -0
  292. package/dist/frontend/lowering/identifier-uses.js.map +1 -0
  293. package/dist/frontend/lowering/iterator-adapters.js +51 -3
  294. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  295. package/dist/frontend/lowering/lifetime-regions.d.ts +11 -0
  296. package/dist/frontend/lowering/lifetime-regions.js +216 -0
  297. package/dist/frontend/lowering/lifetime-regions.js.map +1 -0
  298. package/dist/frontend/lowering/lower-array-sort.d.ts +28 -2
  299. package/dist/frontend/lowering/lower-array-sort.js +112 -2
  300. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  301. package/dist/frontend/lowering/lower-array-sort.test.js +99 -2
  302. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  303. package/dist/frontend/lowering/lower-calls.js +135 -131
  304. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  305. package/dist/frontend/lowering/lower-classes.d.ts +4 -3
  306. package/dist/frontend/lowering/lower-classes.js +117 -13
  307. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  308. package/dist/frontend/lowering/lower-console.d.ts +27 -0
  309. package/dist/frontend/lowering/lower-console.js +651 -0
  310. package/dist/frontend/lowering/lower-console.js.map +1 -0
  311. package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -0
  312. package/dist/frontend/lowering/lower-event-emitter.js +124 -38
  313. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  314. package/dist/frontend/lowering/lower-exprs.js +272 -25
  315. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  316. package/dist/frontend/lowering/lower-functions.js +7 -3
  317. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  318. package/dist/frontend/lowering/lower-generators.d.ts +25 -7
  319. package/dist/frontend/lowering/lower-generators.js +264 -113
  320. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  321. package/dist/frontend/lowering/lower-inspect.d.ts +8 -1
  322. package/dist/frontend/lowering/lower-inspect.js +119 -18
  323. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  324. package/dist/frontend/lowering/lower-modules.js +24 -14
  325. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  326. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  327. package/dist/frontend/lowering/lower-stdlib.js +35 -1
  328. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  329. package/dist/frontend/lowering/lower-stmts.js +66 -11
  330. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  331. package/dist/frontend/lowering/lower-stream.js +13 -10
  332. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  333. package/dist/frontend/lowering/lowerer.d.ts +47 -5
  334. package/dist/frontend/lowering/lowerer.js +235 -54
  335. package/dist/frontend/lowering/lowerer.js.map +1 -1
  336. package/dist/frontend/lowering/nan-coded-reads.d.ts +16 -0
  337. package/dist/frontend/lowering/nan-coded-reads.js +108 -1
  338. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  339. package/dist/frontend/lowering/regex-span-reads.d.ts +12 -0
  340. package/dist/frontend/lowering/regex-span-reads.js +164 -0
  341. package/dist/frontend/lowering/regex-span-reads.js.map +1 -0
  342. package/dist/frontend/lowering/runtime-optional-bounds.d.ts +4 -0
  343. package/dist/frontend/lowering/runtime-optional-bounds.js +2 -0
  344. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  345. package/dist/frontend/lowering/runtime-optional-bounds.test.js +27 -0
  346. package/dist/frontend/lowering/runtime-optional-bounds.test.js.map +1 -1
  347. package/dist/frontend/lowering/split-consumers.js +2 -18
  348. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  349. package/dist/frontend/lowering/surfaces.js +115 -18
  350. package/dist/frontend/lowering/surfaces.js.map +1 -1
  351. package/dist/frontend/lowering/union-retag.d.ts +6 -1
  352. package/dist/frontend/lowering/union-retag.js +64 -1
  353. package/dist/frontend/lowering/union-retag.js.map +1 -1
  354. package/dist/frontend/lowering/union-retag.test.js +46 -0
  355. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  356. package/dist/frontend/lowering/var-hoisting.d.ts +3 -0
  357. package/dist/frontend/lowering/var-hoisting.js +261 -0
  358. package/dist/frontend/lowering/var-hoisting.js.map +1 -0
  359. package/dist/frontend/pipeline.js +5 -3
  360. package/dist/frontend/pipeline.js.map +1 -1
  361. package/dist/frontend/program.d.ts +3 -2
  362. package/dist/frontend/program.js +23 -5
  363. package/dist/frontend/program.js.map +1 -1
  364. package/dist/frontend/program.test.js +13 -0
  365. package/dist/frontend/program.test.js.map +1 -1
  366. package/dist/frontend/type-mapper.d.ts +13 -1
  367. package/dist/frontend/type-mapper.js +160 -14
  368. package/dist/frontend/type-mapper.js.map +1 -1
  369. package/dist/index.js +1 -0
  370. package/dist/index.js.map +1 -1
  371. package/dist/ir/builtin-effects.js +31 -2
  372. package/dist/ir/builtin-effects.js.map +1 -1
  373. package/dist/ir/builtin-signatures.d.ts +1 -1
  374. package/dist/ir/builtin-signatures.js +157 -16
  375. package/dist/ir/builtin-signatures.js.map +1 -1
  376. package/dist/ir/function-references.d.ts +12 -0
  377. package/dist/ir/function-references.js +29 -0
  378. package/dist/ir/function-references.js.map +1 -0
  379. package/dist/ir/function-references.test.d.ts +1 -0
  380. package/dist/ir/function-references.test.js +277 -0
  381. package/dist/ir/function-references.test.js.map +1 -0
  382. package/dist/ir/int32-slots.d.ts +7 -4
  383. package/dist/ir/int32-slots.js +215 -49
  384. package/dist/ir/int32-slots.js.map +1 -1
  385. package/dist/ir/int32-slots.test.js +38 -1
  386. package/dist/ir/int32-slots.test.js.map +1 -1
  387. package/dist/ir/integer-ranges.d.ts +4 -4
  388. package/dist/ir/integer-ranges.js +89 -64
  389. package/dist/ir/integer-ranges.js.map +1 -1
  390. package/dist/ir/integer-ranges.test.js +71 -9
  391. package/dist/ir/integer-ranges.test.js.map +1 -1
  392. package/dist/ir/intrinsic-signatures.js +3 -0
  393. package/dist/ir/intrinsic-signatures.js.map +1 -1
  394. package/dist/ir/ir.d.ts +111 -20
  395. package/dist/ir/ir.js +6 -0
  396. package/dist/ir/ir.js.map +1 -1
  397. package/dist/ir/runtime-features.d.ts +1 -0
  398. package/dist/ir/runtime-features.js +38 -3
  399. package/dist/ir/runtime-features.js.map +1 -1
  400. package/dist/ir/scalar-records.js +1 -2
  401. package/dist/ir/scalar-records.js.map +1 -1
  402. package/dist/ir/traverse.js +4 -0
  403. package/dist/ir/traverse.js.map +1 -1
  404. package/dist/ir/validate.js +201 -25
  405. package/dist/ir/validate.js.map +1 -1
  406. package/dist/ir/validate.test.js +90 -7
  407. package/dist/ir/validate.test.js.map +1 -1
  408. package/dist/library/ir-policy.js +1 -0
  409. package/dist/library/ir-policy.js.map +1 -1
  410. package/dist/native/sanitizer.test.js +1 -0
  411. package/dist/native/sanitizer.test.js.map +1 -1
  412. package/package.json +20 -20
  413. package/surface-manifest.json +159 -17
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regions.js","sourceRoot":"","sources":["../../../src/backend/llvm/regions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,173 @@
1
+ import { expect, test } from "vitest";
2
+ import { F64, STRING, VOID } from "../../ir/ir.js";
3
+ import { validateModule } from "../../ir/validate.js";
4
+ import { emitLlvmModule } from "./emitter.js";
5
+ import { mangleClassNew, mangleClassRelease, mangleClassRetain, mangleClassStruct, mangleRecordRelease, mangleRecordStruct, } from "../mangle.js";
6
+ const loc = { file: "regions.ts", start: 0, end: 1 };
7
+ const node = { kind: "object", className: "Node" };
8
+ const leaf = { kind: "object", className: "Leaf" };
9
+ const owner = { kind: "object", className: "Owner" };
10
+ const tagged = { kind: "object", className: "Tagged" };
11
+ const span = { kind: "record", shapeId: "span" };
12
+ /** A ProgramLifetime hierarchy (Node, Leaf), an ordinary hierarchy that
13
+ * holds instances of it (Owner, Tagged), a record that holds one, and a
14
+ * class that cannot reach any (Label). */
15
+ function module(body = [], lifetimeRegions = true) {
16
+ return {
17
+ irVersion: 16,
18
+ sourceFile: loc.file,
19
+ entry: "main",
20
+ ...(lifetimeRegions ? { lifetimeRegions: true } : {}),
21
+ functions: [
22
+ {
23
+ name: "main",
24
+ params: [],
25
+ returnType: VOID,
26
+ locals: [],
27
+ body: body.map((expr) => ({ kind: "exprStmt", expr, loc })),
28
+ loc,
29
+ },
30
+ ],
31
+ classes: [
32
+ {
33
+ name: "Node",
34
+ fields: [
35
+ { name: "parent", type: node },
36
+ { name: "kids", type: { kind: "array", elem: node } },
37
+ { name: "name", type: STRING },
38
+ { name: "span", type: span },
39
+ ],
40
+ methods: [],
41
+ loc,
42
+ },
43
+ {
44
+ name: "Leaf",
45
+ base: "Node",
46
+ fields: [
47
+ { name: "parent", type: node },
48
+ { name: "kids", type: { kind: "array", elem: node } },
49
+ { name: "name", type: STRING },
50
+ { name: "span", type: span },
51
+ { name: "value", type: F64 },
52
+ ],
53
+ methods: [],
54
+ loc,
55
+ },
56
+ { name: "Owner", fields: [{ name: "label", type: STRING }], methods: [], loc },
57
+ {
58
+ name: "Tagged",
59
+ base: "Owner",
60
+ fields: [
61
+ { name: "label", type: STRING },
62
+ { name: "target", type: leaf },
63
+ ],
64
+ methods: [],
65
+ loc,
66
+ },
67
+ { name: "Label", fields: [{ name: "text", type: STRING }], methods: [], loc },
68
+ { name: "Holder", fields: [{ name: "owner", type: owner }], methods: [], loc },
69
+ ],
70
+ records: [
71
+ {
72
+ id: "span",
73
+ fields: [
74
+ { name: "end", type: F64 },
75
+ { name: "owner", type: tagged },
76
+ ],
77
+ },
78
+ ],
79
+ contracts: { programLifetime: ["Node"] },
80
+ };
81
+ }
82
+ function body(llvm, name) {
83
+ return (new RegExp(`^define internal [a-z]+ @${name.replace(/[.$]/g, "\\$&")}\\([^]*?^}`, "m").exec(llvm)?.[0] ?? "");
84
+ }
85
+ test("programs without regions keep ProgramLifetime's empty counts and emit no region code", () => {
86
+ const llvm = emitLlvmModule(module([], false), { pointerBits: 64 });
87
+ expect(llvm).not.toMatch(/scr_region|sc_rgn_types|\.rcur|\.rcls|\.rvisit|\.rwalk|\.rown/);
88
+ expect(body(llvm, mangleClassRetain("Node"))).toMatch(/entry:\n {2}ret ptr %o\n}/);
89
+ expect(body(llvm, mangleClassRelease("Leaf"))).toMatch(/entry:\n {2}ret void\n}/);
90
+ });
91
+ test("ProgramLifetime instances live in the current region and count in their chunk", () => {
92
+ const llvm = emitLlvmModule(module(), { pointerBits: 64 });
93
+ for (const cls of ["Node", "Leaf"]) {
94
+ const struct = mangleClassStruct(cls);
95
+ // new: the cursor fast path, the runtime's slow path, and the
96
+ // program-lifetime count publication still reads.
97
+ const nw = body(llvm, mangleClassNew(cls));
98
+ expect(nw, cls).toContain(`load ptr, ptr @${struct}.rcur`);
99
+ expect(nw, cls).toContain(`call ptr @scr_region_alloc(ptr @${struct}.rcur, ptr @${struct}.rcls)`);
100
+ // The first reference is implied: allocation leaves the chunk count alone.
101
+ expect(nw, cls).not.toContain("2097151");
102
+ expect(nw, cls).toContain("store i64 -9223372036854775808, ptr %o");
103
+ expect(nw, cls).not.toContain("scr_rt_calloc");
104
+ // retain/release: the chunk count, NULL-tolerant, once a region
105
+ // exists, and only in chunks that have an owner (freeable regions).
106
+ expect(body(llvm, mangleClassRetain(cls)), cls).toMatch(/%on = load i8, ptr @scr_region_counting, !tbaa !\d+\n {2}%idle = icmp eq i8 %on, 0/);
107
+ expect(body(llvm, mangleClassRetain(cls)), cls).toContain("%mine = icmp ne ptr %owner, null");
108
+ expect(body(llvm, mangleClassRetain(cls)), cls).toMatch(/add i64 %n, 1/);
109
+ expect(body(llvm, mangleClassRelease(cls)), cls).toMatch(/sub i64 %n, 1/);
110
+ expect(body(llvm, mangleClassRelease(cls)), cls).toContain("icmp eq ptr %o, null");
111
+ expect(llvm, cls).toMatch(new RegExp(`@${struct}\\.rcur = internal global \\{ ptr, ptr \\} zeroinitializer`));
112
+ }
113
+ // The visit reports region references by address, ordinary references
114
+ // with the release entry point the runtime knows them by; strings cannot
115
+ // reach the region and are not reported.
116
+ const visit = body(llvm, `${mangleClassStruct("Leaf")}.rvisit`);
117
+ expect(visit).toContain("call void @scr_region_ref(ptr %w, ptr %v0) ; parent");
118
+ expect(visit).toContain("call void @scr_region_slot(ptr %w, ptr %v1, ptr @scr_arr_release_v) ; kids");
119
+ expect(visit).toContain(`call void @scr_region_slot(ptr %w, ptr %v3, ptr @${mangleRecordRelease("span")}) ; span`);
120
+ expect(visit).not.toContain("; name");
121
+ // The fields-release releases every reference field, strings included.
122
+ const release = body(llvm, `${mangleClassStruct("Leaf")}.rrelease`);
123
+ for (const field of ["parent", "kids", "name", "span"])
124
+ expect(release).toContain(`; ${field}`);
125
+ });
126
+ test("walkers cover the ordinary classes and records that can reach a region", () => {
127
+ const llvm = emitLlvmModule(module(), { pointerBits: 64 });
128
+ // Owner itself holds nothing, but a field typed Owner may hold a Tagged:
129
+ // its walker dispatches on the dynamic class.
130
+ const owner = body(llvm, `${mangleClassStruct("Owner")}.rwalk`);
131
+ expect(owner).toMatch(/switch i64 %pre, label %done \[ i64 \d+, label %c\d+ \]/);
132
+ expect(owner).toContain(`call void @${mangleClassStruct("Tagged")}.rown(ptr %o, ptr %w)`);
133
+ expect(llvm).not.toContain(`@${mangleClassStruct("Owner")}.rown(`);
134
+ expect(body(llvm, `${mangleClassStruct("Tagged")}.rown`)).toContain("call void @scr_region_ref(ptr %w, ptr %v1) ; target");
135
+ expect(body(llvm, `${mangleRecordStruct("span")}.rwalk`)).toContain(`call void @scr_region_slot(ptr %w, ptr %v1, ptr @${mangleClassRelease("Tagged")}) ; owner`);
136
+ // Classes that cannot reach the region are not walked.
137
+ expect(llvm).not.toContain(`${mangleClassStruct("Label")}.rwalk`);
138
+ // The table: region classes by release, then walkers.
139
+ const table = /^@sc_rgn_types = internal constant .*$/m.exec(llvm)?.[0] ?? "";
140
+ expect(table).toContain(`{ ptr @${mangleClassRelease("Node")}, ptr null }`);
141
+ expect(table).toContain(`{ ptr @${mangleClassRelease("Leaf")}, ptr null }`);
142
+ expect(table).toContain(`{ ptr @${mangleClassRelease("Owner")}, ptr @${mangleClassStruct("Owner")}.rwalk }`);
143
+ expect(table).toContain(`{ ptr @${mangleClassRelease("Holder")}, ptr @${mangleClassStruct("Holder")}.rown }`);
144
+ expect(table).toContain(`{ ptr @${mangleRecordRelease("span")}, ptr @${mangleRecordStruct("span")}.rwalk }`);
145
+ expect(table).not.toContain(mangleClassRelease("Label"));
146
+ expect(table).toMatch(/\{ ptr, ptr \} zeroinitializer \] ; region type table$/);
147
+ });
148
+ test("worker executables count only their own chunks", () => {
149
+ const llvm = emitLlvmModule({ ...module(), workers: true }, { pointerBits: 64 });
150
+ const retain = body(llvm, mangleClassRetain("Node"));
151
+ expect(retain).toContain("load atomic i8, ptr @scr_region_counting unordered, align 1");
152
+ expect(retain).toContain("call ptr @llvm.threadlocal.address.p0(ptr @scr_thread_hot)");
153
+ expect(retain).toMatch(/icmp eq ptr %owner, %self\n {2}br i1 %mine, label %count, label %done/);
154
+ expect(llvm).toMatch(/@sc_o_Node\.rcur = internal thread_local(\(localexec\))? global/);
155
+ });
156
+ test("LifetimeRegion's intrinsics call the runtime", () => {
157
+ const id = { kind: "intrinsic", name: "region.create", args: [], type: F64, loc };
158
+ const calls = [
159
+ { kind: "intrinsic", name: "region.enter", args: [id], type: VOID, loc },
160
+ { kind: "intrinsic", name: "region.leave", args: [], type: VOID, loc },
161
+ { kind: "intrinsic", name: "region.release", args: [id], type: VOID, loc },
162
+ ];
163
+ expect(validateModule(module(calls))).toEqual([]);
164
+ const llvm = emitLlvmModule(module(calls), { pointerBits: 64 });
165
+ const main = body(llvm, "main") || llvm;
166
+ expect(main).toMatch(/call double @scr_region_create\(ptr @sc_rgn_types\)/);
167
+ expect(main).toMatch(/call void @scr_region_enter\(double %\S+\)/);
168
+ expect(main).toContain("call void @scr_region_leave()");
169
+ expect(main).toMatch(/call void @scr_region_release\(double %\S+\)/);
170
+ // Region intrinsics need a module that uses regions.
171
+ expect(validateModule(module(calls, false)).map((e) => e.message)).toContain("in main: region.enter outside a lifetimeRegions module");
172
+ });
173
+ //# sourceMappingURL=regions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regions.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/regions.test.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Containers store erased adapters; shape helpers retain, release and trace
3
3
  * their fields. Every allocation has a size_t reference count at offset zero
4
4
  * and participates in the runtime allocation audit. */
5
- import type { IrModule, IrRecordShape, IrType } from "../../ir/ir.js";
5
+ import type { IrClassDef, IrModule, IrRecordShape, IrType } from "../../ir/ir.js";
6
6
  import type { NullableUnions } from "./nullable-unions.js";
7
7
  /** What the tables need from the emitter: the extern-declaration ledger
8
8
  * and the module-wide cycle/shape indexes. */
@@ -12,8 +12,8 @@ export interface ShapeHost {
12
12
  needOom(): void;
13
13
  /** The target C ABI's `size_t` / refcount integer type. */
14
14
  readonly sizeType: "i32" | "i64";
15
- /** Byte offset from an object pointer back to ScrCycHdr.buffered. */
16
- readonly cycleBufferedOffset: number;
15
+ /** Byte offset from an object pointer back to ScrCycHdr.buf. */
16
+ readonly cycleBufOffset: number;
17
17
  readonly tracedShapes: Set<string>;
18
18
  readonly tracedUnions: Set<string>;
19
19
  /** Unions represented as a nullable arm pointer (nullable-unions.ts):
@@ -21,6 +21,14 @@ export interface ShapeHost {
21
21
  readonly nullableUnions: NullableUnions;
22
22
  readonly recordsById: Map<string, IrRecordShape>;
23
23
  readonly recordCloneShapes: ReadonlySet<string>;
24
+ /** The program constructs lifetime regions: the ProgramLifetime classes
25
+ * allocate in regions and count references in their region chunk instead
26
+ * of being empty (llvm/regions.ts). */
27
+ regions?: RegionHooks | null;
28
+ /** The alias tag of a runtime word that lifetime-region code reads and
29
+ * writes outside every field: the chunk count, the chunk owner, the class
30
+ * cursors and scr_region_counting (", !tbaa !N", or "" in debug builds). */
31
+ regionAliasTag?(word: "count" | "owner" | "cursor" | "counting"): string;
24
32
  /** Emit the live-object audit notes (`scr_obj_alloc_note` /
25
33
  * `scr_obj_free_note`) in emitted new/free helpers. Only runtimes built
26
34
  * with SCR_RC_AUDIT (the sanitized lane) count them; release and dev
@@ -42,6 +50,14 @@ export interface ShapeHost {
42
50
  * Absent: every descriptor gets 0, which keeps no statistics. */
43
51
  nextCycKind?(): number;
44
52
  }
53
+ /** What class emission asks of lifetime regions (LifetimeRegions in
54
+ * llvm/regions.ts): the retain and release bodies, the allocation lines of
55
+ * `new` (the instance in `%o`), and a class's region definitions. */
56
+ export interface RegionHooks {
57
+ rcBody(fnName: string, ret: "ptr" | "void", comment: string): string[];
58
+ newAlloc(className: string, sizeOf: string): string[];
59
+ classDefinitions(cls: IrClassDef, sizeOf: string): string[];
60
+ }
45
61
  /** Every emitted function/helper carries #0 = { sanitize_address } — see
46
62
  * the emitter header. */
47
63
  export declare const FN_ATTRS = "#0";
@@ -133,7 +149,10 @@ export declare function elemAccess(elem: IrType): "f64" | "bool" | "ref";
133
149
  * SCR_ELEM_ARR spelling would hide them from the outer array's trace)
134
150
  * construct through scr_arr_new_ops with the element type's `_v` RC entry
135
151
  * points; every other element kind keeps the plain scr_arr_new call. */
136
- export declare function arrNewCall(host: ShapeHost, elem: IrType, capText: string): string;
152
+ export declare function arrNewCall(host: ShapeHost, elem: IrType, capText: string,
153
+ /** An empty array expected to receive a few elements (its first slots
154
+ * live in its own block): capText must be "0". */
155
+ small?: boolean): string;
137
156
  /** The constant %ScrArrOps descriptor (retain, release, trace) of a REF
138
157
  * element type, defined once per module and shared by all its arrays. */
139
158
  export declare function arrOps(host: ShapeHost, elem: IrType): string;
@@ -156,6 +175,14 @@ export declare function mapKeyParamType(access: MapKeyAccess): string;
156
175
  /** The ScrMapKeyKind / ScrMapValKind constants for scr_map_new. */
157
176
  export declare function mapKeyKindNum(key: IrType, unionArms?: IrType[]): number;
158
177
  export declare function mapValKindNum(value: IrType): number;
178
+ /** The RC-relevant members of a shape: every field, plus the overflow map
179
+ * on index-signature shapes (one more map-typed member). `index` is the
180
+ * member's field position in the emitted struct type (rc header at 0). */
181
+ export declare function rcMembers(shape: IrRecordShape): {
182
+ index: number;
183
+ type: IrType;
184
+ name: string;
185
+ }[];
159
186
  /** The NULL- and immortal-skipping retain body shared by every shape. A
160
187
  * retain never touches the cycle header: a buffered candidate that is
161
188
  * retained again stays a candidate (scr_cycle.c, markRoots). */
@@ -163,6 +190,41 @@ export declare function retainBody(host: ShapeHost, fnName: string, comment?: st
163
190
  /** Scalar fields and native strings cannot form recursive ownership chains.
164
191
  * Other reference kinds conservatively share the runtime destruction budget. */
165
192
  export declare function needsBoundedRelease(type: IrType): boolean;
193
+ /** Typed teardown. A teardown that drops the last reference to a child of a
194
+ * statically known emitted type calls that type's teardown directly instead
195
+ * of going through its out-of-line release and the runtime's generic
196
+ * scr_rc_destroy, so tearing down a tree of one type is one direct call per
197
+ * node. Such teardowns take the length of the direct chain they are in
198
+ * (`_destroy_d(ptr, i32)`; `_destroy(ptr)` starts one at 0 for the runtime),
199
+ * and a chain DIRECT_DESTROY_CHAIN deep hands the next child to
200
+ * scr_rc_destroy, whose depth budget then bounds the stack exactly as
201
+ * before: each of its levels holds at most one direct chain. */
202
+ export declare const DIRECT_DESTROY_CHAIN = 16;
203
+ /** A child type whose teardown a parent teardown can call directly. */
204
+ export interface DirectDestroy {
205
+ /** The child's inlinable release (every reference but the last). */
206
+ readonly release: string;
207
+ /** The child's teardown symbol; `${destroy}_d` takes the chain length. */
208
+ readonly destroy: string;
209
+ /** The child carries a collector header. */
210
+ readonly traced: boolean;
211
+ }
212
+ /** The release of child `value` (a loaded field, possibly NULL) inside a
213
+ * teardown whose chain length is `%d`: the child's own release for a shared
214
+ * or immortal reference, its teardown for the last one. Labels use `tag`;
215
+ * the lines end in the open block `${tag}.next`. */
216
+ export declare function directChildReleaseLines(host: ShapeHost, tag: string, value: string, target: DirectDestroy, comment: string): string[];
217
+ /** The direct-teardown target of a reference of `type`, if `targets` (keyed
218
+ * `record:<id>` / `object:<class>`) has one. Nullable unions hold the arm's
219
+ * pointer, NULL or an immortal sentinel, which the child release handles. */
220
+ export declare function directDestroyTarget(host: ShapeHost, type: IrType, targets: ReadonlyMap<string, DirectDestroy>): DirectDestroy | null;
221
+ /** The direct targets among `candidates` that a field of one of `fieldTypes`
222
+ * refers to: a teardown no parent calls directly keeps its plain form. */
223
+ export declare function usedDirectTargets(host: ShapeHost, candidates: readonly (readonly [string, DirectDestroy])[], fieldTypes: readonly IrType[]): Map<string, DirectDestroy>;
224
+ /** The teardown definitions for `destroy`: with `chained`, the body takes
225
+ * the chain length `%d` (directChildReleaseLines) and the runtime's
226
+ * one-argument entry starts a chain. */
227
+ export declare function destroyDefinitions(destroy: string, body: readonly string[], chained: boolean): string[];
166
228
  /** Common NULL/immortal/decrement skeleton for ordinary object releases.
167
229
  * `freeBody` owns the zero-ref teardown and must leave the current block at
168
230
  * its end; traced objects also get the possible-cycle-root branch.
@@ -170,7 +232,7 @@ export declare function needsBoundedRelease(type: IrType): boolean;
170
232
  * `fnName` is only the inlinable fast path (releaseFastPath); the complete
171
233
  * release is `${fnName}_slow`, kept out of line so callers that inline the
172
234
  * release do not also inline its teardown. */
173
- export declare function releaseBody(host: ShapeHost, fnName: string, traced: boolean, freeBody: string[], comment?: string, bounded?: boolean, immortal?: boolean): string[];
235
+ export declare function releaseBody(host: ShapeHost, fnName: string, traced: boolean, freeBody: string[], comment?: string, bounded?: boolean, immortal?: boolean, chained?: boolean): string[];
174
236
  /** The inlinable half of an object release. A reference that is neither the
175
237
  * last one nor immortal (rc - 2 < SIZE_MAX - 2 rules out 0, 1 and SIZE_MAX
176
238
  * in one compare) only decrements and, for headered objects, takes the
@@ -180,9 +242,9 @@ export declare function releaseBody(host: ShapeHost, fnName: string, traced: boo
180
242
  * (and their destroy calls) into every caller. */
181
243
  export declare function releaseFastPath(host: ShapeHost, fnName: string, slow: string, traced: boolean, comment?: string, immortal?: boolean): string[];
182
244
  /** The possible-cycle-root step of a release that left a headered object
183
- * alive: scr_cyc_on_release with its early return inlined. Read `buffered`
184
- * (the i16 at obj-6; nonzero for a queued candidate or a
185
- * tenured object) and call the runtime only to enqueue a new candidate.
245
+ * alive: scr_cyc_on_release with its early return inlined. Test the sign
246
+ * of `buf` (the i32 at obj-4; negative for a queued candidate or a tenured
247
+ * object) and call the runtime only to enqueue a new candidate.
186
248
  * Every emitted release of a headered object shares this sequence
187
249
  * (scr_runtime.h asserts the offset); it ends by branching to `done`. */
188
250
  /** One traced field of an emitted trace function: load the slot and visit