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.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +202 -0
  3. package/dist/ast/nodes.d.ts +248 -0
  4. package/dist/ast/nodes.d.ts.map +1 -0
  5. package/dist/ast/nodes.js +95 -0
  6. package/dist/ast/nodes.js.map +1 -0
  7. package/dist/ast/types.d.ts +78 -0
  8. package/dist/ast/types.d.ts.map +1 -0
  9. package/dist/ast/types.js +7 -0
  10. package/dist/ast/types.js.map +1 -0
  11. package/dist/check.d.ts +19 -0
  12. package/dist/check.d.ts.map +1 -0
  13. package/dist/check.js +49 -0
  14. package/dist/check.js.map +1 -0
  15. package/dist/checker/check.d.ts +7 -0
  16. package/dist/checker/check.d.ts.map +1 -0
  17. package/dist/checker/check.js +548 -0
  18. package/dist/checker/check.js.map +1 -0
  19. package/dist/checker/type-env.d.ts +24 -0
  20. package/dist/checker/type-env.d.ts.map +1 -0
  21. package/dist/checker/type-env.js +67 -0
  22. package/dist/checker/type-env.js.map +1 -0
  23. package/dist/checker/types-equal.d.ts +18 -0
  24. package/dist/checker/types-equal.d.ts.map +1 -0
  25. package/dist/checker/types-equal.js +79 -0
  26. package/dist/checker/types-equal.js.map +1 -0
  27. package/dist/codegen/builtins.d.ts +27 -0
  28. package/dist/codegen/builtins.d.ts.map +1 -0
  29. package/dist/codegen/builtins.js +54 -0
  30. package/dist/codegen/builtins.js.map +1 -0
  31. package/dist/codegen/codegen.d.ts +32 -0
  32. package/dist/codegen/codegen.d.ts.map +1 -0
  33. package/dist/codegen/codegen.js +1192 -0
  34. package/dist/codegen/codegen.js.map +1 -0
  35. package/dist/codegen/runner.d.ts +16 -0
  36. package/dist/codegen/runner.d.ts.map +1 -0
  37. package/dist/codegen/runner.js +82 -0
  38. package/dist/codegen/runner.js.map +1 -0
  39. package/dist/codegen/string-table.d.ts +35 -0
  40. package/dist/codegen/string-table.d.ts.map +1 -0
  41. package/dist/codegen/string-table.js +62 -0
  42. package/dist/codegen/string-table.js.map +1 -0
  43. package/dist/compile.d.ts +18 -0
  44. package/dist/compile.d.ts.map +1 -0
  45. package/dist/compile.js +40 -0
  46. package/dist/compile.js.map +1 -0
  47. package/dist/contracts/translate.d.ts +39 -0
  48. package/dist/contracts/translate.d.ts.map +1 -0
  49. package/dist/contracts/translate.js +372 -0
  50. package/dist/contracts/translate.js.map +1 -0
  51. package/dist/contracts/verify.d.ts +8 -0
  52. package/dist/contracts/verify.d.ts.map +1 -0
  53. package/dist/contracts/verify.js +400 -0
  54. package/dist/contracts/verify.js.map +1 -0
  55. package/dist/contracts/z3-context.d.ts +14 -0
  56. package/dist/contracts/z3-context.d.ts.map +1 -0
  57. package/dist/contracts/z3-context.js +24 -0
  58. package/dist/contracts/z3-context.js.map +1 -0
  59. package/dist/effects/call-graph.d.ts +21 -0
  60. package/dist/effects/call-graph.d.ts.map +1 -0
  61. package/dist/effects/call-graph.js +135 -0
  62. package/dist/effects/call-graph.js.map +1 -0
  63. package/dist/effects/effect-check.d.ts +13 -0
  64. package/dist/effects/effect-check.d.ts.map +1 -0
  65. package/dist/effects/effect-check.js +48 -0
  66. package/dist/effects/effect-check.js.map +1 -0
  67. package/dist/errors/structured-errors.d.ts +193 -0
  68. package/dist/errors/structured-errors.d.ts.map +1 -0
  69. package/dist/errors/structured-errors.js +96 -0
  70. package/dist/errors/structured-errors.js.map +1 -0
  71. package/dist/index.d.ts +34 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +37 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/mcp/create-server.d.ts +3 -0
  76. package/dist/mcp/create-server.d.ts.map +1 -0
  77. package/dist/mcp/create-server.js +157 -0
  78. package/dist/mcp/create-server.js.map +1 -0
  79. package/dist/mcp/handlers.d.ts +44 -0
  80. package/dist/mcp/handlers.d.ts.map +1 -0
  81. package/dist/mcp/handlers.js +112 -0
  82. package/dist/mcp/handlers.js.map +1 -0
  83. package/dist/mcp/server.d.ts +3 -0
  84. package/dist/mcp/server.d.ts.map +1 -0
  85. package/dist/mcp/server.js +129 -0
  86. package/dist/mcp/server.js.map +1 -0
  87. package/dist/resolver/levenshtein.d.ts +12 -0
  88. package/dist/resolver/levenshtein.d.ts.map +1 -0
  89. package/dist/resolver/levenshtein.js +54 -0
  90. package/dist/resolver/levenshtein.js.map +1 -0
  91. package/dist/resolver/resolve.d.ts +7 -0
  92. package/dist/resolver/resolve.d.ts.map +1 -0
  93. package/dist/resolver/resolve.js +393 -0
  94. package/dist/resolver/resolve.js.map +1 -0
  95. package/dist/resolver/scope.d.ts +34 -0
  96. package/dist/resolver/scope.d.ts.map +1 -0
  97. package/dist/resolver/scope.js +51 -0
  98. package/dist/resolver/scope.js.map +1 -0
  99. package/dist/validator/id-tracker.d.ts +14 -0
  100. package/dist/validator/id-tracker.d.ts.map +1 -0
  101. package/dist/validator/id-tracker.js +28 -0
  102. package/dist/validator/id-tracker.js.map +1 -0
  103. package/dist/validator/node-validators.d.ts +6 -0
  104. package/dist/validator/node-validators.d.ts.map +1 -0
  105. package/dist/validator/node-validators.js +808 -0
  106. package/dist/validator/node-validators.js.map +1 -0
  107. package/dist/validator/validate.d.ts +17 -0
  108. package/dist/validator/validate.d.ts.map +1 -0
  109. package/dist/validator/validate.js +27 -0
  110. package/dist/validator/validate.js.map +1 -0
  111. 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"}