@scriptc/compiler 0.2.5 → 0.2.6

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 (307) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +57 -30
  2. package/dist/backend/cycle-analysis.test.js +1 -1
  3. package/dist/backend/executable-features.js +1 -0
  4. package/dist/backend/executable-features.js.map +1 -1
  5. package/dist/backend/link-plan-core.d.ts +2 -0
  6. package/dist/backend/link-plan-core.js +1 -0
  7. package/dist/backend/link-plan-core.js.map +1 -1
  8. package/dist/backend/link-plan.d.ts +1 -0
  9. package/dist/backend/link-plan.js +3 -0
  10. package/dist/backend/link-plan.js.map +1 -1
  11. package/dist/backend/llvm/byte-numbers.js +32 -4
  12. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  13. package/dist/backend/llvm/byte-windows.d.ts +31 -0
  14. package/dist/backend/llvm/byte-windows.js +334 -0
  15. package/dist/backend/llvm/byte-windows.js.map +1 -0
  16. package/dist/backend/llvm/byte-windows.test.d.ts +1 -0
  17. package/dist/backend/llvm/byte-windows.test.js +244 -0
  18. package/dist/backend/llvm/byte-windows.test.js.map +1 -0
  19. package/dist/backend/llvm/call-lifetimes.d.ts +2 -2
  20. package/dist/backend/llvm/call-lifetimes.js +17 -7
  21. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  22. package/dist/backend/llvm/classes.d.ts +14 -1
  23. package/dist/backend/llvm/classes.js +80 -9
  24. package/dist/backend/llvm/classes.js.map +1 -1
  25. package/dist/backend/llvm/classes.test.d.ts +1 -0
  26. package/dist/backend/llvm/classes.test.js +99 -0
  27. package/dist/backend/llvm/classes.test.js.map +1 -0
  28. package/dist/backend/llvm/constant-callbacks.d.ts +11 -0
  29. package/dist/backend/llvm/constant-callbacks.js +213 -0
  30. package/dist/backend/llvm/constant-callbacks.js.map +1 -0
  31. package/dist/backend/llvm/constant-callbacks.test.d.ts +1 -0
  32. package/dist/backend/llvm/constant-callbacks.test.js +124 -0
  33. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -0
  34. package/dist/backend/llvm/dyn.d.ts +1 -1
  35. package/dist/backend/llvm/dyn.js +7 -34
  36. package/dist/backend/llvm/dyn.js.map +1 -1
  37. package/dist/backend/llvm/emitter.d.ts +19 -0
  38. package/dist/backend/llvm/emitter.js +274 -46
  39. package/dist/backend/llvm/emitter.js.map +1 -1
  40. package/dist/backend/llvm/emitter.test.js +17 -11
  41. package/dist/backend/llvm/emitter.test.js.map +1 -1
  42. package/dist/backend/llvm/expr-bytes.js +11 -0
  43. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  44. package/dist/backend/llvm/expr-calls.js +91 -23
  45. package/dist/backend/llvm/expr-calls.js.map +1 -1
  46. package/dist/backend/llvm/expr-containers.js +21 -9
  47. package/dist/backend/llvm/expr-containers.js.map +1 -1
  48. package/dist/backend/llvm/expr-dynamic.js +36 -3
  49. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  50. package/dist/backend/llvm/expr-primitives.js +7 -0
  51. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  52. package/dist/backend/llvm/expr-primitives.test.js +1 -1
  53. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  54. package/dist/backend/llvm/integer-remainder.d.ts +7 -0
  55. package/dist/backend/llvm/integer-remainder.js +26 -0
  56. package/dist/backend/llvm/integer-remainder.js.map +1 -0
  57. package/dist/backend/llvm/layouts.js +1 -1
  58. package/dist/backend/llvm/layouts.js.map +1 -1
  59. package/dist/backend/llvm/lib-abi.js +7 -0
  60. package/dist/backend/llvm/lib-abi.js.map +1 -1
  61. package/dist/backend/llvm/lib-dispatch.js +7 -22
  62. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  63. package/dist/backend/llvm/lib-shared.js +15 -0
  64. package/dist/backend/llvm/lib-shared.js.map +1 -1
  65. package/dist/backend/llvm/local-array-reads.d.ts +8 -2
  66. package/dist/backend/llvm/local-array-reads.js +89 -68
  67. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  68. package/dist/backend/llvm/local-array-reads.test.js +28 -4
  69. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  70. package/dist/backend/llvm/local-union-storage.test.js +1 -1
  71. package/dist/backend/llvm/loop-array-borrows.d.ts +11 -0
  72. package/dist/backend/llvm/loop-array-borrows.js +70 -0
  73. package/dist/backend/llvm/loop-array-borrows.js.map +1 -0
  74. package/dist/backend/llvm/loop-array-borrows.test.d.ts +1 -0
  75. package/dist/backend/llvm/loop-array-borrows.test.js +145 -0
  76. package/dist/backend/llvm/loop-array-borrows.test.js.map +1 -0
  77. package/dist/backend/llvm/map-read-lifetimes.d.ts +5 -0
  78. package/dist/backend/llvm/map-read-lifetimes.js +20 -5
  79. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  80. package/dist/backend/llvm/map-read-lifetimes.test.js +1 -1
  81. package/dist/backend/llvm/reference-effects.d.ts +2 -1
  82. package/dist/backend/llvm/reference-effects.js +7 -0
  83. package/dist/backend/llvm/reference-effects.js.map +1 -1
  84. package/dist/backend/llvm/shapes.d.ts +4 -1
  85. package/dist/backend/llvm/shapes.js +22 -7
  86. package/dist/backend/llvm/shapes.js.map +1 -1
  87. package/dist/backend/llvm/split-loops.d.ts +48 -0
  88. package/dist/backend/llvm/split-loops.js +183 -0
  89. package/dist/backend/llvm/split-loops.js.map +1 -0
  90. package/dist/backend/llvm/split.js +0 -7
  91. package/dist/backend/llvm/split.js.map +1 -1
  92. package/dist/backend/llvm/split.test.js +66 -2
  93. package/dist/backend/llvm/split.test.js.map +1 -1
  94. package/dist/backend/llvm/stack-callbacks.d.ts +14 -0
  95. package/dist/backend/llvm/stack-callbacks.js +73 -0
  96. package/dist/backend/llvm/stack-callbacks.js.map +1 -0
  97. package/dist/backend/llvm/stack-captures.d.ts +25 -0
  98. package/dist/backend/llvm/stack-captures.js +150 -0
  99. package/dist/backend/llvm/stack-captures.js.map +1 -0
  100. package/dist/backend/llvm/stack-unions.test.js +1 -1
  101. package/dist/backend/llvm/string-construction.test.js +1 -1
  102. package/dist/backend/llvm/string-lifetimes.test.js +8 -4
  103. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  104. package/dist/backend/llvm/string-slices.d.ts +20 -0
  105. package/dist/backend/llvm/string-slices.js +87 -0
  106. package/dist/backend/llvm/string-slices.js.map +1 -0
  107. package/dist/backend/llvm/string-slices.test.d.ts +1 -0
  108. package/dist/backend/llvm/string-slices.test.js +98 -0
  109. package/dist/backend/llvm/string-slices.test.js.map +1 -0
  110. package/dist/backend/llvm/switch-dispatch.test.js +1 -1
  111. package/dist/backend/llvm/walkers.d.ts +4 -14
  112. package/dist/backend/llvm/walkers.js +53 -311
  113. package/dist/backend/llvm/walkers.js.map +1 -1
  114. package/dist/backend/may-throw.js +1 -1
  115. package/dist/backend/may-throw.js.map +1 -1
  116. package/dist/backend/may-throw.test.js +1 -1
  117. package/dist/backend/native/contracts.d.ts +2 -0
  118. package/dist/backend/native/executable.js +12 -4
  119. package/dist/backend/native/executable.js.map +1 -1
  120. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  121. package/dist/backend/native/runtime-inputs.js +2 -0
  122. package/dist/backend/native/runtime-inputs.js.map +1 -1
  123. package/dist/backend/native-codegen-core.d.ts +6 -0
  124. package/dist/backend/native-codegen-core.js +21 -0
  125. package/dist/backend/native-codegen-core.js.map +1 -1
  126. package/dist/backend/native-codegen.d.ts +4 -0
  127. package/dist/backend/native-codegen.js +34 -18
  128. package/dist/backend/native-codegen.js.map +1 -1
  129. package/dist/backend/native-codegen.test.js +47 -2
  130. package/dist/backend/native-codegen.test.js.map +1 -1
  131. package/dist/backend/native-link-info-core.d.ts +1 -0
  132. package/dist/backend/native-link-info-core.js.map +1 -1
  133. package/dist/backend/native-tools.d.ts +3 -1
  134. package/dist/backend/native-tools.js +6 -4
  135. package/dist/backend/native-tools.js.map +1 -1
  136. package/dist/backend/runtime-abi.d.ts +2 -2
  137. package/dist/backend/runtime-abi.js +2 -2
  138. package/dist/backend/runtime-pack-core.d.ts +1 -0
  139. package/dist/backend/runtime-pack-core.js +8 -1
  140. package/dist/backend/runtime-pack-core.js.map +1 -1
  141. package/dist/backend/runtime-pack-targets.test.js +41 -4
  142. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  143. package/dist/backend/runtime-pack.test.js +11 -1
  144. package/dist/backend/runtime-pack.test.js.map +1 -1
  145. package/dist/backend/target-diagnostics.test.js +1 -1
  146. package/dist/executable/executable-cache.d.ts +1 -0
  147. package/dist/executable/executable-cache.js +2 -1
  148. package/dist/executable/executable-cache.js.map +1 -1
  149. package/dist/executable/executable-cache.test.js +15 -0
  150. package/dist/executable/executable-cache.test.js.map +1 -1
  151. package/dist/frontend/fork-target.d.ts +5 -0
  152. package/dist/frontend/fork-target.js +40 -8
  153. package/dist/frontend/fork-target.js.map +1 -1
  154. package/dist/frontend/fork-target.test.d.ts +1 -0
  155. package/dist/frontend/fork-target.test.js +59 -0
  156. package/dist/frontend/fork-target.test.js.map +1 -0
  157. package/dist/frontend/lowering/binding-analysis.js +2 -2
  158. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  159. package/dist/frontend/lowering/builtins/atomics.d.ts +2 -11
  160. package/dist/frontend/lowering/builtins/atomics.js +64 -28
  161. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  162. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +3 -0
  163. package/dist/frontend/lowering/builtins/filesystem-calls.js +51 -4
  164. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  165. package/dist/frontend/lowering/builtins/module-calls.js +6 -1
  166. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  167. package/dist/frontend/lowering/builtins/workers.d.ts +5 -0
  168. package/dist/frontend/lowering/builtins/workers.js +65 -0
  169. package/dist/frontend/lowering/builtins/workers.js.map +1 -0
  170. package/dist/frontend/lowering/class-assertions.d.ts +7 -0
  171. package/dist/frontend/lowering/class-assertions.js +96 -0
  172. package/dist/frontend/lowering/class-assertions.js.map +1 -0
  173. package/dist/frontend/lowering/class-protocols.d.ts +17 -0
  174. package/dist/frontend/lowering/class-protocols.js +126 -0
  175. package/dist/frontend/lowering/class-protocols.js.map +1 -0
  176. package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -11
  177. package/dist/frontend/lowering/containers/array-callbacks.js +52 -87
  178. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  179. package/dist/frontend/lowering/containers/bytes.js +12 -34
  180. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  181. package/dist/frontend/lowering/containers/string-and-regexp.js +22 -3
  182. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  183. package/dist/frontend/lowering/expressions/object-literals.js +2 -6
  184. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  185. package/dist/frontend/lowering/generic-functions.d.ts +2 -5
  186. package/dist/frontend/lowering/generic-functions.js +13 -10
  187. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  188. package/dist/frontend/lowering/instantiation-path.d.ts +8 -0
  189. package/dist/frontend/lowering/instantiation-path.js +10 -0
  190. package/dist/frontend/lowering/instantiation-path.js.map +1 -0
  191. package/dist/frontend/lowering/instantiation-path.test.d.ts +1 -0
  192. package/dist/frontend/lowering/instantiation-path.test.js +23 -0
  193. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -0
  194. package/dist/frontend/lowering/lower-builtin-values.js +11 -7
  195. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  196. package/dist/frontend/lowering/lower-calls.js +36 -3
  197. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  198. package/dist/frontend/lowering/lower-classes.d.ts +5 -0
  199. package/dist/frontend/lowering/lower-classes.js +121 -53
  200. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  201. package/dist/frontend/lowering/lower-event-emitter.js +1 -1
  202. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  203. package/dist/frontend/lowering/lower-exprs.js +31 -10
  204. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  205. package/dist/frontend/lowering/lower-functions.d.ts +1 -1
  206. package/dist/frontend/lowering/lower-functions.js +2 -2
  207. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  208. package/dist/frontend/lowering/lower-island.js +1 -1
  209. package/dist/frontend/lowering/lower-island.js.map +1 -1
  210. package/dist/frontend/lowering/lower-modules.d.ts +1 -0
  211. package/dist/frontend/lowering/lower-modules.js +44 -9
  212. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  213. package/dist/frontend/lowering/lower-stmts.js +13 -11
  214. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  215. package/dist/frontend/lowering/lower-stream.js +1 -1
  216. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  217. package/dist/frontend/lowering/lowerer.d.ts +13 -1
  218. package/dist/frontend/lowering/lowerer.js +51 -9
  219. package/dist/frontend/lowering/lowerer.js.map +1 -1
  220. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  221. package/dist/frontend/lowering/split-consumers.d.ts +7 -0
  222. package/dist/frontend/lowering/split-consumers.js +64 -0
  223. package/dist/frontend/lowering/split-consumers.js.map +1 -0
  224. package/dist/frontend/lowering/surfaces.d.ts +3 -4
  225. package/dist/frontend/lowering/surfaces.js +35 -7
  226. package/dist/frontend/lowering/surfaces.js.map +1 -1
  227. package/dist/frontend/module-source-candidates.d.ts +10 -0
  228. package/dist/frontend/module-source-candidates.js +40 -0
  229. package/dist/frontend/module-source-candidates.js.map +1 -0
  230. package/dist/frontend/module-source-candidates.test.d.ts +1 -0
  231. package/dist/frontend/module-source-candidates.test.js +53 -0
  232. package/dist/frontend/module-source-candidates.test.js.map +1 -0
  233. package/dist/frontend/pipeline.js +2 -2
  234. package/dist/frontend/pipeline.js.map +1 -1
  235. package/dist/frontend/program-analysis.d.ts +2 -0
  236. package/dist/frontend/program-analysis.js +2 -0
  237. package/dist/frontend/program-analysis.js.map +1 -1
  238. package/dist/frontend/program.js +17 -29
  239. package/dist/frontend/program.js.map +1 -1
  240. package/dist/frontend/ts7/ast-node.js +6 -8
  241. package/dist/frontend/ts7/ast-node.js.map +1 -1
  242. package/dist/frontend/ts7/ast-node.test.js +42 -1
  243. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  244. package/dist/frontend/ts7/ast-wire.d.ts +4 -0
  245. package/dist/frontend/ts7/ast-wire.js +28 -0
  246. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  247. package/dist/frontend/ts7/ast.d.ts +2 -1
  248. package/dist/frontend/ts7/ast.js +8 -4
  249. package/dist/frontend/ts7/ast.js.map +1 -1
  250. package/dist/frontend/ts7/checker.d.ts +8 -2
  251. package/dist/frontend/ts7/checker.js +41 -5
  252. package/dist/frontend/ts7/checker.js.map +1 -1
  253. package/dist/frontend/ts7/checker.test.js +42 -0
  254. package/dist/frontend/ts7/checker.test.js.map +1 -1
  255. package/dist/frontend/ts7/program-host.d.ts +7 -0
  256. package/dist/frontend/ts7/program-host.js +26 -2
  257. package/dist/frontend/ts7/program-host.js.map +1 -1
  258. package/dist/frontend/ts7/program-host.test.js +29 -0
  259. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  260. package/dist/frontend/type-mapper.d.ts +3 -0
  261. package/dist/frontend/type-mapper.js +44 -2
  262. package/dist/frontend/type-mapper.js.map +1 -1
  263. package/dist/frontend/worker-target.d.ts +6 -0
  264. package/dist/frontend/worker-target.js +108 -0
  265. package/dist/frontend/worker-target.js.map +1 -0
  266. package/dist/frontend/worker-target.test.d.ts +1 -0
  267. package/dist/frontend/worker-target.test.js +71 -0
  268. package/dist/frontend/worker-target.test.js.map +1 -0
  269. package/dist/index.js +24 -7
  270. package/dist/index.js.map +1 -1
  271. package/dist/ir/builtin-effects.js +12 -0
  272. package/dist/ir/builtin-effects.js.map +1 -1
  273. package/dist/ir/builtin-signatures.d.ts +1 -1
  274. package/dist/ir/builtin-signatures.js +13 -12
  275. package/dist/ir/builtin-signatures.js.map +1 -1
  276. package/dist/ir/constant-tables.test.js +1 -1
  277. package/dist/ir/initializer-bindings.test.js +1 -1
  278. package/dist/ir/ir.d.ts +9 -10
  279. package/dist/ir/ir.js.map +1 -1
  280. package/dist/ir/numeric-call-specialization.d.ts +8 -0
  281. package/dist/ir/numeric-call-specialization.js +198 -0
  282. package/dist/ir/numeric-call-specialization.js.map +1 -0
  283. package/dist/ir/runtime-features.js +4 -3
  284. package/dist/ir/runtime-features.js.map +1 -1
  285. package/dist/ir/scalar-records.test.js +1 -1
  286. package/dist/ir/serialize.d.ts +1 -1
  287. package/dist/ir/serialize.js +3 -3
  288. package/dist/ir/serialize.js.map +1 -1
  289. package/dist/ir/validate.js +89 -23
  290. package/dist/ir/validate.js.map +1 -1
  291. package/dist/ir/validate.test.js +91 -4
  292. package/dist/ir/validate.test.js.map +1 -1
  293. package/dist/library/fence-eval.test.js +1 -1
  294. package/dist/library/int-infer.test.js +4 -4
  295. package/dist/library/ir-policy.js +2 -0
  296. package/dist/library/ir-policy.js.map +1 -1
  297. package/dist/library/library-cache.test.js +5 -5
  298. package/dist/native/compiler.js +24 -11
  299. package/dist/native/compiler.js.map +1 -1
  300. package/dist/native/compiler.test.js +7 -3
  301. package/dist/native/compiler.test.js.map +1 -1
  302. package/dist/native/prepare.js +2 -0
  303. package/dist/native/prepare.js.map +1 -1
  304. package/dist/native/sanitizer.test.js +1 -0
  305. package/dist/native/sanitizer.test.js.map +1 -1
  306. package/package.json +20 -20
  307. package/surface-manifest.json +30 -2
@@ -0,0 +1,73 @@
1
+ import { everyStmtList } from "../../ir/traverse.js";
2
+ import { mangleLocal } from "../mangle.js";
3
+ /** A synchronous, invocation-only consumer cannot retain the environment.
4
+ * Capture boxes still have independent owners in the ordinary call frame;
5
+ * only the closure allocation and its cycle header disappear. */
6
+ export class StackCallbacks {
7
+ functions;
8
+ targets = new Map();
9
+ remaining = 0;
10
+ constructor(functions) {
11
+ this.functions = functions;
12
+ }
13
+ reset(enabled) {
14
+ // Bound entry-block storage even when a function contains many sites.
15
+ this.remaining = enabled ? 4096 : 0;
16
+ }
17
+ emit(host, value) {
18
+ if (value.kind !== "closure" || value.captures.length > 32)
19
+ return null;
20
+ const bytes = (5 + value.captures.length) * (host.sizeType === "i64" ? 8 : 4);
21
+ if (bytes > this.remaining || !this.eligible(value.fnName))
22
+ return null;
23
+ this.remaining -= bytes;
24
+ const B = host.B;
25
+ const closure = B.slot();
26
+ B.entryAllocas.push(`${closure} = alloca { %ScrClosure, [${value.captures.length} x ptr] }`);
27
+ B.line(`store %ScrClosure zeroinitializer, ptr ${closure}`);
28
+ B.line(`store ${host.sizeType} -1, ptr ${closure}`);
29
+ const fn = B.tmp();
30
+ B.line(`${fn} = getelementptr inbounds %ScrClosure, ptr ${closure}, i32 0, i32 1`);
31
+ B.line(`store ptr @${host.callTarget(value.fnName)}, ptr ${fn}`);
32
+ const count = B.tmp();
33
+ B.line(`${count} = getelementptr inbounds %ScrClosure, ptr ${closure}, i32 0, i32 2`);
34
+ B.line(`store ${host.sizeType} ${value.captures.length}, ptr ${count}`);
35
+ if (this.functions.get(value.fnName)?.ownsPrototype) {
36
+ const kind = B.tmp();
37
+ B.line(`${kind} = getelementptr inbounds %ScrClosure, ptr ${closure}, i32 0, i32 4`);
38
+ B.line(`store i32 4, ptr ${kind}`);
39
+ }
40
+ value.captures.forEach((localId, index) => {
41
+ const box = host.retainBox(host.loadBox(`%${mangleLocal(localId)}`));
42
+ const caps = B.tmp();
43
+ const slot = B.tmp();
44
+ B.line(`${caps} = getelementptr inbounds %ScrClosure, ptr ${closure}, i32 1`);
45
+ B.line(`${slot} = getelementptr inbounds ptr, ptr ${caps}, ${host.sizeType} ${index}`);
46
+ B.line(`store ptr ${box}, ptr ${slot}`);
47
+ // Use the same forward capture order as scr_closure_release, on both
48
+ // normal and exceptional exits. The immortal stack header owns none.
49
+ host.own({ name: slot, type: value.type, slot: true, boxed: true });
50
+ });
51
+ return { name: closure, type: value.type };
52
+ }
53
+ eligible(name) {
54
+ const cached = this.targets.get(name);
55
+ if (cached !== undefined)
56
+ return cached;
57
+ const fn = this.functions.get(name);
58
+ let nodes = 0;
59
+ // A self-reference can publish the running environment even when its
60
+ // caller only invokes it. Async/generator bodies can outlive the call.
61
+ const safe = fn !== undefined &&
62
+ fn.captures !== undefined &&
63
+ !fn.async &&
64
+ !fn.generator &&
65
+ everyStmtList(fn.body, {
66
+ expr: (expr) => ++nodes <= 512 && expr.kind !== "selfRef",
67
+ stmt: () => ++nodes <= 512,
68
+ });
69
+ this.targets.set(name, safe);
70
+ return safe;
71
+ }
72
+ }
73
+ //# sourceMappingURL=stack-callbacks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-callbacks.js","sourceRoot":"","sources":["../../../src/backend/llvm/stack-callbacks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type IrFunction, type IrType } from "../../ir/ir.js";
2
+ import type { CallLifetimes } from "./call-lifetimes.js";
3
+ import type { LlvmEmitterContext } from "./expr-context.js";
4
+ import type { StackCallbacks } from "./stack-callbacks.js";
5
+ /** A captured binding can stay in its declaring frame only when every
6
+ * environment that contains it finishes within that binding's scope.
7
+ * Payload values can still escape: their ordinary owned reads retain them. */
8
+ export declare class StackCaptures {
9
+ private readonly functions;
10
+ private readonly lifetimes;
11
+ private readonly callbacks;
12
+ private readonly recaptured;
13
+ private locals;
14
+ private remaining;
15
+ constructor(functions: ReadonlyMap<string, IrFunction>, lifetimes: CallLifetimes, callbacks: StackCallbacks);
16
+ reset(fn: IrFunction, enabled: boolean): void;
17
+ emit(host: LlvmEmitterContext, id: string, type: IrType): {
18
+ box: string;
19
+ owner?: {
20
+ slot: string;
21
+ type: IrType;
22
+ };
23
+ } | null;
24
+ private nestedCaptures;
25
+ }
@@ -0,0 +1,150 @@
1
+ import { isRefCounted, } from "../../ir/ir.js";
2
+ import { everyExprChild, everyStmtChild, everyStmtList } from "../../ir/traverse.js";
3
+ import { vAdapters } from "./shapes.js";
4
+ /** A captured binding can stay in its declaring frame only when every
5
+ * environment that contains it finishes within that binding's scope.
6
+ * Payload values can still escape: their ordinary owned reads retain them. */
7
+ export class StackCaptures {
8
+ functions;
9
+ lifetimes;
10
+ callbacks;
11
+ recaptured = new Map();
12
+ locals = new Set();
13
+ remaining = 0;
14
+ constructor(functions, lifetimes, callbacks) {
15
+ this.functions = functions;
16
+ this.lifetimes = lifetimes;
17
+ this.callbacks = callbacks;
18
+ }
19
+ reset(fn, enabled) {
20
+ this.locals = new Set();
21
+ this.remaining = enabled ? 2048 : 0;
22
+ if (!enabled)
23
+ return;
24
+ const possible = new Set(fn.locals.filter((local) => local.boxed && !local.tdz).map((local) => local.id));
25
+ if (possible.size === 0)
26
+ return;
27
+ const invalid = new Set([
28
+ ...fn.params.map((param) => param.localId),
29
+ ...(fn.captures ?? []).map((capture) => capture.localId),
30
+ ...(fn.classCaptures ?? []).map((capture) => capture.localId),
31
+ ]);
32
+ const declarations = new Map();
33
+ let nodes = 0;
34
+ const expr = (node, immediate) => {
35
+ if (++nodes > 4096)
36
+ return false;
37
+ if (node.kind === "closure") {
38
+ const target = this.functions.get(node.fnName);
39
+ const safe = immediate && this.callbacks.eligible(node.fnName);
40
+ const nested = safe ? this.nestedCaptures(target) : null;
41
+ node.captures.forEach((id, index) => {
42
+ const capture = target?.captures?.[index];
43
+ if (!safe || !capture || nested.has(capture.localId))
44
+ invalid.add(id);
45
+ });
46
+ }
47
+ else if (node.kind === "classRef") {
48
+ for (const id of node.captures ?? [])
49
+ invalid.add(id);
50
+ }
51
+ else if (node.kind === "call") {
52
+ const parameters = this.lifetimes.parameters.get(node.callee);
53
+ return node.args.every((arg, index) => expr(arg, parameters?.has(index) === true));
54
+ }
55
+ else if (node.kind === "callValue") {
56
+ return (expr(node.callee, true) &&
57
+ (!node.receiver || expr(node.receiver, false)) &&
58
+ node.args.every((arg) => expr(arg, false)));
59
+ }
60
+ return everyExprChild(node, (child) => expr(child, false), stmt);
61
+ };
62
+ const stmt = (node) => {
63
+ if (++nodes > 4096)
64
+ return false;
65
+ if (node.kind === "varDecl")
66
+ declarations.set(node.localId, (declarations.get(node.localId) ?? 0) + 1);
67
+ else if (node.kind === "forOf")
68
+ invalid.add(node.localId);
69
+ else if (node.kind === "tryCatch" && node.catchLocalId !== null)
70
+ invalid.add(node.catchLocalId);
71
+ else if (node.kind === "switch") {
72
+ // Dispatch can skip a declaration on a later loop iteration. The
73
+ // shared switch scope resets binding slots, not stack payload slots.
74
+ for (const branch of node.cases) {
75
+ for (const child of branch.body) {
76
+ if (child.kind === "varDecl")
77
+ invalid.add(child.localId);
78
+ }
79
+ }
80
+ }
81
+ else if (node.kind === "for") {
82
+ // Loop-head lets are freshened by a separate allocation path.
83
+ const initializers = node.init?.kind === "block" ? node.init.body : node.init ? [node.init] : [];
84
+ for (const init of initializers)
85
+ if (init.kind === "varDecl")
86
+ invalid.add(init.localId);
87
+ }
88
+ return everyStmtChild(node, (child) => expr(child, false), stmt);
89
+ };
90
+ if (!fn.body.every(stmt))
91
+ return;
92
+ for (const id of possible) {
93
+ if (!invalid.has(id) && declarations.get(id) === 1)
94
+ this.locals.add(id);
95
+ }
96
+ }
97
+ emit(host, id, type) {
98
+ // 48 bytes also bounds the smaller wasm32 layout. Charge actual emitted
99
+ // sites, including duplicated finally bodies and versioned loops.
100
+ if (!this.locals.has(id) || this.remaining < 48)
101
+ return null;
102
+ const ref = isRefCounted(type);
103
+ if (!ref &&
104
+ type.kind !== "f64" &&
105
+ type.kind !== "date" &&
106
+ type.kind !== "procStream" &&
107
+ type.kind !== "bool")
108
+ return null;
109
+ this.remaining -= 48;
110
+ const B = host.B;
111
+ const box = B.slot();
112
+ B.entryAllocas.push(`${box} = alloca %ScrBox`);
113
+ B.entryAllocas.push(`store %ScrBox zeroinitializer, ptr ${box}`);
114
+ let retain = "null", release = "null";
115
+ if (ref) {
116
+ const adapters = vAdapters(host.shapeHost, type);
117
+ retain = adapters.retain;
118
+ release = adapters.release;
119
+ }
120
+ const kind = ref ? 5 : type.kind === "bool" ? 1 : 0;
121
+ B.line(`store %ScrBox { ${host.sizeType} -1, i32 ${kind}, ptr ${retain}, ptr ${release}, ptr null, i64 0 }, ptr ${box}`);
122
+ if (!ref)
123
+ return { box };
124
+ const payload = B.slot();
125
+ B.entryAllocas.push(`${payload} = getelementptr inbounds %ScrBox, ptr ${box}, i32 0, i32 5`);
126
+ // The immortal box is invisible to cycle tracing. Its one payload owner
127
+ // is an ordinary external root, released at the original scope boundary.
128
+ return { box, owner: { slot: payload, type } };
129
+ }
130
+ nestedCaptures(fn) {
131
+ const cached = this.recaptured.get(fn.name);
132
+ if (cached)
133
+ return cached;
134
+ const captures = new Set();
135
+ // eligible() already bounded this target's complete body traversal.
136
+ everyStmtList(fn.body, {
137
+ stmt: () => true,
138
+ expr: (node) => {
139
+ if (node.kind === "closure" || node.kind === "classRef") {
140
+ for (const id of node.captures ?? [])
141
+ captures.add(id);
142
+ }
143
+ return true;
144
+ },
145
+ });
146
+ this.recaptured.set(fn.name, captures);
147
+ return captures;
148
+ }
149
+ }
150
+ //# sourceMappingURL=stack-captures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-captures.js","sourceRoot":"","sources":["../../../src/backend/llvm/stack-captures.ts"],"names":[],"mappings":"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"}
@@ -54,7 +54,7 @@ function fixture(arm = record) {
54
54
  body: [ret(narrow(ref("value"), arm))],
55
55
  };
56
56
  return {
57
- irVersion: 13,
57
+ irVersion: 14,
58
58
  sourceFile: loc.file,
59
59
  entry: "main",
60
60
  records: [{ id: "cell", fields: [{ name: "x", type: F64 }] }],
@@ -15,7 +15,7 @@ const concat = (left, right) => ({
15
15
  });
16
16
  function module(value) {
17
17
  return {
18
- irVersion: 13,
18
+ irVersion: 14,
19
19
  sourceFile: loc.file,
20
20
  entry: "main",
21
21
  functions: [
@@ -49,7 +49,7 @@ function fn(name, names, value) {
49
49
  }
50
50
  function mod(...functions) {
51
51
  return {
52
- irVersion: 13,
52
+ irVersion: 14,
53
53
  sourceFile: loc.file,
54
54
  entry: "main",
55
55
  functions: [
@@ -299,13 +299,17 @@ test("global string ownership cannot be inferred from an immutable-looking refer
299
299
  inspect.body = [ret(intrinsic(ref("%g.global"), "length", [], F64))];
300
300
  expect(body(module, "sc_f_inspect")).not.toContain("@scr_str_retain_v");
301
301
  });
302
- test("boxed string parameters retain their checked binding reads", () => {
302
+ test("boxed string lengths borrow initialized payloads and keep checked TDZ reads", () => {
303
303
  const inspect = fn("inspect", ["value"], intrinsic(ref("value"), "length", [], F64));
304
304
  inspect.locals[0].boxed = true;
305
305
  const ir = body(mod(inspect), "sc_f_inspect");
306
- expect(ir).toContain("@scr_box_");
307
- expect(ir).toContain("@scr_str_release");
306
+ expect(ir).toContain("@scr_box_release");
307
+ expect(ir).not.toContain("@scr_box_get_ref");
308
308
  expect(ir).toContain("@scr_str_utf16_len");
309
+ inspect.locals[0].tdz = true;
310
+ const checked = body(mod(inspect), "sc_f_inspect");
311
+ expect(checked).toContain("@scr_box_get_ref");
312
+ expect(checked).toContain("@scr_str_release");
309
313
  });
310
314
  test("borrowed literals keep UTF-16 string comparison without temporary owners", () => {
311
315
  const compare = fn("compare", [], {
@@ -1 +1 @@
1
- {"version":3,"file":"string-lifetimes.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/string-lifetimes.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"string-lifetimes.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/string-lifetimes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type IrExpr, type IrFunction } from "../../ir/ir.js";
2
+ import type { CallLifetimes } from "./call-lifetimes.js";
3
+ import type { LlValue, LlvmEmitterContext } from "./expr-context.js";
4
+ type Slice = IrExpr & {
5
+ kind: "strIntrinsic";
6
+ };
7
+ /** A local used exclusively for scalar indexing needs no copied bytes.
8
+ * Snapshot the receiver and normalized bounds at its initializer, including
9
+ * side effects in the bounds. Escapes, captures, writes, suspension, and all
10
+ * other string consumers keep the ordinary materialized representation. */
11
+ export declare function findScalarStringSlices(fn: IrFunction, lifetimes: CallLifetimes): Map<string, Slice>;
12
+ export interface StringSliceSnapshot {
13
+ source: string;
14
+ range: string;
15
+ }
16
+ /** Own the original string for the complete local scope. A later append
17
+ * cannot mutate it in place, even when the original binding was unique. */
18
+ export declare function emitStringSliceSnapshot(host: LlvmEmitterContext, slice: Slice): StringSliceSnapshot;
19
+ export declare function emitStringSliceRead(host: LlvmEmitterContext, value: Slice): LlValue | null;
20
+ export {};
@@ -0,0 +1,87 @@
1
+ import {} from "../../ir/ir.js";
2
+ import { everyExprChild, everyStmtChild, everyStmtList } from "../../ir/traverse.js";
3
+ import { F64_INF, f64Lit } from "./common.js";
4
+ /** A local used exclusively for scalar indexing needs no copied bytes.
5
+ * Snapshot the receiver and normalized bounds at its initializer, including
6
+ * side effects in the bounds. Escapes, captures, writes, suspension, and all
7
+ * other string consumers keep the ordinary materialized representation. */
8
+ export function findScalarStringSlices(fn, lifetimes) {
9
+ const slices = new Map();
10
+ if (fn.async || fn.generator)
11
+ return slices;
12
+ const bindings = lifetimes.bindings.get(fn.name);
13
+ everyStmtList(fn.body, {
14
+ expr: () => true,
15
+ stmt: (stmt) => {
16
+ if (stmt.kind === "varDecl" &&
17
+ bindings?.has(stmt.localId) &&
18
+ stmt.init?.kind === "strIntrinsic" &&
19
+ (stmt.init.method === "slice" || stmt.init.method === "substring"))
20
+ slices.set(stmt.localId, stmt.init);
21
+ return true;
22
+ },
23
+ });
24
+ if (slices.size === 0)
25
+ return slices;
26
+ const invalid = new Set();
27
+ function expr(value) {
28
+ if (value.kind === "strIntrinsic" &&
29
+ (value.method === "length" || value.method === "charCodeAt") &&
30
+ value.receiver.kind === "varRef" &&
31
+ slices.has(value.receiver.localId)) {
32
+ value.args.forEach(expr);
33
+ return true;
34
+ }
35
+ if (value.kind === "varRef" && slices.has(value.localId))
36
+ invalid.add(value.localId);
37
+ if (value.kind === "closure" || value.kind === "classRef")
38
+ for (const id of value.captures ?? [])
39
+ invalid.add(id);
40
+ return everyExprChild(value, expr, stmt);
41
+ }
42
+ function stmt(value) {
43
+ return everyStmtChild(value, expr, stmt);
44
+ }
45
+ fn.body.forEach(stmt);
46
+ for (const id of invalid)
47
+ slices.delete(id);
48
+ return slices;
49
+ }
50
+ /** Own the original string for the complete local scope. A later append
51
+ * cannot mutate it in place, even when the original binding was unique. */
52
+ export function emitStringSliceSnapshot(host, slice) {
53
+ const B = host.B;
54
+ const source = host.emitExpr(slice.receiver);
55
+ const args = slice.args.map((arg) => host.emitExpr(arg));
56
+ const sourceSlot = B.slot(), range = B.slot();
57
+ B.entryAllocas.push(`${sourceSlot} = alloca ptr`, `${range} = alloca { ${host.sizeType}, ${host.sizeType}, i32 }`);
58
+ B.line(`store ptr ${source.name}, ptr ${sourceSlot}`);
59
+ host.declare("declare void @scr_str_slice_range(ptr, double, double, i1 zeroext, ptr)");
60
+ B.line(`call void @scr_str_slice_range(ptr ${source.name}, double ${args[0]?.name ?? f64Lit(0)}, double ${args[1]?.name ?? F64_INF}, i1 ${slice.method === "substring" ? "true" : "false"}, ptr ${range})`);
61
+ host.moveTemp(source);
62
+ return { source: sourceSlot, range };
63
+ }
64
+ export function emitStringSliceRead(host, value) {
65
+ if (value.receiver.kind !== "varRef")
66
+ return null;
67
+ const snapshot = host.stringSlices.get(value.receiver.localId);
68
+ if (!snapshot)
69
+ return null;
70
+ const B = host.B;
71
+ if (value.method === "length") {
72
+ const pointer = B.tmp(), length = B.tmp(), number = B.tmp();
73
+ B.line(`${pointer} = getelementptr inbounds { ${host.sizeType}, ${host.sizeType}, i32 }, ptr ${snapshot.range}, i32 0, i32 1`);
74
+ B.line(`${length} = load ${host.sizeType}, ptr ${pointer}`);
75
+ B.line(`${number} = uitofp ${host.sizeType} ${length} to double`);
76
+ return { name: number, type: value.type };
77
+ }
78
+ if (value.method !== "charCodeAt")
79
+ return null;
80
+ const index = value.args[0] ? host.emitExpr(value.args[0]) : { name: f64Lit(0) };
81
+ const source = B.tmp(), result = B.tmp();
82
+ B.line(`${source} = load ptr, ptr ${snapshot.source}`);
83
+ host.declare("declare double @scr_str_slice_char_code_at(ptr, ptr, double)");
84
+ B.line(`${result} = call double @scr_str_slice_char_code_at(ptr ${source}, ptr ${snapshot.range}, double ${index.name})`);
85
+ return { name: result, type: value.type };
86
+ }
87
+ //# sourceMappingURL=string-slices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-slices.js","sourceRoot":"","sources":["../../../src/backend/llvm/string-slices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,98 @@
1
+ import { expect, test } from "vitest";
2
+ import { F64, STRING, VOID } from "../../ir/ir.js";
3
+ import { analyzeCallLifetimes } from "./call-lifetimes.js";
4
+ import { findScalarStringSlices } from "./string-slices.js";
5
+ const loc = { file: "slices.ts", start: 0, end: 0 };
6
+ const ref = (id) => ({ kind: "varRef", localId: id, type: STRING, loc });
7
+ function fixture() {
8
+ return {
9
+ name: "scan",
10
+ params: [{ localId: "source", name: "source", type: STRING }],
11
+ locals: [
12
+ { id: "source", name: "source", type: STRING, mutable: true },
13
+ { id: "piece", name: "piece", type: STRING, mutable: true },
14
+ ],
15
+ returnType: VOID,
16
+ loc,
17
+ body: [
18
+ {
19
+ kind: "varDecl",
20
+ localId: "piece",
21
+ init: {
22
+ kind: "strIntrinsic",
23
+ method: "substring",
24
+ receiver: ref("source"),
25
+ args: [{ kind: "numLit", value: 1, type: F64, loc }],
26
+ type: STRING,
27
+ loc,
28
+ },
29
+ loc,
30
+ },
31
+ {
32
+ kind: "exprStmt",
33
+ expr: {
34
+ kind: "strIntrinsic",
35
+ method: "length",
36
+ receiver: ref("piece"),
37
+ args: [],
38
+ type: F64,
39
+ loc,
40
+ },
41
+ loc,
42
+ },
43
+ {
44
+ kind: "exprStmt",
45
+ expr: {
46
+ kind: "strIntrinsic",
47
+ method: "charCodeAt",
48
+ receiver: ref("piece"),
49
+ args: [{ kind: "numLit", value: 0, type: F64, loc }],
50
+ type: F64,
51
+ loc,
52
+ },
53
+ loc,
54
+ },
55
+ ],
56
+ };
57
+ }
58
+ function facts(fn) {
59
+ return findScalarStringSlices(fn, analyzeCallLifetimes(new Map([[fn.name, fn]])));
60
+ }
61
+ test("stable scalar-only slices keep their source and bounds instead of copied bytes", () => {
62
+ const fn = fixture();
63
+ expect([...facts(fn).keys()]).toEqual(["piece"]);
64
+ fn.body.push({
65
+ kind: "assign",
66
+ localId: "source",
67
+ value: { kind: "strLit", value: "new", type: STRING, loc },
68
+ loc,
69
+ });
70
+ expect([...facts(fn).keys()]).toEqual(["piece"]);
71
+ });
72
+ test.each(["escape", "capture", "write", "other-consumer", "suspend"])("%s needs a materialized string", (reason) => {
73
+ const fn = fixture();
74
+ const stmt = { kind: "return", value: ref("piece"), loc };
75
+ if (reason === "escape")
76
+ fn.body.push(stmt);
77
+ if (reason === "capture")
78
+ fn.locals[1].boxed = true;
79
+ if (reason === "write")
80
+ fn.body.push({ kind: "assign", localId: "piece", value: ref("source"), loc });
81
+ if (reason === "other-consumer")
82
+ fn.body.push({
83
+ kind: "exprStmt",
84
+ expr: {
85
+ kind: "strIntrinsic",
86
+ method: "trim",
87
+ receiver: ref("piece"),
88
+ args: [],
89
+ type: STRING,
90
+ loc,
91
+ },
92
+ loc,
93
+ });
94
+ if (reason === "suspend")
95
+ fn.async = true;
96
+ expect(facts(fn).size).toBe(0);
97
+ });
98
+ //# sourceMappingURL=string-slices.test.js.map