@scriptc/compiler 0.0.35 → 0.1.1

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 (439) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +14 -11
  2. package/ambient/scriptc-overrides.d.ts +0 -7
  3. package/ambient/scriptc.d.ts +1 -1
  4. package/dist/backend/build-cache.d.ts +44 -0
  5. package/dist/backend/build-cache.js +241 -0
  6. package/dist/backend/build-cache.js.map +1 -0
  7. package/dist/backend/{emission/emit-async.d.ts → c/async.d.ts} +21 -30
  8. package/dist/backend/{emission/emit-async.js → c/async.js} +270 -286
  9. package/dist/backend/c/async.js.map +1 -0
  10. package/dist/backend/{emission/emitter.d.ts → c/c-emitter.d.ts} +6 -23
  11. package/dist/backend/{emission/emitter.js → c/c-emitter.js} +53 -107
  12. package/dist/backend/c/c-emitter.js.map +1 -0
  13. package/dist/backend/c/exprs.d.ts +8 -0
  14. package/dist/backend/c/exprs.js +7937 -0
  15. package/dist/backend/c/exprs.js.map +1 -0
  16. package/dist/backend/{emission/emit-island.d.ts → c/island.d.ts} +5 -5
  17. package/dist/backend/{emission/emit-island.js → c/island.js} +24 -22
  18. package/dist/backend/c/island.js.map +1 -0
  19. package/dist/backend/{emission → c}/may-throw.d.ts +1 -1
  20. package/dist/backend/{emission → c}/may-throw.js +4 -1
  21. package/dist/backend/c/may-throw.js.map +1 -0
  22. package/dist/backend/{emission/emit-shapes.d.ts → c/shapes.d.ts} +19 -19
  23. package/dist/backend/{emission/emit-shapes.js → c/shapes.js} +78 -87
  24. package/dist/backend/c/shapes.js.map +1 -0
  25. package/dist/backend/{emission/emit-stmts.d.ts → c/stmts.d.ts} +12 -12
  26. package/dist/backend/{emission/emit-stmts.js → c/stmts.js} +395 -343
  27. package/dist/backend/c/stmts.js.map +1 -0
  28. package/dist/backend/{emission/emit-types.d.ts → c/types.d.ts} +1 -1
  29. package/dist/backend/{emission/emit-types.js → c/types.js} +42 -286
  30. package/dist/backend/c/types.js.map +1 -0
  31. package/dist/backend/c/types.test.js +25 -0
  32. package/dist/backend/c/types.test.js.map +1 -0
  33. package/dist/backend/{emission/emit-walkers.d.ts → c/walkers.d.ts} +19 -41
  34. package/dist/backend/{emission/emit-walkers.js → c/walkers.js} +242 -304
  35. package/dist/backend/c/walkers.js.map +1 -0
  36. package/dist/backend/external-c.d.ts +33 -0
  37. package/dist/backend/external-c.js +51 -0
  38. package/dist/backend/external-c.js.map +1 -0
  39. package/dist/backend/ffi-callbacks.d.ts +1 -1
  40. package/dist/backend/ffi-callbacks.js +4 -3
  41. package/dist/backend/ffi-callbacks.js.map +1 -1
  42. package/dist/backend/{library-identity.d.ts → library-identity-markers.d.ts} +0 -4
  43. package/dist/backend/{library-identity.js → library-identity-markers.js} +10 -9
  44. package/dist/backend/library-identity-markers.js.map +1 -0
  45. package/dist/backend/link-plan.d.ts +37 -0
  46. package/dist/backend/link-plan.js +26 -0
  47. package/dist/backend/link-plan.js.map +1 -0
  48. package/dist/backend/linker.d.ts +22 -0
  49. package/dist/backend/linker.js +236 -0
  50. package/dist/backend/linker.js.map +1 -0
  51. package/dist/backend/llvm/blocks.d.ts +4 -0
  52. package/dist/backend/llvm/blocks.js +29 -0
  53. package/dist/backend/llvm/blocks.js.map +1 -1
  54. package/dist/backend/llvm/classes.d.ts +2 -19
  55. package/dist/backend/llvm/classes.js +20 -52
  56. package/dist/backend/llvm/classes.js.map +1 -1
  57. package/dist/backend/llvm/common.d.ts +4 -0
  58. package/dist/backend/llvm/common.js +27 -0
  59. package/dist/backend/llvm/common.js.map +1 -0
  60. package/dist/backend/llvm/dyn.d.ts +3 -8
  61. package/dist/backend/llvm/dyn.js +159 -224
  62. package/dist/backend/llvm/dyn.js.map +1 -1
  63. package/dist/backend/llvm/emitter.d.ts +4 -1
  64. package/dist/backend/llvm/emitter.js +548 -9988
  65. package/dist/backend/llvm/emitter.js.map +1 -1
  66. package/dist/backend/llvm/expr-async.d.ts +4 -0
  67. package/dist/backend/llvm/expr-async.js +726 -0
  68. package/dist/backend/llvm/expr-async.js.map +1 -0
  69. package/dist/backend/llvm/expr-bytes.d.ts +13 -0
  70. package/dist/backend/llvm/expr-bytes.js +456 -0
  71. package/dist/backend/llvm/expr-bytes.js.map +1 -0
  72. package/dist/backend/llvm/expr-callbacks.d.ts +22 -0
  73. package/dist/backend/llvm/expr-callbacks.js +520 -0
  74. package/dist/backend/llvm/expr-callbacks.js.map +1 -0
  75. package/dist/backend/llvm/expr-calls.d.ts +2 -0
  76. package/dist/backend/llvm/expr-calls.js +618 -0
  77. package/dist/backend/llvm/expr-calls.js.map +1 -0
  78. package/dist/backend/llvm/expr-containers.d.ts +25 -0
  79. package/dist/backend/llvm/expr-containers.js +637 -0
  80. package/dist/backend/llvm/expr-containers.js.map +1 -0
  81. package/dist/backend/llvm/expr-context.d.ts +255 -0
  82. package/dist/backend/llvm/expr-context.js +2 -0
  83. package/dist/backend/llvm/expr-context.js.map +1 -0
  84. package/dist/backend/llvm/expr-control.d.ts +2 -0
  85. package/dist/backend/llvm/expr-control.js +473 -0
  86. package/dist/backend/llvm/expr-control.js.map +1 -0
  87. package/dist/backend/llvm/expr-dispatch.d.ts +4 -0
  88. package/dist/backend/llvm/expr-dispatch.js +153 -0
  89. package/dist/backend/llvm/expr-dispatch.js.map +1 -0
  90. package/dist/backend/llvm/expr-dynamic.d.ts +2 -0
  91. package/dist/backend/llvm/expr-dynamic.js +810 -0
  92. package/dist/backend/llvm/expr-dynamic.js.map +1 -0
  93. package/dist/backend/llvm/expr-island.d.ts +15 -0
  94. package/dist/backend/llvm/expr-island.js +690 -0
  95. package/dist/backend/llvm/expr-island.js.map +1 -0
  96. package/dist/backend/llvm/expr-primitives.d.ts +6 -0
  97. package/dist/backend/llvm/expr-primitives.js +642 -0
  98. package/dist/backend/llvm/expr-primitives.js.map +1 -0
  99. package/dist/backend/llvm/expr-records.d.ts +9 -0
  100. package/dist/backend/llvm/expr-records.js +299 -0
  101. package/dist/backend/llvm/expr-records.js.map +1 -0
  102. package/dist/backend/llvm/expr-stream-bridges.d.ts +13 -0
  103. package/dist/backend/llvm/expr-stream-bridges.js +420 -0
  104. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -0
  105. package/dist/backend/llvm/expr-stream-callbacks.d.ts +12 -0
  106. package/dist/backend/llvm/expr-stream-callbacks.js +360 -0
  107. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -0
  108. package/dist/backend/llvm/lib-dispatch.d.ts +5 -0
  109. package/dist/backend/llvm/lib-dispatch.js +267 -0
  110. package/dist/backend/llvm/lib-dispatch.js.map +1 -0
  111. package/dist/backend/llvm/lib-filesystem.d.ts +6 -0
  112. package/dist/backend/llvm/lib-filesystem.js +594 -0
  113. package/dist/backend/llvm/lib-filesystem.js.map +1 -0
  114. package/dist/backend/llvm/lib-network.d.ts +2 -0
  115. package/dist/backend/llvm/lib-network.js +429 -0
  116. package/dist/backend/llvm/lib-network.js.map +1 -0
  117. package/dist/backend/llvm/lib-process.d.ts +5 -0
  118. package/dist/backend/llvm/lib-process.js +585 -0
  119. package/dist/backend/llvm/lib-process.js.map +1 -0
  120. package/dist/backend/llvm/lib-shared.d.ts +6 -0
  121. package/dist/backend/llvm/lib-shared.js +687 -0
  122. package/dist/backend/llvm/lib-shared.js.map +1 -0
  123. package/dist/backend/llvm/lib-stream.d.ts +2 -0
  124. package/dist/backend/llvm/lib-stream.js +470 -0
  125. package/dist/backend/llvm/lib-stream.js.map +1 -0
  126. package/dist/backend/llvm/shapes.d.ts +12 -2
  127. package/dist/backend/llvm/shapes.js +66 -307
  128. package/dist/backend/llvm/shapes.js.map +1 -1
  129. package/dist/backend/llvm/shapes.test.js +52 -0
  130. package/dist/backend/llvm/shapes.test.js.map +1 -0
  131. package/dist/backend/llvm/unsupported.d.ts +1 -1
  132. package/dist/backend/llvm/walkers.d.ts +2 -3
  133. package/dist/backend/llvm/walkers.js +195 -222
  134. package/dist/backend/llvm/walkers.js.map +1 -1
  135. package/dist/backend/native-codegen.d.ts +45 -0
  136. package/dist/backend/native-codegen.js +275 -0
  137. package/dist/backend/native-codegen.js.map +1 -0
  138. package/dist/backend/native-codegen.test.js +226 -0
  139. package/dist/backend/native-codegen.test.js.map +1 -0
  140. package/dist/backend/native-link-info.d.ts +96 -0
  141. package/dist/backend/native-link-info.js +243 -0
  142. package/dist/backend/native-link-info.js.map +1 -0
  143. package/dist/backend/native-link-info.test.d.ts +1 -0
  144. package/dist/backend/native-link-info.test.js +134 -0
  145. package/dist/backend/native-link-info.test.js.map +1 -0
  146. package/dist/backend/{cc.d.ts → native-toolchain.d.ts} +54 -34
  147. package/dist/backend/{cc.js → native-toolchain.js} +231 -810
  148. package/dist/backend/native-toolchain.js.map +1 -0
  149. package/dist/backend/native-toolchain.test.d.ts +1 -0
  150. package/dist/backend/{cc-cache.test.js → native-toolchain.test.js} +219 -7
  151. package/dist/backend/native-toolchain.test.js.map +1 -0
  152. package/dist/backend/object-localize.js +1 -1
  153. package/dist/backend/runtime-abi.d.ts +10 -0
  154. package/dist/backend/runtime-abi.js +11 -0
  155. package/dist/backend/runtime-abi.js.map +1 -0
  156. package/dist/backend/runtime-pack-targets.test.d.ts +1 -0
  157. package/dist/backend/runtime-pack-targets.test.js +54 -0
  158. package/dist/backend/runtime-pack-targets.test.js.map +1 -0
  159. package/dist/backend/runtime-pack.d.ts +112 -0
  160. package/dist/backend/runtime-pack.js +305 -0
  161. package/dist/backend/runtime-pack.js.map +1 -0
  162. package/dist/backend/runtime-pack.test.d.ts +1 -0
  163. package/dist/backend/runtime-pack.test.js +473 -0
  164. package/dist/backend/runtime-pack.test.js.map +1 -0
  165. package/dist/backend/targets.d.ts +76 -0
  166. package/dist/backend/targets.js +262 -0
  167. package/dist/backend/targets.js.map +1 -0
  168. package/dist/backend/targets.test.d.ts +1 -0
  169. package/dist/backend/targets.test.js +41 -0
  170. package/dist/backend/targets.test.js.map +1 -0
  171. package/dist/backend/vendor-archives.d.ts +41 -0
  172. package/dist/backend/vendor-archives.js +462 -0
  173. package/dist/backend/vendor-archives.js.map +1 -0
  174. package/dist/compat/fetch-profile.d.ts +0 -1
  175. package/dist/compat/fetch-profile.js +0 -1
  176. package/dist/compat/fetch-profile.js.map +1 -1
  177. package/dist/coverage/report.js +3 -3
  178. package/dist/coverage/report.js.map +1 -1
  179. package/dist/coverage/surface-manifest.js +35 -33
  180. package/dist/coverage/surface-manifest.js.map +1 -1
  181. package/dist/diagnostics/diagnostic.d.ts +11 -12
  182. package/dist/diagnostics/diagnostic.js +19 -17
  183. package/dist/diagnostics/diagnostic.js.map +1 -1
  184. package/dist/diagnostics/render.d.ts +1 -1
  185. package/dist/diagnostics/render.js +1 -1
  186. package/dist/diagnostics/render.js.map +1 -1
  187. package/dist/errors.d.ts +5 -0
  188. package/dist/errors.js +9 -0
  189. package/dist/errors.js.map +1 -0
  190. package/dist/executable/{early-cache.d.ts → executable-cache.d.ts} +2 -2
  191. package/dist/executable/{early-cache.js → executable-cache.js} +36 -98
  192. package/dist/executable/executable-cache.js.map +1 -0
  193. package/dist/executable/executable-cache.test.d.ts +1 -0
  194. package/dist/executable/{early-cache.test.js → executable-cache.test.js} +3 -3
  195. package/dist/executable/executable-cache.test.js.map +1 -0
  196. package/dist/ffi/{profile.js → ffi-manifest.js} +1 -1
  197. package/dist/ffi/ffi-manifest.js.map +1 -0
  198. package/dist/frontend/builtin-modules.d.ts +21 -0
  199. package/dist/frontend/builtin-modules.js +82 -0
  200. package/dist/frontend/builtin-modules.js.map +1 -0
  201. package/dist/frontend/cjs-lexer.d.ts +7 -0
  202. package/dist/frontend/cjs-lexer.js +15 -17
  203. package/dist/frontend/cjs-lexer.js.map +1 -1
  204. package/dist/frontend/dts-paths.d.ts +26 -0
  205. package/dist/frontend/dts-paths.js +41 -0
  206. package/dist/frontend/dts-paths.js.map +1 -0
  207. package/dist/frontend/input-tracker.d.ts +0 -2
  208. package/dist/frontend/input-tracker.js +1 -4
  209. package/dist/frontend/input-tracker.js.map +1 -1
  210. package/dist/frontend/lib-contract.d.ts +1 -5
  211. package/dist/frontend/lib-contract.js +1 -1
  212. package/dist/frontend/lib-contract.js.map +1 -1
  213. package/dist/frontend/lib-exports.d.ts +1 -1
  214. package/dist/frontend/lowering/array-values.d.ts +8 -0
  215. package/dist/frontend/lowering/array-values.js +60 -0
  216. package/dist/frontend/lowering/array-values.js.map +1 -0
  217. package/dist/frontend/lowering/call-position.d.ts +4 -0
  218. package/dist/frontend/lowering/call-position.js +7 -0
  219. package/dist/frontend/lowering/call-position.js.map +1 -0
  220. package/dist/frontend/lowering/callback-arg.d.ts +20 -0
  221. package/dist/frontend/lowering/callback-arg.js +44 -0
  222. package/dist/frontend/lowering/callback-arg.js.map +1 -0
  223. package/dist/frontend/lowering/lib-boundary.d.ts +1 -1
  224. package/dist/frontend/lowering/lib-boundary.js +34 -34
  225. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  226. package/dist/frontend/lowering/lower-array-sort.d.ts +22 -0
  227. package/dist/frontend/lowering/lower-array-sort.js +619 -0
  228. package/dist/frontend/lowering/lower-array-sort.js.map +1 -0
  229. package/dist/frontend/lowering/lower-assert.d.ts +3 -3
  230. package/dist/frontend/lowering/lower-assert.js +214 -241
  231. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  232. package/dist/frontend/lowering/lower-builtins.d.ts +74 -146
  233. package/dist/frontend/lowering/lower-builtins.js +1285 -1233
  234. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  235. package/dist/frontend/lowering/lower-calls.d.ts +59 -192
  236. package/dist/frontend/lowering/lower-calls.js +1644 -1506
  237. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  238. package/dist/frontend/lowering/lower-classes.d.ts +62 -125
  239. package/dist/frontend/lowering/lower-classes.js +832 -866
  240. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  241. package/dist/frontend/lowering/lower-comptime.d.ts +5 -12
  242. package/dist/frontend/lowering/lower-comptime.js +32 -31
  243. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  244. package/dist/frontend/lowering/lower-containers.d.ts +35 -135
  245. package/dist/frontend/lowering/lower-containers.js +1984 -2227
  246. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  247. package/dist/frontend/lowering/lower-dgram.d.ts +3 -7
  248. package/dist/frontend/lowering/lower-dgram.js +97 -111
  249. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  250. package/dist/frontend/lowering/lower-enums.d.ts +4 -4
  251. package/dist/frontend/lowering/lower-enums.js +30 -30
  252. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  253. package/dist/frontend/lowering/{lower-emitter.d.ts → lower-event-emitter.d.ts} +7 -18
  254. package/dist/frontend/lowering/{lower-emitter.js → lower-event-emitter.js} +172 -174
  255. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -0
  256. package/dist/frontend/lowering/lower-expando.d.ts +5 -5
  257. package/dist/frontend/lowering/lower-expando.js +40 -40
  258. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  259. package/dist/frontend/lowering/lower-exprs.d.ts +60 -264
  260. package/dist/frontend/lowering/lower-exprs.js +2361 -1765
  261. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  262. package/dist/frontend/lowering/lower-generators.d.ts +6 -6
  263. package/dist/frontend/lowering/lower-generators.js +73 -72
  264. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  265. package/dist/frontend/lowering/lower-inspect.d.ts +5 -17
  266. package/dist/frontend/lowering/lower-inspect.js +273 -261
  267. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  268. package/dist/frontend/lowering/lower-island.d.ts +39 -49
  269. package/dist/frontend/lowering/lower-island.js +447 -513
  270. package/dist/frontend/lowering/lower-island.js.map +1 -1
  271. package/dist/frontend/lowering/lower-mixins.d.ts +7 -10
  272. package/dist/frontend/lowering/lower-mixins.js +85 -85
  273. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  274. package/dist/frontend/lowering/lower-modules.d.ts +12 -18
  275. package/dist/frontend/lowering/lower-modules.js +284 -283
  276. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  277. package/dist/frontend/lowering/lower-namespaces.d.ts +23 -49
  278. package/dist/frontend/lowering/lower-namespaces.js +123 -115
  279. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  280. package/dist/frontend/lowering/lower-server.d.ts +18 -25
  281. package/dist/frontend/lowering/lower-server.js +909 -899
  282. package/dist/frontend/lowering/lower-server.js.map +1 -1
  283. package/dist/frontend/lowering/lower-stmts.d.ts +30 -149
  284. package/dist/frontend/lowering/lower-stmts.js +1463 -1285
  285. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  286. package/dist/frontend/lowering/lower-stream.d.ts +12 -12
  287. package/dist/frontend/lowering/lower-stream.js +300 -301
  288. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  289. package/dist/frontend/lowering/lower-test.d.ts +5 -5
  290. package/dist/frontend/lowering/lower-test.js +82 -82
  291. package/dist/frontend/lowering/lower-test.js.map +1 -1
  292. package/dist/frontend/lowering/lowerer.d.ts +134 -22
  293. package/dist/frontend/lowering/lowerer.js +1277 -126
  294. package/dist/frontend/lowering/lowerer.js.map +1 -1
  295. package/dist/frontend/lowering/pairs-snapshot.d.ts +11 -0
  296. package/dist/frontend/lowering/pairs-snapshot.js +85 -0
  297. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -0
  298. package/dist/frontend/lowering/static-this.d.ts +6 -0
  299. package/dist/frontend/lowering/static-this.js +24 -0
  300. package/dist/frontend/lowering/static-this.js.map +1 -0
  301. package/dist/frontend/lowering/surfaces.d.ts +24 -35
  302. package/dist/frontend/lowering/surfaces.js +78 -66
  303. package/dist/frontend/lowering/surfaces.js.map +1 -1
  304. package/dist/frontend/npm-static-rewrite.js +6 -28
  305. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  306. package/dist/frontend/npm-static.d.ts +0 -10
  307. package/dist/frontend/npm-static.js +4 -7
  308. package/dist/frontend/npm-static.js.map +1 -1
  309. package/dist/frontend/npm.d.ts +0 -24
  310. package/dist/frontend/npm.js +11 -85
  311. package/dist/frontend/npm.js.map +1 -1
  312. package/dist/frontend/program.d.ts +3 -1
  313. package/dist/frontend/program.js +9 -4
  314. package/dist/frontend/program.js.map +1 -1
  315. package/dist/frontend/provenance-registry.d.ts +0 -2
  316. package/dist/frontend/provenance-registry.js +0 -10
  317. package/dist/frontend/provenance-registry.js.map +1 -1
  318. package/dist/frontend/provenance.js +4 -7
  319. package/dist/frontend/provenance.js.map +1 -1
  320. package/dist/frontend/resolve.d.ts +7 -2
  321. package/dist/frontend/resolve.js +12 -17
  322. package/dist/frontend/resolve.js.map +1 -1
  323. package/dist/frontend/resolve.test.d.ts +1 -0
  324. package/dist/frontend/resolve.test.js +29 -0
  325. package/dist/frontend/resolve.test.js.map +1 -0
  326. package/dist/frontend/ts7/adapter.d.ts +2 -2
  327. package/dist/frontend/ts7/adapter.js +1 -1
  328. package/dist/frontend/ts7/adapter.js.map +1 -1
  329. package/dist/frontend/ts7/checker.js +2 -36
  330. package/dist/frontend/ts7/checker.js.map +1 -1
  331. package/dist/frontend/ts7/enums.js +2 -1
  332. package/dist/frontend/ts7/enums.js.map +1 -1
  333. package/dist/frontend/ts7/{program.js → program-adapter.js} +7 -6
  334. package/dist/frontend/ts7/program-adapter.js.map +1 -0
  335. package/dist/frontend/ts7/world-check.d.ts +1 -3
  336. package/dist/frontend/ts7/world-check.js +3 -1
  337. package/dist/frontend/ts7/world-check.js.map +1 -1
  338. package/dist/frontend/tsc-codes.d.ts +8 -0
  339. package/dist/frontend/tsc-codes.js +109 -0
  340. package/dist/frontend/tsc-codes.js.map +1 -0
  341. package/dist/frontend/{types.d.ts → type-mapper.d.ts} +2 -25
  342. package/dist/frontend/{types.js → type-mapper.js} +12 -11
  343. package/dist/frontend/type-mapper.js.map +1 -0
  344. package/dist/frontend/workspace-registry.d.ts +26 -0
  345. package/dist/frontend/workspace-registry.js +71 -0
  346. package/dist/frontend/workspace-registry.js.map +1 -0
  347. package/dist/index.d.ts +113 -31
  348. package/dist/index.js +536 -128
  349. package/dist/index.js.map +1 -1
  350. package/dist/ir/analysis.d.ts +37 -0
  351. package/dist/ir/analysis.js +118 -0
  352. package/dist/ir/analysis.js.map +1 -0
  353. package/dist/ir/analysis.test.d.ts +1 -0
  354. package/dist/ir/analysis.test.js +21 -0
  355. package/dist/ir/analysis.test.js.map +1 -0
  356. package/dist/ir/build.d.ts +9 -0
  357. package/dist/ir/build.js +33 -0
  358. package/dist/ir/build.js.map +1 -0
  359. package/dist/ir/integer-loops.d.ts +1 -1
  360. package/dist/ir/{nodes.d.ts → ir.d.ts} +119 -37
  361. package/dist/ir/{nodes.js → ir.js} +170 -166
  362. package/dist/ir/ir.js.map +1 -0
  363. package/dist/ir/ir.test.d.ts +1 -0
  364. package/dist/ir/ir.test.js +17 -0
  365. package/dist/ir/ir.test.js.map +1 -0
  366. package/dist/ir/serialize.d.ts +2 -2
  367. package/dist/ir/serialize.js +3 -2
  368. package/dist/ir/serialize.js.map +1 -1
  369. package/dist/ir/validate.d.ts +1 -1
  370. package/dist/ir/validate.js +93 -41
  371. package/dist/ir/validate.js.map +1 -1
  372. package/dist/library/cache-primitives.d.ts +24 -0
  373. package/dist/library/cache-primitives.js +83 -0
  374. package/dist/library/cache-primitives.js.map +1 -0
  375. package/dist/library/cache-reset.test.d.ts +1 -0
  376. package/dist/library/cache-reset.test.js +47 -0
  377. package/dist/library/cache-reset.test.js.map +1 -0
  378. package/dist/library/{implementation-identity.js → compiler-self-identity.js} +1 -1
  379. package/dist/library/compiler-self-identity.js.map +1 -0
  380. package/dist/library/fence-eval.d.ts +3 -1
  381. package/dist/library/fence-eval.js +8 -2
  382. package/dist/library/fence-eval.js.map +1 -1
  383. package/dist/library/int-infer.d.ts +1 -36
  384. package/dist/library/int-infer.js +29 -18
  385. package/dist/library/int-infer.js.map +1 -1
  386. package/dist/library/int-infer.test.js +4 -4
  387. package/dist/library/{early-cache.d.ts → library-cache.d.ts} +1 -1
  388. package/dist/library/{early-cache.js → library-cache.js} +34 -89
  389. package/dist/library/library-cache.js.map +1 -0
  390. package/dist/library/library-cache.test.d.ts +1 -0
  391. package/dist/library/{early-cache.test.js → library-cache.test.js} +7 -7
  392. package/dist/library/library-cache.test.js.map +1 -0
  393. package/dist/library/{profile.d.ts → library-profile.d.ts} +4 -7
  394. package/dist/library/{profile.js → library-profile.js} +18 -11
  395. package/dist/library/library-profile.js.map +1 -0
  396. package/dist/library/semantic-source.js +2 -1
  397. package/dist/library/semantic-source.js.map +1 -1
  398. package/dist/library/sidecar.d.ts +5 -2
  399. package/dist/library/sidecar.js +11 -5
  400. package/dist/library/sidecar.js.map +1 -1
  401. package/dist/startup-cache.d.ts +11 -3
  402. package/dist/startup-cache.js +17 -2
  403. package/dist/startup-cache.js.map +1 -1
  404. package/package.json +19 -2
  405. package/surface-manifest.json +5 -5
  406. package/dist/backend/cc-cache.test.js.map +0 -1
  407. package/dist/backend/cc.js.map +0 -1
  408. package/dist/backend/emission/emit-async.js.map +0 -1
  409. package/dist/backend/emission/emit-exprs.d.ts +0 -13
  410. package/dist/backend/emission/emit-exprs.js +0 -7407
  411. package/dist/backend/emission/emit-exprs.js.map +0 -1
  412. package/dist/backend/emission/emit-island.js.map +0 -1
  413. package/dist/backend/emission/emit-shapes.js.map +0 -1
  414. package/dist/backend/emission/emit-stmts.js.map +0 -1
  415. package/dist/backend/emission/emit-types.js.map +0 -1
  416. package/dist/backend/emission/emit-walkers.js.map +0 -1
  417. package/dist/backend/emission/emitter.js.map +0 -1
  418. package/dist/backend/emission/may-throw.js.map +0 -1
  419. package/dist/backend/library-identity.js.map +0 -1
  420. package/dist/executable/early-cache.js.map +0 -1
  421. package/dist/executable/early-cache.test.js.map +0 -1
  422. package/dist/ffi/profile.js.map +0 -1
  423. package/dist/frontend/lowering/lower-emitter.js.map +0 -1
  424. package/dist/frontend/shared.d.ts +0 -82
  425. package/dist/frontend/shared.js +0 -308
  426. package/dist/frontend/shared.js.map +0 -1
  427. package/dist/frontend/ts7/program.js.map +0 -1
  428. package/dist/frontend/types.js.map +0 -1
  429. package/dist/ir/nodes.js.map +0 -1
  430. package/dist/library/early-cache.js.map +0 -1
  431. package/dist/library/early-cache.test.js.map +0 -1
  432. package/dist/library/implementation-identity.js.map +0 -1
  433. package/dist/library/profile.js.map +0 -1
  434. /package/dist/backend/{cc-cache.test.d.ts → c/types.test.d.ts} +0 -0
  435. /package/dist/{executable/early-cache.test.d.ts → backend/llvm/shapes.test.d.ts} +0 -0
  436. /package/dist/{library/early-cache.test.d.ts → backend/native-codegen.test.d.ts} +0 -0
  437. /package/dist/ffi/{profile.d.ts → ffi-manifest.d.ts} +0 -0
  438. /package/dist/frontend/ts7/{program.d.ts → program-adapter.d.ts} +0 -0
  439. /package/dist/library/{implementation-identity.d.ts → compiler-self-identity.d.ts} +0 -0
@@ -0,0 +1,619 @@
1
+ import { BOOL, BYTES_U8, F64, JSVAL, arrayOf, funcOf, } from "../../ir/ir.js";
2
+ import { numLit, varRef } from "../../ir/build.js";
3
+ function readArrayLength(arrT, loc) {
4
+ return {
5
+ kind: "varDecl",
6
+ localId: "n.0",
7
+ init: {
8
+ kind: "arrIntrinsic",
9
+ method: "length",
10
+ receiver: { kind: "varRef", localId: "a.0", type: arrT, loc },
11
+ args: [],
12
+ type: F64,
13
+ loc,
14
+ },
15
+ loc,
16
+ };
17
+ }
18
+ /** A stable bottom-up merge sort built from existing IR nodes.
19
+ *
20
+ * The first implementation used insertion sort because it was compact and
21
+ * made the stable tie rule obvious. Its worst case was quadratic, though,
22
+ * which made an ordinary descending input unusable. This implementation
23
+ * snapshots the receiver, merges runs between two buffers, and copies the
24
+ * final snapshot back into the receiver. The boundary check skips a merge
25
+ * when adjacent runs are already ordered, so naturally ordered inputs use
26
+ * only a linear number of comparator calls; the buffer copies still do
27
+ * O(n log n) data movement. Arbitrary inputs have an O(n log n) bound.
28
+ *
29
+ * The snapshot is also important for sort mutation behavior: comparator
30
+ * calls see the values captured before sorting starts, while the final copy
31
+ * preserves Array.sort receiver identity. toSorted starts by copying the
32
+ * receiver and therefore leaves that receiver untouched. The merge schedule
33
+ * intentionally differs from V8 TimSort, so exact comparator call order and
34
+ * count parity is not claimed; stable results, comparator exceptions, and
35
+ * mutations of referenced values still follow the normal IR call/ownership
36
+ * rules. */
37
+ export function buildArraySortFn(name, elem, arity, copyFirst, undefinedTag, loc) {
38
+ const arrT = arrayOf(elem);
39
+ const fnT = funcOf([elem, elem].slice(0, arity), F64);
40
+ const a = varRef("a.0", arrT, loc);
41
+ const snapshot = varRef("snapshot.0", arrT, loc);
42
+ const src = varRef("src.0", arrT, loc);
43
+ const dst = varRef("dst.0", arrT, loc);
44
+ const n = varRef("n.0", F64, loc);
45
+ const valueCount = varRef("valueCount.0", F64, loc);
46
+ const undefinedCount = varRef("undefinedCount.0", F64, loc);
47
+ const width = varRef("width.0", F64, loc);
48
+ const start = varRef("start.0", F64, loc);
49
+ const mid = varRef("mid.0", F64, loc);
50
+ const right = varRef("right.0", F64, loc);
51
+ const left = varRef("left.0", F64, loc);
52
+ const r = varRef("r.0", F64, loc);
53
+ const k = varRef("k.0", F64, loc);
54
+ const i = varRef("i.0", F64, loc);
55
+ const j = varRef("j.0", F64, loc);
56
+ const state = varRef("state.0", F64, loc);
57
+ const add = (left, right) => ({ kind: "bin", op: "+", left, right, type: F64, loc });
58
+ const sub = (left, right) => ({ kind: "bin", op: "-", left, right, type: F64, loc });
59
+ const mul = (left, right) => ({ kind: "bin", op: "*", left, right, type: F64, loc });
60
+ const lt = (left, right) => ({ kind: "bin", op: "<", left, right, type: BOOL, loc });
61
+ const eq = (left, right) => ({ kind: "bin", op: "===", left, right, type: BOOL, loc });
62
+ const not = (value) => ({ kind: "unary", op: "!", operand: value, type: BOOL, loc });
63
+ const at = (index) => ({ kind: "arrayGet", arr: src, index, type: elem, loc });
64
+ const snapshotAt = (index) => ({ kind: "arrayGet", arr: snapshot, index, type: elem, loc });
65
+ const stateAt = (index) => ({ kind: "arrayState", arr: snapshot, index, type: F64, loc });
66
+ const stateIs = (value) => eq(state, numLit(value, loc));
67
+ const isUndefined = (value) => {
68
+ if (elem.kind === "union" && undefinedTag !== null) {
69
+ return {
70
+ kind: "unionIsTag",
71
+ unionId: elem.unionId,
72
+ tag: undefinedTag,
73
+ negated: false,
74
+ value,
75
+ type: BOOL,
76
+ loc,
77
+ };
78
+ }
79
+ if (elem.kind === "jsval") {
80
+ return {
81
+ kind: "jsOp",
82
+ op: "eq",
83
+ args: [
84
+ value,
85
+ { kind: "jsOp", op: "undefLit", args: [], type: JSVAL, loc },
86
+ ],
87
+ type: BOOL,
88
+ loc,
89
+ };
90
+ }
91
+ return null;
92
+ };
93
+ const shouldTakeRight = (leftValue, rightValue) => {
94
+ const compareGreater = {
95
+ kind: "bin",
96
+ op: ">",
97
+ left: {
98
+ kind: "callValue",
99
+ callee: varRef("f.0", fnT, loc),
100
+ args: [leftValue, rightValue].slice(0, arity),
101
+ type: F64,
102
+ loc,
103
+ },
104
+ right: numLit(0, loc),
105
+ type: BOOL,
106
+ loc,
107
+ };
108
+ const leftUndefined = isUndefined(leftValue);
109
+ const rightUndefined = isUndefined(rightValue);
110
+ return leftUndefined !== null && rightUndefined !== null
111
+ ? {
112
+ kind: "ternary",
113
+ cond: leftUndefined,
114
+ then: not(rightUndefined),
115
+ else_: {
116
+ kind: "ternary",
117
+ cond: rightUndefined,
118
+ then: { kind: "boolLit", value: false, type: BOOL, loc },
119
+ else_: compareGreater,
120
+ type: BOOL,
121
+ loc,
122
+ },
123
+ type: BOOL,
124
+ loc,
125
+ }
126
+ : compareGreater;
127
+ };
128
+ const copyRange = {
129
+ kind: "while",
130
+ cond: lt(k, right),
131
+ body: [
132
+ { kind: "varDecl", localId: "v.0", init: at(k), loc },
133
+ { kind: "arraySet", arr: dst, index: k, value: varRef("v.0", elem, loc), loc },
134
+ { kind: "assign", localId: "k.0", value: add(k, numLit(1, loc)), loc },
135
+ ],
136
+ loc,
137
+ };
138
+ const mergeBody = [
139
+ {
140
+ kind: "while",
141
+ cond: {
142
+ kind: "logical",
143
+ op: "&&",
144
+ left: lt(left, mid),
145
+ right: lt(r, right),
146
+ type: BOOL,
147
+ loc,
148
+ },
149
+ body: [
150
+ { kind: "varDecl", localId: "vL.0", init: at(left), loc },
151
+ { kind: "varDecl", localId: "vR.0", init: at(r), loc },
152
+ {
153
+ kind: "if",
154
+ cond: shouldTakeRight(varRef("vL.0", elem, loc), varRef("vR.0", elem, loc)),
155
+ then: [
156
+ { kind: "arraySet", arr: dst, index: k, value: varRef("vR.0", elem, loc), loc },
157
+ { kind: "assign", localId: "r.0", value: add(r, numLit(1, loc)), loc },
158
+ ],
159
+ else_: [
160
+ { kind: "arraySet", arr: dst, index: k, value: varRef("vL.0", elem, loc), loc },
161
+ { kind: "assign", localId: "left.0", value: add(left, numLit(1, loc)), loc },
162
+ ],
163
+ loc,
164
+ },
165
+ { kind: "assign", localId: "k.0", value: add(k, numLit(1, loc)), loc },
166
+ ],
167
+ loc,
168
+ },
169
+ {
170
+ kind: "while",
171
+ cond: lt(left, mid),
172
+ body: [
173
+ { kind: "varDecl", localId: "v.0", init: at(left), loc },
174
+ { kind: "arraySet", arr: dst, index: k, value: varRef("v.0", elem, loc), loc },
175
+ { kind: "assign", localId: "left.0", value: add(left, numLit(1, loc)), loc },
176
+ { kind: "assign", localId: "k.0", value: add(k, numLit(1, loc)), loc },
177
+ ],
178
+ loc,
179
+ },
180
+ {
181
+ kind: "while",
182
+ cond: lt(r, right),
183
+ body: [
184
+ { kind: "varDecl", localId: "v.0", init: at(r), loc },
185
+ { kind: "arraySet", arr: dst, index: k, value: varRef("v.0", elem, loc), loc },
186
+ { kind: "assign", localId: "r.0", value: add(r, numLit(1, loc)), loc },
187
+ { kind: "assign", localId: "k.0", value: add(k, numLit(1, loc)), loc },
188
+ ],
189
+ loc,
190
+ },
191
+ ];
192
+ const boundaryLeft = varRef("boundaryL.0", elem, loc);
193
+ const boundaryRight = varRef("boundaryR.0", elem, loc);
194
+ const mergeOrCopy = {
195
+ kind: "if",
196
+ cond: lt(mid, right),
197
+ then: [
198
+ { kind: "varDecl", localId: "boundaryL.0", init: at(sub(mid, numLit(1, loc))), loc },
199
+ { kind: "varDecl", localId: "boundaryR.0", init: at(mid), loc },
200
+ {
201
+ kind: "if",
202
+ cond: shouldTakeRight(boundaryLeft, boundaryRight),
203
+ then: mergeBody,
204
+ else_: [copyRange],
205
+ loc,
206
+ },
207
+ ],
208
+ else_: [copyRange],
209
+ loc,
210
+ };
211
+ const mergePass = {
212
+ kind: "for",
213
+ init: { kind: "varDecl", localId: "start.0", init: numLit(0, loc), loc },
214
+ cond: lt(start, valueCount),
215
+ update: { kind: "assign", localId: "start.0", value: add(start, add(width, width)), loc },
216
+ body: [
217
+ {
218
+ kind: "varDecl",
219
+ localId: "mid.0",
220
+ init: {
221
+ kind: "ternary",
222
+ cond: lt(add(start, width), valueCount),
223
+ then: add(start, width),
224
+ else_: valueCount,
225
+ type: F64,
226
+ loc,
227
+ },
228
+ loc,
229
+ },
230
+ {
231
+ kind: "varDecl",
232
+ localId: "right.0",
233
+ init: {
234
+ kind: "ternary",
235
+ cond: lt(add(add(start, width), width), valueCount),
236
+ then: add(add(start, width), width),
237
+ else_: valueCount,
238
+ type: F64,
239
+ loc,
240
+ },
241
+ loc,
242
+ },
243
+ { kind: "varDecl", localId: "left.0", init: start, loc },
244
+ { kind: "varDecl", localId: "r.0", init: mid, loc },
245
+ { kind: "varDecl", localId: "k.0", init: start, loc },
246
+ mergeOrCopy,
247
+ ],
248
+ loc,
249
+ };
250
+ const collect = {
251
+ kind: "for",
252
+ init: { kind: "varDecl", localId: "i.0", init: numLit(0, loc), loc },
253
+ cond: lt(i, n),
254
+ update: { kind: "assign", localId: "i.0", value: add(i, numLit(1, loc)), loc },
255
+ body: [
256
+ { kind: "varDecl", localId: "state.0", init: stateAt(i), loc },
257
+ {
258
+ kind: "if",
259
+ cond: stateIs(1),
260
+ then: [
261
+ { kind: "varDecl", localId: "v.0", init: snapshotAt(i), loc },
262
+ { kind: "arraySet", arr: src, index: valueCount, value: varRef("v.0", elem, loc), loc },
263
+ { kind: "assign", localId: "valueCount.0", value: add(valueCount, numLit(1, loc)), loc },
264
+ ],
265
+ else_: [
266
+ {
267
+ kind: "if",
268
+ cond: stateIs(2),
269
+ then: [{ kind: "assign", localId: "undefinedCount.0", value: add(undefinedCount, numLit(1, loc)), loc }],
270
+ else_: null,
271
+ loc,
272
+ },
273
+ ],
274
+ loc,
275
+ },
276
+ ],
277
+ loc,
278
+ };
279
+ const writeValues = {
280
+ kind: "for",
281
+ init: { kind: "varDecl", localId: "i.0", init: numLit(0, loc), loc },
282
+ cond: lt(i, valueCount),
283
+ update: { kind: "assign", localId: "i.0", value: add(i, numLit(1, loc)), loc },
284
+ body: [
285
+ { kind: "varDecl", localId: "v.0", init: at(i), loc },
286
+ { kind: "arraySet", arr: a, index: i, value: varRef("v.0", elem, loc), loc },
287
+ ],
288
+ loc,
289
+ };
290
+ const writeUndefined = {
291
+ kind: "for",
292
+ init: { kind: "varDecl", localId: "j.0", init: valueCount, loc },
293
+ cond: lt(j, copyFirst ? n : add(valueCount, undefinedCount)),
294
+ update: { kind: "assign", localId: "j.0", value: add(j, numLit(1, loc)), loc },
295
+ body: [{ kind: "arraySetUndefined", arr: a, index: j, loc }],
296
+ loc,
297
+ };
298
+ const deleteRemaining = {
299
+ kind: "for",
300
+ init: { kind: "varDecl", localId: "j.0", init: add(valueCount, undefinedCount), loc },
301
+ cond: lt(j, n),
302
+ update: { kind: "assign", localId: "j.0", value: add(j, numLit(1, loc)), loc },
303
+ body: [{ kind: "arrayDelete", arr: a, index: j, loc }],
304
+ loc,
305
+ };
306
+ const body = [
307
+ ...(copyFirst
308
+ ? [{
309
+ kind: "assign",
310
+ localId: "a.0",
311
+ value: {
312
+ kind: "arrIntrinsic",
313
+ method: "slice",
314
+ receiver: varRef("a.0", arrT, loc),
315
+ args: [],
316
+ type: arrT,
317
+ loc,
318
+ },
319
+ loc,
320
+ }]
321
+ : []),
322
+ readArrayLength(arrT, loc),
323
+ { kind: "varDecl", localId: "snapshot.0", init: { kind: "arrIntrinsic", method: "slice", receiver: a, args: [], type: arrT, loc }, loc },
324
+ { kind: "varDecl", localId: "src.0", init: { kind: "arrayLit", elems: [], type: arrT, loc }, loc },
325
+ { kind: "varDecl", localId: "valueCount.0", init: numLit(0, loc), loc },
326
+ { kind: "varDecl", localId: "undefinedCount.0", init: numLit(0, loc), loc },
327
+ collect,
328
+ { kind: "varDecl", localId: "dst.0", init: { kind: "arrayLit", elems: [], type: arrT, loc }, loc },
329
+ { kind: "varDecl", localId: "width.0", init: numLit(1, loc), loc },
330
+ {
331
+ kind: "while",
332
+ cond: lt(width, valueCount),
333
+ body: [
334
+ mergePass,
335
+ { kind: "varDecl", localId: "tmp.0", init: src, loc },
336
+ { kind: "assign", localId: "src.0", value: dst, loc },
337
+ { kind: "assign", localId: "dst.0", value: varRef("tmp.0", arrT, loc), loc },
338
+ { kind: "assign", localId: "width.0", value: mul(width, numLit(2, loc)), loc },
339
+ ],
340
+ loc,
341
+ },
342
+ writeValues,
343
+ writeUndefined,
344
+ ...(copyFirst ? [] : [deleteRemaining]),
345
+ { kind: "return", value: a, loc },
346
+ ];
347
+ return {
348
+ name,
349
+ params: [
350
+ { localId: "a.0", name: "a", type: arrT },
351
+ { localId: "f.0", name: "f", type: fnT },
352
+ ],
353
+ returnType: arrT,
354
+ locals: [
355
+ { id: "a.0", name: "a", type: arrT, mutable: true },
356
+ { id: "f.0", name: "f", type: fnT, mutable: true },
357
+ { id: "n.0", name: "n", type: F64, mutable: false },
358
+ { id: "snapshot.0", name: "snapshot", type: arrT, mutable: false },
359
+ { id: "src.0", name: "src", type: arrT, mutable: true },
360
+ { id: "dst.0", name: "dst", type: arrT, mutable: true },
361
+ { id: "valueCount.0", name: "valueCount", type: F64, mutable: true },
362
+ { id: "undefinedCount.0", name: "undefinedCount", type: F64, mutable: true },
363
+ { id: "state.0", name: "state", type: F64, mutable: false },
364
+ { id: "width.0", name: "width", type: F64, mutable: true },
365
+ { id: "start.0", name: "start", type: F64, mutable: true },
366
+ { id: "mid.0", name: "mid", type: F64, mutable: true },
367
+ { id: "right.0", name: "right", type: F64, mutable: true },
368
+ { id: "left.0", name: "left", type: F64, mutable: true },
369
+ { id: "r.0", name: "r", type: F64, mutable: true },
370
+ { id: "k.0", name: "k", type: F64, mutable: true },
371
+ { id: "i.0", name: "i", type: F64, mutable: true },
372
+ { id: "j.0", name: "j", type: F64, mutable: true },
373
+ { id: "tmp.0", name: "tmp", type: arrT, mutable: true },
374
+ { id: "v.0", name: "v", type: elem, mutable: false },
375
+ { id: "vL.0", name: "vL", type: elem, mutable: false },
376
+ { id: "vR.0", name: "vR", type: elem, mutable: false },
377
+ { id: "boundaryL.0", name: "boundaryL", type: elem, mutable: false },
378
+ { id: "boundaryR.0", name: "boundaryR", type: elem, mutable: false },
379
+ ],
380
+ body,
381
+ loc,
382
+ };
383
+ }
384
+ export function buildBytesSortFn(name, arity, hasComparator, loc) {
385
+ const bytesT = BYTES_U8;
386
+ const fnT = funcOf([F64, F64].slice(0, arity), F64);
387
+ const a = varRef("a.0", bytesT, loc);
388
+ const src = varRef("src.0", bytesT, loc);
389
+ const dst = varRef("dst.0", bytesT, loc);
390
+ const n = varRef("n.0", F64, loc);
391
+ const width = varRef("width.0", F64, loc);
392
+ const start = varRef("start.0", F64, loc);
393
+ const mid = varRef("mid.0", F64, loc);
394
+ const right = varRef("right.0", F64, loc);
395
+ const left = varRef("left.0", F64, loc);
396
+ const r = varRef("r.0", F64, loc);
397
+ const k = varRef("k.0", F64, loc);
398
+ const add = (left, right) => ({ kind: "bin", op: "+", left, right, type: F64, loc });
399
+ const sub = (left, right) => ({ kind: "bin", op: "-", left, right, type: F64, loc });
400
+ const mul = (left, right) => ({ kind: "bin", op: "*", left, right, type: F64, loc });
401
+ const lt = (left, right) => ({ kind: "bin", op: "<", left, right, type: BOOL, loc });
402
+ const at = (receiver, index) => ({
403
+ kind: "bytesIntrinsic",
404
+ method: "get",
405
+ receiver,
406
+ args: [index],
407
+ type: F64,
408
+ loc,
409
+ });
410
+ const shouldTakeRight = (leftValue, rightValue) => ({
411
+ kind: "bin",
412
+ op: ">",
413
+ left: hasComparator
414
+ ? {
415
+ kind: "callValue",
416
+ callee: varRef("f.0", fnT, loc),
417
+ args: [leftValue, rightValue].slice(0, arity),
418
+ type: F64,
419
+ loc,
420
+ }
421
+ : {
422
+ kind: "bin",
423
+ op: "-",
424
+ left: leftValue,
425
+ right: rightValue,
426
+ type: F64,
427
+ loc,
428
+ },
429
+ right: numLit(0, loc),
430
+ type: BOOL,
431
+ loc,
432
+ });
433
+ const copyRange = {
434
+ kind: "while",
435
+ cond: lt(k, right),
436
+ body: [
437
+ { kind: "varDecl", localId: "v.0", init: at(src, k), loc },
438
+ { kind: "bytesSet", arr: dst, index: k, value: varRef("v.0", F64, loc), loc },
439
+ { kind: "assign", localId: "k.0", value: add(k, numLit(1, loc)), loc },
440
+ ],
441
+ loc,
442
+ };
443
+ const mergeBody = [
444
+ {
445
+ kind: "while",
446
+ cond: {
447
+ kind: "logical",
448
+ op: "&&",
449
+ left: lt(left, mid),
450
+ right: lt(r, right),
451
+ type: BOOL,
452
+ loc,
453
+ },
454
+ body: [
455
+ { kind: "varDecl", localId: "vL.0", init: at(src, left), loc },
456
+ { kind: "varDecl", localId: "vR.0", init: at(src, r), loc },
457
+ {
458
+ kind: "if",
459
+ cond: shouldTakeRight(varRef("vL.0", F64, loc), varRef("vR.0", F64, loc)),
460
+ then: [
461
+ { kind: "bytesSet", arr: dst, index: k, value: varRef("vR.0", F64, loc), loc },
462
+ { kind: "assign", localId: "r.0", value: add(r, numLit(1, loc)), loc },
463
+ ],
464
+ else_: [
465
+ { kind: "bytesSet", arr: dst, index: k, value: varRef("vL.0", F64, loc), loc },
466
+ { kind: "assign", localId: "left.0", value: add(left, numLit(1, loc)), loc },
467
+ ],
468
+ loc,
469
+ },
470
+ { kind: "assign", localId: "k.0", value: add(k, numLit(1, loc)), loc },
471
+ ],
472
+ loc,
473
+ },
474
+ {
475
+ kind: "while",
476
+ cond: lt(left, mid),
477
+ body: [
478
+ { kind: "varDecl", localId: "v.0", init: at(src, left), loc },
479
+ { kind: "bytesSet", arr: dst, index: k, value: varRef("v.0", F64, loc), loc },
480
+ { kind: "assign", localId: "left.0", value: add(left, numLit(1, loc)), loc },
481
+ { kind: "assign", localId: "k.0", value: add(k, numLit(1, loc)), loc },
482
+ ],
483
+ loc,
484
+ },
485
+ {
486
+ kind: "while",
487
+ cond: lt(r, right),
488
+ body: [
489
+ { kind: "varDecl", localId: "v.0", init: at(src, r), loc },
490
+ { kind: "bytesSet", arr: dst, index: k, value: varRef("v.0", F64, loc), loc },
491
+ { kind: "assign", localId: "r.0", value: add(r, numLit(1, loc)), loc },
492
+ { kind: "assign", localId: "k.0", value: add(k, numLit(1, loc)), loc },
493
+ ],
494
+ loc,
495
+ },
496
+ ];
497
+ const mergeOrCopy = {
498
+ kind: "if",
499
+ cond: lt(mid, right),
500
+ then: [
501
+ { kind: "varDecl", localId: "boundaryL.0", init: at(src, sub(mid, numLit(1, loc))), loc },
502
+ { kind: "varDecl", localId: "boundaryR.0", init: at(src, mid), loc },
503
+ {
504
+ kind: "if",
505
+ cond: shouldTakeRight(varRef("boundaryL.0", F64, loc), varRef("boundaryR.0", F64, loc)),
506
+ then: mergeBody,
507
+ else_: [copyRange],
508
+ loc,
509
+ },
510
+ ],
511
+ else_: [copyRange],
512
+ loc,
513
+ };
514
+ const mergePass = {
515
+ kind: "for",
516
+ init: { kind: "varDecl", localId: "start.0", init: numLit(0, loc), loc },
517
+ cond: lt(start, n),
518
+ update: { kind: "assign", localId: "start.0", value: add(start, add(width, width)), loc },
519
+ body: [
520
+ {
521
+ kind: "varDecl",
522
+ localId: "mid.0",
523
+ init: {
524
+ kind: "ternary",
525
+ cond: lt(add(start, width), n),
526
+ then: add(start, width),
527
+ else_: n,
528
+ type: F64,
529
+ loc,
530
+ },
531
+ loc,
532
+ },
533
+ {
534
+ kind: "varDecl",
535
+ localId: "right.0",
536
+ init: {
537
+ kind: "ternary",
538
+ cond: lt(add(add(start, width), width), n),
539
+ then: add(add(start, width), width),
540
+ else_: n,
541
+ type: F64,
542
+ loc,
543
+ },
544
+ loc,
545
+ },
546
+ { kind: "varDecl", localId: "left.0", init: start, loc },
547
+ { kind: "varDecl", localId: "r.0", init: mid, loc },
548
+ { kind: "varDecl", localId: "k.0", init: start, loc },
549
+ mergeOrCopy,
550
+ ],
551
+ loc,
552
+ };
553
+ const params = [
554
+ { localId: "a.0", name: "a", type: bytesT },
555
+ ...(hasComparator ? [{ localId: "f.0", name: "f", type: fnT }] : []),
556
+ ];
557
+ const locals = [
558
+ { id: "a.0", name: "a", type: bytesT, mutable: true },
559
+ ...(hasComparator ? [{ id: "f.0", name: "f", type: fnT, mutable: true }] : []),
560
+ { id: "n.0", name: "n", type: F64, mutable: false },
561
+ { id: "src.0", name: "src", type: bytesT, mutable: true },
562
+ { id: "dst.0", name: "dst", type: bytesT, mutable: true },
563
+ { id: "width.0", name: "width", type: F64, mutable: true },
564
+ { id: "start.0", name: "start", type: F64, mutable: true },
565
+ { id: "mid.0", name: "mid", type: F64, mutable: true },
566
+ { id: "right.0", name: "right", type: F64, mutable: true },
567
+ { id: "left.0", name: "left", type: F64, mutable: true },
568
+ { id: "r.0", name: "r", type: F64, mutable: true },
569
+ { id: "k.0", name: "k", type: F64, mutable: true },
570
+ { id: "i.0", name: "i", type: F64, mutable: true },
571
+ { id: "tmp.0", name: "tmp", type: bytesT, mutable: true },
572
+ { id: "v.0", name: "v", type: F64, mutable: false },
573
+ { id: "vL.0", name: "vL", type: F64, mutable: false },
574
+ { id: "vR.0", name: "vR", type: F64, mutable: false },
575
+ { id: "boundaryL.0", name: "boundaryL", type: F64, mutable: false },
576
+ { id: "boundaryR.0", name: "boundaryR", type: F64, mutable: false },
577
+ ];
578
+ const slice = (receiver) => ({
579
+ kind: "bytesIntrinsic",
580
+ method: "slice",
581
+ receiver,
582
+ args: [],
583
+ type: bytesT,
584
+ loc,
585
+ });
586
+ const body = [
587
+ { kind: "assign", localId: "a.0", value: slice(a), loc },
588
+ { kind: "varDecl", localId: "n.0", init: { kind: "bytesIntrinsic", method: "length", receiver: a, args: [], type: F64, loc }, loc },
589
+ { kind: "varDecl", localId: "src.0", init: slice(a), loc },
590
+ { kind: "varDecl", localId: "dst.0", init: slice(a), loc },
591
+ { kind: "varDecl", localId: "width.0", init: numLit(1, loc), loc },
592
+ {
593
+ kind: "while",
594
+ cond: lt(width, n),
595
+ body: [
596
+ mergePass,
597
+ { kind: "varDecl", localId: "tmp.0", init: src, loc },
598
+ { kind: "assign", localId: "src.0", value: dst, loc },
599
+ { kind: "assign", localId: "dst.0", value: varRef("tmp.0", bytesT, loc), loc },
600
+ { kind: "assign", localId: "width.0", value: mul(width, numLit(2, loc)), loc },
601
+ ],
602
+ loc,
603
+ },
604
+ {
605
+ kind: "for",
606
+ init: { kind: "varDecl", localId: "i.0", init: numLit(0, loc), loc },
607
+ cond: lt(varRef("i.0", F64, loc), n),
608
+ update: { kind: "assign", localId: "i.0", value: add(varRef("i.0", F64, loc), numLit(1, loc)), loc },
609
+ body: [
610
+ { kind: "varDecl", localId: "v.0", init: at(src, varRef("i.0", F64, loc)), loc },
611
+ { kind: "bytesSet", arr: a, index: varRef("i.0", F64, loc), value: varRef("v.0", F64, loc), loc },
612
+ ],
613
+ loc,
614
+ },
615
+ { kind: "return", value: a, loc },
616
+ ];
617
+ return { name, params, returnType: bytesT, locals, body, loc };
618
+ }
619
+ //# sourceMappingURL=lower-array-sort.js.map