@scriptc/compiler 0.2.6 → 0.2.7

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 (368) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +5 -18
  2. package/dist/backend/cycle-analysis.d.ts +21 -9
  3. package/dist/backend/cycle-analysis.js +139 -67
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-analysis.test.js +283 -3
  6. package/dist/backend/cycle-analysis.test.js.map +1 -1
  7. package/dist/backend/cycle-mutability.d.ts +39 -0
  8. package/dist/backend/cycle-mutability.js +205 -0
  9. package/dist/backend/cycle-mutability.js.map +1 -0
  10. package/dist/backend/link-plan-core.d.ts +2 -1
  11. package/dist/backend/link-plan-core.js +15 -3
  12. package/dist/backend/link-plan-core.js.map +1 -1
  13. package/dist/backend/link-plan.d.ts +2 -1
  14. package/dist/backend/link-plan.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +40 -0
  16. package/dist/backend/llvm/alloc.js +205 -0
  17. package/dist/backend/llvm/alloc.js.map +1 -0
  18. package/dist/backend/llvm/alloc.test.d.ts +1 -0
  19. package/dist/backend/llvm/alloc.test.js +102 -0
  20. package/dist/backend/llvm/alloc.test.js.map +1 -0
  21. package/dist/backend/llvm/call-lifetimes.d.ts +15 -3
  22. package/dist/backend/llvm/call-lifetimes.js +42 -18
  23. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  24. package/dist/backend/llvm/call-lifetimes.test.js +170 -0
  25. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  26. package/dist/backend/llvm/classes.d.ts +4 -1
  27. package/dist/backend/llvm/classes.js +35 -32
  28. package/dist/backend/llvm/classes.js.map +1 -1
  29. package/dist/backend/llvm/classes.test.js +36 -3
  30. package/dist/backend/llvm/classes.test.js.map +1 -1
  31. package/dist/backend/llvm/common.d.ts +13 -0
  32. package/dist/backend/llvm/common.js +30 -0
  33. package/dist/backend/llvm/common.js.map +1 -1
  34. package/dist/backend/llvm/constant-callbacks.d.ts +19 -3
  35. package/dist/backend/llvm/constant-callbacks.js +289 -52
  36. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  37. package/dist/backend/llvm/constant-callbacks.test.js +140 -3
  38. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  39. package/dist/backend/llvm/dense-array-access.d.ts +29 -0
  40. package/dist/backend/llvm/dense-array-access.js +335 -0
  41. package/dist/backend/llvm/dense-array-access.js.map +1 -0
  42. package/dist/backend/llvm/dense-array-access.test.d.ts +1 -0
  43. package/dist/backend/llvm/dense-array-access.test.js +149 -0
  44. package/dist/backend/llvm/dense-array-access.test.js.map +1 -0
  45. package/dist/backend/llvm/dyn.d.ts +34 -0
  46. package/dist/backend/llvm/dyn.js +189 -1
  47. package/dist/backend/llvm/dyn.js.map +1 -1
  48. package/dist/backend/llvm/emitter.d.ts +124 -4
  49. package/dist/backend/llvm/emitter.js +623 -105
  50. package/dist/backend/llvm/emitter.js.map +1 -1
  51. package/dist/backend/llvm/emitter.test.js +68 -6
  52. package/dist/backend/llvm/emitter.test.js.map +1 -1
  53. package/dist/backend/llvm/expr-async.js +58 -4
  54. package/dist/backend/llvm/expr-async.js.map +1 -1
  55. package/dist/backend/llvm/expr-async.test.d.ts +1 -0
  56. package/dist/backend/llvm/expr-async.test.js +62 -0
  57. package/dist/backend/llvm/expr-async.test.js.map +1 -0
  58. package/dist/backend/llvm/expr-calls.js +64 -6
  59. package/dist/backend/llvm/expr-calls.js.map +1 -1
  60. package/dist/backend/llvm/expr-containers.js +16 -5
  61. package/dist/backend/llvm/expr-containers.js.map +1 -1
  62. package/dist/backend/llvm/expr-control.js +92 -2
  63. package/dist/backend/llvm/expr-control.js.map +1 -1
  64. package/dist/backend/llvm/expr-dispatch.js +2 -0
  65. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  66. package/dist/backend/llvm/expr-dynamic.js +174 -25
  67. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  68. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  69. package/dist/backend/llvm/expr-primitives.js +52 -24
  70. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  71. package/dist/backend/llvm/expr-primitives.test.js +1 -1
  72. package/dist/backend/llvm/expr-records.js +3 -3
  73. package/dist/backend/llvm/expr-records.js.map +1 -1
  74. package/dist/backend/llvm/expr-stream-bridges.js +59 -2
  75. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  76. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  77. package/dist/backend/llvm/integer-remainder.d.ts +11 -0
  78. package/dist/backend/llvm/integer-remainder.js +91 -0
  79. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  80. package/dist/backend/llvm/layouts.d.ts +2 -1
  81. package/dist/backend/llvm/layouts.js +3 -2
  82. package/dist/backend/llvm/layouts.js.map +1 -1
  83. package/dist/backend/llvm/lazy-captures.d.ts +16 -0
  84. package/dist/backend/llvm/lazy-captures.js +96 -0
  85. package/dist/backend/llvm/lazy-captures.js.map +1 -0
  86. package/dist/backend/llvm/lazy-captures.test.d.ts +1 -0
  87. package/dist/backend/llvm/lazy-captures.test.js +78 -0
  88. package/dist/backend/llvm/lazy-captures.test.js.map +1 -0
  89. package/dist/backend/llvm/lib-filesystem.js +3 -4
  90. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  91. package/dist/backend/llvm/local-array-reads.d.ts +5 -1
  92. package/dist/backend/llvm/local-array-reads.js +78 -17
  93. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  94. package/dist/backend/llvm/local-array-reads.test.js +78 -1
  95. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  96. package/dist/backend/llvm/local-union-storage.d.ts +5 -1
  97. package/dist/backend/llvm/local-union-storage.js +48 -6
  98. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  99. package/dist/backend/llvm/local-union-storage.test.js +91 -4
  100. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  101. package/dist/backend/llvm/map-read-lifetimes.test.js +1 -1
  102. package/dist/backend/llvm/nullable-fields.d.ts +28 -0
  103. package/dist/backend/llvm/nullable-fields.js +45 -0
  104. package/dist/backend/llvm/nullable-fields.js.map +1 -0
  105. package/dist/backend/llvm/nullable-fields.test.d.ts +1 -0
  106. package/dist/backend/llvm/nullable-fields.test.js +48 -0
  107. package/dist/backend/llvm/nullable-fields.test.js.map +1 -0
  108. package/dist/backend/llvm/serialized-ir-emission.test.d.ts +1 -0
  109. package/dist/backend/llvm/serialized-ir-emission.test.js +52 -0
  110. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -0
  111. package/dist/backend/llvm/shapes.d.ts +69 -2
  112. package/dist/backend/llvm/shapes.js +259 -27
  113. package/dist/backend/llvm/shapes.js.map +1 -1
  114. package/dist/backend/llvm/shapes.test.js +114 -5
  115. package/dist/backend/llvm/shapes.test.js.map +1 -1
  116. package/dist/backend/llvm/stack-callbacks.js +2 -3
  117. package/dist/backend/llvm/stack-callbacks.js.map +1 -1
  118. package/dist/backend/llvm/stack-captures.d.ts +3 -1
  119. package/dist/backend/llvm/stack-captures.js +5 -3
  120. package/dist/backend/llvm/stack-captures.js.map +1 -1
  121. package/dist/backend/llvm/stack-unions.test.js +38 -1
  122. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  123. package/dist/backend/llvm/string-construction.test.js +1 -1
  124. package/dist/backend/llvm/string-key-hash.d.ts +8 -0
  125. package/dist/backend/llvm/string-key-hash.js +59 -0
  126. package/dist/backend/llvm/string-key-hash.js.map +1 -0
  127. package/dist/backend/llvm/string-key-hash.test.d.ts +1 -0
  128. package/dist/backend/llvm/string-key-hash.test.js +34 -0
  129. package/dist/backend/llvm/string-key-hash.test.js.map +1 -0
  130. package/dist/backend/llvm/string-lifetimes.test.js +41 -4
  131. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  132. package/dist/backend/llvm/switch-dispatch.js +1 -1
  133. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  134. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  135. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
  136. package/dist/backend/may-throw.js +3 -0
  137. package/dist/backend/may-throw.js.map +1 -1
  138. package/dist/backend/may-throw.test.js +1 -1
  139. package/dist/backend/native/cache-warm.d.ts +2 -1
  140. package/dist/backend/native/cache-warm.js.map +1 -1
  141. package/dist/backend/native/contracts.d.ts +3 -2
  142. package/dist/backend/native/contracts.js.map +1 -1
  143. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  144. package/dist/backend/native/runtime-inputs.js +1 -0
  145. package/dist/backend/native/runtime-inputs.js.map +1 -1
  146. package/dist/backend/native-codegen-core.d.ts +2 -1
  147. package/dist/backend/native-codegen-core.js.map +1 -1
  148. package/dist/backend/native-codegen.d.ts +5 -0
  149. package/dist/backend/native-codegen.js +4 -0
  150. package/dist/backend/native-codegen.js.map +1 -1
  151. package/dist/backend/native-codegen.test.js +23 -0
  152. package/dist/backend/native-codegen.test.js.map +1 -1
  153. package/dist/backend/native-link-info-core.d.ts +3 -2
  154. package/dist/backend/native-link-info-core.js.map +1 -1
  155. package/dist/backend/native-link-info.d.ts +2 -1
  156. package/dist/backend/native-link-info.js.map +1 -1
  157. package/dist/backend/native-link-info.test.js +2 -2
  158. package/dist/backend/native-link-info.test.js.map +1 -1
  159. package/dist/backend/native-tools.d.ts +3 -1
  160. package/dist/backend/native-tools.js +0 -1
  161. package/dist/backend/native-tools.js.map +1 -1
  162. package/dist/backend/optimization.d.ts +25 -0
  163. package/dist/backend/optimization.js +21 -0
  164. package/dist/backend/optimization.js.map +1 -0
  165. package/dist/backend/optimization.test.d.ts +1 -0
  166. package/dist/backend/optimization.test.js +24 -0
  167. package/dist/backend/optimization.test.js.map +1 -0
  168. package/dist/backend/runtime-abi.d.ts +2 -2
  169. package/dist/backend/runtime-abi.js +2 -2
  170. package/dist/backend/runtime-pack-core.d.ts +15 -4
  171. package/dist/backend/runtime-pack-core.js +23 -12
  172. package/dist/backend/runtime-pack-core.js.map +1 -1
  173. package/dist/backend/runtime-pack-native.d.ts +7 -3
  174. package/dist/backend/runtime-pack-native.js +0 -3
  175. package/dist/backend/runtime-pack-native.js.map +1 -1
  176. package/dist/backend/runtime-pack-targets.test.js +1 -1
  177. package/dist/backend/runtime-pack.d.ts +20 -2
  178. package/dist/backend/runtime-pack.js +23 -0
  179. package/dist/backend/runtime-pack.js.map +1 -1
  180. package/dist/backend/runtime-pack.test.js +115 -2
  181. package/dist/backend/runtime-pack.test.js.map +1 -1
  182. package/dist/backend/target-diagnostics.test.js +1 -1
  183. package/dist/backend/targets.d.ts +2 -1
  184. package/dist/backend/targets.js +1 -1
  185. package/dist/backend/targets.js.map +1 -1
  186. package/dist/cli/command.js +5 -4
  187. package/dist/cli/command.js.map +1 -1
  188. package/dist/cli/host.d.ts +2 -1
  189. package/dist/cli/usage.d.ts +1 -1
  190. package/dist/cli/usage.js +5 -2
  191. package/dist/cli/usage.js.map +1 -1
  192. package/dist/compile-types.d.ts +5 -2
  193. package/dist/diagnostics/diagnostic.js +10 -8
  194. package/dist/diagnostics/diagnostic.js.map +1 -1
  195. package/dist/executable/executable-cache.d.ts +2 -2
  196. package/dist/executable/executable-cache.js +7 -4
  197. package/dist/executable/executable-cache.js.map +1 -1
  198. package/dist/executable/executable-cache.test.js +20 -0
  199. package/dist/executable/executable-cache.test.js.map +1 -1
  200. package/dist/frontend/lowering/abstract-equality.js +5 -49
  201. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  202. package/dist/frontend/lowering/array-values.d.ts +23 -0
  203. package/dist/frontend/lowering/array-values.js +129 -0
  204. package/dist/frontend/lowering/array-values.js.map +1 -1
  205. package/dist/frontend/lowering/builtins/errors.js +17 -2
  206. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  207. package/dist/frontend/lowering/builtins/process.d.ts +6 -17
  208. package/dist/frontend/lowering/builtins/process.js +56 -29
  209. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  210. package/dist/frontend/lowering/caught-value-dispatch.d.ts +11 -0
  211. package/dist/frontend/lowering/caught-value-dispatch.js +87 -0
  212. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -0
  213. package/dist/frontend/lowering/class-assertions.d.ts +4 -0
  214. package/dist/frontend/lowering/class-assertions.js +12 -4
  215. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  216. package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
  217. package/dist/frontend/lowering/class-callbacks.js +18 -5
  218. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  219. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +1 -0
  220. package/dist/frontend/lowering/class-dynamic-dispatch.js +4 -1
  221. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  222. package/dist/frontend/lowering/class-method-mutations.d.ts +5 -0
  223. package/dist/frontend/lowering/class-method-mutations.js +472 -0
  224. package/dist/frontend/lowering/class-method-mutations.js.map +1 -0
  225. package/dist/frontend/lowering/class-method-values.js +25 -5
  226. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  227. package/dist/frontend/lowering/class-prototypes.js +8 -2
  228. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  229. package/dist/frontend/lowering/class-unions.d.ts +16 -0
  230. package/dist/frontend/lowering/class-unions.js +127 -0
  231. package/dist/frontend/lowering/class-unions.js.map +1 -0
  232. package/dist/frontend/lowering/coercions/builders.js +8 -1
  233. package/dist/frontend/lowering/coercions/builders.js.map +1 -1
  234. package/dist/frontend/lowering/coercions/function-adapters.js +2 -0
  235. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  236. package/dist/frontend/lowering/coercions/identity.d.ts +7 -0
  237. package/dist/frontend/lowering/coercions/identity.js +26 -0
  238. package/dist/frontend/lowering/coercions/identity.js.map +1 -0
  239. package/dist/frontend/lowering/coercions/structural.js +9 -6
  240. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  241. package/dist/frontend/lowering/collection-narrowing.d.ts +6 -0
  242. package/dist/frontend/lowering/collection-narrowing.js +31 -0
  243. package/dist/frontend/lowering/collection-narrowing.js.map +1 -0
  244. package/dist/frontend/lowering/containers/array-callback-call.d.ts +7 -0
  245. package/dist/frontend/lowering/containers/array-callback-call.js +52 -0
  246. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -0
  247. package/dist/frontend/lowering/containers/array-callbacks.d.ts +1 -1
  248. package/dist/frontend/lowering/containers/array-callbacks.js +363 -49
  249. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  250. package/dist/frontend/lowering/containers/array-concat.d.ts +7 -0
  251. package/dist/frontend/lowering/containers/array-concat.js +130 -0
  252. package/dist/frontend/lowering/containers/array-concat.js.map +1 -0
  253. package/dist/frontend/lowering/containers/array-construction.d.ts +2 -0
  254. package/dist/frontend/lowering/containers/array-construction.js +95 -3
  255. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  256. package/dist/frontend/lowering/containers/array-methods.d.ts +1 -11
  257. package/dist/frontend/lowering/containers/array-methods.js +43 -132
  258. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  259. package/dist/frontend/lowering/containers/collection-methods.js +10 -1
  260. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  261. package/dist/frontend/lowering/containers/indexed-objects.js +56 -70
  262. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  263. package/dist/frontend/lowering/cycle-initialization.d.ts +41 -0
  264. package/dist/frontend/lowering/cycle-initialization.js +277 -0
  265. package/dist/frontend/lowering/cycle-initialization.js.map +1 -0
  266. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -0
  267. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  268. package/dist/frontend/lowering/expressions/object-literals.js +138 -32
  269. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  270. package/dist/frontend/lowering/expressions/union-field-write.d.ts +4 -4
  271. package/dist/frontend/lowering/expressions/union-field-write.js +54 -44
  272. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
  273. package/dist/frontend/lowering/iterator-adapters.d.ts +20 -0
  274. package/dist/frontend/lowering/iterator-adapters.js +605 -0
  275. package/dist/frontend/lowering/iterator-adapters.js.map +1 -0
  276. package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
  277. package/dist/frontend/lowering/lower-array-sort.js +44 -5
  278. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  279. package/dist/frontend/lowering/lower-array-sort.test.d.ts +1 -0
  280. package/dist/frontend/lowering/lower-array-sort.test.js +31 -0
  281. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -0
  282. package/dist/frontend/lowering/lower-assert.js +7 -0
  283. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  284. package/dist/frontend/lowering/lower-builtin-values.js +1 -0
  285. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  286. package/dist/frontend/lowering/lower-calls.d.ts +3 -3
  287. package/dist/frontend/lowering/lower-calls.js +162 -121
  288. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  289. package/dist/frontend/lowering/lower-classes.d.ts +2 -0
  290. package/dist/frontend/lowering/lower-classes.js +45 -43
  291. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  292. package/dist/frontend/lowering/lower-exprs.d.ts +9 -2
  293. package/dist/frontend/lowering/lower-exprs.js +390 -157
  294. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  295. package/dist/frontend/lowering/lower-functions.js +32 -19
  296. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  297. package/dist/frontend/lowering/lower-inspect.js +26 -2
  298. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  299. package/dist/frontend/lowering/lower-modules.js +10 -2
  300. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  301. package/dist/frontend/lowering/lower-stmts.js +46 -58
  302. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  303. package/dist/frontend/lowering/lowerer.d.ts +37 -0
  304. package/dist/frontend/lowering/lowerer.js +283 -18
  305. package/dist/frontend/lowering/lowerer.js.map +1 -1
  306. package/dist/frontend/lowering/native-ffi.js +3 -1
  307. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  308. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +15 -0
  309. package/dist/frontend/lowering/runtime-optional-provenance.js +40 -0
  310. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -0
  311. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  312. package/dist/frontend/lowering/strict-equality.d.ts +9 -0
  313. package/dist/frontend/lowering/strict-equality.js +116 -0
  314. package/dist/frontend/lowering/strict-equality.js.map +1 -0
  315. package/dist/frontend/lowering/surfaces.js +3 -0
  316. package/dist/frontend/lowering/surfaces.js.map +1 -1
  317. package/dist/frontend/lowering/union-comparison.d.ts +5 -0
  318. package/dist/frontend/lowering/union-comparison.js +47 -0
  319. package/dist/frontend/lowering/union-comparison.js.map +1 -0
  320. package/dist/frontend/program.d.ts +38 -2
  321. package/dist/frontend/program.js +440 -59
  322. package/dist/frontend/program.js.map +1 -1
  323. package/dist/frontend/program.test.js +59 -6
  324. package/dist/frontend/program.test.js.map +1 -1
  325. package/dist/frontend/type-mapper.d.ts +1 -1
  326. package/dist/frontend/type-mapper.js +89 -14
  327. package/dist/frontend/type-mapper.js.map +1 -1
  328. package/dist/frontend/type-mapper.test.js +15 -3
  329. package/dist/frontend/type-mapper.test.js.map +1 -1
  330. package/dist/index.js +25 -9
  331. package/dist/index.js.map +1 -1
  332. package/dist/ir/analysis.d.ts +3 -1
  333. package/dist/ir/analysis.js +4 -0
  334. package/dist/ir/analysis.js.map +1 -1
  335. package/dist/ir/builtin-signatures.js +2 -3
  336. package/dist/ir/builtin-signatures.js.map +1 -1
  337. package/dist/ir/constant-tables.test.js +1 -1
  338. package/dist/ir/initializer-bindings.test.js +1 -1
  339. package/dist/ir/ir.d.ts +78 -15
  340. package/dist/ir/ir.js +20 -6
  341. package/dist/ir/ir.js.map +1 -1
  342. package/dist/ir/scalar-records.test.js +1 -1
  343. package/dist/ir/serialize.d.ts +1 -1
  344. package/dist/ir/serialize.js +3 -3
  345. package/dist/ir/serialize.js.map +1 -1
  346. package/dist/ir/traverse.js +8 -0
  347. package/dist/ir/traverse.js.map +1 -1
  348. package/dist/ir/validate.js +118 -20
  349. package/dist/ir/validate.js.map +1 -1
  350. package/dist/ir/validate.test.js +269 -8
  351. package/dist/ir/validate.test.js.map +1 -1
  352. package/dist/library/fence-eval.test.js +1 -1
  353. package/dist/library/int-infer.test.js +4 -4
  354. package/dist/library/library-cache.test.js +5 -5
  355. package/dist/library/library-profile.d.ts +2 -1
  356. package/dist/library/library-profile.js +4 -3
  357. package/dist/library/library-profile.js.map +1 -1
  358. package/dist/native/compiler.js.map +1 -1
  359. package/dist/native/compiler.test.js +2 -2
  360. package/dist/native/library.d.ts +2 -1
  361. package/dist/native/library.js.map +1 -1
  362. package/dist/native/prepare.js +27 -3
  363. package/dist/native/prepare.js.map +1 -1
  364. package/dist/native/sanitizer.d.ts +3 -2
  365. package/dist/native/sanitizer.js +3 -13
  366. package/dist/native/sanitizer.js.map +1 -1
  367. package/package.json +20 -20
  368. package/surface-manifest.json +8 -2
@@ -10,7 +10,7 @@ import { InternalCompilerError } from "../../errors.js";
10
10
  * explicit resource management, and blocked-binding poisoning. */
11
11
  import * as ts from "../ts7/adapter.js";
12
12
  import { bindingSource } from "../binding-source.js";
13
- import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, } from "./array-values.js";
13
+ import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, lowerSafeIndexRead, } from "./array-values.js";
14
14
  import { lowerForAwaitGenerator, lowerForOfGenerator, lowerYieldStarStatement, } from "./lower-generators.js";
15
15
  import { lowerForAwaitBuiltin } from "./lower-async-iteration.js";
16
16
  import { BOOL, BYTES_U8, CAUGHT, DYN, F64, JSVAL, STRING, UNDEFINED_T, VOID, arrayOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, typeEquals, } from "../../ir/ir.js";
@@ -23,7 +23,6 @@ import { isProvenanceSourceFile } from "../provenance-registry.js";
23
23
  import { ambientUndefVarRootOf, lowerImportEquals, nsUndefRead, nsWritableTarget, trapDeclRootOf, } from "./lower-namespaces.js";
24
24
  import { expandoWritableTarget, lowerExpandoAssignStmt } from "./lower-expando.js";
25
25
  import { lowerForOfArrayIter, lowerForOfMap, lowerForOfSearchParams, lowerForOfSet, } from "./containers/for-of.js";
26
- import { lowerSafeIndexRead } from "./containers/array-methods.js";
27
26
  import { objectIterOverIndexShape } from "./containers/indexed-objects.js";
28
27
  import { strCharsCall } from "./containers/array-construction.js";
29
28
  import { bindingContextualGenericFnNodeOf, bindingGenericFnAliasInfoOf, bindingGenericFnInfoOf, bindingGenericFnNodeOf, implicitLocalFnInfoOf, implicitLocalFnNodeOf, implicitMethodCallInfersReturn, } from "./generic-functions.js";
@@ -37,7 +36,7 @@ import { classStaticDataFor } from "./class-static-data.js";
37
36
  import { objectFactorySignature } from "./object-factory-new.js";
38
37
  import { isClassCallback, lowerClassCallbackAssign } from "./class-callbacks.js";
39
38
  import { classForInHasKey, classPropertiesHelper } from "./class-dynamic-dispatch.js";
40
- import { genericIfaceBindingKeepsClass, staticFieldWriteTarget } from "./lower-classes.js";
39
+ import { genericIfaceBindingKeepsClass } from "./lower-classes.js";
41
40
  import { lowerStreamUnderscoreAssign, streamClassAliasDecl } from "./lower-stream.js";
42
41
  import { lowerHttpResPropertyAssignment, lowerHttpServerTimeoutAssignment, lowerServerCloseOverrideAssignment, } from "./lower-server.js";
43
42
  import { lowerUrlAssignment } from "./builtins/url.js";
@@ -45,7 +44,7 @@ import { isNativeFfiRequire, builtinMemberRequireDecl, builtinNamespaceDestructu
45
44
  import { lowerNodeModuleCall } from "./builtins/module-resolution.js";
46
45
  import { registerBuiltinCallableAlias } from "./builtins/callable-aliases.js";
47
46
  import { lowerEnumDeclaration } from "./lower-enums.js";
48
- import { abstractPropertyDeclOf, aliasTypeofNarrows, isMatchSliceType, lowerAbsenceProbe, lowerCompoundValueToTarget, lowerElementCompound, lowerIncDec, lowerGroupsProjection, matchResultNamedGroupsOf, runtimeOptionalGuardIds, runtimeOptionalTrueIds, symbolFieldInfo, withRuntimeOptionalNarrowed, } from "./lower-exprs.js";
47
+ import { abstractPropertyDeclOf, aliasTypeofNarrows, isMatchSliceType, lowerAbsenceProbe, lowerCompoundValueToTarget, lowerElementCompound, lowerIncDec, lowerIncDecTarget, lowerGroupsProjection, matchResultNamedGroupsOf, runtimeOptionalGuardIds, runtimeOptionalTrueIds, symbolFieldInfo, withRuntimeOptionalNarrowed, } from "./lower-exprs.js";
49
48
  import { globalSymbolKey } from "./expressions/global-symbols.js";
50
49
  import { lowerShortCircuitAssignment } from "./expressions/nullish-assignment.js";
51
50
  import { lowerEnvironmentKey, lowerNativeFunctionAssignment } from "./lower-exprs.js";
@@ -3042,14 +3041,14 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
3042
3041
  kind: "recordLit",
3043
3042
  fields: rem.map((f) => ({
3044
3043
  name: f.name,
3045
- value: {
3044
+ value: lowerer.presenceKeepingCopy(srcRef(), srcType.shapeId, f.name, {
3046
3045
  kind: "recordGet",
3047
3046
  obj: srcRef(),
3048
3047
  shapeId: srcType.shapeId,
3049
3048
  field: f.name,
3050
3049
  type: f.type,
3051
3050
  loc,
3052
- },
3051
+ }, loc),
3053
3052
  })),
3054
3053
  type: {
3055
3054
  kind: "record",
@@ -3083,7 +3082,10 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
3083
3082
  type: srcField.type,
3084
3083
  loc,
3085
3084
  };
3086
- return { name: f.name, value: lowerer.coerceInto(el, read, f.type) };
3085
+ return {
3086
+ name: f.name,
3087
+ value: lowerer.presenceKeepingCopy(srcRef(), srcType.shapeId, srcField.name, lowerer.coerceInto(el, read, f.type), loc),
3088
+ };
3087
3089
  });
3088
3090
  return { kind: "recordLit", fields, type: restT, loc };
3089
3091
  }
@@ -3614,10 +3616,14 @@ export function bindPatternTarget(lowerer, name, value, isLet, out, allowDynObje
3614
3616
  // through later locals, templates, operators, and narrowing instead
3615
3617
  // of being extracted with a checked arm read.
3616
3618
  let runtimeOptional = false;
3619
+ // The optional-read pre-pass may already have widened the binding to
3620
+ // that union; its reads still need the runtime-optional treatment.
3617
3621
  if (!dynStays &&
3618
3622
  value.type.kind === "union" &&
3619
3623
  lowerer.armTag(value.type.unionId, UNDEFINED_T) >= 0 &&
3620
- typeEquals(lowerer.stripUndefinedArm(value.type), type)) {
3624
+ (typeEquals(lowerer.stripUndefinedArm(value.type), type) ||
3625
+ (typeEquals(value.type, type) &&
3626
+ typeEquals(lowerer.stripUndefinedArm(value.type), lowerer.irTypeOf(name))))) {
3621
3627
  type = value.type;
3622
3628
  runtimeOptional = true;
3623
3629
  }
@@ -4020,10 +4026,13 @@ export function lowerVarDecl(lowerer, decl, isLet) {
4020
4026
  g.type = DYN;
4021
4027
  g.type = inferredOptionalRecordType(lowerer, decl, g.type, raw.type);
4022
4028
  const arithmetic = raw.type.kind === "union" ? lowerer.unions.get(raw.type.unionId)?.arms : undefined;
4023
- if (g.type.kind === "string" &&
4024
- arithmetic?.length === 2 &&
4025
- arithmetic.some((a) => a.kind === "f64") &&
4026
- arithmetic.some((a) => a.kind === "string")) {
4029
+ if (arithmetic?.length === 2 &&
4030
+ arithmetic.every((a) => a.kind === "f64" || a.kind === "string" || a.kind === "bool") &&
4031
+ (lowerer.runtimeOptionalArithmeticTypes.has(decl.initializer) ||
4032
+ lowerer.runtimeOptionalBindingType(decl.name)?.kind === "union" ||
4033
+ (g.type.kind === "string" &&
4034
+ arithmetic.some((a) => a.kind === "f64") &&
4035
+ arithmetic.some((a) => a.kind === "string")))) {
4027
4036
  g.type = raw.type;
4028
4037
  lowerer.runtimeOptionalArithmeticGlobals.add(g);
4029
4038
  }
@@ -4394,9 +4403,13 @@ export function lowerVarDecl(lowerer, decl, isLet) {
4394
4403
  arms.some((a) => a.kind === "f64") &&
4395
4404
  arms.some((a) => a.kind === "string"));
4396
4405
  };
4397
- const runtimeStringArithmetic = settledType.kind === "string" &&
4398
- ((arithmeticType && typeEquals(arithmeticType, init.type)) ||
4399
- isStringArithmeticUnion(init.type));
4406
+ const runtimeStringArithmetic = (arithmeticType !== undefined && typeEquals(arithmeticType, init.type)) ||
4407
+ (settledType.kind === "string" && isStringArithmeticUnion(init.type)) ||
4408
+ (init.type.kind === "union" &&
4409
+ typeEquals(lowerer.runtimeOptionalBindingType(decl.name, settledType), init.type) &&
4410
+ lowerer.unions
4411
+ .get(init.type.unionId)
4412
+ ?.arms.every((a) => a.kind === "f64" || a.kind === "string" || a.kind === "bool") === true);
4400
4413
  if (runtimeStringArithmetic) {
4401
4414
  settledType = init.type;
4402
4415
  }
@@ -4528,7 +4541,7 @@ export function lowerVarDecl(lowerer, decl, isLet) {
4528
4541
  // subtyping (`const p: {a: number} = wider;`) is rejected, not coerced.
4529
4542
  init = lowerer.coerceInto(decl.initializer, init, settledType);
4530
4543
  const local = lowerer.declareLocal(decl.name, decl.name.text, settledType, isLet);
4531
- if (runtimeStringArithmetic && isStringArithmeticUnion(init.type)) {
4544
+ if (runtimeStringArithmetic && init.type.kind === "union") {
4532
4545
  lowerer.runtimeOptionalArithmeticLocals.add(lowerer.runtimeOptionalRootOf(local));
4533
4546
  }
4534
4547
  if (runtimeOptional) {
@@ -5016,8 +5029,9 @@ function isStrictDelete(node) {
5016
5029
  }
5017
5030
  /** Statement-position `delete`: process.env keys → process.envUnset
5018
5031
  * (unsetenv), pure `Record<string, T>` keys → recordKeyDelete (the
5019
- * overflow Map delete), declared OPTIONAL fields → the undefined-arm
5020
- * write (absence IS the undefined arm; divergence 60). Everything else
5032
+ * overflow Map delete), declared OPTIONAL fields → the field's ABSENT
5033
+ * state (the slot reads undefined and no longer counts as an own
5034
+ * property). Everything else
5021
5035
  * fences with the honest reason — a required field is a struct slot no
5022
5036
  * runtime can remove. */
5023
5037
  function lowerDeleteStatement(lowerer, expr) {
@@ -5133,14 +5147,13 @@ function lowerDeleteStatement(lowerer, expr) {
5133
5147
  if (shape?.indexValue && shape.fields.length === 0 && !shape.tuple) {
5134
5148
  return { kind: "recordKeyDelete", obj, shapeId: obj.type.shapeId, key: lowerKey(), loc };
5135
5149
  }
5136
- // `delete r.f` of a declared OPTIONAL field (undefined-armed slot) is
5137
- // the undefined-arm write: a monomorphic shape cannot remove its
5138
- // slot, and absence IS the undefined arm (divergences 37/56), so the
5139
- // observable results — `in` answers false, Object.keys skips it,
5140
- // JSON.stringify drops it — match Node's post-delete answers exactly
5141
- // (divergence 60 documents the delete/`= undefined` collapse).
5142
- // Constant keys only (dot access or a literal bracket); required
5143
- // fields keep the honest fence below.
5150
+ // `delete r.f` of a declared OPTIONAL field (undefined-armed slot)
5151
+ // writes the field's ABSENT state: a monomorphic shape cannot remove
5152
+ // its slot, but the slot remembers that no property exists, so `in`
5153
+ // answers false, Object.keys skips it, and JSON.stringify drops it,
5154
+ // while a later write makes it present again. Constant keys only
5155
+ // (dot access or a literal bracket); required fields keep the honest
5156
+ // fence below.
5144
5157
  const fieldName = ts.isPropertyAccessExpression(target)
5145
5158
  ? target.name.text
5146
5159
  : ts.isStringLiteral(target.argumentExpression)
@@ -5150,7 +5163,7 @@ function lowerDeleteStatement(lowerer, expr) {
5150
5163
  ? shape?.fields.find((f) => f.name === fieldName)
5151
5164
  : undefined;
5152
5165
  if (field) {
5153
- const absent = lowerer.wrappedUndefined(field.type, loc);
5166
+ const absent = lowerer.absentFieldValue(field.type, loc);
5154
5167
  if (absent) {
5155
5168
  return {
5156
5169
  kind: "recordSet",
@@ -5964,7 +5977,7 @@ export function lowerExprStatement(lowerer, expr) {
5964
5977
  }
5965
5978
  const unionWrite = lowerUnionFieldWrite(lowerer, expr.left, expr.right);
5966
5979
  if (unionWrite)
5967
- return unionWrite;
5980
+ return { kind: "exprStmt", expr: unionWrite, loc: locOf(expr) };
5968
5981
  const target = lowerer.fieldTarget(expr.left);
5969
5982
  if (target) {
5970
5983
  const value = lowerer.lowerExprExpecting(expr.right, target.fieldType);
@@ -6162,27 +6175,7 @@ export function lowerExprStatement(lowerer, expr) {
6162
6175
  };
6163
6176
  }
6164
6177
  // Statement position only: pre/post distinction is unobservable, so
6165
- // both desugar to `x = x ± 1`.
6166
- if (ts.isPropertyAccessExpression(expr.operand) ||
6167
- (ts.isElementAccessExpression(expr.operand) && symbolFieldInfo(lowerer, expr.operand))) {
6168
- // `N.x++` — the namespace-qualified spelling of a module-global
6169
- // increment (the member's global IS the variable); expando
6170
- // function members (`foo.count++`) are module globals too.
6171
- if (ts.isPropertyAccessExpression(expr.operand) && !expr.operand.questionDotToken) {
6172
- const staticTarget = staticFieldWriteTarget(lowerer, expr.operand);
6173
- if (staticTarget)
6174
- return lowerIncDecToTarget(lowerer, expr, staticTarget);
6175
- const exT = expandoWritableTarget(lowerer, expr.operand);
6176
- if (exT)
6177
- return lowerIncDecToTarget(lowerer, expr, exT);
6178
- const nsT = nsWritableTarget(lowerer, expr.operand);
6179
- if (nsT)
6180
- return lowerIncDecToTarget(lowerer, expr, nsT);
6181
- }
6182
- // `obj.f++` desugars through the compound-field path (`obj.f += 1`);
6183
- // `this[kLimit]++` is the same desugar over the symbol-keyed slot.
6184
- return lowerer.lowerFieldCompound(expr.operand, expr.operator === ts.SyntaxKind.PlusPlusToken ? "+" : "-", null, locOf(expr));
6185
- }
6178
+ // numeric bindings retain the simple `x = x ± 1` loop form.
6186
6179
  if (!ts.isIdentifier(expr.operand)) {
6187
6180
  lowerer.unsupported("SC1090", expr.operand, "increment/decrement of non-variables");
6188
6181
  }
@@ -6269,22 +6262,17 @@ function lowerIncDecToTarget(lowerer, expr, target) {
6269
6262
  const loc = locOf(expr);
6270
6263
  const op = expr.operator === ts.SyntaxKind.PlusPlusToken ? "+" : "-";
6271
6264
  const readTarget = { kind: "varRef", localId: target.id, type: target.type, loc };
6272
- // JS any-origin targets: check the read to number, convert the
6273
- // result back into the dyn slot (the compound-assign stance).
6274
- const dynTarget = target.type.kind === "dyn" && isJsSourceFile(expr.getSourceFile());
6275
- if (target.type.kind !== "f64" && !dynTarget) {
6276
- lowerer.unsupported("SC1090", expr.operand, "increment/decrement of non-number targets");
6277
- }
6265
+ if (target.type.kind !== "f64")
6266
+ return { kind: "exprStmt", expr: lowerIncDecTarget(lowerer, expr, target, false), loc };
6278
6267
  const computed = {
6279
6268
  kind: "bin",
6280
6269
  op,
6281
- left: dynTarget ? { kind: "dynCheck", value: readTarget, type: F64, loc } : readTarget,
6270
+ left: readTarget,
6282
6271
  right: { kind: "numLit", value: 1, type: F64, loc },
6283
6272
  type: F64,
6284
6273
  loc,
6285
6274
  };
6286
- const value = dynTarget ? { kind: "dynFrom", value: computed, type: DYN, loc } : computed;
6287
- return { kind: "assign", localId: target.id, value, loc };
6275
+ return { kind: "assign", localId: target.id, value: computed, loc };
6288
6276
  }
6289
6277
  /** The shared tail of `x op= e` over a resolved variable/global target —
6290
6278
  * desugared to `x = x op e` (x read before e, like JS). Serves the bare-