edict-lang 1.2.0 → 1.6.0

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 (227) hide show
  1. package/README.md +39 -13
  2. package/dist/ast/nodes.d.ts +4 -3
  3. package/dist/ast/nodes.d.ts.map +1 -1
  4. package/dist/ast/nodes.js +1 -0
  5. package/dist/ast/nodes.js.map +1 -1
  6. package/dist/ast/type-constants.d.ts +12 -0
  7. package/dist/ast/type-constants.d.ts.map +1 -0
  8. package/dist/ast/type-constants.js +16 -0
  9. package/dist/ast/type-constants.js.map +1 -0
  10. package/dist/ast/types.d.ts +1 -1
  11. package/dist/ast/types.d.ts.map +1 -1
  12. package/dist/builtins/builtin-enums.d.ts +12 -0
  13. package/dist/builtins/builtin-enums.d.ts.map +1 -0
  14. package/dist/builtins/builtin-enums.js +45 -0
  15. package/dist/builtins/builtin-enums.js.map +1 -0
  16. package/dist/builtins/builtin-types.d.ts +20 -0
  17. package/dist/builtins/builtin-types.d.ts.map +1 -0
  18. package/dist/builtins/builtin-types.js +6 -0
  19. package/dist/builtins/builtin-types.js.map +1 -0
  20. package/dist/builtins/builtins.d.ts +3 -0
  21. package/dist/builtins/builtins.d.ts.map +1 -0
  22. package/dist/builtins/builtins.js +3 -0
  23. package/dist/builtins/builtins.js.map +1 -0
  24. package/dist/builtins/domains/array.d.ts +3 -0
  25. package/dist/builtins/domains/array.d.ts.map +1 -0
  26. package/dist/builtins/domains/array.js +236 -0
  27. package/dist/builtins/domains/array.js.map +1 -0
  28. package/dist/builtins/domains/core.d.ts +3 -0
  29. package/dist/builtins/domains/core.d.ts.map +1 -0
  30. package/dist/builtins/domains/core.js +45 -0
  31. package/dist/builtins/domains/core.js.map +1 -0
  32. package/dist/builtins/domains/crypto.d.ts +3 -0
  33. package/dist/builtins/domains/crypto.d.ts.map +1 -0
  34. package/dist/builtins/domains/crypto.js +49 -0
  35. package/dist/builtins/domains/crypto.js.map +1 -0
  36. package/dist/builtins/domains/datetime.d.ts +3 -0
  37. package/dist/builtins/domains/datetime.d.ts.map +1 -0
  38. package/dist/builtins/domains/datetime.js +45 -0
  39. package/dist/builtins/domains/datetime.js.map +1 -0
  40. package/dist/builtins/domains/http.d.ts +3 -0
  41. package/dist/builtins/domains/http.d.ts.map +1 -0
  42. package/dist/builtins/domains/http.js +55 -0
  43. package/dist/builtins/domains/http.js.map +1 -0
  44. package/dist/builtins/domains/int64.d.ts +3 -0
  45. package/dist/builtins/domains/int64.d.ts.map +1 -0
  46. package/dist/builtins/domains/int64.js +31 -0
  47. package/dist/builtins/domains/int64.js.map +1 -0
  48. package/dist/builtins/domains/io.d.ts +3 -0
  49. package/dist/builtins/domains/io.d.ts.map +1 -0
  50. package/dist/builtins/domains/io.js +79 -0
  51. package/dist/builtins/domains/io.js.map +1 -0
  52. package/dist/builtins/domains/json.d.ts +3 -0
  53. package/dist/builtins/domains/json.d.ts.map +1 -0
  54. package/dist/builtins/domains/json.js +47 -0
  55. package/dist/builtins/domains/json.js.map +1 -0
  56. package/dist/builtins/domains/math.d.ts +3 -0
  57. package/dist/builtins/domains/math.d.ts.map +1 -0
  58. package/dist/builtins/domains/math.js +47 -0
  59. package/dist/builtins/domains/math.js.map +1 -0
  60. package/dist/builtins/domains/option.d.ts +3 -0
  61. package/dist/builtins/domains/option.d.ts.map +1 -0
  62. package/dist/builtins/domains/option.js +56 -0
  63. package/dist/builtins/domains/option.js.map +1 -0
  64. package/dist/builtins/domains/random.d.ts +3 -0
  65. package/dist/builtins/domains/random.d.ts.map +1 -0
  66. package/dist/builtins/domains/random.js +50 -0
  67. package/dist/builtins/domains/random.js.map +1 -0
  68. package/dist/builtins/domains/regex.d.ts +3 -0
  69. package/dist/builtins/domains/regex.d.ts.map +1 -0
  70. package/dist/builtins/domains/regex.js +69 -0
  71. package/dist/builtins/domains/regex.js.map +1 -0
  72. package/dist/builtins/domains/result.d.ts +3 -0
  73. package/dist/builtins/domains/result.d.ts.map +1 -0
  74. package/dist/builtins/domains/result.js +84 -0
  75. package/dist/builtins/domains/result.js.map +1 -0
  76. package/dist/builtins/domains/string.d.ts +3 -0
  77. package/dist/builtins/domains/string.d.ts.map +1 -0
  78. package/dist/builtins/domains/string.js +139 -0
  79. package/dist/builtins/domains/string.js.map +1 -0
  80. package/dist/builtins/domains/type-conversion.d.ts +3 -0
  81. package/dist/builtins/domains/type-conversion.d.ts.map +1 -0
  82. package/dist/builtins/domains/type-conversion.js +42 -0
  83. package/dist/builtins/domains/type-conversion.js.map +1 -0
  84. package/dist/builtins/host-helpers.d.ts +66 -0
  85. package/dist/builtins/host-helpers.d.ts.map +1 -0
  86. package/dist/builtins/host-helpers.js +127 -0
  87. package/dist/builtins/host-helpers.js.map +1 -0
  88. package/dist/builtins/registry.d.ts +48 -0
  89. package/dist/builtins/registry.d.ts.map +1 -0
  90. package/dist/builtins/registry.js +118 -0
  91. package/dist/builtins/registry.js.map +1 -0
  92. package/dist/check.d.ts +9 -2
  93. package/dist/check.d.ts.map +1 -1
  94. package/dist/check.js +30 -9
  95. package/dist/check.js.map +1 -1
  96. package/dist/checker/check.d.ts +18 -1
  97. package/dist/checker/check.d.ts.map +1 -1
  98. package/dist/checker/check.js +157 -108
  99. package/dist/checker/check.js.map +1 -1
  100. package/dist/checker/type-env.d.ts +2 -0
  101. package/dist/checker/type-env.d.ts.map +1 -1
  102. package/dist/checker/type-env.js +9 -0
  103. package/dist/checker/type-env.js.map +1 -1
  104. package/dist/codegen/browser-host-adapter.d.ts +29 -0
  105. package/dist/codegen/browser-host-adapter.d.ts.map +1 -0
  106. package/dist/codegen/browser-host-adapter.js +51 -0
  107. package/dist/codegen/browser-host-adapter.js.map +1 -0
  108. package/dist/codegen/builtins.d.ts +2 -26
  109. package/dist/codegen/builtins.d.ts.map +1 -1
  110. package/dist/codegen/builtins.js +2 -341
  111. package/dist/codegen/builtins.js.map +1 -1
  112. package/dist/codegen/closures.d.ts +17 -0
  113. package/dist/codegen/closures.d.ts.map +1 -0
  114. package/dist/codegen/closures.js +140 -0
  115. package/dist/codegen/closures.js.map +1 -0
  116. package/dist/codegen/codegen.d.ts +6 -30
  117. package/dist/codegen/codegen.d.ts.map +1 -1
  118. package/dist/codegen/codegen.js +154 -1103
  119. package/dist/codegen/codegen.js.map +1 -1
  120. package/dist/codegen/collect-strings.d.ts +4 -0
  121. package/dist/codegen/collect-strings.d.ts.map +1 -0
  122. package/dist/codegen/collect-strings.js +76 -0
  123. package/dist/codegen/collect-strings.js.map +1 -0
  124. package/dist/codegen/compile-calls.d.ts +10 -0
  125. package/dist/codegen/compile-calls.d.ts.map +1 -0
  126. package/dist/codegen/compile-calls.js +374 -0
  127. package/dist/codegen/compile-calls.js.map +1 -0
  128. package/dist/codegen/compile-data.d.ts +22 -0
  129. package/dist/codegen/compile-data.d.ts.map +1 -0
  130. package/dist/codegen/compile-data.js +243 -0
  131. package/dist/codegen/compile-data.js.map +1 -0
  132. package/dist/codegen/compile-expr.d.ts +10 -0
  133. package/dist/codegen/compile-expr.d.ts.map +1 -0
  134. package/dist/codegen/compile-expr.js +156 -0
  135. package/dist/codegen/compile-expr.js.map +1 -0
  136. package/dist/codegen/compile-match.d.ts +7 -0
  137. package/dist/codegen/compile-match.d.ts.map +1 -0
  138. package/dist/codegen/compile-match.js +195 -0
  139. package/dist/codegen/compile-match.js.map +1 -0
  140. package/dist/codegen/compile-scalars.d.ts +25 -0
  141. package/dist/codegen/compile-scalars.d.ts.map +1 -0
  142. package/dist/codegen/compile-scalars.js +211 -0
  143. package/dist/codegen/compile-scalars.js.map +1 -0
  144. package/dist/codegen/hof-generators.d.ts +39 -0
  145. package/dist/codegen/hof-generators.d.ts.map +1 -0
  146. package/dist/codegen/hof-generators.js +336 -0
  147. package/dist/codegen/hof-generators.js.map +1 -0
  148. package/dist/codegen/host-adapter.d.ts +44 -0
  149. package/dist/codegen/host-adapter.d.ts.map +1 -0
  150. package/dist/codegen/host-adapter.js +9 -0
  151. package/dist/codegen/host-adapter.js.map +1 -0
  152. package/dist/codegen/imports.d.ts +15 -0
  153. package/dist/codegen/imports.d.ts.map +1 -0
  154. package/dist/codegen/imports.js +165 -0
  155. package/dist/codegen/imports.js.map +1 -0
  156. package/dist/codegen/node-host-adapter.d.ts +35 -0
  157. package/dist/codegen/node-host-adapter.d.ts.map +1 -0
  158. package/dist/codegen/node-host-adapter.js +155 -0
  159. package/dist/codegen/node-host-adapter.js.map +1 -0
  160. package/dist/codegen/runner.d.ts +36 -2
  161. package/dist/codegen/runner.d.ts.map +1 -1
  162. package/dist/codegen/runner.js +147 -271
  163. package/dist/codegen/runner.js.map +1 -1
  164. package/dist/codegen/types.d.ts +96 -0
  165. package/dist/codegen/types.d.ts.map +1 -0
  166. package/dist/codegen/types.js +63 -0
  167. package/dist/codegen/types.js.map +1 -0
  168. package/dist/compact/expand.d.ts +25 -0
  169. package/dist/compact/expand.d.ts.map +1 -0
  170. package/dist/compact/expand.js +199 -0
  171. package/dist/compact/expand.js.map +1 -0
  172. package/dist/compile.d.ts +2 -1
  173. package/dist/compile.d.ts.map +1 -1
  174. package/dist/compile.js +2 -2
  175. package/dist/compile.js.map +1 -1
  176. package/dist/contracts/translate.js.map +1 -1
  177. package/dist/contracts/verify.d.ts +10 -2
  178. package/dist/contracts/verify.d.ts.map +1 -1
  179. package/dist/contracts/verify.js +26 -21
  180. package/dist/contracts/verify.js.map +1 -1
  181. package/dist/effects/call-graph.d.ts.map +1 -1
  182. package/dist/effects/call-graph.js +27 -4
  183. package/dist/effects/call-graph.js.map +1 -1
  184. package/dist/effects/effect-check.d.ts +10 -2
  185. package/dist/effects/effect-check.d.ts.map +1 -1
  186. package/dist/effects/effect-check.js +12 -7
  187. package/dist/effects/effect-check.js.map +1 -1
  188. package/dist/errors/error-catalog.d.ts +1 -1
  189. package/dist/errors/error-catalog.d.ts.map +1 -1
  190. package/dist/errors/error-catalog.js +119 -0
  191. package/dist/errors/error-catalog.js.map +1 -1
  192. package/dist/errors/structured-errors.d.ts +28 -1
  193. package/dist/errors/structured-errors.d.ts.map +1 -1
  194. package/dist/errors/structured-errors.js +9 -0
  195. package/dist/errors/structured-errors.js.map +1 -1
  196. package/dist/index.d.ts +20 -9
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +26 -10
  199. package/dist/index.js.map +1 -1
  200. package/dist/lint/lint.d.ts +9 -0
  201. package/dist/lint/lint.d.ts.map +1 -0
  202. package/dist/lint/lint.js +354 -0
  203. package/dist/lint/lint.js.map +1 -0
  204. package/dist/lint/warnings.d.ts +54 -0
  205. package/dist/lint/warnings.d.ts.map +1 -0
  206. package/dist/lint/warnings.js +39 -0
  207. package/dist/lint/warnings.js.map +1 -0
  208. package/dist/mcp/create-server.d.ts.map +1 -1
  209. package/dist/mcp/create-server.js +66 -5
  210. package/dist/mcp/create-server.js.map +1 -1
  211. package/dist/mcp/handlers.d.ts +21 -5
  212. package/dist/mcp/handlers.d.ts.map +1 -1
  213. package/dist/mcp/handlers.js +65 -15
  214. package/dist/mcp/handlers.js.map +1 -1
  215. package/dist/mcp/prompts.d.ts +17 -0
  216. package/dist/mcp/prompts.d.ts.map +1 -0
  217. package/dist/mcp/prompts.js +181 -0
  218. package/dist/mcp/prompts.js.map +1 -0
  219. package/dist/mcp/server.js +1 -4
  220. package/dist/mcp/server.js.map +1 -1
  221. package/dist/resolver/resolve.d.ts.map +1 -1
  222. package/dist/resolver/resolve.js +62 -16
  223. package/dist/resolver/resolve.js.map +1 -1
  224. package/dist/validator/node-validators.d.ts.map +1 -1
  225. package/dist/validator/node-validators.js +60 -5
  226. package/dist/validator/node-validators.js.map +1 -1
  227. package/package.json +4 -2
@@ -0,0 +1,336 @@
1
+ // =============================================================================
2
+ // HOF Array Builtin WASM Generation
3
+ // =============================================================================
4
+ // These builtins need call_indirect to invoke closure arguments, so they
5
+ // are generated as internal WASM functions rather than host imports.
6
+ //
7
+ // Array layout: [length:i32][elem0:i32][elem1:i32]...
8
+ // Closure pair: [table_index:i32][env_ptr:i32]
9
+ // Closure calling convention: call_indirect(table, idx, [env_ptr, ...args])
10
+ import binaryen from "binaryen";
11
+ /**
12
+ * Generate array_map(arrPtr: i32, closurePtr: i32) → i32
13
+ *
14
+ * Allocates a new array, maps each element through the closure, returns result ptr.
15
+ */
16
+ export function generateArrayMap(mod) {
17
+ // Params: arrPtr=0, closurePtr=1
18
+ // Locals: length=2, tableIdx=3, envPtr=4, resultPtr=5, i=6
19
+ const paramType = binaryen.createType([binaryen.i32, binaryen.i32]);
20
+ const vars = [
21
+ binaryen.i32, // length
22
+ binaryen.i32, // tableIdx
23
+ binaryen.i32, // envPtr
24
+ binaryen.i32, // resultPtr
25
+ binaryen.i32, // i
26
+ ];
27
+ const arrPtr = 0, closurePtr = 1, length = 2, tableIdx = 3, envPtr = 4, resultPtr = 5, idx = 6;
28
+ // callbackType: (env:i32, elem:i32) → i32
29
+ const callbackParamType = binaryen.createType([binaryen.i32, binaryen.i32]);
30
+ const body = mod.block(null, [
31
+ // length = i32.load(arrPtr, 0)
32
+ mod.local.set(length, mod.i32.load(0, 0, mod.local.get(arrPtr, binaryen.i32))),
33
+ // tableIdx = i32.load(closurePtr, 0)
34
+ mod.local.set(tableIdx, mod.i32.load(0, 0, mod.local.get(closurePtr, binaryen.i32))),
35
+ // envPtr = i32.load(closurePtr, 4)
36
+ mod.local.set(envPtr, mod.i32.load(4, 0, mod.local.get(closurePtr, binaryen.i32))),
37
+ // resultPtr = __heap_ptr
38
+ mod.local.set(resultPtr, mod.global.get("__heap_ptr", binaryen.i32)),
39
+ // __heap_ptr += 4 + length * 4
40
+ mod.global.set("__heap_ptr", mod.i32.add(mod.global.get("__heap_ptr", binaryen.i32), mod.i32.add(mod.i32.const(4), mod.i32.mul(mod.local.get(length, binaryen.i32), mod.i32.const(4))))),
41
+ // i32.store(resultPtr, 0, length)
42
+ mod.i32.store(0, 0, mod.local.get(resultPtr, binaryen.i32), mod.local.get(length, binaryen.i32)),
43
+ // i = 0
44
+ mod.local.set(idx, mod.i32.const(0)),
45
+ // loop
46
+ mod.if(mod.i32.gt_s(mod.local.get(length, binaryen.i32), mod.i32.const(0)), mod.loop("map_loop", mod.block(null, [
47
+ // result[i] = call_indirect(tableIdx, [envPtr, arr[i]])
48
+ mod.i32.store(4, 0, // offset 4 + i*4 from resultPtr
49
+ mod.i32.add(mod.local.get(resultPtr, binaryen.i32), mod.i32.mul(mod.local.get(idx, binaryen.i32), mod.i32.const(4))), mod.call_indirect("__fn_table", mod.local.get(tableIdx, binaryen.i32), [
50
+ mod.local.get(envPtr, binaryen.i32),
51
+ // arr[i] = i32.load(arrPtr + 4 + i*4)
52
+ mod.i32.load(4, 0, mod.i32.add(mod.local.get(arrPtr, binaryen.i32), mod.i32.mul(mod.local.get(idx, binaryen.i32), mod.i32.const(4)))),
53
+ ], callbackParamType, binaryen.i32)),
54
+ // i++
55
+ mod.local.set(idx, mod.i32.add(mod.local.get(idx, binaryen.i32), mod.i32.const(1))),
56
+ // br_if map_loop (i < length)
57
+ mod.br("map_loop", mod.i32.lt_s(mod.local.get(idx, binaryen.i32), mod.local.get(length, binaryen.i32))),
58
+ ], binaryen.none))),
59
+ // return resultPtr
60
+ mod.local.get(resultPtr, binaryen.i32),
61
+ ], binaryen.i32);
62
+ mod.addFunction("array_map", paramType, binaryen.i32, vars, body);
63
+ }
64
+ /**
65
+ * Generate array_filter(arrPtr: i32, closurePtr: i32) → i32
66
+ *
67
+ * Single-pass overalloc: allocates max-length result, filters in one pass,
68
+ * then writes actual count. Tail waste is acceptable (arena allocator).
69
+ */
70
+ export function generateArrayFilter(mod) {
71
+ // Params: arrPtr=0, closurePtr=1
72
+ // Locals: length=2, tableIdx=3, envPtr=4, resultPtr=5, i=6, count=7, elem=8
73
+ const paramType = binaryen.createType([binaryen.i32, binaryen.i32]);
74
+ const vars = [
75
+ binaryen.i32, // length
76
+ binaryen.i32, // tableIdx
77
+ binaryen.i32, // envPtr
78
+ binaryen.i32, // resultPtr
79
+ binaryen.i32, // i
80
+ binaryen.i32, // count
81
+ binaryen.i32, // elem
82
+ ];
83
+ const arrPtr = 0, closurePtr = 1, length = 2, tableIdx = 3, envPtr = 4, resultPtr = 5, idx = 6, count = 7, elem = 8;
84
+ // callbackType: (env:i32, elem:i32) → i32 (bool)
85
+ const callbackParamType = binaryen.createType([binaryen.i32, binaryen.i32]);
86
+ const body = mod.block(null, [
87
+ // length = i32.load(arrPtr, 0)
88
+ mod.local.set(length, mod.i32.load(0, 0, mod.local.get(arrPtr, binaryen.i32))),
89
+ // tableIdx = i32.load(closurePtr, 0)
90
+ mod.local.set(tableIdx, mod.i32.load(0, 0, mod.local.get(closurePtr, binaryen.i32))),
91
+ // envPtr = i32.load(closurePtr, 4)
92
+ mod.local.set(envPtr, mod.i32.load(4, 0, mod.local.get(closurePtr, binaryen.i32))),
93
+ // resultPtr = __heap_ptr (overalloc: 4 + length*4)
94
+ mod.local.set(resultPtr, mod.global.get("__heap_ptr", binaryen.i32)),
95
+ mod.global.set("__heap_ptr", mod.i32.add(mod.global.get("__heap_ptr", binaryen.i32), mod.i32.add(mod.i32.const(4), mod.i32.mul(mod.local.get(length, binaryen.i32), mod.i32.const(4))))),
96
+ // count = 0, i = 0
97
+ mod.local.set(count, mod.i32.const(0)),
98
+ mod.local.set(idx, mod.i32.const(0)),
99
+ // loop
100
+ mod.if(mod.i32.gt_s(mod.local.get(length, binaryen.i32), mod.i32.const(0)), mod.loop("filter_loop", mod.block(null, [
101
+ // elem = arr[i]
102
+ mod.local.set(elem, mod.i32.load(4, 0, mod.i32.add(mod.local.get(arrPtr, binaryen.i32), mod.i32.mul(mod.local.get(idx, binaryen.i32), mod.i32.const(4))))),
103
+ // if call_indirect(tableIdx, [envPtr, elem]) != 0
104
+ mod.if(mod.call_indirect("__fn_table", mod.local.get(tableIdx, binaryen.i32), [
105
+ mod.local.get(envPtr, binaryen.i32),
106
+ mod.local.get(elem, binaryen.i32),
107
+ ], callbackParamType, binaryen.i32), mod.block(null, [
108
+ // result[count] = elem
109
+ mod.i32.store(4, 0, mod.i32.add(mod.local.get(resultPtr, binaryen.i32), mod.i32.mul(mod.local.get(count, binaryen.i32), mod.i32.const(4))), mod.local.get(elem, binaryen.i32)),
110
+ // count++
111
+ mod.local.set(count, mod.i32.add(mod.local.get(count, binaryen.i32), mod.i32.const(1))),
112
+ ], binaryen.none)),
113
+ // i++
114
+ mod.local.set(idx, mod.i32.add(mod.local.get(idx, binaryen.i32), mod.i32.const(1))),
115
+ // br_if filter_loop (i < length)
116
+ mod.br("filter_loop", mod.i32.lt_s(mod.local.get(idx, binaryen.i32), mod.local.get(length, binaryen.i32))),
117
+ ], binaryen.none))),
118
+ // Write actual count as result length
119
+ mod.i32.store(0, 0, mod.local.get(resultPtr, binaryen.i32), mod.local.get(count, binaryen.i32)),
120
+ // return resultPtr
121
+ mod.local.get(resultPtr, binaryen.i32),
122
+ ], binaryen.i32);
123
+ mod.addFunction("array_filter", paramType, binaryen.i32, vars, body);
124
+ }
125
+ /**
126
+ * Generate array_reduce(arrPtr: i32, init: i32, closurePtr: i32) → i32
127
+ *
128
+ * Folds array elements into an accumulator via the closure.
129
+ */
130
+ export function generateArrayReduce(mod) {
131
+ // Params: arrPtr=0, init=1, closurePtr=2
132
+ // Locals: length=3, tableIdx=4, envPtr=5, acc=6, i=7
133
+ const paramType = binaryen.createType([binaryen.i32, binaryen.i32, binaryen.i32]);
134
+ const vars = [
135
+ binaryen.i32, // length
136
+ binaryen.i32, // tableIdx
137
+ binaryen.i32, // envPtr
138
+ binaryen.i32, // acc
139
+ binaryen.i32, // i
140
+ ];
141
+ const arrPtr = 0, init = 1, closurePtr = 2, length = 3, tableIdx = 4, envPtr = 5, acc = 6, idx = 7;
142
+ // callbackType: (env:i32, acc:i32, elem:i32) → i32
143
+ const callbackParamType = binaryen.createType([binaryen.i32, binaryen.i32, binaryen.i32]);
144
+ const body = mod.block(null, [
145
+ // length = i32.load(arrPtr, 0)
146
+ mod.local.set(length, mod.i32.load(0, 0, mod.local.get(arrPtr, binaryen.i32))),
147
+ // tableIdx = i32.load(closurePtr, 0)
148
+ mod.local.set(tableIdx, mod.i32.load(0, 0, mod.local.get(closurePtr, binaryen.i32))),
149
+ // envPtr = i32.load(closurePtr, 4)
150
+ mod.local.set(envPtr, mod.i32.load(4, 0, mod.local.get(closurePtr, binaryen.i32))),
151
+ // acc = init
152
+ mod.local.set(acc, mod.local.get(init, binaryen.i32)),
153
+ // i = 0
154
+ mod.local.set(idx, mod.i32.const(0)),
155
+ // loop
156
+ mod.if(mod.i32.gt_s(mod.local.get(length, binaryen.i32), mod.i32.const(0)), mod.loop("reduce_loop", mod.block(null, [
157
+ // acc = call_indirect(tableIdx, [envPtr, acc, arr[i]])
158
+ mod.local.set(acc, mod.call_indirect("__fn_table", mod.local.get(tableIdx, binaryen.i32), [
159
+ mod.local.get(envPtr, binaryen.i32),
160
+ mod.local.get(acc, binaryen.i32),
161
+ mod.i32.load(4, 0, mod.i32.add(mod.local.get(arrPtr, binaryen.i32), mod.i32.mul(mod.local.get(idx, binaryen.i32), mod.i32.const(4)))),
162
+ ], callbackParamType, binaryen.i32)),
163
+ // i++
164
+ mod.local.set(idx, mod.i32.add(mod.local.get(idx, binaryen.i32), mod.i32.const(1))),
165
+ // br_if reduce_loop (i < length)
166
+ mod.br("reduce_loop", mod.i32.lt_s(mod.local.get(idx, binaryen.i32), mod.local.get(length, binaryen.i32))),
167
+ ], binaryen.none))),
168
+ // return acc
169
+ mod.local.get(acc, binaryen.i32),
170
+ ], binaryen.i32);
171
+ mod.addFunction("array_reduce", paramType, binaryen.i32, vars, body);
172
+ }
173
+ /**
174
+ * Generate array_find(arrPtr: i32, closurePtr: i32) → i32
175
+ *
176
+ * Scans array, calls predicate on each element. Returns Option<Int>:
177
+ * - Some(elem): heap-allocated [tag=1][pad(4)][value][pad(4)]
178
+ * - None: heap-allocated [tag=0][pad(4)]
179
+ *
180
+ * Option layout matches the built-in enum: None=tag0/8 bytes, Some=tag1/16 bytes.
181
+ */
182
+ export function generateArrayFind(mod) {
183
+ // Params: arrPtr=0, closurePtr=1
184
+ // Locals: length=2, tableIdx=3, envPtr=4, i=5, elem=6, resultPtr=7
185
+ const paramType = binaryen.createType([binaryen.i32, binaryen.i32]);
186
+ const vars = [
187
+ binaryen.i32, // length
188
+ binaryen.i32, // tableIdx
189
+ binaryen.i32, // envPtr
190
+ binaryen.i32, // i
191
+ binaryen.i32, // elem
192
+ binaryen.i32, // resultPtr
193
+ ];
194
+ const arrPtr = 0, closurePtr = 1, length = 2, tableIdx = 3, envPtr = 4, idx = 5, elem = 6, resultPtr = 7;
195
+ // callbackType: (env:i32, elem:i32) → i32 (bool)
196
+ const callbackParamType = binaryen.createType([binaryen.i32, binaryen.i32]);
197
+ // Inner loop block label — we use "find_block" so we can br out on match
198
+ const body = mod.block(null, [
199
+ // length = i32.load(arrPtr, 0)
200
+ mod.local.set(length, mod.i32.load(0, 0, mod.local.get(arrPtr, binaryen.i32))),
201
+ // tableIdx = i32.load(closurePtr, 0)
202
+ mod.local.set(tableIdx, mod.i32.load(0, 0, mod.local.get(closurePtr, binaryen.i32))),
203
+ // envPtr = i32.load(closurePtr, 4)
204
+ mod.local.set(envPtr, mod.i32.load(4, 0, mod.local.get(closurePtr, binaryen.i32))),
205
+ // i = 0
206
+ mod.local.set(idx, mod.i32.const(0)),
207
+ // Search loop — break out when found
208
+ mod.if(mod.i32.gt_s(mod.local.get(length, binaryen.i32), mod.i32.const(0)), mod.block("find_block", [
209
+ mod.loop("find_loop", mod.block(null, [
210
+ // elem = arr[i]
211
+ mod.local.set(elem, mod.i32.load(4, 0, mod.i32.add(mod.local.get(arrPtr, binaryen.i32), mod.i32.mul(mod.local.get(idx, binaryen.i32), mod.i32.const(4))))),
212
+ // if predicate(elem) → return Some(elem)
213
+ mod.if(mod.call_indirect("__fn_table", mod.local.get(tableIdx, binaryen.i32), [
214
+ mod.local.get(envPtr, binaryen.i32),
215
+ mod.local.get(elem, binaryen.i32),
216
+ ], callbackParamType, binaryen.i32), mod.block(null, [
217
+ // Allocate Some(elem): [tag=1][pad][value][pad] = 16 bytes
218
+ mod.local.set(resultPtr, mod.global.get("__heap_ptr", binaryen.i32)),
219
+ mod.global.set("__heap_ptr", mod.i32.add(mod.global.get("__heap_ptr", binaryen.i32), mod.i32.const(16))),
220
+ // Write tag = 1 (Some)
221
+ mod.i32.store(0, 0, mod.local.get(resultPtr, binaryen.i32), mod.i32.const(1)),
222
+ // Write value at offset 8
223
+ mod.i32.store(8, 0, mod.local.get(resultPtr, binaryen.i32), mod.local.get(elem, binaryen.i32)),
224
+ // Break out of search block
225
+ mod.br("find_block"),
226
+ ], binaryen.none)),
227
+ // i++
228
+ mod.local.set(idx, mod.i32.add(mod.local.get(idx, binaryen.i32), mod.i32.const(1))),
229
+ // br_if find_loop (i < length)
230
+ mod.br("find_loop", mod.i32.lt_s(mod.local.get(idx, binaryen.i32), mod.local.get(length, binaryen.i32))),
231
+ ], binaryen.none)),
232
+ // If we reach here, no match found → allocate None
233
+ mod.local.set(resultPtr, mod.global.get("__heap_ptr", binaryen.i32)),
234
+ mod.global.set("__heap_ptr", mod.i32.add(mod.global.get("__heap_ptr", binaryen.i32), mod.i32.const(8))),
235
+ // Write tag = 0 (None)
236
+ mod.i32.store(0, 0, mod.local.get(resultPtr, binaryen.i32), mod.i32.const(0)),
237
+ ], binaryen.none),
238
+ // Empty array → allocate None
239
+ mod.block(null, [
240
+ mod.local.set(resultPtr, mod.global.get("__heap_ptr", binaryen.i32)),
241
+ mod.global.set("__heap_ptr", mod.i32.add(mod.global.get("__heap_ptr", binaryen.i32), mod.i32.const(8))),
242
+ mod.i32.store(0, 0, mod.local.get(resultPtr, binaryen.i32), mod.i32.const(0)),
243
+ ], binaryen.none)),
244
+ // return resultPtr
245
+ mod.local.get(resultPtr, binaryen.i32),
246
+ ], binaryen.i32);
247
+ mod.addFunction("array_find", paramType, binaryen.i32, vars, body);
248
+ }
249
+ /**
250
+ * Generate array_sort(arrPtr: i32, closurePtr: i32) → i32
251
+ *
252
+ * Copies the input array to a new heap allocation, then sorts in-place
253
+ * using insertion sort. The comparator closure returns:
254
+ * negative if a < b, 0 if a == b, positive if a > b (C qsort convention).
255
+ */
256
+ export function generateArraySort(mod) {
257
+ // Params: arrPtr=0, closurePtr=1
258
+ // Locals: length=2, tableIdx=3, envPtr=4, resultPtr=5,
259
+ // i=6, j=7, key=8, cmpResult=9
260
+ const paramType = binaryen.createType([binaryen.i32, binaryen.i32]);
261
+ const vars = [
262
+ binaryen.i32, // length
263
+ binaryen.i32, // tableIdx
264
+ binaryen.i32, // envPtr
265
+ binaryen.i32, // resultPtr
266
+ binaryen.i32, // i (outer loop)
267
+ binaryen.i32, // j (inner loop)
268
+ binaryen.i32, // key
269
+ binaryen.i32, // cmpResult
270
+ ];
271
+ const arrPtr = 0, closurePtr = 1, length = 2, tableIdx = 3, envPtr = 4, resultPtr = 5, i = 6, j = 7, key = 8;
272
+ // callbackType: (env:i32, a:i32, b:i32) → i32
273
+ const callbackParamType = binaryen.createType([binaryen.i32, binaryen.i32, binaryen.i32]);
274
+ // Helper: result[idx] = i32.load(resultPtr + 4 + idx*4)
275
+ const loadResult = (idxLocal) => mod.i32.load(4, 0, mod.i32.add(mod.local.get(resultPtr, binaryen.i32), mod.i32.mul(mod.local.get(idxLocal, binaryen.i32), mod.i32.const(4))));
276
+ const storeResult = (idxLocal, value) => mod.i32.store(4, 0, mod.i32.add(mod.local.get(resultPtr, binaryen.i32), mod.i32.mul(mod.local.get(idxLocal, binaryen.i32), mod.i32.const(4))), value);
277
+ const body = mod.block(null, [
278
+ // length = i32.load(arrPtr, 0)
279
+ mod.local.set(length, mod.i32.load(0, 0, mod.local.get(arrPtr, binaryen.i32))),
280
+ // tableIdx = i32.load(closurePtr, 0)
281
+ mod.local.set(tableIdx, mod.i32.load(0, 0, mod.local.get(closurePtr, binaryen.i32))),
282
+ // envPtr = i32.load(closurePtr, 4)
283
+ mod.local.set(envPtr, mod.i32.load(4, 0, mod.local.get(closurePtr, binaryen.i32))),
284
+ // Allocate result array: [length][elem0]...[elemN-1]
285
+ mod.local.set(resultPtr, mod.global.get("__heap_ptr", binaryen.i32)),
286
+ mod.global.set("__heap_ptr", mod.i32.add(mod.global.get("__heap_ptr", binaryen.i32), mod.i32.add(mod.i32.const(4), mod.i32.mul(mod.local.get(length, binaryen.i32), mod.i32.const(4))))),
287
+ // Write length header
288
+ mod.i32.store(0, 0, mod.local.get(resultPtr, binaryen.i32), mod.local.get(length, binaryen.i32)),
289
+ // Copy elements from input to result
290
+ mod.local.set(i, mod.i32.const(0)),
291
+ mod.if(mod.i32.gt_s(mod.local.get(length, binaryen.i32), mod.i32.const(0)), mod.loop("copy_loop", mod.block(null, [
292
+ storeResult(i, mod.i32.load(4, 0, mod.i32.add(mod.local.get(arrPtr, binaryen.i32), mod.i32.mul(mod.local.get(i, binaryen.i32), mod.i32.const(4))))),
293
+ mod.local.set(i, mod.i32.add(mod.local.get(i, binaryen.i32), mod.i32.const(1))),
294
+ mod.br("copy_loop", mod.i32.lt_s(mod.local.get(i, binaryen.i32), mod.local.get(length, binaryen.i32))),
295
+ ], binaryen.none))),
296
+ // Insertion sort: for i = 1 to length-1
297
+ mod.if(mod.i32.gt_s(mod.local.get(length, binaryen.i32), mod.i32.const(1)), mod.block(null, [
298
+ mod.local.set(i, mod.i32.const(1)),
299
+ mod.loop("sort_outer", mod.block(null, [
300
+ // key = result[i]
301
+ mod.local.set(key, loadResult(i)),
302
+ // j = i - 1
303
+ mod.local.set(j, mod.i32.sub(mod.local.get(i, binaryen.i32), mod.i32.const(1))),
304
+ // Inner loop: while j >= 0 && compare(result[j], key) > 0
305
+ mod.block("shift_break", [
306
+ mod.loop("shift_loop", mod.block(null, [
307
+ // if j < 0, break
308
+ mod.br("shift_break", mod.i32.lt_s(mod.local.get(j, binaryen.i32), mod.i32.const(0))),
309
+ // cmp = compare(result[j], key)
310
+ // if cmp <= 0, break
311
+ mod.br("shift_break", mod.i32.le_s(mod.call_indirect("__fn_table", mod.local.get(tableIdx, binaryen.i32), [
312
+ mod.local.get(envPtr, binaryen.i32),
313
+ loadResult(j),
314
+ mod.local.get(key, binaryen.i32),
315
+ ], callbackParamType, binaryen.i32), mod.i32.const(0))),
316
+ // result[j+1] = result[j]
317
+ mod.i32.store(4, 0, mod.i32.add(mod.local.get(resultPtr, binaryen.i32), mod.i32.mul(mod.i32.add(mod.local.get(j, binaryen.i32), mod.i32.const(1)), mod.i32.const(4))), loadResult(j)),
318
+ // j--
319
+ mod.local.set(j, mod.i32.sub(mod.local.get(j, binaryen.i32), mod.i32.const(1))),
320
+ mod.br("shift_loop"),
321
+ ], binaryen.none)),
322
+ ], binaryen.none),
323
+ // result[j+1] = key
324
+ mod.i32.store(4, 0, mod.i32.add(mod.local.get(resultPtr, binaryen.i32), mod.i32.mul(mod.i32.add(mod.local.get(j, binaryen.i32), mod.i32.const(1)), mod.i32.const(4))), mod.local.get(key, binaryen.i32)),
325
+ // i++
326
+ mod.local.set(i, mod.i32.add(mod.local.get(i, binaryen.i32), mod.i32.const(1))),
327
+ // br_if sort_outer (i < length)
328
+ mod.br("sort_outer", mod.i32.lt_s(mod.local.get(i, binaryen.i32), mod.local.get(length, binaryen.i32))),
329
+ ], binaryen.none)),
330
+ ], binaryen.none)),
331
+ // return resultPtr
332
+ mod.local.get(resultPtr, binaryen.i32),
333
+ ], binaryen.i32);
334
+ mod.addFunction("array_sort", paramType, binaryen.i32, vars, body);
335
+ }
336
+ //# sourceMappingURL=hof-generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hof-generators.js","sourceRoot":"","sources":["../../src/codegen/hof-generators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Platform-specific host operations that vary across runtimes.
3
+ *
4
+ * Implementations exist for:
5
+ * - Node.js (`NodeHostAdapter`) — default, full-featured
6
+ * - Browser (`BrowserHostAdapter`) — stub for portability demonstration
7
+ *
8
+ * All methods operate on plain JS types — no WASM pointers or RuntimeState.
9
+ */
10
+ export interface EdictHostAdapter {
11
+ /** SHA-256 hash of `data`, returned as hex string. */
12
+ sha256(data: string): string;
13
+ /** MD5 hash of `data`, returned as hex string. */
14
+ md5(data: string): string;
15
+ /** HMAC of `data` using `algo` and `key`, returned as hex string. */
16
+ hmac(algo: string, key: string, data: string): string;
17
+ /** Synchronous HTTP request. Returns ok=true for 2xx, ok=false for errors. */
18
+ fetch(url: string, method: string, body?: string): {
19
+ ok: boolean;
20
+ data: string;
21
+ };
22
+ /** Read a file, returning its content or an error. */
23
+ readFile(path: string): {
24
+ ok: true;
25
+ data: string;
26
+ } | {
27
+ ok: false;
28
+ error: string;
29
+ };
30
+ /** Write content to a file, returning success or an error. */
31
+ writeFile(path: string, content: string): {
32
+ ok: true;
33
+ } | {
34
+ ok: false;
35
+ error: string;
36
+ };
37
+ /** Read an environment variable. Returns "" if not set. */
38
+ env(name: string): string;
39
+ /** Return command-line arguments (excluding runtime and script path). */
40
+ args(): string[];
41
+ /** Terminate execution with the given exit code. */
42
+ exit(code: number): never;
43
+ }
44
+ //# sourceMappingURL=host-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-adapter.d.ts","sourceRoot":"","sources":["../../src/codegen/host-adapter.ts"],"names":[],"mappings":"AAQA;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAE7B,sDAAsD;IACtD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,kDAAkD;IAClD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,qEAAqE;IACrE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAGtD,8EAA8E;IAC9E,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAGjF,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,8DAA8D;IAC9D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,2DAA2D;IAC3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,yEAAyE;IACzE,IAAI,IAAI,MAAM,EAAE,CAAC;IACjB,oDAAoD;IACpD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;CAC7B"}
@@ -0,0 +1,9 @@
1
+ // =============================================================================
2
+ // Host Adapter Interface — pluggable platform-specific operations
3
+ // =============================================================================
4
+ // Defines the contract that platform-specific adapters must implement.
5
+ // Only operations that require platform-specific APIs are included here.
6
+ // Platform-agnostic operations (string, math, array, etc.) use Web Standard
7
+ // APIs and are handled directly in host-functions.ts.
8
+ export {};
9
+ //# sourceMappingURL=host-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-adapter.js","sourceRoot":"","sources":["../../src/codegen/host-adapter.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kEAAkE;AAClE,gFAAgF;AAChF,uEAAuE;AACvE,yEAAyE;AACzE,4EAA4E;AAC5E,sDAAsD"}
@@ -0,0 +1,15 @@
1
+ import binaryen from "binaryen";
2
+ import type { EdictModule } from "../ast/nodes.js";
3
+ export interface ImportSig {
4
+ paramTypes: binaryen.Type[];
5
+ returnType: binaryen.Type;
6
+ }
7
+ /**
8
+ * FALLBACK: Scan function bodies for calls to imported names and infer WASM types
9
+ * from the function's declared param/return types at call sites.
10
+ *
11
+ * When imports declare typed signatures (Import.types), the codegen uses those
12
+ * directly. This inference is only needed for backwards-compatible untyped imports.
13
+ */
14
+ export declare function inferImportSignatures(module: EdictModule, importedNames: Set<string>): Map<string, ImportSig>;
15
+ //# sourceMappingURL=imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/codegen/imports.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAA2B,MAAM,iBAAiB,CAAC;AAO5E,MAAM,WAAW,SAAS;IACtB,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5B,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC;CAC7B;AAMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAiBxB"}
@@ -0,0 +1,165 @@
1
+ // =============================================================================
2
+ // Import Signature Inference — infer WASM types for module-level imports
3
+ // =============================================================================
4
+ // Extracted from codegen.ts for modularity.
5
+ import binaryen from "binaryen";
6
+ import { edictTypeToWasm } from "./types.js";
7
+ // =============================================================================
8
+ // Public API
9
+ // =============================================================================
10
+ /**
11
+ * FALLBACK: Scan function bodies for calls to imported names and infer WASM types
12
+ * from the function's declared param/return types at call sites.
13
+ *
14
+ * When imports declare typed signatures (Import.types), the codegen uses those
15
+ * directly. This inference is only needed for backwards-compatible untyped imports.
16
+ */
17
+ export function inferImportSignatures(module, importedNames) {
18
+ const sigs = new Map();
19
+ // Initialize with defaults
20
+ for (const name of importedNames) {
21
+ sigs.set(name, { paramTypes: [], returnType: binaryen.i32 });
22
+ }
23
+ // Multi-pass: run inference until stable (handles ordering deps like pow→sqrt)
24
+ for (let pass = 0; pass < 3; pass++) {
25
+ for (const def of module.definitions) {
26
+ if (def.kind !== "fn")
27
+ continue;
28
+ inferFromExprs(def.body, def, sigs, importedNames);
29
+ }
30
+ }
31
+ return sigs;
32
+ }
33
+ // =============================================================================
34
+ // Internal helpers
35
+ // =============================================================================
36
+ function inferFromExprs(exprs, enclosingFn, sigs, importedNames) {
37
+ for (const expr of exprs) {
38
+ inferFromExpr(expr, enclosingFn, sigs, importedNames);
39
+ }
40
+ }
41
+ function inferFromExpr(expr, enclosingFn, sigs, importedNames) {
42
+ if (expr.kind === "call" && expr.fn.kind === "ident" && importedNames.has(expr.fn.name)) {
43
+ const name = expr.fn.name;
44
+ // Infer param types from arguments
45
+ const paramTypes = expr.args.map(arg => inferTypeFromExpr(arg, enclosingFn, sigs));
46
+ // If any param is f64, promote all i32 numeric params to f64
47
+ // (JSON can't distinguish 2.0 from 2; Edict doesn't mix int/float in one function)
48
+ const hasFloat = paramTypes.some(t => t === binaryen.f64);
49
+ if (hasFloat) {
50
+ for (let j = 0; j < paramTypes.length; j++) {
51
+ if (paramTypes[j] === binaryen.i32 && expr.args[j]?.kind === "literal" &&
52
+ typeof expr.args[j].value === "number") {
53
+ paramTypes[j] = binaryen.f64;
54
+ }
55
+ }
56
+ }
57
+ // Infer return type from the enclosing function's return type
58
+ // (if this call is the last expression in the function body, it determines the return type)
59
+ const lastExprInBody = enclosingFn.body.length > 0
60
+ ? enclosingFn.body[enclosingFn.body.length - 1]
61
+ : null;
62
+ const returnType = isExprOrContains(lastExprInBody, expr) && enclosingFn.returnType
63
+ ? edictTypeToWasm(enclosingFn.returnType)
64
+ : binaryen.i32;
65
+ sigs.set(name, { paramTypes, returnType });
66
+ }
67
+ // Recurse into sub-expressions
68
+ switch (expr.kind) {
69
+ case "binop":
70
+ inferFromExpr(expr.left, enclosingFn, sigs, importedNames);
71
+ inferFromExpr(expr.right, enclosingFn, sigs, importedNames);
72
+ break;
73
+ case "unop":
74
+ inferFromExpr(expr.operand, enclosingFn, sigs, importedNames);
75
+ break;
76
+ case "call":
77
+ inferFromExpr(expr.fn, enclosingFn, sigs, importedNames);
78
+ for (const a of expr.args)
79
+ inferFromExpr(a, enclosingFn, sigs, importedNames);
80
+ break;
81
+ case "if":
82
+ inferFromExpr(expr.condition, enclosingFn, sigs, importedNames);
83
+ inferFromExprs(expr.then, enclosingFn, sigs, importedNames);
84
+ if (expr.else)
85
+ inferFromExprs(expr.else, enclosingFn, sigs, importedNames);
86
+ break;
87
+ case "let":
88
+ inferFromExpr(expr.value, enclosingFn, sigs, importedNames);
89
+ break;
90
+ case "block":
91
+ inferFromExprs(expr.body, enclosingFn, sigs, importedNames);
92
+ break;
93
+ case "match":
94
+ inferFromExpr(expr.target, enclosingFn, sigs, importedNames);
95
+ for (const arm of expr.arms)
96
+ inferFromExprs(arm.body, enclosingFn, sigs, importedNames);
97
+ break;
98
+ case "lambda":
99
+ inferFromExprs(expr.body, enclosingFn, sigs, importedNames);
100
+ break;
101
+ case "array":
102
+ for (const el of expr.elements)
103
+ inferFromExpr(el, enclosingFn, sigs, importedNames);
104
+ break;
105
+ case "record_expr":
106
+ for (const f of expr.fields)
107
+ inferFromExpr(f.value, enclosingFn, sigs, importedNames);
108
+ break;
109
+ case "access":
110
+ inferFromExpr(expr.target, enclosingFn, sigs, importedNames);
111
+ break;
112
+ default: break;
113
+ }
114
+ }
115
+ /**
116
+ * Infer the WASM type of an expression from its AST structure.
117
+ * Used during import signature inference (before we have a FunctionContext).
118
+ */
119
+ function inferTypeFromExpr(expr, enclosingFn, sigs) {
120
+ if (expr.kind === "literal") {
121
+ if (expr.type)
122
+ return edictTypeToWasm(expr.type);
123
+ if (typeof expr.value === "number" && !Number.isInteger(expr.value))
124
+ return binaryen.f64;
125
+ return binaryen.i32;
126
+ }
127
+ if (expr.kind === "ident") {
128
+ const param = enclosingFn.params.find(p => p.name === expr.name);
129
+ if (param)
130
+ return edictTypeToWasm(param.type);
131
+ return binaryen.i32;
132
+ }
133
+ if (expr.kind === "binop") {
134
+ // Arithmetic result type follows left operand
135
+ const cmpOps = ["==", "!=", "<", ">", "<=", ">=", "and", "or", "implies"];
136
+ if (cmpOps.includes(expr.op))
137
+ return binaryen.i32;
138
+ return inferTypeFromExpr(expr.left, enclosingFn, sigs);
139
+ }
140
+ if (expr.kind === "call" && expr.fn.kind === "ident") {
141
+ // Check inferred import sigs first, then fn defs
142
+ if (sigs?.has(expr.fn.name)) {
143
+ return sigs.get(expr.fn.name).returnType;
144
+ }
145
+ // Check enclosing module's function definitions
146
+ return binaryen.i32;
147
+ }
148
+ return binaryen.i32;
149
+ }
150
+ /**
151
+ * Check if target expression is or contains the needle (by reference).
152
+ */
153
+ function isExprOrContains(target, needle) {
154
+ if (!target)
155
+ return false;
156
+ if (target === needle)
157
+ return true;
158
+ switch (target.kind) {
159
+ case "call": return target.args.some(a => isExprOrContains(a, needle)) || isExprOrContains(target.fn, needle);
160
+ case "binop": return isExprOrContains(target.left, needle) || isExprOrContains(target.right, needle);
161
+ case "unop": return isExprOrContains(target.operand, needle);
162
+ default: return false;
163
+ }
164
+ }
165
+ //# sourceMappingURL=imports.js.map