edict-lang 1.2.0 → 1.5.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.
- package/dist/ast/nodes.d.ts +3 -3
- package/dist/ast/nodes.d.ts.map +1 -1
- package/dist/ast/nodes.js +1 -0
- package/dist/ast/nodes.js.map +1 -1
- package/dist/ast/type-constants.d.ts +12 -0
- package/dist/ast/type-constants.d.ts.map +1 -0
- package/dist/ast/type-constants.js +16 -0
- package/dist/ast/type-constants.js.map +1 -0
- package/dist/ast/types.d.ts +1 -1
- package/dist/ast/types.d.ts.map +1 -1
- package/dist/builtins/builtin-enums.d.ts +12 -0
- package/dist/builtins/builtin-enums.d.ts.map +1 -0
- package/dist/builtins/builtin-enums.js +45 -0
- package/dist/builtins/builtin-enums.js.map +1 -0
- package/dist/builtins/builtins.d.ts +24 -0
- package/dist/builtins/builtins.d.ts.map +1 -0
- package/dist/builtins/builtins.js +691 -0
- package/dist/builtins/builtins.js.map +1 -0
- package/dist/checker/check.d.ts.map +1 -1
- package/dist/checker/check.js +81 -38
- package/dist/checker/check.js.map +1 -1
- package/dist/checker/type-env.d.ts +2 -0
- package/dist/checker/type-env.d.ts.map +1 -1
- package/dist/checker/type-env.js +9 -0
- package/dist/checker/type-env.js.map +1 -1
- package/dist/codegen/browser-host-adapter.d.ts +29 -0
- package/dist/codegen/browser-host-adapter.d.ts.map +1 -0
- package/dist/codegen/browser-host-adapter.js +51 -0
- package/dist/codegen/browser-host-adapter.js.map +1 -0
- package/dist/codegen/builtins.d.ts +2 -26
- package/dist/codegen/builtins.d.ts.map +1 -1
- package/dist/codegen/builtins.js +2 -341
- package/dist/codegen/builtins.js.map +1 -1
- package/dist/codegen/closures.d.ts +17 -0
- package/dist/codegen/closures.d.ts.map +1 -0
- package/dist/codegen/closures.js +140 -0
- package/dist/codegen/closures.js.map +1 -0
- package/dist/codegen/codegen.d.ts +11 -30
- package/dist/codegen/codegen.d.ts.map +1 -1
- package/dist/codegen/codegen.js +154 -982
- package/dist/codegen/codegen.js.map +1 -1
- package/dist/codegen/collect-strings.d.ts +4 -0
- package/dist/codegen/collect-strings.d.ts.map +1 -0
- package/dist/codegen/collect-strings.js +76 -0
- package/dist/codegen/collect-strings.js.map +1 -0
- package/dist/codegen/compile-calls.d.ts +10 -0
- package/dist/codegen/compile-calls.d.ts.map +1 -0
- package/dist/codegen/compile-calls.js +344 -0
- package/dist/codegen/compile-calls.js.map +1 -0
- package/dist/codegen/compile-data.d.ts +22 -0
- package/dist/codegen/compile-data.d.ts.map +1 -0
- package/dist/codegen/compile-data.js +243 -0
- package/dist/codegen/compile-data.js.map +1 -0
- package/dist/codegen/compile-match.d.ts +7 -0
- package/dist/codegen/compile-match.d.ts.map +1 -0
- package/dist/codegen/compile-match.js +195 -0
- package/dist/codegen/compile-match.js.map +1 -0
- package/dist/codegen/compile-scalars.d.ts +25 -0
- package/dist/codegen/compile-scalars.d.ts.map +1 -0
- package/dist/codegen/compile-scalars.js +210 -0
- package/dist/codegen/compile-scalars.js.map +1 -0
- package/dist/codegen/hof-generators.d.ts +39 -0
- package/dist/codegen/hof-generators.d.ts.map +1 -0
- package/dist/codegen/hof-generators.js +336 -0
- package/dist/codegen/hof-generators.js.map +1 -0
- package/dist/codegen/host-adapter.d.ts +44 -0
- package/dist/codegen/host-adapter.d.ts.map +1 -0
- package/dist/codegen/host-adapter.js +9 -0
- package/dist/codegen/host-adapter.js.map +1 -0
- package/dist/codegen/host-functions.d.ts +35 -0
- package/dist/codegen/host-functions.d.ts.map +1 -0
- package/dist/codegen/host-functions.js +680 -0
- package/dist/codegen/host-functions.js.map +1 -0
- package/dist/codegen/imports.d.ts +12 -0
- package/dist/codegen/imports.d.ts.map +1 -0
- package/dist/codegen/imports.js +162 -0
- package/dist/codegen/imports.js.map +1 -0
- package/dist/codegen/node-host-adapter.d.ts +35 -0
- package/dist/codegen/node-host-adapter.d.ts.map +1 -0
- package/dist/codegen/node-host-adapter.js +155 -0
- package/dist/codegen/node-host-adapter.js.map +1 -0
- package/dist/codegen/runner.d.ts +36 -2
- package/dist/codegen/runner.d.ts.map +1 -1
- package/dist/codegen/runner.js +146 -271
- package/dist/codegen/runner.js.map +1 -1
- package/dist/codegen/types.d.ts +91 -0
- package/dist/codegen/types.d.ts.map +1 -0
- package/dist/codegen/types.js +63 -0
- package/dist/codegen/types.js.map +1 -0
- package/dist/compact/expand.d.ts +25 -0
- package/dist/compact/expand.d.ts.map +1 -0
- package/dist/compact/expand.js +198 -0
- package/dist/compact/expand.js.map +1 -0
- package/dist/compile.d.ts +2 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +1 -1
- package/dist/compile.js.map +1 -1
- package/dist/contracts/translate.js.map +1 -1
- package/dist/effects/call-graph.d.ts.map +1 -1
- package/dist/effects/call-graph.js +6 -2
- package/dist/effects/call-graph.js.map +1 -1
- package/dist/errors/error-catalog.d.ts +1 -1
- package/dist/errors/error-catalog.d.ts.map +1 -1
- package/dist/errors/error-catalog.js +119 -0
- package/dist/errors/error-catalog.js.map +1 -1
- package/dist/errors/structured-errors.d.ts +6 -1
- package/dist/errors/structured-errors.d.ts.map +1 -1
- package/dist/errors/structured-errors.js +3 -0
- package/dist/errors/structured-errors.js.map +1 -1
- package/dist/index.d.ts +17 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -10
- package/dist/index.js.map +1 -1
- package/dist/lint/lint.d.ts +9 -0
- package/dist/lint/lint.d.ts.map +1 -0
- package/dist/lint/lint.js +354 -0
- package/dist/lint/lint.js.map +1 -0
- package/dist/lint/warnings.d.ts +54 -0
- package/dist/lint/warnings.d.ts.map +1 -0
- package/dist/lint/warnings.js +39 -0
- package/dist/lint/warnings.js.map +1 -0
- package/dist/mcp/create-server.d.ts.map +1 -1
- package/dist/mcp/create-server.js +66 -5
- package/dist/mcp/create-server.js.map +1 -1
- package/dist/mcp/handlers.d.ts +18 -4
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js +54 -12
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/prompts.d.ts +17 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +181 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/server.js +1 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/resolver/resolve.d.ts.map +1 -1
- package/dist/resolver/resolve.js +22 -8
- package/dist/resolver/resolve.js.map +1 -1
- package/dist/validator/node-validators.d.ts.map +1 -1
- package/dist/validator/node-validators.js +34 -5
- package/dist/validator/node-validators.js.map +1 -1
- package/package.json +4 -2
package/dist/codegen/runner.js
CHANGED
|
@@ -3,280 +3,138 @@
|
|
|
3
3
|
// =============================================================================
|
|
4
4
|
// Instantiates WASM via Node's WebAssembly API, provides host imports
|
|
5
5
|
// (e.g. print), captures output, and returns the result.
|
|
6
|
+
//
|
|
7
|
+
// Execution model:
|
|
8
|
+
// run() → spawns worker thread, enforces timeout, returns RunResult
|
|
9
|
+
// runDirect() → synchronous execution (used by worker and tests)
|
|
10
|
+
import { Worker } from "node:worker_threads";
|
|
11
|
+
import { createHostImports, EdictOomError } from "./host-functions.js";
|
|
6
12
|
/**
|
|
7
|
-
* Run a compiled Edict WASM binary.
|
|
13
|
+
* Run a compiled Edict WASM binary with sandbox limits.
|
|
14
|
+
*
|
|
15
|
+
* Spawns a worker thread and enforces a timeout. If execution exceeds
|
|
16
|
+
* the timeout, the worker is terminated and a structured error is returned.
|
|
8
17
|
*
|
|
9
18
|
* @param wasm - The WASM binary (Uint8Array from codegen)
|
|
10
19
|
* @param entryFn - Name of the function to call (default: "main")
|
|
20
|
+
* @param limits - Optional execution limits (timeout, memory)
|
|
11
21
|
*/
|
|
12
|
-
export async function run(wasm, entryFn = "main") {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
22
|
+
export async function run(wasm, entryFn = "main", limits = {}) {
|
|
23
|
+
const timeoutMs = Math.max(100, limits.timeoutMs ?? 5000);
|
|
24
|
+
return new Promise((resolvePromise) => {
|
|
25
|
+
// import.meta.url is the URL of this module (runner.ts in dev, runner.js in prod).
|
|
26
|
+
// The worker dynamically imports this same module to call runDirect().
|
|
27
|
+
const runnerModuleUrl = import.meta.url;
|
|
28
|
+
let timer = null;
|
|
29
|
+
let settled = false;
|
|
30
|
+
// Inline ESM worker script. Since package.json has "type": "module",
|
|
31
|
+
// eval workers run in ESM mode — we use import rather than require.
|
|
32
|
+
// For dev/vitest (.ts files), we register the tsx ESM loader first.
|
|
33
|
+
const workerScript = `
|
|
34
|
+
import { workerData, parentPort } from "node:worker_threads";
|
|
35
|
+
|
|
36
|
+
const url = workerData.runnerModuleUrl;
|
|
37
|
+
|
|
38
|
+
// In dev/vitest, module URL ends in .ts — register tsx ESM loader
|
|
39
|
+
if (url.endsWith(".ts")) {
|
|
40
|
+
const { register } = await import("tsx/esm/api");
|
|
41
|
+
register();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
const runner = await import(url);
|
|
46
|
+
const wasmBytes = new Uint8Array(workerData.wasm);
|
|
47
|
+
const result = await runner.runDirect(wasmBytes, workerData.entryFn, { sandboxDir: workerData.sandboxDir });
|
|
48
|
+
parentPort.postMessage({ type: "result", data: result });
|
|
49
|
+
} catch (e) {
|
|
50
|
+
parentPort.postMessage({
|
|
51
|
+
type: "error",
|
|
52
|
+
message: e instanceof Error ? e.message : String(e),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
const worker = new Worker(workerScript, {
|
|
57
|
+
eval: true,
|
|
58
|
+
workerData: {
|
|
59
|
+
wasm: Buffer.from(wasm),
|
|
60
|
+
entryFn,
|
|
61
|
+
runnerModuleUrl,
|
|
62
|
+
sandboxDir: limits.sandboxDir,
|
|
63
|
+
},
|
|
64
|
+
// Register tsx ESM loader so the worker can import .ts files (vitest/dev)
|
|
65
|
+
execArgv: ["--import", "tsx"],
|
|
66
|
+
});
|
|
67
|
+
function settle(result) {
|
|
68
|
+
if (settled)
|
|
69
|
+
return;
|
|
70
|
+
settled = true;
|
|
71
|
+
if (timer)
|
|
72
|
+
clearTimeout(timer);
|
|
73
|
+
resolvePromise(result);
|
|
47
74
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const str = new TextDecoder().decode(new Uint8Array(memoryBuffer, ptr, len));
|
|
112
|
-
return writeStringResult(str.toUpperCase(), new TextEncoder());
|
|
113
|
-
},
|
|
114
|
-
toLowerCase: (ptr, len) => {
|
|
115
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
116
|
-
const str = new TextDecoder().decode(new Uint8Array(memoryBuffer, ptr, len));
|
|
117
|
-
return writeStringResult(str.toLowerCase(), new TextEncoder());
|
|
118
|
-
},
|
|
119
|
-
string_trim: (ptr, len) => {
|
|
120
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
121
|
-
const str = new TextDecoder().decode(new Uint8Array(memoryBuffer, ptr, len));
|
|
122
|
-
return writeStringResult(str.trim(), new TextEncoder());
|
|
123
|
-
},
|
|
124
|
-
string_startsWith: (strPtr, strLen, prefixPtr, prefixLen) => {
|
|
125
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
126
|
-
const decoder = new TextDecoder();
|
|
127
|
-
const str = decoder.decode(new Uint8Array(memoryBuffer, strPtr, strLen));
|
|
128
|
-
const prefix = decoder.decode(new Uint8Array(memoryBuffer, prefixPtr, prefixLen));
|
|
129
|
-
return str.startsWith(prefix) ? 1 : 0;
|
|
130
|
-
},
|
|
131
|
-
string_endsWith: (strPtr, strLen, suffixPtr, suffixLen) => {
|
|
132
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
133
|
-
const decoder = new TextDecoder();
|
|
134
|
-
const str = decoder.decode(new Uint8Array(memoryBuffer, strPtr, strLen));
|
|
135
|
-
const suffix = decoder.decode(new Uint8Array(memoryBuffer, suffixPtr, suffixLen));
|
|
136
|
-
return str.endsWith(suffix) ? 1 : 0;
|
|
137
|
-
},
|
|
138
|
-
string_contains: (hayPtr, hayLen, needlePtr, needleLen) => {
|
|
139
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
140
|
-
const decoder = new TextDecoder();
|
|
141
|
-
const haystack = decoder.decode(new Uint8Array(memoryBuffer, hayPtr, hayLen));
|
|
142
|
-
const needle = decoder.decode(new Uint8Array(memoryBuffer, needlePtr, needleLen));
|
|
143
|
-
return haystack.includes(needle) ? 1 : 0;
|
|
144
|
-
},
|
|
145
|
-
string_repeat: (ptr, len, count) => {
|
|
146
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
147
|
-
const str = new TextDecoder().decode(new Uint8Array(memoryBuffer, ptr, len));
|
|
148
|
-
return writeStringResult(str.repeat(count), new TextEncoder());
|
|
149
|
-
},
|
|
150
|
-
// =================================================================
|
|
151
|
-
// Math builtins
|
|
152
|
-
// =================================================================
|
|
153
|
-
abs: (x) => Math.abs(x),
|
|
154
|
-
min: (a, b) => Math.min(a, b),
|
|
155
|
-
max: (a, b) => Math.max(a, b),
|
|
156
|
-
pow: (base, exp) => (Math.pow(base, exp) | 0),
|
|
157
|
-
sqrt: (x) => Math.sqrt(x),
|
|
158
|
-
floor: (x) => (Math.floor(x) | 0),
|
|
159
|
-
ceil: (x) => (Math.ceil(x) | 0),
|
|
160
|
-
round: (x) => (Math.round(x) | 0),
|
|
161
|
-
// =================================================================
|
|
162
|
-
// Type conversion builtins
|
|
163
|
-
// =================================================================
|
|
164
|
-
intToString: (value) => {
|
|
165
|
-
return writeStringResult(String(value), new TextEncoder());
|
|
166
|
-
},
|
|
167
|
-
floatToString: (value) => {
|
|
168
|
-
return writeStringResult(String(value), new TextEncoder());
|
|
169
|
-
},
|
|
170
|
-
boolToString: (value) => {
|
|
171
|
-
return writeStringResult(value ? "true" : "false", new TextEncoder());
|
|
172
|
-
},
|
|
173
|
-
floatToInt: (value) => (Math.trunc(value) | 0),
|
|
174
|
-
intToFloat: (value) => value,
|
|
175
|
-
// =================================================================
|
|
176
|
-
// Array builtins — operate on [length: i32][elem0: i32][elem1: i32]...
|
|
177
|
-
// =================================================================
|
|
178
|
-
array_length: (arrPtr) => {
|
|
179
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
180
|
-
const view = new DataView(memoryBuffer);
|
|
181
|
-
return view.getInt32(arrPtr, true);
|
|
182
|
-
},
|
|
183
|
-
array_get: (arrPtr, index) => {
|
|
184
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
185
|
-
const view = new DataView(memoryBuffer);
|
|
186
|
-
const length = view.getInt32(arrPtr, true);
|
|
187
|
-
if (index < 0 || index >= length)
|
|
188
|
-
return 0; // safe default for OOB
|
|
189
|
-
return view.getInt32(arrPtr + 4 + index * 4, true);
|
|
190
|
-
},
|
|
191
|
-
array_set: (arrPtr, index, value) => {
|
|
192
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
193
|
-
const view = new DataView(memoryBuffer);
|
|
194
|
-
const length = view.getInt32(arrPtr, true);
|
|
195
|
-
// Copy all elements into a new array with the updated value
|
|
196
|
-
const elems = [];
|
|
197
|
-
for (let i = 0; i < length; i++) {
|
|
198
|
-
elems.push(i === index ? value : view.getInt32(arrPtr + 4 + i * 4, true));
|
|
199
|
-
}
|
|
200
|
-
return writeArrayResult(elems);
|
|
201
|
-
},
|
|
202
|
-
array_push: (arrPtr, value) => {
|
|
203
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
204
|
-
const view = new DataView(memoryBuffer);
|
|
205
|
-
const length = view.getInt32(arrPtr, true);
|
|
206
|
-
const elems = [];
|
|
207
|
-
for (let i = 0; i < length; i++) {
|
|
208
|
-
elems.push(view.getInt32(arrPtr + 4 + i * 4, true));
|
|
209
|
-
}
|
|
210
|
-
elems.push(value);
|
|
211
|
-
return writeArrayResult(elems);
|
|
212
|
-
},
|
|
213
|
-
array_pop: (arrPtr) => {
|
|
214
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
215
|
-
const view = new DataView(memoryBuffer);
|
|
216
|
-
const length = view.getInt32(arrPtr, true);
|
|
217
|
-
if (length === 0)
|
|
218
|
-
return writeArrayResult([]);
|
|
219
|
-
const elems = [];
|
|
220
|
-
for (let i = 0; i < length - 1; i++) {
|
|
221
|
-
elems.push(view.getInt32(arrPtr + 4 + i * 4, true));
|
|
222
|
-
}
|
|
223
|
-
return writeArrayResult(elems);
|
|
224
|
-
},
|
|
225
|
-
array_concat: (aPtr, bPtr) => {
|
|
226
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
227
|
-
const view = new DataView(memoryBuffer);
|
|
228
|
-
const aLen = view.getInt32(aPtr, true);
|
|
229
|
-
const bLen = view.getInt32(bPtr, true);
|
|
230
|
-
const elems = [];
|
|
231
|
-
for (let i = 0; i < aLen; i++) {
|
|
232
|
-
elems.push(view.getInt32(aPtr + 4 + i * 4, true));
|
|
233
|
-
}
|
|
234
|
-
for (let i = 0; i < bLen; i++) {
|
|
235
|
-
elems.push(view.getInt32(bPtr + 4 + i * 4, true));
|
|
236
|
-
}
|
|
237
|
-
return writeArrayResult(elems);
|
|
238
|
-
},
|
|
239
|
-
array_slice: (arrPtr, start, end) => {
|
|
240
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
241
|
-
const view = new DataView(memoryBuffer);
|
|
242
|
-
const length = view.getInt32(arrPtr, true);
|
|
243
|
-
// Clamp indices to [0, length]
|
|
244
|
-
const s = Math.max(0, Math.min(start, length));
|
|
245
|
-
const e = Math.max(s, Math.min(end, length));
|
|
246
|
-
const elems = [];
|
|
247
|
-
for (let i = s; i < e; i++) {
|
|
248
|
-
elems.push(view.getInt32(arrPtr + 4 + i * 4, true));
|
|
249
|
-
}
|
|
250
|
-
return writeArrayResult(elems);
|
|
251
|
-
},
|
|
252
|
-
array_isEmpty: (arrPtr) => {
|
|
253
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
254
|
-
const view = new DataView(memoryBuffer);
|
|
255
|
-
return view.getInt32(arrPtr, true) === 0 ? 1 : 0;
|
|
256
|
-
},
|
|
257
|
-
array_contains: (arrPtr, value) => {
|
|
258
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
259
|
-
const view = new DataView(memoryBuffer);
|
|
260
|
-
const length = view.getInt32(arrPtr, true);
|
|
261
|
-
for (let i = 0; i < length; i++) {
|
|
262
|
-
if (view.getInt32(arrPtr + 4 + i * 4, true) === value)
|
|
263
|
-
return 1;
|
|
264
|
-
}
|
|
265
|
-
return 0;
|
|
266
|
-
},
|
|
267
|
-
array_reverse: (arrPtr) => {
|
|
268
|
-
const memoryBuffer = instance.exports.memory.buffer;
|
|
269
|
-
const view = new DataView(memoryBuffer);
|
|
270
|
-
const length = view.getInt32(arrPtr, true);
|
|
271
|
-
const elems = [];
|
|
272
|
-
for (let i = length - 1; i >= 0; i--) {
|
|
273
|
-
elems.push(view.getInt32(arrPtr + 4 + i * 4, true));
|
|
274
|
-
}
|
|
275
|
-
return writeArrayResult(elems);
|
|
276
|
-
},
|
|
277
|
-
},
|
|
278
|
-
};
|
|
279
|
-
({ instance } = await WebAssembly.instantiate(wasm, importObject));
|
|
75
|
+
// Timeout — kill the worker
|
|
76
|
+
timer = setTimeout(() => {
|
|
77
|
+
worker.terminate().then(() => {
|
|
78
|
+
settle({
|
|
79
|
+
output: "",
|
|
80
|
+
exitCode: 1,
|
|
81
|
+
error: "execution_timeout",
|
|
82
|
+
limitInfo: { timeoutMs },
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}, timeoutMs);
|
|
86
|
+
// Worker completed successfully
|
|
87
|
+
worker.on("message", (msg) => {
|
|
88
|
+
if (msg.type === "result" && msg.data) {
|
|
89
|
+
settle(msg.data);
|
|
90
|
+
}
|
|
91
|
+
else if (msg.type === "error") {
|
|
92
|
+
settle({
|
|
93
|
+
output: msg.message ?? "Worker execution error",
|
|
94
|
+
exitCode: 1,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
// Worker crashed (OOM, etc.)
|
|
99
|
+
worker.on("error", (err) => {
|
|
100
|
+
const isOom = err.message?.includes("out of memory") ||
|
|
101
|
+
err.message?.includes("memory access") ||
|
|
102
|
+
err.message?.includes("grow");
|
|
103
|
+
settle({
|
|
104
|
+
output: `Runtime error: ${err.message}`,
|
|
105
|
+
exitCode: 1,
|
|
106
|
+
error: isOom ? "execution_oom" : undefined,
|
|
107
|
+
limitInfo: isOom ? { maxMemoryMb: limits.maxMemoryMb ?? 1 } : undefined,
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
// Worker exited unexpectedly
|
|
111
|
+
worker.on("exit", (code) => {
|
|
112
|
+
if (code !== 0) {
|
|
113
|
+
settle({
|
|
114
|
+
output: "",
|
|
115
|
+
exitCode: code,
|
|
116
|
+
error: "execution_timeout",
|
|
117
|
+
limitInfo: { timeoutMs },
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Direct (in-process) WASM execution — no worker thread, no timeout.
|
|
125
|
+
*
|
|
126
|
+
* Used by the worker thread internally and available for tests
|
|
127
|
+
* that don't need sandbox limits.
|
|
128
|
+
*
|
|
129
|
+
* @param wasm - The WASM binary (Uint8Array from codegen)
|
|
130
|
+
* @param entryFn - Name of the function to call (default: "main")
|
|
131
|
+
* @param limits - Optional execution limits (sandboxDir for file IO)
|
|
132
|
+
*/
|
|
133
|
+
export async function runDirect(wasm, entryFn = "main", limits = {}) {
|
|
134
|
+
const state = { outputParts: [], instance: null, sandboxDir: limits.sandboxDir };
|
|
135
|
+
const importObject = createHostImports(state, limits.adapter);
|
|
136
|
+
const { instance } = await WebAssembly.instantiate(wasm, importObject);
|
|
137
|
+
state.instance = instance;
|
|
280
138
|
let returnValue;
|
|
281
139
|
let exitCode = 0;
|
|
282
140
|
try {
|
|
@@ -290,11 +148,28 @@ export async function run(wasm, entryFn = "main") {
|
|
|
290
148
|
returnValue = mainFn();
|
|
291
149
|
}
|
|
292
150
|
catch (e) {
|
|
293
|
-
|
|
294
|
-
|
|
151
|
+
// Heap bounds check failed — structured OOM error
|
|
152
|
+
if (e instanceof EdictOomError) {
|
|
153
|
+
return {
|
|
154
|
+
output: state.outputParts.join(""),
|
|
155
|
+
exitCode: 1,
|
|
156
|
+
error: "execution_oom",
|
|
157
|
+
limitInfo: { maxMemoryMb: Math.round(e.heapLimit / 1048576) },
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
161
|
+
// Handle edict_exit:N — clean process exit, not an error
|
|
162
|
+
const exitMatch = msg.match(/^edict_exit:(\d+)$/);
|
|
163
|
+
if (exitMatch) {
|
|
164
|
+
exitCode = parseInt(exitMatch[1], 10);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
state.outputParts.push(`Runtime error: ${msg}`);
|
|
168
|
+
exitCode = 1;
|
|
169
|
+
}
|
|
295
170
|
}
|
|
296
171
|
return {
|
|
297
|
-
output: outputParts.join(""),
|
|
172
|
+
output: state.outputParts.join(""),
|
|
298
173
|
exitCode,
|
|
299
174
|
returnValue,
|
|
300
175
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/codegen/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/codegen/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import binaryen from "binaryen";
|
|
2
|
+
import type { StructuredError } from "../errors/structured-errors.js";
|
|
3
|
+
import type { StringTable } from "./string-table.js";
|
|
4
|
+
import type { TypeExpr } from "../ast/types.js";
|
|
5
|
+
export declare function edictTypeToWasm(type: TypeExpr): binaryen.Type;
|
|
6
|
+
/**
|
|
7
|
+
* Bundles the compile-wide state shared across all expression compilers.
|
|
8
|
+
* Created once per `compile()` call. `FunctionContext` is separate because
|
|
9
|
+
* it changes per function/lambda scope.
|
|
10
|
+
*
|
|
11
|
+
* `lambdaCounter` is scoped here (not module-global) so multiple
|
|
12
|
+
* `compile()` calls in the same process don't leak state.
|
|
13
|
+
*/
|
|
14
|
+
export interface CompilationContext {
|
|
15
|
+
readonly mod: binaryen.Module;
|
|
16
|
+
readonly strings: StringTable;
|
|
17
|
+
readonly fnSigs: Map<string, FunctionSig>;
|
|
18
|
+
readonly errors: StructuredError[];
|
|
19
|
+
readonly constGlobals: Map<string, binaryen.Type>;
|
|
20
|
+
readonly recordLayouts: Map<string, RecordLayout>;
|
|
21
|
+
readonly enumLayouts: Map<string, EnumLayout>;
|
|
22
|
+
readonly fnTableIndices: Map<string, number>;
|
|
23
|
+
readonly tableFunctions: string[];
|
|
24
|
+
lambdaCounter: number;
|
|
25
|
+
}
|
|
26
|
+
export interface CompileSuccess {
|
|
27
|
+
ok: true;
|
|
28
|
+
wasm: Uint8Array;
|
|
29
|
+
wat?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface CompileFailure {
|
|
32
|
+
ok: false;
|
|
33
|
+
errors: StructuredError[];
|
|
34
|
+
}
|
|
35
|
+
export type CompileResult = CompileSuccess | CompileFailure;
|
|
36
|
+
/** Options for WASM code generation */
|
|
37
|
+
export interface CompileOptions {
|
|
38
|
+
/** Maximum WASM memory pages (64KB each). Default: 16 (= 1MB) */
|
|
39
|
+
maxMemoryPages?: number;
|
|
40
|
+
/** Emit WAT text alongside binary. Default: false */
|
|
41
|
+
emitWat?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface FunctionSig {
|
|
44
|
+
returnType: binaryen.Type;
|
|
45
|
+
paramTypes?: binaryen.Type[];
|
|
46
|
+
/** Tracks which Edict-level params are Strings (need ptr+len expansion).
|
|
47
|
+
* Index 0 = __env (always "other"), subsequent entries map to Edict params.
|
|
48
|
+
* Only present for user-defined functions. */
|
|
49
|
+
edictParamTypes?: ("String" | "other")[];
|
|
50
|
+
}
|
|
51
|
+
export interface LocalEntry {
|
|
52
|
+
index: number;
|
|
53
|
+
type: binaryen.Type;
|
|
54
|
+
edictTypeName?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface FieldLayout {
|
|
57
|
+
name: string;
|
|
58
|
+
offset: number;
|
|
59
|
+
wasmType: binaryen.Type;
|
|
60
|
+
}
|
|
61
|
+
export interface EnumVariantLayout {
|
|
62
|
+
name: string;
|
|
63
|
+
tag: number;
|
|
64
|
+
fields: FieldLayout[];
|
|
65
|
+
totalSize: number;
|
|
66
|
+
}
|
|
67
|
+
export interface EnumLayout {
|
|
68
|
+
variants: EnumVariantLayout[];
|
|
69
|
+
}
|
|
70
|
+
export interface RecordLayout {
|
|
71
|
+
fields: FieldLayout[];
|
|
72
|
+
totalSize: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Manages per-function local variables and their WASM indices.
|
|
76
|
+
* Compile-wide state (layouts, globals, table indices) lives in
|
|
77
|
+
* `CompilationContext` — not here.
|
|
78
|
+
*/
|
|
79
|
+
export declare class FunctionContext {
|
|
80
|
+
private nextIndex;
|
|
81
|
+
private locals;
|
|
82
|
+
readonly varTypes: binaryen.Type[];
|
|
83
|
+
constructor(params: {
|
|
84
|
+
name: string;
|
|
85
|
+
wasmType: binaryen.Type;
|
|
86
|
+
edictTypeName?: string;
|
|
87
|
+
}[]);
|
|
88
|
+
getLocal(name: string): LocalEntry | undefined;
|
|
89
|
+
addLocal(name: string, type: binaryen.Type, edictTypeName?: string): number;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/codegen/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Codegen Types — Shared types for the WASM code generator
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Extracted from codegen.ts for modularity.
|
|
5
|
+
import binaryen from "binaryen";
|
|
6
|
+
// =============================================================================
|
|
7
|
+
// Edict → WASM type mapping
|
|
8
|
+
// =============================================================================
|
|
9
|
+
export function edictTypeToWasm(type) {
|
|
10
|
+
if (type.kind === "basic") {
|
|
11
|
+
switch (type.name) {
|
|
12
|
+
case "Int":
|
|
13
|
+
return binaryen.i32;
|
|
14
|
+
case "Int64":
|
|
15
|
+
return binaryen.i64;
|
|
16
|
+
case "Float":
|
|
17
|
+
return binaryen.f64;
|
|
18
|
+
case "Bool":
|
|
19
|
+
return binaryen.i32;
|
|
20
|
+
case "String":
|
|
21
|
+
// Strings are (ptr, len) → we use i32 for the pointer.
|
|
22
|
+
return binaryen.i32;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (type.kind === "option") {
|
|
26
|
+
return binaryen.i32; // heap pointer to tagged union
|
|
27
|
+
}
|
|
28
|
+
if (type.kind === "unit_type") {
|
|
29
|
+
return binaryen.none;
|
|
30
|
+
}
|
|
31
|
+
// Fallback for anything else
|
|
32
|
+
return binaryen.i32;
|
|
33
|
+
}
|
|
34
|
+
// =============================================================================
|
|
35
|
+
// Function context (per-function local variable scope)
|
|
36
|
+
// =============================================================================
|
|
37
|
+
/**
|
|
38
|
+
* Manages per-function local variables and their WASM indices.
|
|
39
|
+
* Compile-wide state (layouts, globals, table indices) lives in
|
|
40
|
+
* `CompilationContext` — not here.
|
|
41
|
+
*/
|
|
42
|
+
export class FunctionContext {
|
|
43
|
+
nextIndex;
|
|
44
|
+
locals = new Map();
|
|
45
|
+
varTypes = [];
|
|
46
|
+
constructor(params) {
|
|
47
|
+
this.nextIndex = 0;
|
|
48
|
+
for (const p of params) {
|
|
49
|
+
this.locals.set(p.name, { index: this.nextIndex, type: p.wasmType, edictTypeName: p.edictTypeName });
|
|
50
|
+
this.nextIndex++;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
getLocal(name) {
|
|
54
|
+
return this.locals.get(name);
|
|
55
|
+
}
|
|
56
|
+
addLocal(name, type, edictTypeName) {
|
|
57
|
+
const index = this.nextIndex++;
|
|
58
|
+
this.locals.set(name, { index, type, edictTypeName });
|
|
59
|
+
this.varTypes.push(type);
|
|
60
|
+
return index;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=types.js.map
|