edict-lang 0.1.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/LICENSE +21 -0
- package/README.md +202 -0
- package/dist/ast/nodes.d.ts +248 -0
- package/dist/ast/nodes.d.ts.map +1 -0
- package/dist/ast/nodes.js +95 -0
- package/dist/ast/nodes.js.map +1 -0
- package/dist/ast/types.d.ts +78 -0
- package/dist/ast/types.d.ts.map +1 -0
- package/dist/ast/types.js +7 -0
- package/dist/ast/types.js.map +1 -0
- package/dist/check.d.ts +19 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +49 -0
- package/dist/check.js.map +1 -0
- package/dist/checker/check.d.ts +7 -0
- package/dist/checker/check.d.ts.map +1 -0
- package/dist/checker/check.js +548 -0
- package/dist/checker/check.js.map +1 -0
- package/dist/checker/type-env.d.ts +24 -0
- package/dist/checker/type-env.d.ts.map +1 -0
- package/dist/checker/type-env.js +67 -0
- package/dist/checker/type-env.js.map +1 -0
- package/dist/checker/types-equal.d.ts +18 -0
- package/dist/checker/types-equal.d.ts.map +1 -0
- package/dist/checker/types-equal.js +79 -0
- package/dist/checker/types-equal.js.map +1 -0
- package/dist/codegen/builtins.d.ts +27 -0
- package/dist/codegen/builtins.d.ts.map +1 -0
- package/dist/codegen/builtins.js +54 -0
- package/dist/codegen/builtins.js.map +1 -0
- package/dist/codegen/codegen.d.ts +32 -0
- package/dist/codegen/codegen.d.ts.map +1 -0
- package/dist/codegen/codegen.js +1192 -0
- package/dist/codegen/codegen.js.map +1 -0
- package/dist/codegen/runner.d.ts +16 -0
- package/dist/codegen/runner.d.ts.map +1 -0
- package/dist/codegen/runner.js +82 -0
- package/dist/codegen/runner.js.map +1 -0
- package/dist/codegen/string-table.d.ts +35 -0
- package/dist/codegen/string-table.d.ts.map +1 -0
- package/dist/codegen/string-table.js +62 -0
- package/dist/codegen/string-table.js.map +1 -0
- package/dist/compile.d.ts +18 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +40 -0
- package/dist/compile.js.map +1 -0
- package/dist/contracts/translate.d.ts +39 -0
- package/dist/contracts/translate.d.ts.map +1 -0
- package/dist/contracts/translate.js +372 -0
- package/dist/contracts/translate.js.map +1 -0
- package/dist/contracts/verify.d.ts +8 -0
- package/dist/contracts/verify.d.ts.map +1 -0
- package/dist/contracts/verify.js +400 -0
- package/dist/contracts/verify.js.map +1 -0
- package/dist/contracts/z3-context.d.ts +14 -0
- package/dist/contracts/z3-context.d.ts.map +1 -0
- package/dist/contracts/z3-context.js +24 -0
- package/dist/contracts/z3-context.js.map +1 -0
- package/dist/effects/call-graph.d.ts +21 -0
- package/dist/effects/call-graph.d.ts.map +1 -0
- package/dist/effects/call-graph.js +135 -0
- package/dist/effects/call-graph.js.map +1 -0
- package/dist/effects/effect-check.d.ts +13 -0
- package/dist/effects/effect-check.d.ts.map +1 -0
- package/dist/effects/effect-check.js +48 -0
- package/dist/effects/effect-check.js.map +1 -0
- package/dist/errors/structured-errors.d.ts +193 -0
- package/dist/errors/structured-errors.d.ts.map +1 -0
- package/dist/errors/structured-errors.js +96 -0
- package/dist/errors/structured-errors.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/create-server.d.ts +3 -0
- package/dist/mcp/create-server.d.ts.map +1 -0
- package/dist/mcp/create-server.js +157 -0
- package/dist/mcp/create-server.js.map +1 -0
- package/dist/mcp/handlers.d.ts +44 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +112 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +129 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/resolver/levenshtein.d.ts +12 -0
- package/dist/resolver/levenshtein.d.ts.map +1 -0
- package/dist/resolver/levenshtein.js +54 -0
- package/dist/resolver/levenshtein.js.map +1 -0
- package/dist/resolver/resolve.d.ts +7 -0
- package/dist/resolver/resolve.d.ts.map +1 -0
- package/dist/resolver/resolve.js +393 -0
- package/dist/resolver/resolve.js.map +1 -0
- package/dist/resolver/scope.d.ts +34 -0
- package/dist/resolver/scope.d.ts.map +1 -0
- package/dist/resolver/scope.js +51 -0
- package/dist/resolver/scope.js.map +1 -0
- package/dist/validator/id-tracker.d.ts +14 -0
- package/dist/validator/id-tracker.d.ts.map +1 -0
- package/dist/validator/id-tracker.js +28 -0
- package/dist/validator/id-tracker.js.map +1 -0
- package/dist/validator/node-validators.d.ts +6 -0
- package/dist/validator/node-validators.d.ts.map +1 -0
- package/dist/validator/node-validators.js +808 -0
- package/dist/validator/node-validators.js.map +1 -0
- package/dist/validator/validate.d.ts +17 -0
- package/dist/validator/validate.d.ts.map +1 -0
- package/dist/validator/validate.js +27 -0
- package/dist/validator/validate.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Edict Expression → Z3 Expression Translator
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Translates Edict AST Expression nodes into Z3 SMT expressions.
|
|
5
|
+
// Unsupported expression kinds return null and push a TranslationError.
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Parameter → Z3 Variable creation
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
/**
|
|
10
|
+
* Create Z3 variables for each function parameter based on Param.type.
|
|
11
|
+
* Returns false if any param has an unsupported type (no Z3 variable created for it).
|
|
12
|
+
*/
|
|
13
|
+
export function createParamVariables(tctx, params) {
|
|
14
|
+
let allSupported = true;
|
|
15
|
+
const { ctx } = tctx;
|
|
16
|
+
for (const p of params) {
|
|
17
|
+
if (p.type.kind === "basic") {
|
|
18
|
+
switch (p.type.name) {
|
|
19
|
+
case "Int":
|
|
20
|
+
tctx.variables.set(p.name, ctx.Int.const(p.name));
|
|
21
|
+
break;
|
|
22
|
+
case "Float":
|
|
23
|
+
tctx.variables.set(p.name, ctx.Real.const(p.name));
|
|
24
|
+
break;
|
|
25
|
+
case "Bool":
|
|
26
|
+
tctx.variables.set(p.name, ctx.Bool.const(p.name));
|
|
27
|
+
break;
|
|
28
|
+
default:
|
|
29
|
+
allSupported = false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
allSupported = false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return allSupported;
|
|
37
|
+
}
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Expression translation
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/**
|
|
42
|
+
* Translate an Edict Expression to a Z3 expression.
|
|
43
|
+
* Returns null for unsupported expression kinds (pushes TranslationError).
|
|
44
|
+
*/
|
|
45
|
+
export function translateExpr(tctx, expr, contractId, functionName) {
|
|
46
|
+
switch (expr.kind) {
|
|
47
|
+
case "literal":
|
|
48
|
+
return translateLiteral(tctx, expr.value, contractId, functionName);
|
|
49
|
+
case "ident":
|
|
50
|
+
return translateIdent(tctx, expr.name, contractId, functionName);
|
|
51
|
+
case "binop":
|
|
52
|
+
return translateBinop(tctx, expr, contractId, functionName);
|
|
53
|
+
case "unop":
|
|
54
|
+
return translateUnop(tctx, expr, contractId, functionName);
|
|
55
|
+
case "access":
|
|
56
|
+
return translateAccess(tctx, expr, contractId, functionName);
|
|
57
|
+
case "if":
|
|
58
|
+
return translateIf(tctx, expr, contractId, functionName);
|
|
59
|
+
case "let":
|
|
60
|
+
return translateLet(tctx, expr, contractId, functionName);
|
|
61
|
+
case "match":
|
|
62
|
+
return translateMatch(tctx, expr, contractId, functionName);
|
|
63
|
+
case "call":
|
|
64
|
+
return translateCall(tctx, expr, contractId, functionName);
|
|
65
|
+
case "block":
|
|
66
|
+
return translateBlock(tctx, expr, contractId, functionName);
|
|
67
|
+
default:
|
|
68
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: expr.kind });
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Literal
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
function translateLiteral(tctx, value, contractId, functionName) {
|
|
76
|
+
const { ctx } = tctx;
|
|
77
|
+
if (typeof value === "boolean") {
|
|
78
|
+
return ctx.Bool.val(value);
|
|
79
|
+
}
|
|
80
|
+
if (typeof value === "number") {
|
|
81
|
+
if (Number.isInteger(value)) {
|
|
82
|
+
return ctx.Int.val(value);
|
|
83
|
+
}
|
|
84
|
+
return ctx.Real.val(value);
|
|
85
|
+
}
|
|
86
|
+
// string literals not supported in Z3
|
|
87
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: "literal:string" });
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// Identifier
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
function translateIdent(tctx, name, contractId, functionName) {
|
|
94
|
+
const v = tctx.variables.get(name);
|
|
95
|
+
if (v !== undefined)
|
|
96
|
+
return v;
|
|
97
|
+
// Unknown identifier — not a param or result
|
|
98
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `ident:${name}` });
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// Binary operation
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
function translateBinop(tctx, expr, contractId, functionName) {
|
|
105
|
+
const left = translateExpr(tctx, expr.left, contractId, functionName);
|
|
106
|
+
const right = translateExpr(tctx, expr.right, contractId, functionName);
|
|
107
|
+
if (left === null || right === null)
|
|
108
|
+
return null;
|
|
109
|
+
const { ctx } = tctx;
|
|
110
|
+
switch (expr.op) {
|
|
111
|
+
// Arithmetic
|
|
112
|
+
case "+": return left.add(right);
|
|
113
|
+
case "-": return left.sub(right);
|
|
114
|
+
case "*": return left.mul(right);
|
|
115
|
+
case "/": return left.div(right);
|
|
116
|
+
case "%": return left.mod(right);
|
|
117
|
+
// Comparison
|
|
118
|
+
case "==": return left.eq(right);
|
|
119
|
+
case "!=": return left.neq(right);
|
|
120
|
+
case "<": return left.lt(right);
|
|
121
|
+
case ">": return left.gt(right);
|
|
122
|
+
case "<=": return left.le(right);
|
|
123
|
+
case ">=": return left.ge(right);
|
|
124
|
+
// Logical
|
|
125
|
+
case "and": return ctx.And(left, right);
|
|
126
|
+
case "or": return ctx.Or(left, right);
|
|
127
|
+
case "implies": return ctx.Implies(left, right);
|
|
128
|
+
default:
|
|
129
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `binop:${expr.op}` });
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
// Unary operation
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
function translateUnop(tctx, expr, contractId, functionName) {
|
|
137
|
+
const operand = translateExpr(tctx, expr.operand, contractId, functionName);
|
|
138
|
+
if (operand === null)
|
|
139
|
+
return null;
|
|
140
|
+
switch (expr.op) {
|
|
141
|
+
case "not": return tctx.ctx.Not(operand);
|
|
142
|
+
case "-": return operand.neg();
|
|
143
|
+
default:
|
|
144
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `unop:${expr.op}` });
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
// Field access (e.g., x.length → fresh Z3 Int variable)
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
function translateAccess(tctx, expr, contractId, functionName) {
|
|
152
|
+
// Compute a synthetic variable name from the target
|
|
153
|
+
let targetName;
|
|
154
|
+
if (expr.target.kind === "ident") {
|
|
155
|
+
targetName = expr.target.name;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: "access:complex_target" });
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
const varName = `${targetName}.${expr.field}`;
|
|
162
|
+
// Reuse if already created, otherwise create fresh Int variable
|
|
163
|
+
let v = tctx.variables.get(varName);
|
|
164
|
+
if (!v) {
|
|
165
|
+
v = tctx.ctx.Int.const(varName);
|
|
166
|
+
tctx.variables.set(varName, v);
|
|
167
|
+
}
|
|
168
|
+
return v;
|
|
169
|
+
}
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
// Expression list (shared helper for multi-expression walking)
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
/**
|
|
174
|
+
* Walk an Expression[] accumulating `let` bindings, returning the last
|
|
175
|
+
* expression's Z3 translation. Used by: if branches, match arms, block
|
|
176
|
+
* bodies, and function body walking in verify.ts.
|
|
177
|
+
*/
|
|
178
|
+
export function translateExprList(tctx, exprs, contractId, functionName) {
|
|
179
|
+
if (exprs.length === 0)
|
|
180
|
+
return null;
|
|
181
|
+
for (let i = 0; i < exprs.length - 1; i++) {
|
|
182
|
+
const e = exprs[i];
|
|
183
|
+
if (e.kind === "let") {
|
|
184
|
+
const val = translateExpr(tctx, e.value, contractId, functionName);
|
|
185
|
+
if (val !== null)
|
|
186
|
+
tctx.variables.set(e.name, val);
|
|
187
|
+
}
|
|
188
|
+
// Non-let intermediates ignored (pure, no side effects)
|
|
189
|
+
}
|
|
190
|
+
return translateExpr(tctx, exprs[exprs.length - 1], contractId, functionName);
|
|
191
|
+
}
|
|
192
|
+
// ---------------------------------------------------------------------------
|
|
193
|
+
// If expression → Z3 ite
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
function translateIf(tctx, expr, contractId, functionName) {
|
|
196
|
+
// Both branches required for Z3 ite
|
|
197
|
+
if (!expr.else || expr.else.length === 0) {
|
|
198
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: "if:missing_else" });
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
const cond = translateExpr(tctx, expr.condition, contractId, functionName);
|
|
202
|
+
if (cond === null)
|
|
203
|
+
return null;
|
|
204
|
+
const thenVal = translateExprList(tctx, expr.then, contractId, functionName);
|
|
205
|
+
if (thenVal === null)
|
|
206
|
+
return null;
|
|
207
|
+
const elseVal = translateExprList(tctx, expr.else, contractId, functionName);
|
|
208
|
+
if (elseVal === null)
|
|
209
|
+
return null;
|
|
210
|
+
return tctx.ctx.If(cond, thenVal, elseVal);
|
|
211
|
+
}
|
|
212
|
+
// ---------------------------------------------------------------------------
|
|
213
|
+
// Let expression → variable binding (not a value)
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
function translateLet(tctx, expr, contractId, functionName) {
|
|
216
|
+
const val = translateExpr(tctx, expr.value, contractId, functionName);
|
|
217
|
+
if (val !== null) {
|
|
218
|
+
tctx.variables.set(expr.name, val);
|
|
219
|
+
}
|
|
220
|
+
// let is not a value-producing expression
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
// Match expression → chained Z3 ite
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
function translateMatch(tctx, expr, contractId, functionName) {
|
|
227
|
+
const target = translateExpr(tctx, expr.target, contractId, functionName);
|
|
228
|
+
if (target === null)
|
|
229
|
+
return null;
|
|
230
|
+
if (expr.arms.length === 0) {
|
|
231
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: "match:empty" });
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
// Separate literal arms from wildcard/binding
|
|
235
|
+
const literalArms = [];
|
|
236
|
+
let wildcardBody = null;
|
|
237
|
+
let bindingName = null;
|
|
238
|
+
for (const arm of expr.arms) {
|
|
239
|
+
switch (arm.pattern.kind) {
|
|
240
|
+
case "literal_pattern":
|
|
241
|
+
literalArms.push({ value: arm.pattern.value, body: arm.body });
|
|
242
|
+
break;
|
|
243
|
+
case "wildcard":
|
|
244
|
+
wildcardBody = arm.body;
|
|
245
|
+
break;
|
|
246
|
+
case "binding":
|
|
247
|
+
// binding = wildcard + name binding (target → arm.pattern.name)
|
|
248
|
+
wildcardBody = arm.body;
|
|
249
|
+
bindingName = arm.pattern.name;
|
|
250
|
+
break;
|
|
251
|
+
default:
|
|
252
|
+
// constructor patterns not supported
|
|
253
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `match:${arm.pattern.kind}` });
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Must have a wildcard/binding for ite default
|
|
258
|
+
if (wildcardBody === null) {
|
|
259
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: "match:no_wildcard" });
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
// Translate wildcard/binding body as the default
|
|
263
|
+
let defaultVal;
|
|
264
|
+
if (bindingName !== null) {
|
|
265
|
+
// Save variables, bind target → name, translate, restore
|
|
266
|
+
const savedVars = new Map(tctx.variables);
|
|
267
|
+
tctx.variables.set(bindingName, target);
|
|
268
|
+
defaultVal = translateExprList(tctx, wildcardBody, contractId, functionName);
|
|
269
|
+
tctx.variables = savedVars;
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
defaultVal = translateExprList(tctx, wildcardBody, contractId, functionName);
|
|
273
|
+
}
|
|
274
|
+
if (defaultVal === null)
|
|
275
|
+
return null;
|
|
276
|
+
// Build chained ite from right to left
|
|
277
|
+
let result = defaultVal;
|
|
278
|
+
for (let i = literalArms.length - 1; i >= 0; i--) {
|
|
279
|
+
const arm = literalArms[i];
|
|
280
|
+
const litVal = translateLiteral(tctx, arm.value, contractId, functionName);
|
|
281
|
+
if (litVal === null)
|
|
282
|
+
return null;
|
|
283
|
+
const bodyVal = translateExprList(tctx, arm.body, contractId, functionName);
|
|
284
|
+
if (bodyVal === null)
|
|
285
|
+
return null;
|
|
286
|
+
result = tctx.ctx.If(target.eq(litVal), bodyVal, result);
|
|
287
|
+
}
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
// ---------------------------------------------------------------------------
|
|
291
|
+
// Call expression → inline pure single-expr callee body
|
|
292
|
+
// ---------------------------------------------------------------------------
|
|
293
|
+
const MAX_CALL_DEPTH = 5;
|
|
294
|
+
function translateCall(tctx, expr, contractId, functionName) {
|
|
295
|
+
// Only ident-based calls can be inlined
|
|
296
|
+
if (expr.fn.kind !== "ident") {
|
|
297
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: "call:complex_fn" });
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
const calleeName = expr.fn.name;
|
|
301
|
+
// Need module context for function lookup
|
|
302
|
+
if (!tctx.module) {
|
|
303
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: "call:no_module" });
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
// Look up callee in module definitions
|
|
307
|
+
const calleeDef = tctx.module.definitions.find((d) => d.kind === "fn" && d.name === calleeName);
|
|
308
|
+
if (!calleeDef) {
|
|
309
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `call:unknown_fn:${calleeName}` });
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
// Must be pure
|
|
313
|
+
if (!calleeDef.effects.includes("pure")) {
|
|
314
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `call:not_pure:${calleeName}` });
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
// Must have non-empty body
|
|
318
|
+
if (calleeDef.body.length === 0) {
|
|
319
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `call:empty_body:${calleeName}` });
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
// Recursion guard
|
|
323
|
+
const depth = tctx.callDepth ?? 0;
|
|
324
|
+
if (depth >= MAX_CALL_DEPTH) {
|
|
325
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `call:max_depth:${calleeName}` });
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
const visited = tctx.visitedFunctions ?? new Set();
|
|
329
|
+
if (visited.has(calleeName)) {
|
|
330
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `call:recursive:${calleeName}` });
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
// Arity check
|
|
334
|
+
if (expr.args.length !== calleeDef.params.length) {
|
|
335
|
+
tctx.errors.push({ contractId, functionName, unsupportedNodeKind: `call:arity:${calleeName}` });
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
// Translate arguments
|
|
339
|
+
const translatedArgs = [];
|
|
340
|
+
for (const arg of expr.args) {
|
|
341
|
+
const z3Arg = translateExpr(tctx, arg, contractId, functionName);
|
|
342
|
+
if (z3Arg === null)
|
|
343
|
+
return null;
|
|
344
|
+
translatedArgs.push(z3Arg);
|
|
345
|
+
}
|
|
346
|
+
// Save variable state
|
|
347
|
+
const savedVars = new Map(tctx.variables);
|
|
348
|
+
// Bind callee params to translated args
|
|
349
|
+
for (let i = 0; i < calleeDef.params.length; i++) {
|
|
350
|
+
tctx.variables.set(calleeDef.params[i].name, translatedArgs[i]);
|
|
351
|
+
}
|
|
352
|
+
// Set recursion guard state
|
|
353
|
+
const savedDepth = tctx.callDepth;
|
|
354
|
+
const savedVisited = tctx.visitedFunctions;
|
|
355
|
+
tctx.callDepth = depth + 1;
|
|
356
|
+
tctx.visitedFunctions = new Set(visited);
|
|
357
|
+
tctx.visitedFunctions.add(calleeName);
|
|
358
|
+
// Translate callee body (supports multi-expression bodies with let bindings)
|
|
359
|
+
const result = translateExprList(tctx, calleeDef.body, contractId, functionName);
|
|
360
|
+
// Restore state
|
|
361
|
+
tctx.variables = savedVars;
|
|
362
|
+
tctx.callDepth = savedDepth;
|
|
363
|
+
tctx.visitedFunctions = savedVisited;
|
|
364
|
+
return result;
|
|
365
|
+
}
|
|
366
|
+
// ---------------------------------------------------------------------------
|
|
367
|
+
// Block expression → walk body, return last
|
|
368
|
+
// ---------------------------------------------------------------------------
|
|
369
|
+
function translateBlock(tctx, expr, contractId, functionName) {
|
|
370
|
+
return translateExprList(tctx, expr.body, contractId, functionName);
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=translate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/contracts/translate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EdictModule } from "../ast/nodes.js";
|
|
2
|
+
import type { StructuredError } from "../errors/structured-errors.js";
|
|
3
|
+
/**
|
|
4
|
+
* Verify all contracts in the module.
|
|
5
|
+
* Returns StructuredError[] — empty if all contracts are proven.
|
|
6
|
+
*/
|
|
7
|
+
export declare function contractVerify(module: EdictModule): Promise<StructuredError[]>;
|
|
8
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/contracts/verify.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAqC,MAAM,iBAAiB,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAmBtE;;;GAGG;AACH,wBAAsB,cAAc,CAChC,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAsC5B"}
|