@tsonic/frontend 0.0.5 → 0.0.11
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/.tsbuildinfo +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ir/builder/imports.d.ts.map +1 -1
- package/dist/ir/builder/imports.js +0 -5
- package/dist/ir/builder/imports.js.map +1 -1
- package/dist/ir/builder.test.js +60 -0
- package/dist/ir/builder.test.js.map +1 -1
- package/dist/ir/converters/expressions/access.d.ts.map +1 -1
- package/dist/ir/converters/expressions/access.js +65 -2
- package/dist/ir/converters/expressions/access.js.map +1 -1
- package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
- package/dist/ir/converters/expressions/calls.js +49 -1
- package/dist/ir/converters/expressions/calls.js.map +1 -1
- package/dist/ir/converters/expressions/collections.d.ts.map +1 -1
- package/dist/ir/converters/expressions/collections.js +4 -1
- package/dist/ir/converters/expressions/collections.js.map +1 -1
- package/dist/ir/converters/expressions/functions.d.ts.map +1 -1
- package/dist/ir/converters/expressions/functions.js +3 -1
- package/dist/ir/converters/expressions/functions.js.map +1 -1
- package/dist/ir/converters/expressions/helpers.d.ts +10 -0
- package/dist/ir/converters/expressions/helpers.d.ts.map +1 -1
- package/dist/ir/converters/expressions/helpers.js +173 -7
- package/dist/ir/converters/expressions/helpers.js.map +1 -1
- package/dist/ir/converters/expressions/index.d.ts +1 -1
- package/dist/ir/converters/expressions/index.d.ts.map +1 -1
- package/dist/ir/converters/expressions/index.js +1 -1
- package/dist/ir/converters/expressions/index.js.map +1 -1
- package/dist/ir/converters/expressions/literals.d.ts.map +1 -1
- package/dist/ir/converters/expressions/literals.js +2 -1
- package/dist/ir/converters/expressions/literals.js.map +1 -1
- package/dist/ir/converters/expressions/numeric-recovery.test.d.ts +14 -0
- package/dist/ir/converters/expressions/numeric-recovery.test.d.ts.map +1 -0
- package/dist/ir/converters/expressions/numeric-recovery.test.js +286 -0
- package/dist/ir/converters/expressions/numeric-recovery.test.js.map +1 -0
- package/dist/ir/converters/expressions/operators.d.ts.map +1 -1
- package/dist/ir/converters/expressions/operators.js +16 -2
- package/dist/ir/converters/expressions/operators.js.map +1 -1
- package/dist/ir/converters/expressions/other.d.ts.map +1 -1
- package/dist/ir/converters/expressions/other.js +4 -1
- package/dist/ir/converters/expressions/other.js.map +1 -1
- package/dist/ir/converters/statements/control/loops.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/loops.js +1 -0
- package/dist/ir/converters/statements/control/loops.js.map +1 -1
- package/dist/ir/expression-converter.d.ts.map +1 -1
- package/dist/ir/expression-converter.js +81 -9
- package/dist/ir/expression-converter.js.map +1 -1
- package/dist/ir/type-converter/arrays.d.ts.map +1 -1
- package/dist/ir/type-converter/arrays.js +1 -0
- package/dist/ir/type-converter/arrays.js.map +1 -1
- package/dist/ir/type-converter/inference.d.ts.map +1 -1
- package/dist/ir/type-converter/inference.js +31 -20
- package/dist/ir/type-converter/inference.js.map +1 -1
- package/dist/ir/type-converter/literals.d.ts.map +1 -1
- package/dist/ir/type-converter/literals.js +2 -1
- package/dist/ir/type-converter/literals.js.map +1 -1
- package/dist/ir/type-converter/objects.d.ts.map +1 -1
- package/dist/ir/type-converter/objects.js +2 -1
- package/dist/ir/type-converter/objects.js.map +1 -1
- package/dist/ir/type-converter/orchestrator.d.ts.map +1 -1
- package/dist/ir/type-converter/orchestrator.js +18 -1
- package/dist/ir/type-converter/orchestrator.js.map +1 -1
- package/dist/ir/type-converter/references.d.ts.map +1 -1
- package/dist/ir/type-converter/references.js +14 -18
- package/dist/ir/type-converter/references.js.map +1 -1
- package/dist/ir/types/expressions.d.ts +102 -1
- package/dist/ir/types/expressions.d.ts.map +1 -1
- package/dist/ir/types/guards.d.ts.map +1 -1
- package/dist/ir/types/guards.js +2 -0
- package/dist/ir/types/guards.js.map +1 -1
- package/dist/ir/types/index.d.ts +4 -2
- package/dist/ir/types/index.d.ts.map +1 -1
- package/dist/ir/types/index.js +1 -0
- package/dist/ir/types/index.js.map +1 -1
- package/dist/ir/types/ir-types.d.ts +19 -0
- package/dist/ir/types/ir-types.d.ts.map +1 -1
- package/dist/ir/types/numeric-kind.d.ts +68 -0
- package/dist/ir/types/numeric-kind.d.ts.map +1 -0
- package/dist/ir/types/numeric-kind.js +170 -0
- package/dist/ir/types/numeric-kind.js.map +1 -0
- package/dist/ir/types/statements.d.ts +38 -1
- package/dist/ir/types/statements.d.ts.map +1 -1
- package/dist/ir/types.d.ts +2 -1
- package/dist/ir/types.d.ts.map +1 -1
- package/dist/ir/types.js +2 -0
- package/dist/ir/types.js.map +1 -1
- package/dist/ir/validation/index.d.ts +7 -0
- package/dist/ir/validation/index.d.ts.map +1 -0
- package/dist/ir/validation/index.js +7 -0
- package/dist/ir/validation/index.js.map +1 -0
- package/dist/ir/validation/numeric-invariants.test.d.ts +15 -0
- package/dist/ir/validation/numeric-invariants.test.d.ts.map +1 -0
- package/dist/ir/validation/numeric-invariants.test.js +598 -0
- package/dist/ir/validation/numeric-invariants.test.js.map +1 -0
- package/dist/ir/validation/numeric-proof-pass.d.ts +37 -0
- package/dist/ir/validation/numeric-proof-pass.d.ts.map +1 -0
- package/dist/ir/validation/numeric-proof-pass.js +889 -0
- package/dist/ir/validation/numeric-proof-pass.js.map +1 -0
- package/dist/ir/validation/soundness-gate.d.ts +26 -0
- package/dist/ir/validation/soundness-gate.d.ts.map +1 -0
- package/dist/ir/validation/soundness-gate.js +551 -0
- package/dist/ir/validation/soundness-gate.js.map +1 -0
- package/dist/ir/validation/soundness-gate.test.d.ts +13 -0
- package/dist/ir/validation/soundness-gate.test.d.ts.map +1 -0
- package/dist/ir/validation/soundness-gate.test.js +315 -0
- package/dist/ir/validation/soundness-gate.test.js.map +1 -0
- package/dist/ir/validation/yield-lowering-pass.d.ts +40 -0
- package/dist/ir/validation/yield-lowering-pass.d.ts.map +1 -0
- package/dist/ir/validation/yield-lowering-pass.js +548 -0
- package/dist/ir/validation/yield-lowering-pass.js.map +1 -0
- package/dist/ir/validation/yield-lowering-pass.test.d.ts +12 -0
- package/dist/ir/validation/yield-lowering-pass.test.d.ts.map +1 -0
- package/dist/ir/validation/yield-lowering-pass.test.js +761 -0
- package/dist/ir/validation/yield-lowering-pass.test.js.map +1 -0
- package/dist/program/bindings.d.ts +5 -0
- package/dist/program/bindings.d.ts.map +1 -1
- package/dist/program/bindings.js +12 -1
- package/dist/program/bindings.js.map +1 -1
- package/dist/program/dependency-graph.d.ts +3 -0
- package/dist/program/dependency-graph.d.ts.map +1 -1
- package/dist/program/dependency-graph.js +28 -4
- package/dist/program/dependency-graph.js.map +1 -1
- package/dist/program/index.d.ts +1 -1
- package/dist/program/index.d.ts.map +1 -1
- package/dist/program/index.js.map +1 -1
- package/dist/program.d.ts +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js.map +1 -1
- package/dist/types/diagnostic.d.ts +1 -1
- package/dist/types/diagnostic.d.ts.map +1 -1
- package/dist/types/diagnostic.js.map +1 -1
- package/package.json +1 -1
- package/dist/types/parameter-modifiers.d.ts +0 -55
- package/dist/types/parameter-modifiers.d.ts.map +0 -1
- package/dist/types/parameter-modifiers.js +0 -148
- package/dist/types/parameter-modifiers.js.map +0 -1
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yield Lowering Pass
|
|
3
|
+
*
|
|
4
|
+
* Transforms yield expressions in generator functions into IrYieldStatement nodes.
|
|
5
|
+
* This pass runs after IR building and before numeric proof pass.
|
|
6
|
+
*
|
|
7
|
+
* Supported patterns:
|
|
8
|
+
* - `yield expr;` → IrYieldStatement with no receiveTarget
|
|
9
|
+
* - `const x = yield expr;` → IrYieldStatement with receiveTarget = identifierPattern
|
|
10
|
+
* - `x = yield expr;` → IrYieldStatement with receiveTarget = identifierPattern
|
|
11
|
+
* - `const {a, b} = yield expr;` → IrYieldStatement with receiveTarget = objectPattern
|
|
12
|
+
* - `const [a, b] = yield expr;` → IrYieldStatement with receiveTarget = arrayPattern
|
|
13
|
+
*
|
|
14
|
+
* Unsupported patterns (emit TSN6101 diagnostic):
|
|
15
|
+
* - `foo(yield x)` - yield in call argument
|
|
16
|
+
* - `yield x + yield y` - multiple yields in expression
|
|
17
|
+
* - `[yield x, 1]` - yield in array literal
|
|
18
|
+
* - `{a: yield x}` - yield in object literal
|
|
19
|
+
* - `cond ? yield a : b` - yield in ternary
|
|
20
|
+
*/
|
|
21
|
+
import { createDiagnostic, } from "../../types/diagnostic.js";
|
|
22
|
+
/**
|
|
23
|
+
* Create a source location for a module
|
|
24
|
+
*/
|
|
25
|
+
const moduleLocation = (ctx) => ({
|
|
26
|
+
file: ctx.filePath,
|
|
27
|
+
line: 1,
|
|
28
|
+
column: 1,
|
|
29
|
+
length: 1,
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* Check if an expression contains a yield expression anywhere in its tree.
|
|
33
|
+
*/
|
|
34
|
+
const containsYield = (expr) => {
|
|
35
|
+
switch (expr.kind) {
|
|
36
|
+
case "yield":
|
|
37
|
+
return true;
|
|
38
|
+
case "binary":
|
|
39
|
+
case "logical":
|
|
40
|
+
return containsYield(expr.left) || containsYield(expr.right);
|
|
41
|
+
case "unary":
|
|
42
|
+
case "update":
|
|
43
|
+
case "await":
|
|
44
|
+
case "spread":
|
|
45
|
+
return containsYield(expr.expression);
|
|
46
|
+
case "conditional":
|
|
47
|
+
return (containsYield(expr.condition) ||
|
|
48
|
+
containsYield(expr.whenTrue) ||
|
|
49
|
+
containsYield(expr.whenFalse));
|
|
50
|
+
case "assignment":
|
|
51
|
+
return ((expr.left.kind !== "identifierPattern" &&
|
|
52
|
+
expr.left.kind !== "arrayPattern" &&
|
|
53
|
+
expr.left.kind !== "objectPattern" &&
|
|
54
|
+
containsYield(expr.left)) ||
|
|
55
|
+
containsYield(expr.right));
|
|
56
|
+
case "memberAccess":
|
|
57
|
+
return (containsYield(expr.object) ||
|
|
58
|
+
(typeof expr.property !== "string" && containsYield(expr.property)));
|
|
59
|
+
case "call":
|
|
60
|
+
case "new":
|
|
61
|
+
return (containsYield(expr.callee) ||
|
|
62
|
+
expr.arguments.some((a) => containsYield(a)));
|
|
63
|
+
case "array":
|
|
64
|
+
return expr.elements.some((e) => e !== undefined && containsYield(e));
|
|
65
|
+
case "object":
|
|
66
|
+
return expr.properties.some((p) => {
|
|
67
|
+
if (p.kind === "property") {
|
|
68
|
+
return ((typeof p.key !== "string" && containsYield(p.key)) ||
|
|
69
|
+
containsYield(p.value));
|
|
70
|
+
}
|
|
71
|
+
return containsYield(p.expression);
|
|
72
|
+
});
|
|
73
|
+
case "templateLiteral":
|
|
74
|
+
return expr.expressions.some((e) => containsYield(e));
|
|
75
|
+
case "arrowFunction":
|
|
76
|
+
case "functionExpression":
|
|
77
|
+
// Don't recurse into nested functions - they have their own generator context
|
|
78
|
+
return false;
|
|
79
|
+
default:
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Count the number of yield expressions in an expression tree.
|
|
85
|
+
*/
|
|
86
|
+
const countYields = (expr) => {
|
|
87
|
+
switch (expr.kind) {
|
|
88
|
+
case "yield":
|
|
89
|
+
return 1 + (expr.expression ? countYields(expr.expression) : 0);
|
|
90
|
+
case "binary":
|
|
91
|
+
case "logical":
|
|
92
|
+
return countYields(expr.left) + countYields(expr.right);
|
|
93
|
+
case "unary":
|
|
94
|
+
case "update":
|
|
95
|
+
case "await":
|
|
96
|
+
case "spread":
|
|
97
|
+
return countYields(expr.expression);
|
|
98
|
+
case "conditional":
|
|
99
|
+
return (countYields(expr.condition) +
|
|
100
|
+
countYields(expr.whenTrue) +
|
|
101
|
+
countYields(expr.whenFalse));
|
|
102
|
+
case "assignment":
|
|
103
|
+
return ((expr.left.kind !== "identifierPattern" &&
|
|
104
|
+
expr.left.kind !== "arrayPattern" &&
|
|
105
|
+
expr.left.kind !== "objectPattern"
|
|
106
|
+
? countYields(expr.left)
|
|
107
|
+
: 0) + countYields(expr.right));
|
|
108
|
+
case "memberAccess":
|
|
109
|
+
return (countYields(expr.object) +
|
|
110
|
+
(typeof expr.property !== "string" ? countYields(expr.property) : 0));
|
|
111
|
+
case "call":
|
|
112
|
+
case "new":
|
|
113
|
+
return (countYields(expr.callee) +
|
|
114
|
+
expr.arguments.reduce((sum, a) => sum + countYields(a), 0));
|
|
115
|
+
case "array":
|
|
116
|
+
return expr.elements.reduce((sum, e) => sum + (e !== undefined ? countYields(e) : 0), 0);
|
|
117
|
+
case "object":
|
|
118
|
+
return expr.properties.reduce((sum, p) => {
|
|
119
|
+
if (p.kind === "property") {
|
|
120
|
+
return (sum +
|
|
121
|
+
(typeof p.key !== "string" ? countYields(p.key) : 0) +
|
|
122
|
+
countYields(p.value));
|
|
123
|
+
}
|
|
124
|
+
return sum + countYields(p.expression);
|
|
125
|
+
}, 0);
|
|
126
|
+
case "templateLiteral":
|
|
127
|
+
return expr.expressions.reduce((sum, e) => sum + countYields(e), 0);
|
|
128
|
+
case "arrowFunction":
|
|
129
|
+
case "functionExpression":
|
|
130
|
+
return 0;
|
|
131
|
+
default:
|
|
132
|
+
return 0;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Create an IrYieldStatement from a yield expression.
|
|
137
|
+
*/
|
|
138
|
+
const createYieldStatement = (yieldExpr, receiveTarget, receivedType) => ({
|
|
139
|
+
kind: "yieldStatement",
|
|
140
|
+
output: yieldExpr.expression,
|
|
141
|
+
delegate: yieldExpr.delegate,
|
|
142
|
+
receiveTarget,
|
|
143
|
+
receivedType,
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* Create an IrGeneratorReturnStatement from a return statement's expression.
|
|
147
|
+
* This captures the return value for generators with TReturn.
|
|
148
|
+
*/
|
|
149
|
+
const createGeneratorReturnStatement = (expression) => ({
|
|
150
|
+
kind: "generatorReturnStatement",
|
|
151
|
+
expression,
|
|
152
|
+
});
|
|
153
|
+
/**
|
|
154
|
+
* Emit diagnostic for unsupported yield position.
|
|
155
|
+
*/
|
|
156
|
+
const emitUnsupportedYieldDiagnostic = (ctx, position, location) => {
|
|
157
|
+
ctx.diagnostics.push(createDiagnostic("TSN6101", "error", `Yield expression in ${position} is not supported`, location ?? moduleLocation(ctx), "Extract yield to a separate statement: `const result = yield expr; use(result);`"));
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Process a statement in a generator function body.
|
|
161
|
+
* Returns the transformed statement(s) - may return multiple statements
|
|
162
|
+
* when a single statement is split.
|
|
163
|
+
*/
|
|
164
|
+
const processStatement = (stmt, ctx) => {
|
|
165
|
+
if (!ctx.inGenerator) {
|
|
166
|
+
// Not in generator - just recurse into nested functions
|
|
167
|
+
return processNonGeneratorStatement(stmt, ctx);
|
|
168
|
+
}
|
|
169
|
+
switch (stmt.kind) {
|
|
170
|
+
case "expressionStatement": {
|
|
171
|
+
const expr = stmt.expression;
|
|
172
|
+
// Pattern 1: yield expr; (yield in statement position)
|
|
173
|
+
if (expr.kind === "yield") {
|
|
174
|
+
return createYieldStatement(expr, undefined, undefined);
|
|
175
|
+
}
|
|
176
|
+
// Pattern 3: x = yield expr; (assignment with yield on right)
|
|
177
|
+
if (expr.kind === "assignment" &&
|
|
178
|
+
expr.right.kind === "yield" &&
|
|
179
|
+
!expr.right.delegate) {
|
|
180
|
+
// Only support simple assignment operators (=)
|
|
181
|
+
if (expr.operator !== "=") {
|
|
182
|
+
emitUnsupportedYieldDiagnostic(ctx, "compound assignment", expr.right.sourceSpan);
|
|
183
|
+
return stmt;
|
|
184
|
+
}
|
|
185
|
+
// Extract the target pattern
|
|
186
|
+
const target = expr.left;
|
|
187
|
+
if (target.kind === "identifierPattern" ||
|
|
188
|
+
target.kind === "arrayPattern" ||
|
|
189
|
+
target.kind === "objectPattern") {
|
|
190
|
+
return createYieldStatement(expr.right, target, expr.right.inferredType);
|
|
191
|
+
}
|
|
192
|
+
// Assignment to member expression or other LHS - not supported
|
|
193
|
+
emitUnsupportedYieldDiagnostic(ctx, "assignment to complex target", expr.right.sourceSpan);
|
|
194
|
+
return stmt;
|
|
195
|
+
}
|
|
196
|
+
// Check for yield in unsupported positions
|
|
197
|
+
if (containsYield(expr)) {
|
|
198
|
+
emitUnsupportedYieldDiagnostic(ctx, "complex expression", expr.sourceSpan);
|
|
199
|
+
}
|
|
200
|
+
return stmt;
|
|
201
|
+
}
|
|
202
|
+
case "variableDeclaration": {
|
|
203
|
+
// Pattern 2: const x = yield expr; (variable declaration with yield initializer)
|
|
204
|
+
const transformedDeclarations = [];
|
|
205
|
+
for (const decl of stmt.declarations) {
|
|
206
|
+
if (decl.initializer?.kind === "yield" && !decl.initializer.delegate) {
|
|
207
|
+
// Check for multiple yields in initializer
|
|
208
|
+
if (countYields(decl.initializer) > 1) {
|
|
209
|
+
emitUnsupportedYieldDiagnostic(ctx, "multiple yields in initializer", decl.initializer.sourceSpan);
|
|
210
|
+
transformedDeclarations.push({
|
|
211
|
+
kind: "variableDeclaration",
|
|
212
|
+
declarationKind: stmt.declarationKind,
|
|
213
|
+
declarations: [decl],
|
|
214
|
+
isExported: false,
|
|
215
|
+
});
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
// Transform to yield statement with receiveTarget
|
|
219
|
+
transformedDeclarations.push(createYieldStatement(decl.initializer, decl.name, decl.type ?? decl.initializer.inferredType));
|
|
220
|
+
}
|
|
221
|
+
else if (decl.initializer && containsYield(decl.initializer)) {
|
|
222
|
+
// Yield nested in initializer expression - not supported
|
|
223
|
+
emitUnsupportedYieldDiagnostic(ctx, "nested initializer expression", decl.initializer.sourceSpan);
|
|
224
|
+
transformedDeclarations.push({
|
|
225
|
+
kind: "variableDeclaration",
|
|
226
|
+
declarationKind: stmt.declarationKind,
|
|
227
|
+
declarations: [decl],
|
|
228
|
+
isExported: false,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// No yield - keep original declaration
|
|
233
|
+
transformedDeclarations.push({
|
|
234
|
+
kind: "variableDeclaration",
|
|
235
|
+
declarationKind: stmt.declarationKind,
|
|
236
|
+
declarations: [decl],
|
|
237
|
+
isExported: false,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Return single statement or array of statements
|
|
242
|
+
if (transformedDeclarations.length === 1 &&
|
|
243
|
+
transformedDeclarations[0] !== undefined) {
|
|
244
|
+
return transformedDeclarations[0];
|
|
245
|
+
}
|
|
246
|
+
return transformedDeclarations;
|
|
247
|
+
}
|
|
248
|
+
case "blockStatement":
|
|
249
|
+
return {
|
|
250
|
+
...stmt,
|
|
251
|
+
statements: stmt.statements.flatMap((s) => {
|
|
252
|
+
const result = processStatement(s, ctx);
|
|
253
|
+
return Array.isArray(result) ? result : [result];
|
|
254
|
+
}),
|
|
255
|
+
};
|
|
256
|
+
case "ifStatement":
|
|
257
|
+
return {
|
|
258
|
+
...stmt,
|
|
259
|
+
thenStatement: flattenStatement(processStatement(stmt.thenStatement, ctx)),
|
|
260
|
+
elseStatement: stmt.elseStatement
|
|
261
|
+
? flattenStatement(processStatement(stmt.elseStatement, ctx))
|
|
262
|
+
: undefined,
|
|
263
|
+
};
|
|
264
|
+
case "whileStatement":
|
|
265
|
+
return {
|
|
266
|
+
...stmt,
|
|
267
|
+
body: flattenStatement(processStatement(stmt.body, ctx)),
|
|
268
|
+
};
|
|
269
|
+
case "forStatement": {
|
|
270
|
+
// Check for yield in initializer - not supported
|
|
271
|
+
if (stmt.initializer) {
|
|
272
|
+
if (stmt.initializer.kind === "variableDeclaration" &&
|
|
273
|
+
stmt.initializer.declarations.some((d) => d.initializer && containsYield(d.initializer))) {
|
|
274
|
+
emitUnsupportedYieldDiagnostic(ctx, "for loop initializer");
|
|
275
|
+
}
|
|
276
|
+
else if (stmt.initializer.kind !== "variableDeclaration" &&
|
|
277
|
+
containsYield(stmt.initializer)) {
|
|
278
|
+
emitUnsupportedYieldDiagnostic(ctx, "for loop initializer");
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Check for yield in condition/update - not supported
|
|
282
|
+
if (stmt.condition && containsYield(stmt.condition)) {
|
|
283
|
+
emitUnsupportedYieldDiagnostic(ctx, "for loop condition");
|
|
284
|
+
}
|
|
285
|
+
if (stmt.update && containsYield(stmt.update)) {
|
|
286
|
+
emitUnsupportedYieldDiagnostic(ctx, "for loop update");
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
...stmt,
|
|
290
|
+
body: flattenStatement(processStatement(stmt.body, ctx)),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
case "forOfStatement":
|
|
294
|
+
return {
|
|
295
|
+
...stmt,
|
|
296
|
+
body: flattenStatement(processStatement(stmt.body, ctx)),
|
|
297
|
+
};
|
|
298
|
+
case "switchStatement":
|
|
299
|
+
return {
|
|
300
|
+
...stmt,
|
|
301
|
+
cases: stmt.cases.map((c) => ({
|
|
302
|
+
...c,
|
|
303
|
+
statements: c.statements.flatMap((s) => {
|
|
304
|
+
const result = processStatement(s, ctx);
|
|
305
|
+
return Array.isArray(result) ? result : [result];
|
|
306
|
+
}),
|
|
307
|
+
})),
|
|
308
|
+
};
|
|
309
|
+
case "tryStatement":
|
|
310
|
+
return {
|
|
311
|
+
...stmt,
|
|
312
|
+
tryBlock: flattenStatement(processStatement(stmt.tryBlock, ctx)),
|
|
313
|
+
catchClause: stmt.catchClause
|
|
314
|
+
? {
|
|
315
|
+
...stmt.catchClause,
|
|
316
|
+
body: flattenStatement(processStatement(stmt.catchClause.body, ctx)),
|
|
317
|
+
}
|
|
318
|
+
: undefined,
|
|
319
|
+
finallyBlock: stmt.finallyBlock
|
|
320
|
+
? flattenStatement(processStatement(stmt.finallyBlock, ctx))
|
|
321
|
+
: undefined,
|
|
322
|
+
};
|
|
323
|
+
case "returnStatement":
|
|
324
|
+
// Check for yield in return expression
|
|
325
|
+
if (stmt.expression && containsYield(stmt.expression)) {
|
|
326
|
+
emitUnsupportedYieldDiagnostic(ctx, "return expression", stmt.expression.sourceSpan);
|
|
327
|
+
}
|
|
328
|
+
// Transform return statements in generators to IrGeneratorReturnStatement
|
|
329
|
+
// This captures the return value for generators with TReturn
|
|
330
|
+
// The emitter will emit: __returnValue = expr; yield break;
|
|
331
|
+
return createGeneratorReturnStatement(stmt.expression);
|
|
332
|
+
case "throwStatement":
|
|
333
|
+
// Check for yield in throw expression
|
|
334
|
+
if (containsYield(stmt.expression)) {
|
|
335
|
+
emitUnsupportedYieldDiagnostic(ctx, "throw expression", stmt.expression.sourceSpan);
|
|
336
|
+
}
|
|
337
|
+
return stmt;
|
|
338
|
+
default:
|
|
339
|
+
return stmt;
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
/**
|
|
343
|
+
* Type guard to check if a result is a single statement (has 'kind' property).
|
|
344
|
+
*/
|
|
345
|
+
const isSingleStatement = (result) => {
|
|
346
|
+
return "kind" in result && typeof result.kind === "string";
|
|
347
|
+
};
|
|
348
|
+
/**
|
|
349
|
+
* Flatten a statement result to a single statement (wrap in block if needed).
|
|
350
|
+
*/
|
|
351
|
+
const flattenStatement = (result) => {
|
|
352
|
+
if (isSingleStatement(result)) {
|
|
353
|
+
return result;
|
|
354
|
+
}
|
|
355
|
+
// result is now readonly IrStatement[]
|
|
356
|
+
if (result.length === 1 && result[0] !== undefined) {
|
|
357
|
+
return result[0];
|
|
358
|
+
}
|
|
359
|
+
return {
|
|
360
|
+
kind: "blockStatement",
|
|
361
|
+
statements: [...result],
|
|
362
|
+
};
|
|
363
|
+
};
|
|
364
|
+
/**
|
|
365
|
+
* Process statements in non-generator functions (just recurse into nested generators).
|
|
366
|
+
*/
|
|
367
|
+
const processNonGeneratorStatement = (stmt, ctx) => {
|
|
368
|
+
switch (stmt.kind) {
|
|
369
|
+
case "functionDeclaration":
|
|
370
|
+
if (stmt.isGenerator) {
|
|
371
|
+
const generatorCtx = {
|
|
372
|
+
...ctx,
|
|
373
|
+
inGenerator: true,
|
|
374
|
+
};
|
|
375
|
+
return {
|
|
376
|
+
...stmt,
|
|
377
|
+
body: flattenStatement(processStatement(stmt.body, generatorCtx)),
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
return {
|
|
381
|
+
...stmt,
|
|
382
|
+
body: flattenStatement(processStatement(stmt.body, ctx)),
|
|
383
|
+
};
|
|
384
|
+
case "classDeclaration":
|
|
385
|
+
return {
|
|
386
|
+
...stmt,
|
|
387
|
+
members: stmt.members.map((m) => processClassMember(m, ctx)),
|
|
388
|
+
};
|
|
389
|
+
case "blockStatement":
|
|
390
|
+
return {
|
|
391
|
+
...stmt,
|
|
392
|
+
statements: stmt.statements.map((s) => processNonGeneratorStatement(s, ctx)),
|
|
393
|
+
};
|
|
394
|
+
case "ifStatement":
|
|
395
|
+
return {
|
|
396
|
+
...stmt,
|
|
397
|
+
thenStatement: processNonGeneratorStatement(stmt.thenStatement, ctx),
|
|
398
|
+
elseStatement: stmt.elseStatement
|
|
399
|
+
? processNonGeneratorStatement(stmt.elseStatement, ctx)
|
|
400
|
+
: undefined,
|
|
401
|
+
};
|
|
402
|
+
case "whileStatement":
|
|
403
|
+
return {
|
|
404
|
+
...stmt,
|
|
405
|
+
body: processNonGeneratorStatement(stmt.body, ctx),
|
|
406
|
+
};
|
|
407
|
+
case "forStatement":
|
|
408
|
+
// Only process the body - initializer can't contain nested generator functions
|
|
409
|
+
return {
|
|
410
|
+
...stmt,
|
|
411
|
+
body: processNonGeneratorStatement(stmt.body, ctx),
|
|
412
|
+
};
|
|
413
|
+
case "forOfStatement":
|
|
414
|
+
return {
|
|
415
|
+
...stmt,
|
|
416
|
+
body: processNonGeneratorStatement(stmt.body, ctx),
|
|
417
|
+
};
|
|
418
|
+
case "switchStatement":
|
|
419
|
+
return {
|
|
420
|
+
...stmt,
|
|
421
|
+
cases: stmt.cases.map((c) => ({
|
|
422
|
+
...c,
|
|
423
|
+
statements: c.statements.map((s) => processNonGeneratorStatement(s, ctx)),
|
|
424
|
+
})),
|
|
425
|
+
};
|
|
426
|
+
case "tryStatement":
|
|
427
|
+
return {
|
|
428
|
+
...stmt,
|
|
429
|
+
tryBlock: processNonGeneratorStatement(stmt.tryBlock, ctx),
|
|
430
|
+
catchClause: stmt.catchClause
|
|
431
|
+
? {
|
|
432
|
+
...stmt.catchClause,
|
|
433
|
+
body: processNonGeneratorStatement(stmt.catchClause.body, ctx),
|
|
434
|
+
}
|
|
435
|
+
: undefined,
|
|
436
|
+
finallyBlock: stmt.finallyBlock
|
|
437
|
+
? processNonGeneratorStatement(stmt.finallyBlock, ctx)
|
|
438
|
+
: undefined,
|
|
439
|
+
};
|
|
440
|
+
default:
|
|
441
|
+
return stmt;
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
/**
|
|
445
|
+
* Process class members, looking for generator methods.
|
|
446
|
+
*/
|
|
447
|
+
const processClassMember = (member, ctx) => {
|
|
448
|
+
if (member.kind === "methodDeclaration" && member.body) {
|
|
449
|
+
if (member.isGenerator) {
|
|
450
|
+
const generatorCtx = {
|
|
451
|
+
...ctx,
|
|
452
|
+
inGenerator: true,
|
|
453
|
+
};
|
|
454
|
+
return {
|
|
455
|
+
...member,
|
|
456
|
+
body: flattenStatement(processStatement(member.body, generatorCtx)),
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
return {
|
|
460
|
+
...member,
|
|
461
|
+
body: flattenStatement(processStatement(member.body, ctx)),
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
if (member.kind === "constructorDeclaration" && member.body) {
|
|
465
|
+
return {
|
|
466
|
+
...member,
|
|
467
|
+
body: flattenStatement(processStatement(member.body, ctx)),
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
return member;
|
|
471
|
+
};
|
|
472
|
+
/**
|
|
473
|
+
* Process a module, transforming yield expressions in generators.
|
|
474
|
+
*/
|
|
475
|
+
const processModule = (module) => {
|
|
476
|
+
const ctx = {
|
|
477
|
+
filePath: module.filePath,
|
|
478
|
+
diagnostics: [],
|
|
479
|
+
inGenerator: false,
|
|
480
|
+
};
|
|
481
|
+
const processedBody = module.body.map((stmt) => {
|
|
482
|
+
if (stmt.kind === "functionDeclaration" && stmt.isGenerator) {
|
|
483
|
+
const generatorCtx = {
|
|
484
|
+
...ctx,
|
|
485
|
+
inGenerator: true,
|
|
486
|
+
};
|
|
487
|
+
return {
|
|
488
|
+
...stmt,
|
|
489
|
+
body: flattenStatement(processStatement(stmt.body, generatorCtx)),
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
return processNonGeneratorStatement(stmt, ctx);
|
|
493
|
+
});
|
|
494
|
+
const processedExports = module.exports.map((exp) => {
|
|
495
|
+
if (exp.kind === "declaration") {
|
|
496
|
+
if (exp.declaration.kind === "functionDeclaration" &&
|
|
497
|
+
exp.declaration.isGenerator) {
|
|
498
|
+
const generatorCtx = {
|
|
499
|
+
...ctx,
|
|
500
|
+
inGenerator: true,
|
|
501
|
+
};
|
|
502
|
+
return {
|
|
503
|
+
...exp,
|
|
504
|
+
declaration: {
|
|
505
|
+
...exp.declaration,
|
|
506
|
+
body: flattenStatement(processStatement(exp.declaration.body, generatorCtx)),
|
|
507
|
+
},
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
return {
|
|
511
|
+
...exp,
|
|
512
|
+
declaration: processNonGeneratorStatement(exp.declaration, ctx),
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
return exp;
|
|
516
|
+
});
|
|
517
|
+
return {
|
|
518
|
+
module: {
|
|
519
|
+
...module,
|
|
520
|
+
body: processedBody,
|
|
521
|
+
exports: processedExports,
|
|
522
|
+
},
|
|
523
|
+
diagnostics: ctx.diagnostics,
|
|
524
|
+
};
|
|
525
|
+
};
|
|
526
|
+
/**
|
|
527
|
+
* Run yield lowering pass on all modules.
|
|
528
|
+
*
|
|
529
|
+
* This pass transforms yield expressions in generator functions into
|
|
530
|
+
* IrYieldStatement nodes that the emitter can directly consume.
|
|
531
|
+
*
|
|
532
|
+
* HARD GATE: If any diagnostics are returned, the emitter MUST NOT run.
|
|
533
|
+
*/
|
|
534
|
+
export const runYieldLoweringPass = (modules) => {
|
|
535
|
+
const processedModules = [];
|
|
536
|
+
const allDiagnostics = [];
|
|
537
|
+
for (const module of modules) {
|
|
538
|
+
const result = processModule(module);
|
|
539
|
+
processedModules.push(result.module);
|
|
540
|
+
allDiagnostics.push(...result.diagnostics);
|
|
541
|
+
}
|
|
542
|
+
return {
|
|
543
|
+
ok: allDiagnostics.length === 0,
|
|
544
|
+
modules: processedModules,
|
|
545
|
+
diagnostics: allDiagnostics,
|
|
546
|
+
};
|
|
547
|
+
};
|
|
548
|
+
//# sourceMappingURL=yield-lowering-pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yield-lowering-pass.js","sourceRoot":"","sources":["../../../src/ir/validation/yield-lowering-pass.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Yield Lowering Pass
|
|
3
|
+
*
|
|
4
|
+
* Tests:
|
|
5
|
+
* - containsYield detection
|
|
6
|
+
* - countYields counting
|
|
7
|
+
* - Pattern transformations (yield expr, const x = yield, assignment)
|
|
8
|
+
* - Unsupported position detection (TSN6101)
|
|
9
|
+
* - Non-generator function handling (no transformation)
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=yield-lowering-pass.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yield-lowering-pass.test.d.ts","sourceRoot":"","sources":["../../../src/ir/validation/yield-lowering-pass.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|