@scriptc/compiler 0.2.2 → 0.2.4

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 (243) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +99 -27
  2. package/dist/backend/cycle-analysis.js +63 -50
  3. package/dist/backend/cycle-analysis.js.map +1 -1
  4. package/dist/backend/cycle-analysis.test.js +51 -0
  5. package/dist/backend/cycle-analysis.test.js.map +1 -1
  6. package/dist/backend/llvm/borrowed-inputs.d.ts +15 -0
  7. package/dist/backend/llvm/borrowed-inputs.js +28 -0
  8. package/dist/backend/llvm/borrowed-inputs.js.map +1 -0
  9. package/dist/backend/llvm/borrowed-receivers.d.ts +9 -0
  10. package/dist/backend/llvm/borrowed-receivers.js +58 -0
  11. package/dist/backend/llvm/borrowed-receivers.js.map +1 -0
  12. package/dist/backend/llvm/byte-numbers.d.ts +10 -0
  13. package/dist/backend/llvm/byte-numbers.js +235 -0
  14. package/dist/backend/llvm/byte-numbers.js.map +1 -0
  15. package/dist/backend/llvm/bytes-bounds.d.ts +9 -0
  16. package/dist/backend/llvm/bytes-bounds.js +189 -0
  17. package/dist/backend/llvm/bytes-bounds.js.map +1 -0
  18. package/dist/backend/llvm/call-lifetimes.d.ts +27 -0
  19. package/dist/backend/llvm/call-lifetimes.js +199 -0
  20. package/dist/backend/llvm/call-lifetimes.js.map +1 -0
  21. package/dist/backend/llvm/call-lifetimes.test.d.ts +1 -0
  22. package/dist/backend/llvm/call-lifetimes.test.js +259 -0
  23. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -0
  24. package/dist/backend/llvm/checked-value-lifetimes.d.ts +9 -0
  25. package/dist/backend/llvm/checked-value-lifetimes.js +35 -0
  26. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -0
  27. package/dist/backend/llvm/counted-loops.d.ts +6 -0
  28. package/dist/backend/llvm/counted-loops.js +28 -0
  29. package/dist/backend/llvm/counted-loops.js.map +1 -0
  30. package/dist/backend/llvm/dyn.d.ts +2 -2
  31. package/dist/backend/llvm/dyn.js +79 -35
  32. package/dist/backend/llvm/dyn.js.map +1 -1
  33. package/dist/backend/llvm/emitter.d.ts +56 -7
  34. package/dist/backend/llvm/emitter.js +310 -37
  35. package/dist/backend/llvm/emitter.js.map +1 -1
  36. package/dist/backend/llvm/emitter.test.js +24 -5
  37. package/dist/backend/llvm/emitter.test.js.map +1 -1
  38. package/dist/backend/llvm/expr-async.js +4 -3
  39. package/dist/backend/llvm/expr-async.js.map +1 -1
  40. package/dist/backend/llvm/expr-bytes.d.ts +4 -4
  41. package/dist/backend/llvm/expr-bytes.js +68 -35
  42. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  43. package/dist/backend/llvm/expr-calls.js +50 -5
  44. package/dist/backend/llvm/expr-calls.js.map +1 -1
  45. package/dist/backend/llvm/expr-containers.d.ts +2 -1
  46. package/dist/backend/llvm/expr-containers.js +136 -57
  47. package/dist/backend/llvm/expr-containers.js.map +1 -1
  48. package/dist/backend/llvm/expr-context.d.ts +11 -0
  49. package/dist/backend/llvm/expr-control.js +26 -5
  50. package/dist/backend/llvm/expr-control.js.map +1 -1
  51. package/dist/backend/llvm/expr-dynamic.js +33 -31
  52. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  53. package/dist/backend/llvm/expr-primitives.js +61 -27
  54. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  55. package/dist/backend/llvm/expr-records.js +9 -3
  56. package/dist/backend/llvm/expr-records.js.map +1 -1
  57. package/dist/backend/llvm/expr-stream-bridges.js +5 -10
  58. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  59. package/dist/backend/llvm/integer-values.d.ts +10 -0
  60. package/dist/backend/llvm/integer-values.js +41 -0
  61. package/dist/backend/llvm/integer-values.js.map +1 -0
  62. package/dist/backend/llvm/integer-views.d.ts +7 -0
  63. package/dist/backend/llvm/integer-views.js +67 -0
  64. package/dist/backend/llvm/integer-views.js.map +1 -0
  65. package/dist/backend/llvm/integer-views.test.d.ts +1 -0
  66. package/dist/backend/llvm/integer-views.test.js +34 -0
  67. package/dist/backend/llvm/integer-views.test.js.map +1 -0
  68. package/dist/backend/llvm/lib-dispatch.js +3 -1
  69. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  70. package/dist/backend/llvm/lib-filesystem.js +5 -5
  71. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  72. package/dist/backend/llvm/lib-shared.js +35 -1
  73. package/dist/backend/llvm/lib-shared.js.map +1 -1
  74. package/dist/backend/llvm/local-array-reads.d.ts +42 -0
  75. package/dist/backend/llvm/local-array-reads.js +226 -0
  76. package/dist/backend/llvm/local-array-reads.js.map +1 -0
  77. package/dist/backend/llvm/local-array-reads.test.d.ts +1 -0
  78. package/dist/backend/llvm/local-array-reads.test.js +446 -0
  79. package/dist/backend/llvm/local-array-reads.test.js.map +1 -0
  80. package/dist/backend/llvm/map-read-lifetimes.d.ts +36 -0
  81. package/dist/backend/llvm/map-read-lifetimes.js +128 -0
  82. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -0
  83. package/dist/backend/llvm/map-read-lifetimes.test.d.ts +1 -0
  84. package/dist/backend/llvm/map-read-lifetimes.test.js +127 -0
  85. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -0
  86. package/dist/backend/llvm/reference-effects.d.ts +22 -0
  87. package/dist/backend/llvm/reference-effects.js +148 -0
  88. package/dist/backend/llvm/reference-effects.js.map +1 -0
  89. package/dist/backend/llvm/reference-effects.test.d.ts +1 -0
  90. package/dist/backend/llvm/reference-effects.test.js +74 -0
  91. package/dist/backend/llvm/reference-effects.test.js.map +1 -0
  92. package/dist/backend/llvm/shapes.d.ts +7 -4
  93. package/dist/backend/llvm/shapes.js +24 -6
  94. package/dist/backend/llvm/shapes.js.map +1 -1
  95. package/dist/backend/llvm/split.js +15 -5
  96. package/dist/backend/llvm/split.js.map +1 -1
  97. package/dist/backend/llvm/split.test.js +17 -0
  98. package/dist/backend/llvm/split.test.js.map +1 -1
  99. package/dist/backend/llvm/stack-unions.d.ts +20 -0
  100. package/dist/backend/llvm/stack-unions.js +61 -0
  101. package/dist/backend/llvm/stack-unions.js.map +1 -0
  102. package/dist/backend/llvm/stack-unions.test.d.ts +1 -0
  103. package/dist/backend/llvm/stack-unions.test.js +262 -0
  104. package/dist/backend/llvm/stack-unions.test.js.map +1 -0
  105. package/dist/backend/llvm/string-construction.d.ts +10 -0
  106. package/dist/backend/llvm/string-construction.js +38 -0
  107. package/dist/backend/llvm/string-construction.js.map +1 -0
  108. package/dist/backend/llvm/string-construction.test.d.ts +1 -0
  109. package/dist/backend/llvm/string-construction.test.js +65 -0
  110. package/dist/backend/llvm/string-construction.test.js.map +1 -0
  111. package/dist/backend/llvm/string-lifetimes.d.ts +12 -0
  112. package/dist/backend/llvm/string-lifetimes.js +72 -0
  113. package/dist/backend/llvm/string-lifetimes.js.map +1 -0
  114. package/dist/backend/llvm/string-lifetimes.test.d.ts +1 -0
  115. package/dist/backend/llvm/string-lifetimes.test.js +239 -0
  116. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -0
  117. package/dist/backend/mangle.d.ts +2 -0
  118. package/dist/backend/mangle.js +4 -0
  119. package/dist/backend/mangle.js.map +1 -1
  120. package/dist/backend/may-throw.js +67 -29
  121. package/dist/backend/may-throw.js.map +1 -1
  122. package/dist/backend/may-throw.test.js +104 -1
  123. package/dist/backend/may-throw.test.js.map +1 -1
  124. package/dist/backend/native-toolchain.d.ts +2 -2
  125. package/dist/backend/native-toolchain.js +2 -0
  126. package/dist/backend/native-toolchain.js.map +1 -1
  127. package/dist/frontend/input-tracker.js +3 -3
  128. package/dist/frontend/input-tracker.js.map +1 -1
  129. package/dist/frontend/input-tracker.test.js +38 -2
  130. package/dist/frontend/input-tracker.test.js.map +1 -1
  131. package/dist/frontend/lowering/collection-ingestion.d.ts +31 -0
  132. package/dist/frontend/lowering/collection-ingestion.js +224 -0
  133. package/dist/frontend/lowering/collection-ingestion.js.map +1 -0
  134. package/dist/frontend/lowering/containers/bytes.js +2 -0
  135. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  136. package/dist/frontend/lowering/containers/string-and-regexp.js +6 -0
  137. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  138. package/dist/frontend/lowering/import-meta.d.ts +10 -0
  139. package/dist/frontend/lowering/import-meta.js +52 -0
  140. package/dist/frontend/lowering/import-meta.js.map +1 -0
  141. package/dist/frontend/lowering/lower-assert.js +105 -41
  142. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  143. package/dist/frontend/lowering/lower-builtin-values.d.ts +2 -0
  144. package/dist/frontend/lowering/lower-builtin-values.js +22 -1
  145. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  146. package/dist/frontend/lowering/lower-builtins.d.ts +3 -13
  147. package/dist/frontend/lowering/lower-builtins.js +152 -46
  148. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  149. package/dist/frontend/lowering/lower-calls.js +6 -3
  150. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  151. package/dist/frontend/lowering/lower-classes.js +7 -7
  152. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  153. package/dist/frontend/lowering/lower-containers.d.ts +5 -1
  154. package/dist/frontend/lowering/lower-containers.js +52 -37
  155. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  156. package/dist/frontend/lowering/lower-exprs.js +47 -43
  157. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  158. package/dist/frontend/lowering/lower-inspect.js +43 -0
  159. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  160. package/dist/frontend/lowering/lower-stmts.js +72 -68
  161. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  162. package/dist/frontend/lowering/lower-system-errors.d.ts +6 -0
  163. package/dist/frontend/lowering/lower-system-errors.js +29 -0
  164. package/dist/frontend/lowering/lower-system-errors.js.map +1 -0
  165. package/dist/frontend/lowering/lowerer.d.ts +4 -3
  166. package/dist/frontend/lowering/lowerer.js +60 -25
  167. package/dist/frontend/lowering/lowerer.js.map +1 -1
  168. package/dist/frontend/lowering/surfaces.d.ts +2 -2
  169. package/dist/frontend/lowering/surfaces.js +69 -21
  170. package/dist/frontend/lowering/surfaces.js.map +1 -1
  171. package/dist/frontend/module-syntax.d.ts +1 -1
  172. package/dist/frontend/module-syntax.js +8 -1
  173. package/dist/frontend/module-syntax.js.map +1 -1
  174. package/dist/frontend/module-syntax.test.js +10 -0
  175. package/dist/frontend/module-syntax.test.js.map +1 -1
  176. package/dist/frontend/npm.d.ts +4 -0
  177. package/dist/frontend/npm.js +86 -33
  178. package/dist/frontend/npm.js.map +1 -1
  179. package/dist/frontend/npm.test.js +103 -0
  180. package/dist/frontend/npm.test.js.map +1 -1
  181. package/dist/frontend/pipeline-native.js +2 -1
  182. package/dist/frontend/pipeline-native.js.map +1 -1
  183. package/dist/frontend/services-node.js +3 -2
  184. package/dist/frontend/services-node.js.map +1 -1
  185. package/dist/frontend/services.d.ts +5 -1
  186. package/dist/frontend/services.js +9 -1
  187. package/dist/frontend/services.js.map +1 -1
  188. package/dist/frontend/services.test.js +21 -0
  189. package/dist/frontend/services.test.js.map +1 -1
  190. package/dist/frontend/ts7/ast-node.d.ts +2 -0
  191. package/dist/frontend/ts7/ast-node.js +30 -4
  192. package/dist/frontend/ts7/ast-node.js.map +1 -1
  193. package/dist/frontend/ts7/ast-node.test.js +60 -1
  194. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  195. package/dist/frontend/type-mapper.js +8 -2
  196. package/dist/frontend/type-mapper.js.map +1 -1
  197. package/dist/index.js +3 -2
  198. package/dist/index.js.map +1 -1
  199. package/dist/ir/analysis.js +4 -1
  200. package/dist/ir/analysis.js.map +1 -1
  201. package/dist/ir/byte-numbers.d.ts +20 -0
  202. package/dist/ir/byte-numbers.js +65 -0
  203. package/dist/ir/byte-numbers.js.map +1 -0
  204. package/dist/ir/byte-numbers.test.d.ts +1 -0
  205. package/dist/ir/byte-numbers.test.js +42 -0
  206. package/dist/ir/byte-numbers.test.js.map +1 -0
  207. package/dist/ir/integer-loops.d.ts +26 -0
  208. package/dist/ir/integer-loops.js +130 -1
  209. package/dist/ir/integer-loops.js.map +1 -1
  210. package/dist/ir/integer-loops.test.d.ts +1 -0
  211. package/dist/ir/integer-loops.test.js +91 -0
  212. package/dist/ir/integer-loops.test.js.map +1 -0
  213. package/dist/ir/integer-ranges.d.ts +8 -6
  214. package/dist/ir/integer-ranges.js +343 -89
  215. package/dist/ir/integer-ranges.js.map +1 -1
  216. package/dist/ir/integer-ranges.test.js +54 -3
  217. package/dist/ir/integer-ranges.test.js.map +1 -1
  218. package/dist/ir/ir.d.ts +29 -22
  219. package/dist/ir/ir.js +59 -14
  220. package/dist/ir/ir.js.map +1 -1
  221. package/dist/ir/ir.test.js +18 -0
  222. package/dist/ir/ir.test.js.map +1 -1
  223. package/dist/ir/validate.js +208 -105
  224. package/dist/ir/validate.js.map +1 -1
  225. package/dist/ir/validate.test.js +247 -0
  226. package/dist/ir/validate.test.js.map +1 -1
  227. package/dist/library/fence-eval.js +9 -2
  228. package/dist/library/fence-eval.js.map +1 -1
  229. package/dist/library/fence-eval.test.d.ts +1 -0
  230. package/dist/library/fence-eval.test.js +21 -0
  231. package/dist/library/fence-eval.test.js.map +1 -0
  232. package/dist/native/runtime-typescript.d.ts +4 -0
  233. package/dist/native/runtime-typescript.js +61 -0
  234. package/dist/native/runtime-typescript.js.map +1 -0
  235. package/dist/native/runtime-typescript.test.d.ts +1 -0
  236. package/dist/native/runtime-typescript.test.js +41 -0
  237. package/dist/native/runtime-typescript.test.js.map +1 -0
  238. package/dist/native/toolchain.js +6 -3
  239. package/dist/native/toolchain.js.map +1 -1
  240. package/dist/native/toolchain.test.js +43 -5
  241. package/dist/native/toolchain.test.js.map +1 -1
  242. package/package.json +20 -20
  243. package/surface-manifest.json +271 -17
@@ -0,0 +1,226 @@
1
+ import { isRefCounted, typeEquals } from "../../ir/ir.js";
2
+ import { everyStmtList } from "../../ir/traverse.js";
3
+ import { analyzeCallLifetimes } from "./call-lifetimes.js";
4
+ import { ReferenceEffects } from "./reference-effects.js";
5
+ /** Kept as the array-analysis entry point; the same edge-preservation
6
+ * proof also governs projections passed to borrowing consumers. */
7
+ export function findArrayPreservingFunctions(functions, unions, reads = new OptionalArrayReads(functions, unions)) {
8
+ return new ReferenceEffects(functions, (call) => reads.get(call) !== null).functions;
9
+ }
10
+ /** Recognize the complete optional-array-read body, not the helper's name. */
11
+ function arrayReadShape(fn, unions) {
12
+ if (fn.returnType.kind !== "union" || fn.async || fn.generator || fn.captures || fn.classCaptures || fn.params.length !== 2 || fn.body.length !== 1 ||
13
+ fn.locals.length !== 2 || fn.locals.some((l) => l.boxed || l.tdz))
14
+ return null;
15
+ const [array, index] = fn.params;
16
+ if (array.type.kind !== "array" || index.type.kind !== "f64")
17
+ return null;
18
+ const element = array.type.elem;
19
+ const arms = unions.get(fn.returnType.unionId)?.arms;
20
+ if (!isRefCounted(element) || element.kind === "union" || !arms || arms.length !== 2)
21
+ return null;
22
+ const presentTag = arms.findIndex((a) => typeEquals(a, element));
23
+ const missingTag = arms.findIndex((a) => a.kind === "undefinedT");
24
+ if (presentTag < 0 || missingTag < 0)
25
+ return null;
26
+ const ret = fn.body[0];
27
+ if (ret.kind !== "return" || ret.value?.kind !== "ternary")
28
+ return null;
29
+ const { cond, then, else_: missing } = ret.value;
30
+ const operand = (value, id) => value.kind === "varRef" && value.localId === id;
31
+ if (cond.kind !== "bin" || cond.op !== "===" || cond.left.kind !== "arrayState" ||
32
+ !operand(cond.left.arr, array.localId) || !operand(cond.left.index, index.localId) ||
33
+ cond.right.kind !== "numLit" || cond.right.value !== 1 ||
34
+ then.kind !== "unionWrap" || then.unionId !== fn.returnType.unionId || then.tag !== presentTag ||
35
+ then.value.kind !== "arrayGet" || !operand(then.value.arr, array.localId) || !operand(then.value.index, index.localId) ||
36
+ missing.kind !== "unionWrap" || missing.unionId !== fn.returnType.unionId || missing.tag !== missingTag ||
37
+ missing.value.kind !== "unitLit" || missing.value.unit !== "undefined")
38
+ return null;
39
+ return { type: fn.returnType, element, presentTag, missingTag };
40
+ }
41
+ /** One index for finalized IR, shared by effect and lifetime consumers.
42
+ * Recognizing a helper once avoids rescanning its body for every read site.
43
+ * Only operands vary between uses; payload ownership is proved separately. */
44
+ export class OptionalArrayReads {
45
+ shapes = new Map();
46
+ constructor(functions, unions) {
47
+ for (const fn of functions.values()) {
48
+ const shape = arrayReadShape(fn, unions);
49
+ if (shape)
50
+ this.shapes.set(fn.name, shape);
51
+ }
52
+ }
53
+ get(call) {
54
+ if (call.kind !== "call" || call.args.length !== 2)
55
+ return null;
56
+ const shape = this.shapes.get(call.callee);
57
+ if (!shape || !typeEquals(shape.type, call.type))
58
+ return null;
59
+ return { ...shape, array: call.args[0], index: call.args[1] };
60
+ }
61
+ }
62
+ export function findLocalArrayReads(fn, functions, unions, arrayPreservingFunctions, lifetimes = analyzeCallLifetimes(functions), reads = new OptionalArrayReads(functions, unions)) {
63
+ const result = new Map();
64
+ if (fn.async || fn.generator)
65
+ return result;
66
+ const locals = new Map(fn.locals.map((l) => [l.id, l]));
67
+ const captures = new Set([...(fn.captures ?? []), ...(fn.classCaptures ?? [])].map((c) => c.localId));
68
+ const params = new Set(fn.params.map((p) => p.localId));
69
+ const borrow = arrayPreservingFunctions.has(fn.name);
70
+ everyStmtList(fn.body, { expr: () => true, stmt: (node) => {
71
+ if (node.kind !== "varDecl" || !node.init)
72
+ return true;
73
+ const local = locals.get(node.localId);
74
+ if (!local || local.mutable || local.boxed || local.tdz || captures.has(local.id) || params.has(local.id))
75
+ return true;
76
+ const read = reads.get(node.init);
77
+ if (read && lifetimes.locals.get(fn.name)?.has(local.id)) {
78
+ if (borrow && read.array.kind === "varRef" && params.has(read.array.localId) && !locals.get(read.array.localId)?.boxed)
79
+ read.borrow = true;
80
+ result.set(local.id, read);
81
+ }
82
+ return true;
83
+ } });
84
+ return result;
85
+ }
86
+ /** An immediate argument needs no heap union when its parameter only
87
+ * projects the box. The payload owns a snapshot through all later arguments
88
+ * and the call, unless the enclosing function preserves its parameter's
89
+ * array edges. The latter proof includes every later argument and callee,
90
+ * so a mutation anywhere keeps the independent payload owner. */
91
+ export function findCallArrayReads(fn, reads, arrayPreservingFunctions, lifetimes) {
92
+ const result = new Map();
93
+ if (fn.async || fn.generator)
94
+ return result;
95
+ const params = new Set(fn.params.map((param) => param.localId));
96
+ const locals = new Map(fn.locals.map((local) => [local.id, local]));
97
+ const borrow = arrayPreservingFunctions.has(fn.name);
98
+ everyStmtList(fn.body, { stmt: () => true, expr: (node) => {
99
+ if (node.kind !== "call")
100
+ return true;
101
+ const parameters = lifetimes.parameters.get(node.callee);
102
+ if (!parameters)
103
+ return true;
104
+ node.args.forEach((arg, index) => {
105
+ if (!parameters.has(index))
106
+ return;
107
+ const read = reads.get(arg);
108
+ if (!read)
109
+ return;
110
+ if (borrow && read.array.kind === "varRef" && params.has(read.array.localId) && !locals.get(read.array.localId)?.boxed)
111
+ read.borrow = true;
112
+ result.set(arg, read);
113
+ });
114
+ return true;
115
+ } });
116
+ return result;
117
+ }
118
+ /** Call-scoped owners are released by the existing argument frame on both
119
+ * normal and exceptional exits. Each use gets a distinct stack box: nested
120
+ * calls and repeated operands must never overwrite an earlier snapshot. */
121
+ export function emitCallArrayRead(host, read) {
122
+ const slot = host.B.slot();
123
+ host.B.entryAllocas.push(`${slot} = alloca ptr`);
124
+ // Snapshot arguments already cross a runtime ownership boundary. Keep
125
+ // their lookup compact instead of duplicating the dense fast path at
126
+ // every call site; proven borrowed reads still expose that path to LLVM.
127
+ const owner = emitLocalArrayRead(host, read, slot, read.borrow === true);
128
+ if (owner)
129
+ host.ownSlot(owner.slot, owner.type);
130
+ const value = host.B.tmp();
131
+ host.B.line(`${value} = load ptr, ptr ${slot}`);
132
+ return { name: value, type: read.type };
133
+ }
134
+ /** A private stack box keeps the ordinary tag/projection ABI. Its payload
135
+ * either borrows from an array parameter proven to keep it alive, or owns
136
+ * one reference released on every lexical exit, including exceptions. The
137
+ * box never reaches runtime code; LLVM can scalar-replace its slots. */
138
+ export function emitLocalArrayRead(host, read, localSlot, inline = true) {
139
+ const B = host.B;
140
+ const array = host.emitStableReceiver(read.array, [read.index]);
141
+ const integerIndex = inline ? host.emitIntegerLoopIndex(read.index) : null;
142
+ const index = host.emitExpr(read.index);
143
+ const box = B.slot(), payload = B.slot(), tag = B.slot();
144
+ B.entryAllocas.push(`${box} = alloca %ScrUnion`);
145
+ B.entryAllocas.push(`${payload} = getelementptr inbounds %ScrUnion, ptr ${box}, i32 0, i32 5`);
146
+ B.entryAllocas.push(`${tag} = getelementptr inbounds %ScrUnion, ptr ${box}, i32 0, i32 1`);
147
+ const range = B.newLabel("local.array.range"), dense = B.newLabel("local.array.dense"), slow = B.newLabel("local.array.slow");
148
+ const no = B.newLabel("local.array.missing"), join = B.newLabel("local.array.join");
149
+ if (inline) {
150
+ // The dense path uses the existing ScrArr ABI. Sparse indices and
151
+ // noncanonical numeric properties retain the runtime lookup semantics.
152
+ const capPtr = B.tmp(), cap = B.tmp(), capNumber = B.tmp(), nonnegative = B.tmp(), belowCap = B.tmp(), inRange = B.tmp();
153
+ B.line(`${capPtr} = getelementptr inbounds %ScrArr, ptr ${array.name}, i32 0, i32 2`);
154
+ host.markMemoryPointer(capPtr, "array:header");
155
+ B.line(`${cap} = load ${host.sizeType}, ptr ${capPtr}${host.fieldAliasAttachment(capPtr)}`);
156
+ if (integerIndex)
157
+ B.line(`${inRange} = icmp ult ${host.sizeType} ${integerIndex}, ${cap}`);
158
+ else {
159
+ B.line(`${capNumber} = uitofp ${host.sizeType} ${cap} to double`);
160
+ B.line(`${nonnegative} = fcmp oge double ${index.name}, 0.0`);
161
+ B.line(`${belowCap} = fcmp olt double ${index.name}, ${capNumber}`);
162
+ B.line(`${inRange} = and i1 ${nonnegative}, ${belowCap}`);
163
+ }
164
+ B.condBr(inRange, range, slow);
165
+ B.startBlock(range);
166
+ const offset = integerIndex ?? B.tmp(), roundTrip = B.tmp(), integral = B.tmp();
167
+ if (integerIndex)
168
+ B.br(dense);
169
+ else {
170
+ B.line(`${offset} = fptoui double ${index.name} to ${host.sizeType}`);
171
+ B.line(`${roundTrip} = uitofp ${host.sizeType} ${offset} to double`);
172
+ B.line(`${integral} = fcmp oeq double ${index.name}, ${roundTrip}`);
173
+ B.condBr(integral, dense, slow);
174
+ }
175
+ B.startBlock(dense);
176
+ const lenPtr = B.tmp(), len = B.tmp(), belowLen = B.tmp();
177
+ B.line(`${lenPtr} = getelementptr inbounds %ScrArr, ptr ${array.name}, i32 0, i32 1`);
178
+ host.markMemoryPointer(lenPtr, "array:header");
179
+ B.line(`${len} = load ${host.sizeType}, ptr ${lenPtr}${host.fieldAliasAttachment(lenPtr)}`);
180
+ B.line(`${belowLen} = icmp ult ${host.sizeType} ${offset}, ${len}`);
181
+ const stateLabel = B.newLabel("local.array.state"), valueLabel = B.newLabel("local.array.value");
182
+ B.condBr(belowLen, stateLabel, no);
183
+ B.startBlock(stateLabel);
184
+ const statesPtr = B.tmp(), states = B.tmp(), statePtr = B.tmp(), denseState = B.tmp(), densePresent = B.tmp();
185
+ B.line(`${statesPtr} = getelementptr inbounds %ScrArr, ptr ${array.name}, i32 0, i32 8`);
186
+ host.markMemoryPointer(statesPtr, "array:header");
187
+ B.line(`${states} = load ptr, ptr ${statesPtr}${host.fieldAliasAttachment(statesPtr)}`);
188
+ B.line(`${statePtr} = getelementptr inbounds i8, ptr ${states}, ${host.sizeType} ${offset}`);
189
+ host.markMemoryPointer(statePtr, "array:present");
190
+ B.line(`${denseState} = load i8, ptr ${statePtr}${host.fieldAliasAttachment(statePtr)}`);
191
+ B.line(`${densePresent} = icmp eq i8 ${denseState}, 1`);
192
+ B.condBr(densePresent, valueLabel, no);
193
+ B.startBlock(valueLabel);
194
+ const dataPtr = B.tmp(), data = B.tmp(), valuePtr = B.tmp(), raw = B.tmp();
195
+ B.line(`${dataPtr} = getelementptr inbounds %ScrArr, ptr ${array.name}, i32 0, i32 7`);
196
+ host.markMemoryPointer(dataPtr, "array:header");
197
+ B.line(`${data} = load ptr, ptr ${dataPtr}${host.fieldAliasAttachment(dataPtr)}`);
198
+ B.line(`${valuePtr} = getelementptr inbounds i64, ptr ${data}, ${host.sizeType} ${offset}`);
199
+ host.markMemoryPointer(valuePtr, "array:elements");
200
+ B.line(`${raw} = load ptr, ptr ${valuePtr}${host.fieldAliasAttachment(valuePtr)}`);
201
+ B.line(`store ptr ${read.borrow ? raw : host.retainValue(raw, read.element)}, ptr ${payload}`);
202
+ B.line(`store i32 ${read.presentTag}, ptr ${tag}`);
203
+ B.br(join);
204
+ }
205
+ else
206
+ B.br(slow);
207
+ B.startBlock(slow);
208
+ const value = B.tmp(), present = B.tmp();
209
+ host.declare("declare ptr @scr_arr_peek_ref(ptr, double) memory(read)");
210
+ B.line(`${value} = call ptr @scr_arr_peek_ref(ptr ${array.name}, double ${index.name})`);
211
+ B.line(`${present} = icmp ne ptr ${value}, null`);
212
+ const slowValue = B.newLabel("local.array.slow.value");
213
+ B.condBr(present, slowValue, no);
214
+ B.startBlock(slowValue);
215
+ B.line(`store ptr ${read.borrow ? value : host.retainValue(value, read.element)}, ptr ${payload}`);
216
+ B.line(`store i32 ${read.presentTag}, ptr ${tag}`);
217
+ B.br(join);
218
+ B.startBlock(no);
219
+ B.line(`store ptr null, ptr ${payload}`);
220
+ B.line(`store i32 ${read.missingTag}, ptr ${tag}`);
221
+ B.br(join);
222
+ B.startBlock(join);
223
+ B.line(`store ptr ${box}, ptr ${localSlot}`);
224
+ return read.borrow ? null : { slot: payload, type: read.element };
225
+ }
226
+ //# sourceMappingURL=local-array-reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-array-reads.js","sourceRoot":"","sources":["../../../src/backend/llvm/local-array-reads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};