@enspirit/elo 0.9.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 (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +322 -0
  3. package/bin/elo +2 -0
  4. package/bin/eloc +2 -0
  5. package/dist/src/ast.d.ts +309 -0
  6. package/dist/src/ast.d.ts.map +1 -0
  7. package/dist/src/ast.js +173 -0
  8. package/dist/src/ast.js.map +1 -0
  9. package/dist/src/bindings/javascript.d.ts +17 -0
  10. package/dist/src/bindings/javascript.d.ts.map +1 -0
  11. package/dist/src/bindings/javascript.js +350 -0
  12. package/dist/src/bindings/javascript.js.map +1 -0
  13. package/dist/src/bindings/ruby.d.ts +20 -0
  14. package/dist/src/bindings/ruby.d.ts.map +1 -0
  15. package/dist/src/bindings/ruby.js +365 -0
  16. package/dist/src/bindings/ruby.js.map +1 -0
  17. package/dist/src/bindings/sql.d.ts +20 -0
  18. package/dist/src/bindings/sql.d.ts.map +1 -0
  19. package/dist/src/bindings/sql.js +319 -0
  20. package/dist/src/bindings/sql.js.map +1 -0
  21. package/dist/src/cli.d.ts +3 -0
  22. package/dist/src/cli.d.ts.map +1 -0
  23. package/dist/src/cli.js +225 -0
  24. package/dist/src/cli.js.map +1 -0
  25. package/dist/src/compile.d.ts +47 -0
  26. package/dist/src/compile.d.ts.map +1 -0
  27. package/dist/src/compile.js +55 -0
  28. package/dist/src/compile.js.map +1 -0
  29. package/dist/src/compilers/javascript.d.ts +41 -0
  30. package/dist/src/compilers/javascript.d.ts.map +1 -0
  31. package/dist/src/compilers/javascript.js +323 -0
  32. package/dist/src/compilers/javascript.js.map +1 -0
  33. package/dist/src/compilers/ruby.d.ts +40 -0
  34. package/dist/src/compilers/ruby.d.ts.map +1 -0
  35. package/dist/src/compilers/ruby.js +326 -0
  36. package/dist/src/compilers/ruby.js.map +1 -0
  37. package/dist/src/compilers/sql.d.ts +37 -0
  38. package/dist/src/compilers/sql.d.ts.map +1 -0
  39. package/dist/src/compilers/sql.js +164 -0
  40. package/dist/src/compilers/sql.js.map +1 -0
  41. package/dist/src/elo.d.ts +3 -0
  42. package/dist/src/elo.d.ts.map +1 -0
  43. package/dist/src/elo.js +187 -0
  44. package/dist/src/elo.js.map +1 -0
  45. package/dist/src/eloc.d.ts +3 -0
  46. package/dist/src/eloc.d.ts.map +1 -0
  47. package/dist/src/eloc.js +232 -0
  48. package/dist/src/eloc.js.map +1 -0
  49. package/dist/src/eval.d.ts +3 -0
  50. package/dist/src/eval.d.ts.map +1 -0
  51. package/dist/src/eval.js +196 -0
  52. package/dist/src/eval.js.map +1 -0
  53. package/dist/src/index.d.ts +17 -0
  54. package/dist/src/index.d.ts.map +1 -0
  55. package/dist/src/index.js +36 -0
  56. package/dist/src/index.js.map +1 -0
  57. package/dist/src/ir.d.ts +295 -0
  58. package/dist/src/ir.d.ts.map +1 -0
  59. package/dist/src/ir.js +224 -0
  60. package/dist/src/ir.js.map +1 -0
  61. package/dist/src/parser.d.ts +137 -0
  62. package/dist/src/parser.d.ts.map +1 -0
  63. package/dist/src/parser.js +1266 -0
  64. package/dist/src/parser.js.map +1 -0
  65. package/dist/src/preludes/index.d.ts +14 -0
  66. package/dist/src/preludes/index.d.ts.map +1 -0
  67. package/dist/src/preludes/index.js +27 -0
  68. package/dist/src/preludes/index.js.map +1 -0
  69. package/dist/src/runtime.d.ts +23 -0
  70. package/dist/src/runtime.d.ts.map +1 -0
  71. package/dist/src/runtime.js +326 -0
  72. package/dist/src/runtime.js.map +1 -0
  73. package/dist/src/stdlib.d.ts +121 -0
  74. package/dist/src/stdlib.d.ts.map +1 -0
  75. package/dist/src/stdlib.js +237 -0
  76. package/dist/src/stdlib.js.map +1 -0
  77. package/dist/src/transform.d.ts +38 -0
  78. package/dist/src/transform.d.ts.map +1 -0
  79. package/dist/src/transform.js +322 -0
  80. package/dist/src/transform.js.map +1 -0
  81. package/dist/src/typedefs.d.ts +50 -0
  82. package/dist/src/typedefs.d.ts.map +1 -0
  83. package/dist/src/typedefs.js +294 -0
  84. package/dist/src/typedefs.js.map +1 -0
  85. package/dist/src/types.d.ts +54 -0
  86. package/dist/src/types.d.ts.map +1 -0
  87. package/dist/src/types.js +62 -0
  88. package/dist/src/types.js.map +1 -0
  89. package/package.json +66 -0
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ /**
3
+ * Standard Library for Elo
4
+ *
5
+ * Provides a type-based dispatch system for function implementations.
6
+ * Each target compiler (JS, Ruby, SQL) defines its own implementations
7
+ * that are looked up by function name and argument types.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.StdLib = void 0;
11
+ exports.signatureKey = signatureKey;
12
+ exports.formatSignature = formatSignature;
13
+ exports.typeGeneralizations = typeGeneralizations;
14
+ exports.binaryOp = binaryOp;
15
+ exports.simpleBinaryOp = simpleBinaryOp;
16
+ exports.unaryOp = unaryOp;
17
+ exports.methodCall = methodCall;
18
+ exports.nullary = nullary;
19
+ exports.unaryMethod = unaryMethod;
20
+ exports.isBinaryOp = isBinaryOp;
21
+ exports.rubyMethod = rubyMethod;
22
+ exports.fnCall = fnCall;
23
+ exports.helperCall = helperCall;
24
+ const types_1 = require("./types");
25
+ /**
26
+ * Create a signature key for lookup
27
+ * e.g., "add:int,int" or "neg:float"
28
+ */
29
+ function signatureKey(name, argTypes) {
30
+ const typeNames = argTypes.map(types_1.typeName).join(',');
31
+ return typeNames ? `${name}:${typeNames}` : name;
32
+ }
33
+ /**
34
+ * Format a function signature for user-friendly error messages
35
+ * e.g., "foo(Int, String)" or "upper(Any)"
36
+ */
37
+ function formatSignature(name, argTypes) {
38
+ const typeNames = argTypes.map(t => (0, types_1.typeName)(t).charAt(0).toUpperCase() + (0, types_1.typeName)(t).slice(1)).join(', ');
39
+ return `${name}(${typeNames})`;
40
+ }
41
+ /**
42
+ * Generate all generalizations of argument types by progressively replacing
43
+ * concrete types with 'any'. Returns type arrays in order from most specific
44
+ * to most general.
45
+ *
46
+ * For [int, float]: returns [int,float], [any,float], [int,any], [any,any]
47
+ * Types that are already 'any' don't generate additional combinations.
48
+ */
49
+ function typeGeneralizations(argTypes) {
50
+ if (argTypes.length === 0)
51
+ return [[]];
52
+ // Find indices of non-any types
53
+ const concreteIndices = [];
54
+ for (let i = 0; i < argTypes.length; i++) {
55
+ if (!(0, types_1.typeEquals)(argTypes[i], types_1.Types.any)) {
56
+ concreteIndices.push(i);
57
+ }
58
+ }
59
+ // Generate all subsets of concrete indices to replace with 'any'
60
+ // Start with empty subset (most specific) to full subset (most general)
61
+ const result = [];
62
+ const numSubsets = 1 << concreteIndices.length;
63
+ for (let mask = 0; mask < numSubsets; mask++) {
64
+ const generalized = [...argTypes];
65
+ for (let i = 0; i < concreteIndices.length; i++) {
66
+ if (mask & (1 << i)) {
67
+ generalized[concreteIndices[i]] = types_1.Types.any;
68
+ }
69
+ }
70
+ result.push(generalized);
71
+ }
72
+ return result;
73
+ }
74
+ /**
75
+ * A library of function implementations for a target language
76
+ */
77
+ class StdLib {
78
+ constructor() {
79
+ this.implementations = new Map();
80
+ this.fallback = null;
81
+ }
82
+ /**
83
+ * Register an implementation for a specific signature
84
+ */
85
+ register(name, argTypes, emitter) {
86
+ const key = signatureKey(name, argTypes);
87
+ this.implementations.set(key, emitter);
88
+ return this;
89
+ }
90
+ /**
91
+ * Register a fallback for unmatched signatures
92
+ */
93
+ registerFallback(handler) {
94
+ this.fallback = handler;
95
+ return this;
96
+ }
97
+ /**
98
+ * Look up an implementation by signature.
99
+ * Tries progressively more general type signatures before giving up.
100
+ * For example, for add(int, float), tries:
101
+ * add(int, float) -> add(any, float) -> add(int, any) -> add(any, any)
102
+ *
103
+ * If any argument type is 'any' and no match is found through generalization,
104
+ * falls back to finding any implementation with matching name and arity.
105
+ * This allows functions like abs(any) to find abs(int) or abs(float).
106
+ */
107
+ lookup(name, argTypes) {
108
+ // First try typeGeneralizations (concrete → any)
109
+ for (const generalized of typeGeneralizations(argTypes)) {
110
+ const key = signatureKey(name, generalized);
111
+ const impl = this.implementations.get(key);
112
+ if (impl)
113
+ return impl;
114
+ }
115
+ // If any argument type is 'any', try to find any implementation with matching arity
116
+ // This is the "type specialization" fallback for dynamically-typed contexts
117
+ if (argTypes.some(t => (0, types_1.typeEquals)(t, types_1.Types.any))) {
118
+ const arity = argTypes.length;
119
+ for (const [key, impl] of this.implementations) {
120
+ // Check if key matches: "name:type1,type2,..." or just "name" for nullary
121
+ const colonIdx = key.indexOf(':');
122
+ const keyName = colonIdx === -1 ? key : key.substring(0, colonIdx);
123
+ if (keyName !== name)
124
+ continue;
125
+ // Check arity matches
126
+ const keyArity = colonIdx === -1 ? 0 : key.substring(colonIdx + 1).split(',').length;
127
+ if (keyArity === arity) {
128
+ return impl;
129
+ }
130
+ }
131
+ }
132
+ return undefined;
133
+ }
134
+ /**
135
+ * Emit code for a function call
136
+ */
137
+ emit(name, args, argTypes, ctx) {
138
+ const impl = this.lookup(name, argTypes);
139
+ if (impl) {
140
+ return impl(args, ctx);
141
+ }
142
+ if (this.fallback) {
143
+ return this.fallback(name, args, argTypes, ctx);
144
+ }
145
+ throw new Error(`Unknown function ${formatSignature(name, argTypes)}`);
146
+ }
147
+ }
148
+ exports.StdLib = StdLib;
149
+ /**
150
+ * Helper to create a binary operator emitter
151
+ */
152
+ function binaryOp(op, format) {
153
+ return (args, ctx) => {
154
+ const left = ctx.emitWithParens(args[0], op, 'left');
155
+ const right = ctx.emitWithParens(args[1], op, 'right');
156
+ return format(left, right);
157
+ };
158
+ }
159
+ /**
160
+ * Helper to create a simple binary operator that just joins with the operator
161
+ */
162
+ function simpleBinaryOp(op) {
163
+ return binaryOp(op, (left, right) => `${left} ${op} ${right}`);
164
+ }
165
+ /**
166
+ * Helper to create a unary operator emitter
167
+ */
168
+ function unaryOp(format, needsParensCheck) {
169
+ return (args, ctx) => {
170
+ const operand = ctx.emit(args[0]);
171
+ const needsParens = needsParensCheck(args[0]);
172
+ return format(operand, needsParens);
173
+ };
174
+ }
175
+ /**
176
+ * Helper for method call style: arg0.method(arg1)
177
+ */
178
+ function methodCall(method) {
179
+ return (args, ctx) => {
180
+ const obj = ctx.emit(args[0]);
181
+ const arg = ctx.emit(args[1]);
182
+ return `${obj}.${method}(${arg})`;
183
+ };
184
+ }
185
+ /**
186
+ * Helper for nullary function (no args)
187
+ */
188
+ function nullary(value) {
189
+ return () => value;
190
+ }
191
+ /**
192
+ * Helper for unary method call: arg0.method()
193
+ */
194
+ function unaryMethod(method) {
195
+ return (args, ctx) => `${ctx.emit(args[0])}.${method}`;
196
+ }
197
+ /**
198
+ * Check if an IR expression is a binary operation (needs parens for postfix method calls)
199
+ */
200
+ function isBinaryOp(ir) {
201
+ if (ir.type !== 'call')
202
+ return false;
203
+ const binaryOps = ['add', 'sub', 'mul', 'div', 'mod', 'pow', 'lt', 'gt', 'lte', 'gte', 'eq', 'neq', 'and', 'or'];
204
+ return binaryOps.includes(ir.fn);
205
+ }
206
+ /**
207
+ * Helper for Ruby-style postfix method call that wraps binary expressions in parens.
208
+ * Use for: arg0.method() where Ruby's precedence requires parens around binary ops.
209
+ */
210
+ function rubyMethod(method) {
211
+ return (args, ctx) => {
212
+ const emitted = ctx.emit(args[0]);
213
+ const needsParens = isBinaryOp(args[0]);
214
+ return needsParens ? `(${emitted}).${method}` : `${emitted}.${method}`;
215
+ };
216
+ }
217
+ /**
218
+ * Helper for function call style: fn(arg0, arg1, ...)
219
+ */
220
+ function fnCall(fnName) {
221
+ return (args, ctx) => {
222
+ const emittedArgs = args.map(a => ctx.emit(a)).join(', ');
223
+ return `${fnName}(${emittedArgs})`;
224
+ };
225
+ }
226
+ /**
227
+ * Helper for runtime helper function call (tracks the helper as required)
228
+ * Used for dynamically-typed operations that need runtime support.
229
+ */
230
+ function helperCall(helperName) {
231
+ return (args, ctx) => {
232
+ ctx.requireHelper?.(helperName);
233
+ const emittedArgs = args.map(a => ctx.emit(a)).join(', ');
234
+ return `${helperName}(${emittedArgs})`;
235
+ };
236
+ }
237
+ //# sourceMappingURL=stdlib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdlib.js","sourceRoot":"","sources":["../../src/stdlib.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * AST to IR transformation
3
+ *
4
+ * Transforms the parsed AST into a typed intermediate representation.
5
+ * This phase:
6
+ * - Assigns types to literals
7
+ * - Rewrites operators as typed function calls
8
+ * - Rewrites temporal keywords as function calls
9
+ * - Tracks variable types through let bindings
10
+ */
11
+ import { Expr } from './ast';
12
+ import { IRExpr } from './ir';
13
+ import { EloType } from './types';
14
+ /**
15
+ * Type environment: maps variable names to their inferred types
16
+ */
17
+ export type TypeEnv = Map<string, EloType>;
18
+ /**
19
+ * Set of function names currently being defined (to detect recursion)
20
+ */
21
+ type DefiningSet = Set<string>;
22
+ /**
23
+ * Options for the transform function
24
+ */
25
+ export interface TransformOptions {
26
+ maxDepth?: number;
27
+ /**
28
+ * If true, allow undefined variables (for SQL where they represent column names).
29
+ * If false (default), undefined variables throw an error to prevent access to host globals.
30
+ */
31
+ allowUndefinedVariables?: boolean;
32
+ }
33
+ /**
34
+ * Transform an AST expression into IR
35
+ */
36
+ export declare function transform(expr: Expr, env?: TypeEnv, defining?: DefiningSet, options?: TransformOptions): IRExpr;
37
+ export {};
38
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EACL,MAAM,EA4BP,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,OAAO,EAAS,MAAM,SAAS,CAAC;AAGzC;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C;;GAEG;AACH,KAAK,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAID;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,IAAI,EACV,GAAG,GAAE,OAAmB,EACxB,QAAQ,GAAE,WAAuB,EACjC,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAIR"}
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+ /**
3
+ * AST to IR transformation
4
+ *
5
+ * Transforms the parsed AST into a typed intermediate representation.
6
+ * This phase:
7
+ * - Assigns types to literals
8
+ * - Rewrites operators as typed function calls
9
+ * - Rewrites temporal keywords as function calls
10
+ * - Tracks variable types through let bindings
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.transform = transform;
14
+ const ir_1 = require("./ir");
15
+ const types_1 = require("./types");
16
+ const typedefs_1 = require("./typedefs");
17
+ const DEFAULT_MAX_DEPTH = 100;
18
+ /**
19
+ * Transform an AST expression into IR
20
+ */
21
+ function transform(expr, env = new Map(), defining = new Set(), options = {}) {
22
+ const maxDepth = options.maxDepth ?? DEFAULT_MAX_DEPTH;
23
+ const allowUndefinedVariables = options.allowUndefinedVariables ?? false;
24
+ return transformWithDepth(expr, env, defining, 0, maxDepth, allowUndefinedVariables);
25
+ }
26
+ /**
27
+ * Internal transform function that tracks depth
28
+ */
29
+ function transformWithDepth(expr, env, defining, depth, maxDepth, allowUndefinedVariables) {
30
+ if (depth > maxDepth) {
31
+ throw new Error(`Maximum transform depth exceeded (${maxDepth})`);
32
+ }
33
+ const nextDepth = depth + 1;
34
+ const recurse = (e, newEnv = env, newDefining = defining) => transformWithDepth(e, newEnv, newDefining, nextDepth, maxDepth, allowUndefinedVariables);
35
+ switch (expr.type) {
36
+ case 'literal':
37
+ return transformLiteral(expr.value);
38
+ case 'string':
39
+ return (0, ir_1.irString)(expr.value);
40
+ case 'null':
41
+ return (0, ir_1.irNull)();
42
+ case 'date':
43
+ return (0, ir_1.irDate)(expr.value);
44
+ case 'datetime':
45
+ return (0, ir_1.irDateTime)(expr.value);
46
+ case 'duration':
47
+ return (0, ir_1.irDuration)(expr.value);
48
+ case 'variable':
49
+ // Allow _ (input variable) and variables defined in scope
50
+ // Reject undefined variables to prevent access to host globals (unless allowUndefinedVariables is set)
51
+ if (!allowUndefinedVariables && expr.name !== '_' && !env.has(expr.name)) {
52
+ throw new Error(`Undefined variable: '${expr.name}'`);
53
+ }
54
+ return (0, ir_1.irVariable)(expr.name, env.get(expr.name) ?? types_1.Types.any);
55
+ case 'binary':
56
+ return transformBinaryOp(expr.operator, expr.left, expr.right, env, defining, nextDepth, maxDepth, allowUndefinedVariables);
57
+ case 'unary':
58
+ return transformUnaryOp(expr.operator, expr.operand, env, defining, nextDepth, maxDepth, allowUndefinedVariables);
59
+ case 'temporal_keyword':
60
+ return transformTemporalKeyword(expr.keyword);
61
+ case 'function_call':
62
+ return transformFunctionCall(expr.name, expr.args, env, defining, nextDepth, maxDepth, allowUndefinedVariables);
63
+ case 'member_access':
64
+ return (0, ir_1.irMemberAccess)(recurse(expr.object), expr.property);
65
+ case 'let':
66
+ return transformLet(expr.bindings, expr.body, env, defining, nextDepth, maxDepth, allowUndefinedVariables);
67
+ case 'if':
68
+ return (0, ir_1.irIf)(recurse(expr.condition), recurse(expr.then), recurse(expr.else));
69
+ case 'lambda':
70
+ return transformLambda(expr.params, expr.body, env, defining, nextDepth, maxDepth, allowUndefinedVariables);
71
+ case 'object':
72
+ return (0, ir_1.irObject)(expr.properties.map((prop) => ({
73
+ key: prop.key,
74
+ value: recurse(prop.value),
75
+ })));
76
+ case 'array':
77
+ return (0, ir_1.irArray)(expr.elements.map((el) => recurse(el)));
78
+ case 'alternative':
79
+ return transformAlternative(expr.alternatives, env, defining, nextDepth, maxDepth, allowUndefinedVariables);
80
+ case 'apply': {
81
+ const fnIR = recurse(expr.fn);
82
+ const argsIR = expr.args.map((arg) => recurse(arg));
83
+ const argTypes = argsIR.map(ir_1.inferType);
84
+ return (0, ir_1.irApply)(fnIR, argsIR, argTypes, types_1.Types.any);
85
+ }
86
+ case 'datapath':
87
+ return (0, ir_1.irDataPath)(expr.segments);
88
+ case 'typedef': {
89
+ // Transform type definition
90
+ const irTypeExpr = transformTypeExprWithContext(expr.typeExpr, env, defining, nextDepth, maxDepth, allowUndefinedVariables);
91
+ // Add type name to environment as a parser function type
92
+ const newEnv = new Map(env);
93
+ newEnv.set(expr.name, types_1.Types.fn);
94
+ const bodyIR = transformWithDepth(expr.body, newEnv, defining, nextDepth, maxDepth, allowUndefinedVariables);
95
+ return (0, ir_1.irTypeDef)(expr.name, irTypeExpr, bodyIR);
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Transform an AST type expression to IR type expression
101
+ */
102
+ function transformTypeExprWithContext(typeExpr, env, defining, depth, maxDepth, allowUndefinedVariables) {
103
+ switch (typeExpr.kind) {
104
+ case 'type_ref':
105
+ return (0, ir_1.irTypeRef)(typeExpr.name);
106
+ case 'type_schema': {
107
+ const props = typeExpr.properties.map(prop => ({
108
+ key: prop.key,
109
+ typeExpr: transformTypeExprWithContext(prop.typeExpr, env, defining, depth, maxDepth, allowUndefinedVariables),
110
+ optional: prop.optional,
111
+ }));
112
+ // Transform extras if it's a TypeExpr, otherwise pass through as-is
113
+ let extras;
114
+ if (typeExpr.extras === 'closed' || typeExpr.extras === 'ignored' || typeExpr.extras === undefined) {
115
+ extras = typeExpr.extras;
116
+ }
117
+ else {
118
+ extras = transformTypeExprWithContext(typeExpr.extras, env, defining, depth, maxDepth, allowUndefinedVariables);
119
+ }
120
+ return (0, ir_1.irTypeSchema)(props, extras);
121
+ }
122
+ case 'subtype_constraint': {
123
+ // Transform the base type
124
+ const baseTypeIR = transformTypeExprWithContext(typeExpr.baseType, env, defining, depth, maxDepth, allowUndefinedVariables);
125
+ // Transform the constraint with the variable in scope
126
+ const constraintEnv = new Map(env);
127
+ constraintEnv.set(typeExpr.variable, types_1.Types.any);
128
+ const constraintIR = transformWithDepth(typeExpr.constraint, constraintEnv, defining, depth, maxDepth, allowUndefinedVariables);
129
+ return (0, ir_1.irSubtypeConstraint)(baseTypeIR, typeExpr.variable, constraintIR);
130
+ }
131
+ case 'array_type':
132
+ return (0, ir_1.irArrayType)(transformTypeExprWithContext(typeExpr.elementType, env, defining, depth, maxDepth, allowUndefinedVariables));
133
+ case 'union_type':
134
+ return (0, ir_1.irUnionType)(typeExpr.types.map(t => transformTypeExprWithContext(t, env, defining, depth, maxDepth, allowUndefinedVariables)));
135
+ }
136
+ }
137
+ /**
138
+ * Transform a literal value (number or boolean)
139
+ */
140
+ function transformLiteral(value) {
141
+ if (typeof value === 'boolean') {
142
+ return (0, ir_1.irBool)(value);
143
+ }
144
+ // Distinguish int from float
145
+ if (Number.isInteger(value)) {
146
+ return (0, ir_1.irInt)(value);
147
+ }
148
+ return (0, ir_1.irFloat)(value);
149
+ }
150
+ /**
151
+ * Transform a binary operator into a typed function call
152
+ */
153
+ function transformBinaryOp(operator, left, right, env, defining, depth, maxDepth, allowUndefinedVariables) {
154
+ const leftIR = transformWithDepth(left, env, defining, depth, maxDepth, allowUndefinedVariables);
155
+ const rightIR = transformWithDepth(right, env, defining, depth, maxDepth, allowUndefinedVariables);
156
+ const leftType = (0, ir_1.inferType)(leftIR);
157
+ const rightType = (0, ir_1.inferType)(rightIR);
158
+ const fn = opNameMap[operator];
159
+ if (!fn) {
160
+ throw new Error(`Unknown binary operator: ${operator}`);
161
+ }
162
+ const resultType = typedefs_1.eloTypeDefs.lookup(fn, [leftType, rightType]);
163
+ return (0, ir_1.irCall)(fn, [leftIR, rightIR], [leftType, rightType], resultType);
164
+ }
165
+ /**
166
+ * Transform a unary operator into a typed function call
167
+ */
168
+ function transformUnaryOp(operator, operand, env, defining, depth, maxDepth, allowUndefinedVariables) {
169
+ const operandIR = transformWithDepth(operand, env, defining, depth, maxDepth, allowUndefinedVariables);
170
+ const operandType = (0, ir_1.inferType)(operandIR);
171
+ const fn = unaryOpNameMap[operator];
172
+ if (!fn) {
173
+ throw new Error(`Unknown unary operator: ${operator}`);
174
+ }
175
+ const resultType = typedefs_1.eloTypeDefs.lookup(fn, [operandType]);
176
+ return (0, ir_1.irCall)(fn, [operandIR], [operandType], resultType);
177
+ }
178
+ /**
179
+ * Transform a temporal keyword into a function call
180
+ */
181
+ function transformTemporalKeyword(keyword) {
182
+ const today = () => (0, ir_1.irCall)('today', [], [], types_1.Types.date);
183
+ const now = () => (0, ir_1.irCall)('now', [], [], types_1.Types.datetime);
184
+ switch (keyword) {
185
+ case 'TODAY':
186
+ return today();
187
+ case 'NOW':
188
+ return now();
189
+ case 'TOMORROW':
190
+ return (0, ir_1.irCall)('add', [today(), (0, ir_1.irDuration)('P1D')], [types_1.Types.date, types_1.Types.duration], types_1.Types.date);
191
+ case 'YESTERDAY':
192
+ return (0, ir_1.irCall)('sub', [today(), (0, ir_1.irDuration)('P1D')], [types_1.Types.date, types_1.Types.duration], types_1.Types.date);
193
+ case 'SOD':
194
+ return (0, ir_1.irCall)('start_of_day', [now()], [types_1.Types.datetime], types_1.Types.datetime);
195
+ case 'EOD':
196
+ return (0, ir_1.irCall)('end_of_day', [now()], [types_1.Types.datetime], types_1.Types.datetime);
197
+ case 'SOW':
198
+ return (0, ir_1.irCall)('start_of_week', [now()], [types_1.Types.datetime], types_1.Types.datetime);
199
+ case 'EOW':
200
+ return (0, ir_1.irCall)('end_of_week', [now()], [types_1.Types.datetime], types_1.Types.datetime);
201
+ case 'SOM':
202
+ return (0, ir_1.irCall)('start_of_month', [now()], [types_1.Types.datetime], types_1.Types.datetime);
203
+ case 'EOM':
204
+ return (0, ir_1.irCall)('end_of_month', [now()], [types_1.Types.datetime], types_1.Types.datetime);
205
+ case 'SOQ':
206
+ return (0, ir_1.irCall)('start_of_quarter', [now()], [types_1.Types.datetime], types_1.Types.datetime);
207
+ case 'EOQ':
208
+ return (0, ir_1.irCall)('end_of_quarter', [now()], [types_1.Types.datetime], types_1.Types.datetime);
209
+ case 'SOY':
210
+ return (0, ir_1.irCall)('start_of_year', [now()], [types_1.Types.datetime], types_1.Types.datetime);
211
+ case 'EOY':
212
+ return (0, ir_1.irCall)('end_of_year', [now()], [types_1.Types.datetime], types_1.Types.datetime);
213
+ case 'BOT':
214
+ return (0, ir_1.irCall)('bot', [], [], types_1.Types.datetime);
215
+ case 'EOT':
216
+ return (0, ir_1.irCall)('eot', [], [], types_1.Types.datetime);
217
+ default:
218
+ throw new Error(`Unknown temporal keyword: ${keyword}`);
219
+ }
220
+ }
221
+ /**
222
+ * Transform a function call
223
+ *
224
+ * If the function name is a variable in the environment (i.e., a lambda),
225
+ * we emit an 'apply' node. Otherwise, we emit a 'call' to the stdlib.
226
+ */
227
+ function transformFunctionCall(name, args, env, defining, depth, maxDepth, allowUndefinedVariables) {
228
+ // Check for recursive call
229
+ if (defining.has(name)) {
230
+ throw new Error(`Recursive function calls are not allowed: '${name}' cannot call itself`);
231
+ }
232
+ const argsIR = args.map((arg) => transformWithDepth(arg, env, defining, depth, maxDepth, allowUndefinedVariables));
233
+ const argTypes = argsIR.map(ir_1.inferType);
234
+ // Check if the name is a variable holding a lambda
235
+ const varType = env.get(name);
236
+ if (varType && varType.kind === 'fn') {
237
+ // Lambda application: emit irApply
238
+ const fnVar = (0, ir_1.irVariable)(name, varType);
239
+ return (0, ir_1.irApply)(fnVar, argsIR, argTypes, types_1.Types.any);
240
+ }
241
+ // stdlib function call
242
+ const resultType = typedefs_1.eloTypeDefs.lookup(name, argTypes);
243
+ return (0, ir_1.irCall)(name, argsIR, argTypes, resultType);
244
+ }
245
+ /**
246
+ * Transform a let expression
247
+ */
248
+ function transformLet(bindings, body, env, defining, depth, maxDepth, allowUndefinedVariables) {
249
+ // Build a new environment with the bindings
250
+ const newEnv = new Map(env);
251
+ const irBindings = bindings.map((binding) => {
252
+ // If the value is a lambda, add the binding name to the defining set
253
+ // to detect recursive calls within the lambda body
254
+ const isLambda = binding.value.type === 'lambda';
255
+ const newDefining = isLambda ? new Set([...defining, binding.name]) : defining;
256
+ const valueIR = transformWithDepth(binding.value, newEnv, newDefining, depth, maxDepth, allowUndefinedVariables);
257
+ const valueType = (0, ir_1.inferType)(valueIR);
258
+ newEnv.set(binding.name, valueType);
259
+ return { name: binding.name, value: valueIR };
260
+ });
261
+ const bodyIR = transformWithDepth(body, newEnv, defining, depth, maxDepth, allowUndefinedVariables);
262
+ return (0, ir_1.irLet)(irBindings, bodyIR);
263
+ }
264
+ /**
265
+ * Transform a lambda expression
266
+ */
267
+ function transformLambda(params, body, env, defining, depth, maxDepth, allowUndefinedVariables) {
268
+ // Build a new environment with params as 'any' type
269
+ const newEnv = new Map(env);
270
+ const irParams = params.map((name) => {
271
+ newEnv.set(name, types_1.Types.any);
272
+ return { name, inferredType: types_1.Types.any };
273
+ });
274
+ const bodyIR = transformWithDepth(body, newEnv, defining, depth, maxDepth, allowUndefinedVariables);
275
+ const resultType = (0, ir_1.inferType)(bodyIR);
276
+ return (0, ir_1.irLambda)(irParams, bodyIR, resultType);
277
+ }
278
+ /**
279
+ * Transform an alternative expression: a | b | c
280
+ *
281
+ * The result type is inferred as:
282
+ * - If all alternatives have the same type, that type
283
+ * - Otherwise, 'any'
284
+ */
285
+ function transformAlternative(alternatives, env, defining, depth, maxDepth, allowUndefinedVariables) {
286
+ const irAlts = alternatives.map((alt) => transformWithDepth(alt, env, defining, depth, maxDepth, allowUndefinedVariables));
287
+ // Infer result type: use first non-any type, or any if all are any
288
+ let resultType = types_1.Types.any;
289
+ for (const alt of irAlts) {
290
+ const altType = (0, ir_1.inferType)(alt);
291
+ if (altType.kind !== 'any') {
292
+ resultType = altType;
293
+ break;
294
+ }
295
+ }
296
+ return (0, ir_1.irAlternative)(irAlts, resultType);
297
+ }
298
+ /**
299
+ * Map operator symbols to function name prefixes
300
+ */
301
+ const opNameMap = {
302
+ '+': 'add',
303
+ '-': 'sub',
304
+ '*': 'mul',
305
+ '/': 'div',
306
+ '%': 'mod',
307
+ '^': 'pow',
308
+ '<': 'lt',
309
+ '>': 'gt',
310
+ '<=': 'lte',
311
+ '>=': 'gte',
312
+ '==': 'eq',
313
+ '!=': 'neq',
314
+ '&&': 'and',
315
+ '||': 'or',
316
+ };
317
+ const unaryOpNameMap = {
318
+ '-': 'neg',
319
+ '+': 'pos',
320
+ '!': 'not',
321
+ };
322
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/transform.ts"],"names":[],"mappings":"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"}