@tsonic/emitter 0.0.13 → 0.0.15
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/array.test.d.ts +1 -1
- package/dist/array.test.js +17 -16
- package/dist/array.test.js.map +1 -1
- package/dist/core/attributes.test.js +2 -2
- package/dist/core/attributes.test.js.map +1 -1
- package/dist/core/imports.d.ts.map +1 -1
- package/dist/core/imports.js +1 -9
- package/dist/core/imports.js.map +1 -1
- package/dist/core/module-emitter/static-container.d.ts.map +1 -1
- package/dist/core/module-emitter/static-container.js +3 -1
- package/dist/core/module-emitter/static-container.js.map +1 -1
- package/dist/core/unsafe.d.ts +11 -0
- package/dist/core/unsafe.d.ts.map +1 -0
- package/dist/core/unsafe.js +264 -0
- package/dist/core/unsafe.js.map +1 -0
- package/dist/emitter-types/context.d.ts +1 -1
- package/dist/emitter-types/context.d.ts.map +1 -1
- package/dist/emitter-types/context.js +4 -3
- package/dist/emitter-types/context.js.map +1 -1
- package/dist/emitter-types/core.d.ts +4 -2
- package/dist/emitter-types/core.d.ts.map +1 -1
- package/dist/emitter-types/fqn.d.ts +0 -7
- package/dist/emitter-types/fqn.d.ts.map +1 -1
- package/dist/emitter-types/fqn.js +0 -8
- package/dist/emitter-types/fqn.js.map +1 -1
- package/dist/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +268 -63
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/access.d.ts.map +1 -1
- package/dist/expressions/access.js +36 -40
- package/dist/expressions/access.js.map +1 -1
- package/dist/expressions/calls.d.ts.map +1 -1
- package/dist/expressions/calls.js +233 -70
- package/dist/expressions/calls.js.map +1 -1
- package/dist/expressions/collections.d.ts.map +1 -1
- package/dist/expressions/collections.js +37 -41
- package/dist/expressions/collections.js.map +1 -1
- package/dist/expressions/functions.d.ts.map +1 -1
- package/dist/expressions/functions.js +30 -10
- package/dist/expressions/functions.js.map +1 -1
- package/dist/expressions/identifiers.d.ts.map +1 -1
- package/dist/expressions/identifiers.js +5 -30
- package/dist/expressions/identifiers.js.map +1 -1
- package/dist/expressions/index.test.js +87 -198
- package/dist/expressions/index.test.js.map +1 -1
- package/dist/expressions/literals.d.ts +4 -5
- package/dist/expressions/literals.d.ts.map +1 -1
- package/dist/expressions/literals.js +62 -15
- package/dist/expressions/literals.js.map +1 -1
- package/dist/expressions/operators.d.ts +0 -4
- package/dist/expressions/operators.d.ts.map +1 -1
- package/dist/expressions/operators.js +49 -19
- package/dist/expressions/operators.js.map +1 -1
- package/dist/expressions/other.d.ts.map +1 -1
- package/dist/expressions/other.js +21 -3
- package/dist/expressions/other.js.map +1 -1
- package/dist/extension-methods.test.d.ts +5 -0
- package/dist/extension-methods.test.d.ts.map +1 -0
- package/dist/extension-methods.test.js +110 -0
- package/dist/extension-methods.test.js.map +1 -0
- package/dist/generator-exchange.d.ts.map +1 -1
- package/dist/generator-exchange.js +2 -1
- package/dist/generator-exchange.js.map +1 -1
- package/dist/generator.test.js +9 -9
- package/dist/generator.test.js.map +1 -1
- package/dist/golden-tests/discovery.d.ts +6 -11
- package/dist/golden-tests/discovery.d.ts.map +1 -1
- package/dist/golden-tests/discovery.js +14 -79
- package/dist/golden-tests/discovery.js.map +1 -1
- package/dist/golden-tests/index.d.ts +1 -1
- package/dist/golden-tests/index.d.ts.map +1 -1
- package/dist/golden-tests/index.js.map +1 -1
- package/dist/golden-tests/runner.d.ts.map +1 -1
- package/dist/golden-tests/runner.js +6 -7
- package/dist/golden-tests/runner.js.map +1 -1
- package/dist/golden-tests/types.d.ts +0 -7
- package/dist/golden-tests/types.d.ts.map +1 -1
- package/dist/golden.test.d.ts +3 -10
- package/dist/golden.test.d.ts.map +1 -1
- package/dist/golden.test.js +8 -24
- package/dist/golden.test.js.map +1 -1
- package/dist/hierarchical-bindings.test.js +17 -11
- package/dist/hierarchical-bindings.test.js.map +1 -1
- package/dist/integration.test.js +61 -20
- package/dist/integration.test.js.map +1 -1
- package/dist/invariants/emitter-globals-subset.test.d.ts +1 -1
- package/dist/invariants/emitter-globals-subset.test.js +34 -74
- package/dist/invariants/emitter-globals-subset.test.js.map +1 -1
- package/dist/invariants/numeric-proof-contract.test.js +3 -3
- package/dist/invariants/numeric-proof-contract.test.js.map +1 -1
- package/dist/patterns.d.ts +98 -0
- package/dist/patterns.d.ts.map +1 -0
- package/dist/patterns.js +366 -0
- package/dist/patterns.js.map +1 -0
- package/dist/patterns.test.d.ts +15 -0
- package/dist/patterns.test.d.ts.map +1 -0
- package/dist/patterns.test.js +1262 -0
- package/dist/patterns.test.js.map +1 -0
- package/dist/specialization/generation.d.ts.map +1 -1
- package/dist/specialization/generation.js +2 -2
- package/dist/specialization/generation.js.map +1 -1
- package/dist/specialization/substitution.d.ts.map +1 -1
- package/dist/specialization/substitution.js +4 -0
- package/dist/specialization/substitution.js.map +1 -1
- package/dist/specialization/type-aliases.test.js +1 -1
- package/dist/specialization/type-aliases.test.js.map +1 -1
- package/dist/statement-emitter.d.ts.map +1 -1
- package/dist/statement-emitter.js +1 -1
- package/dist/statement-emitter.js.map +1 -1
- package/dist/statements/blocks.d.ts.map +1 -1
- package/dist/statements/blocks.js +14 -45
- package/dist/statements/blocks.js.map +1 -1
- package/dist/statements/classes/index.d.ts +1 -1
- package/dist/statements/classes/index.d.ts.map +1 -1
- package/dist/statements/classes/index.js +1 -1
- package/dist/statements/classes/index.js.map +1 -1
- package/dist/statements/classes/inline-types.d.ts.map +1 -1
- package/dist/statements/classes/inline-types.js +11 -1
- package/dist/statements/classes/inline-types.js.map +1 -1
- package/dist/statements/classes/members/constructors.d.ts.map +1 -1
- package/dist/statements/classes/members/constructors.js +30 -12
- package/dist/statements/classes/members/constructors.js.map +1 -1
- package/dist/statements/classes/members/methods.d.ts.map +1 -1
- package/dist/statements/classes/members/methods.js +51 -23
- package/dist/statements/classes/members/methods.js.map +1 -1
- package/dist/statements/classes/members/orchestrator.d.ts.map +1 -1
- package/dist/statements/classes/members/orchestrator.js +1 -3
- package/dist/statements/classes/members/orchestrator.js.map +1 -1
- package/dist/statements/classes/members/properties.d.ts.map +1 -1
- package/dist/statements/classes/members/properties.js +56 -9
- package/dist/statements/classes/members/properties.js.map +1 -1
- package/dist/statements/classes/parameters.d.ts +43 -1
- package/dist/statements/classes/parameters.d.ts.map +1 -1
- package/dist/statements/classes/parameters.js +73 -13
- package/dist/statements/classes/parameters.js.map +1 -1
- package/dist/statements/classes/properties.d.ts.map +1 -1
- package/dist/statements/classes/properties.js +1 -1
- package/dist/statements/classes/properties.js.map +1 -1
- package/dist/statements/classes.d.ts +1 -1
- package/dist/statements/classes.d.ts.map +1 -1
- package/dist/statements/classes.js +1 -1
- package/dist/statements/classes.js.map +1 -1
- package/dist/statements/control/conditionals.d.ts.map +1 -1
- package/dist/statements/control/conditionals.js +78 -23
- package/dist/statements/control/conditionals.js.map +1 -1
- package/dist/statements/control/loops.d.ts.map +1 -1
- package/dist/statements/control/loops.js +25 -5
- package/dist/statements/control/loops.js.map +1 -1
- package/dist/statements/declarations/classes.d.ts.map +1 -1
- package/dist/statements/declarations/classes.js +128 -10
- package/dist/statements/declarations/classes.js.map +1 -1
- package/dist/statements/declarations/functions.d.ts.map +1 -1
- package/dist/statements/declarations/functions.js +28 -12
- package/dist/statements/declarations/functions.js.map +1 -1
- package/dist/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/statements/declarations/interfaces.js +50 -7
- package/dist/statements/declarations/interfaces.js.map +1 -1
- package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
- package/dist/statements/declarations/type-aliases.js +6 -1
- package/dist/statements/declarations/type-aliases.js.map +1 -1
- package/dist/statements/declarations/variables.d.ts.map +1 -1
- package/dist/statements/declarations/variables.js +196 -38
- package/dist/statements/declarations/variables.js.map +1 -1
- package/dist/statements/index.test.js +7 -5
- package/dist/statements/index.test.js.map +1 -1
- package/dist/types/arrays.d.ts +3 -9
- package/dist/types/arrays.d.ts.map +1 -1
- package/dist/types/arrays.js +5 -19
- package/dist/types/arrays.js.map +1 -1
- package/dist/types/parameters.d.ts.map +1 -1
- package/dist/types/parameters.js +36 -1
- package/dist/types/parameters.js.map +1 -1
- package/dist/types/parameters.test.js +1 -1
- package/dist/types/parameters.test.js.map +1 -1
- package/dist/types/references.d.ts.map +1 -1
- package/dist/types/references.js +86 -51
- package/dist/types/references.js.map +1 -1
- package/dist/types/references.test.js +35 -95
- package/dist/types/references.test.js.map +1 -1
- package/dist/types/unions.d.ts.map +1 -1
- package/dist/types/unions.js +20 -0
- package/dist/types/unions.js.map +1 -1
- package/package.json +3 -3
|
@@ -189,27 +189,79 @@ const isBooleanCondition = (expr) => {
|
|
|
189
189
|
*
|
|
190
190
|
* For non-boolean expressions:
|
|
191
191
|
* - Reference types (objects, arrays): emit `expr != null`
|
|
192
|
-
* - Numbers:
|
|
193
|
-
* - Strings:
|
|
192
|
+
* - Numbers: emit a JS-truthiness check (0 and NaN are falsy)
|
|
193
|
+
* - Strings: emit `!string.IsNullOrEmpty(expr)`
|
|
194
194
|
*/
|
|
195
|
-
const toBooleanCondition = (expr, emittedText) => {
|
|
195
|
+
const toBooleanCondition = (expr, emittedText, context) => {
|
|
196
|
+
// Literal truthiness can be fully resolved without re-evaluating anything.
|
|
197
|
+
if (expr.kind === "literal") {
|
|
198
|
+
if (expr.value === null || expr.value === undefined) {
|
|
199
|
+
return ["false", context];
|
|
200
|
+
}
|
|
201
|
+
if (typeof expr.value === "boolean") {
|
|
202
|
+
return [expr.value ? "true" : "false", context];
|
|
203
|
+
}
|
|
204
|
+
if (typeof expr.value === "number") {
|
|
205
|
+
return [expr.value === 0 ? "false" : "true", context];
|
|
206
|
+
}
|
|
207
|
+
if (typeof expr.value === "string") {
|
|
208
|
+
return [expr.value.length === 0 ? "false" : "true", context];
|
|
209
|
+
}
|
|
210
|
+
}
|
|
196
211
|
// If already boolean, use as-is
|
|
197
212
|
if (isBooleanCondition(expr)) {
|
|
198
|
-
return emittedText;
|
|
213
|
+
return [emittedText, context];
|
|
199
214
|
}
|
|
200
215
|
// For reference types (non-primitive), add != null check
|
|
201
216
|
const type = expr.inferredType;
|
|
202
217
|
if (type && type.kind !== "primitiveType") {
|
|
203
|
-
|
|
218
|
+
// Special-case literalType (which behaves like its primitive base) to avoid `0 != null` etc.
|
|
219
|
+
if (type.kind === "literalType") {
|
|
220
|
+
if (typeof type.value === "boolean") {
|
|
221
|
+
return [type.value ? "true" : "false", context];
|
|
222
|
+
}
|
|
223
|
+
if (typeof type.value === "number") {
|
|
224
|
+
return [type.value === 0 ? "false" : "true", context];
|
|
225
|
+
}
|
|
226
|
+
if (typeof type.value === "string") {
|
|
227
|
+
return [type.value.length === 0 ? "false" : "true", context];
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return [`${emittedText} != null`, context];
|
|
204
231
|
}
|
|
205
232
|
// Default: assume it's a reference type and add null check
|
|
206
233
|
// This handles cases where type inference didn't work
|
|
207
234
|
if (!type) {
|
|
208
|
-
return `${emittedText} != null
|
|
235
|
+
return [`${emittedText} != null`, context];
|
|
209
236
|
}
|
|
210
237
|
// For primitives that are not boolean, just use as-is for now
|
|
211
|
-
|
|
212
|
-
|
|
238
|
+
if (type.kind === "primitiveType") {
|
|
239
|
+
switch (type.name) {
|
|
240
|
+
case "null":
|
|
241
|
+
case "undefined":
|
|
242
|
+
return ["false", context];
|
|
243
|
+
case "string":
|
|
244
|
+
return [`!string.IsNullOrEmpty(${emittedText})`, context];
|
|
245
|
+
case "int":
|
|
246
|
+
return [`${emittedText} != 0`, context];
|
|
247
|
+
case "char":
|
|
248
|
+
return [`${emittedText} != '\\0'`, context];
|
|
249
|
+
case "number": {
|
|
250
|
+
// JS truthiness for numbers: falsy iff 0 or NaN.
|
|
251
|
+
// Use a pattern var to avoid evaluating the expression twice.
|
|
252
|
+
const nextId = (context.tempVarId ?? 0) + 1;
|
|
253
|
+
const ctxWithId = { ...context, tempVarId: nextId };
|
|
254
|
+
const tmp = `__tsonic_truthy_num_${nextId}`;
|
|
255
|
+
return [
|
|
256
|
+
`(${emittedText} is double ${tmp} && ${tmp} != 0 && !double.IsNaN(${tmp}))`,
|
|
257
|
+
ctxWithId,
|
|
258
|
+
];
|
|
259
|
+
}
|
|
260
|
+
case "boolean":
|
|
261
|
+
return [emittedText, context];
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return [emittedText, context];
|
|
213
265
|
};
|
|
214
266
|
/**
|
|
215
267
|
* Emit an if statement
|
|
@@ -320,9 +372,9 @@ export const emitIfStatement = (stmt, context) => {
|
|
|
320
372
|
const castLine = `${outerThenInd}var ${escapedNarrow} = ${escapedOrig}.As${memberN}();`;
|
|
321
373
|
// Emit RHS condition under narrowed context (TS semantics: rhs sees narrowed x)
|
|
322
374
|
const [rhsFrag, rhsCtxAfterEmit] = emitExpression(right, outerThenCtx);
|
|
323
|
-
const rhsCondText = toBooleanCondition(right, rhsFrag.text);
|
|
375
|
+
const [rhsCondText, rhsCtxAfterCond] = toBooleanCondition(right, rhsFrag.text, rhsCtxAfterEmit);
|
|
324
376
|
// When RHS true: emit original THEN under narrowed context
|
|
325
|
-
const [thenCode, thenCtxAfter] = emitStatement(stmt.thenStatement, indent(
|
|
377
|
+
const [thenCode, thenCtxAfter] = emitStatement(stmt.thenStatement, indent(rhsCtxAfterCond));
|
|
326
378
|
// Helper to clear narrowing from context
|
|
327
379
|
const clearNarrowing = (ctx) => ({
|
|
328
380
|
...ctx,
|
|
@@ -363,14 +415,13 @@ export const emitIfStatement = (stmt, context) => {
|
|
|
363
415
|
});
|
|
364
416
|
// Emit condition
|
|
365
417
|
const [condFrag, condContext] = emitExpression(stmt.condition, context);
|
|
366
|
-
|
|
367
|
-
const condText = toBooleanCondition(stmt.condition, condFrag.text);
|
|
418
|
+
const [condText, condCtxAfterCond] = toBooleanCondition(stmt.condition, condFrag.text, condContext);
|
|
368
419
|
// Apply narrowing to appropriate branch
|
|
369
420
|
const thenCtx = {
|
|
370
|
-
...indent(
|
|
421
|
+
...indent(condCtxAfterCond),
|
|
371
422
|
narrowedBindings: narrowsInThen
|
|
372
423
|
? narrowedMap
|
|
373
|
-
:
|
|
424
|
+
: condCtxAfterCond.narrowedBindings,
|
|
374
425
|
};
|
|
375
426
|
const [thenCode, thenCtxAfter] = emitStatement(stmt.thenStatement, thenCtx);
|
|
376
427
|
let code = `${ind}if (${condText})\n${thenCode}`;
|
|
@@ -399,9 +450,8 @@ export const emitIfStatement = (stmt, context) => {
|
|
|
399
450
|
}
|
|
400
451
|
// Standard if-statement emission (no narrowing)
|
|
401
452
|
const [condFrag, condContext] = emitExpression(stmt.condition, context);
|
|
402
|
-
|
|
403
|
-
const
|
|
404
|
-
const [thenCode, thenContext] = emitStatement(stmt.thenStatement, indent(condContext));
|
|
453
|
+
const [condText, condCtxAfterCond] = toBooleanCondition(stmt.condition, condFrag.text, condContext);
|
|
454
|
+
const [thenCode, thenContext] = emitStatement(stmt.thenStatement, indent(condCtxAfterCond));
|
|
405
455
|
let code = `${ind}if (${condText})\n${thenCode}`;
|
|
406
456
|
let finalContext = dedent(thenContext);
|
|
407
457
|
if (stmt.elseStatement) {
|
|
@@ -435,12 +485,17 @@ export const emitSwitchStatement = (stmt, context) => {
|
|
|
435
485
|
cases.push(code);
|
|
436
486
|
currentContext = newContext;
|
|
437
487
|
}
|
|
438
|
-
//
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
488
|
+
// Emit break only when case has non-empty body that doesn't terminate.
|
|
489
|
+
// Empty bodies represent intentional fall-through labels (TypeScript semantics).
|
|
490
|
+
const hasBody = switchCase.statements.length > 0;
|
|
491
|
+
if (hasBody) {
|
|
492
|
+
const lastStmt = switchCase.statements[switchCase.statements.length - 1];
|
|
493
|
+
const terminates = lastStmt?.kind === "breakStatement" ||
|
|
494
|
+
lastStmt?.kind === "returnStatement" ||
|
|
495
|
+
lastStmt?.kind === "throwStatement";
|
|
496
|
+
if (!terminates) {
|
|
497
|
+
cases.push(`${getIndent(stmtContext)}break;`);
|
|
498
|
+
}
|
|
444
499
|
}
|
|
445
500
|
}
|
|
446
501
|
const code = `${ind}switch (${exprFrag.text})\n${ind}{\n${cases.join("\n")}\n${ind}}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditionals.js","sourceRoot":"","sources":["../../../src/statements/control/conditionals.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conditionals.js","sourceRoot":"","sources":["../../../src/statements/control/conditionals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loops.d.ts","sourceRoot":"","sources":["../../../src/statements/control/loops.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAA6B,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"loops.d.ts","sourceRoot":"","sources":["../../../src/statements/control/loops.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAA6B,MAAM,gBAAgB,CAAC;AA8H3E;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,EACtD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CAQzB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,EACpD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CA0EzB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,EACtD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CAoDzB,CAAC"}
|
|
@@ -5,6 +5,7 @@ import { getIndent, indent, dedent } from "../../types.js";
|
|
|
5
5
|
import { emitExpression } from "../../expression-emitter.js";
|
|
6
6
|
import { emitStatement } from "../../statement-emitter.js";
|
|
7
7
|
import { escapeCSharpIdentifier } from "../../emitter-types/index.js";
|
|
8
|
+
import { lowerPattern } from "../../patterns.js";
|
|
8
9
|
/**
|
|
9
10
|
* Detect if a for-loop has a canonical integer loop counter pattern.
|
|
10
11
|
*
|
|
@@ -184,13 +185,32 @@ export const emitForStatement = (stmt, context) => {
|
|
|
184
185
|
export const emitForOfStatement = (stmt, context) => {
|
|
185
186
|
const ind = getIndent(context);
|
|
186
187
|
const [exprFrag, exprContext] = emitExpression(stmt.expression, context);
|
|
187
|
-
const [bodyCode, bodyContext] = emitStatement(stmt.body, indent(exprContext));
|
|
188
188
|
// Use foreach in C#, with await prefix for async iteration
|
|
189
|
-
const varName = stmt.variable.kind === "identifierPattern"
|
|
190
|
-
? escapeCSharpIdentifier(stmt.variable.name)
|
|
191
|
-
: "item";
|
|
192
189
|
const foreachKeyword = stmt.isAwait ? "await foreach" : "foreach";
|
|
193
|
-
|
|
190
|
+
if (stmt.variable.kind === "identifierPattern") {
|
|
191
|
+
// Simple identifier: for (const x of items) -> foreach (var x in items)
|
|
192
|
+
const varName = escapeCSharpIdentifier(stmt.variable.name);
|
|
193
|
+
const [bodyCode, bodyContext] = emitStatement(stmt.body, indent(exprContext));
|
|
194
|
+
const code = `${ind}${foreachKeyword} (var ${varName} in ${exprFrag.text})\n${bodyCode}`;
|
|
195
|
+
return [code, dedent(bodyContext)];
|
|
196
|
+
}
|
|
197
|
+
// Complex pattern: for (const [a, b] of items) or for (const {x, y} of items)
|
|
198
|
+
// Generate: foreach (var __item in items) { var a = __item[0]; var b = __item[1]; ...body... }
|
|
199
|
+
const tempVar = "__item";
|
|
200
|
+
const bodyIndent = getIndent(indent(exprContext));
|
|
201
|
+
// Get element type from the expression's inferred type
|
|
202
|
+
const elementType = stmt.expression.inferredType?.kind === "arrayType"
|
|
203
|
+
? stmt.expression.inferredType.elementType
|
|
204
|
+
: undefined;
|
|
205
|
+
// Lower the pattern to destructuring statements
|
|
206
|
+
const lowerResult = lowerPattern(stmt.variable, tempVar, elementType, bodyIndent, exprContext);
|
|
207
|
+
// Emit the original loop body
|
|
208
|
+
const [bodyCode, bodyContext] = emitStatement(stmt.body, indent(lowerResult.context));
|
|
209
|
+
// Combine: pattern lowering + original body
|
|
210
|
+
const combinedBody = lowerResult.statements.length > 0
|
|
211
|
+
? `${ind}{\n${lowerResult.statements.join("\n")}\n${bodyCode}\n${ind}}`
|
|
212
|
+
: bodyCode;
|
|
213
|
+
const code = `${ind}${foreachKeyword} (var ${tempVar} in ${exprFrag.text})\n${combinedBody}`;
|
|
194
214
|
return [code, dedent(bodyContext)];
|
|
195
215
|
};
|
|
196
216
|
//# sourceMappingURL=loops.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loops.js","sourceRoot":"","sources":["../../../src/statements/control/loops.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"loops.js","sourceRoot":"","sources":["../../../src/statements/control/loops.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classes.d.ts","sourceRoot":"","sources":["../../../src/statements/declarations/classes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"classes.d.ts","sourceRoot":"","sources":["../../../src/statements/declarations/classes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,cAAc,EAIf,MAAM,gBAAgB,CAAC;AAQxB;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC,EACxD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CAwOzB,CAAC"}
|
|
@@ -2,17 +2,90 @@
|
|
|
2
2
|
* Class declaration emission
|
|
3
3
|
*/
|
|
4
4
|
import { getIndent, indent, withClassName, } from "../../types.js";
|
|
5
|
-
import { emitExpression } from "../../expression-emitter.js";
|
|
6
5
|
import { emitType, emitTypeParameters } from "../../type-emitter.js";
|
|
7
6
|
import { emitClassMember } from "../classes.js";
|
|
8
7
|
import { escapeCSharpIdentifier } from "../../emitter-types/index.js";
|
|
9
8
|
import { emitAttributes } from "../../core/attributes.js";
|
|
9
|
+
import { substituteType } from "../../specialization/substitution.js";
|
|
10
|
+
import { statementUsesPointer } from "../../core/unsafe.js";
|
|
10
11
|
/**
|
|
11
12
|
* Emit a class declaration
|
|
12
13
|
*/
|
|
13
14
|
export const emitClassDeclaration = (stmt, context) => {
|
|
14
15
|
const ind = getIndent(context);
|
|
15
16
|
const parts = [];
|
|
17
|
+
const needsUnsafe = statementUsesPointer(stmt);
|
|
18
|
+
const hasTypeParameters = (stmt.typeParameters?.length ?? 0) > 0;
|
|
19
|
+
const staticMembers = hasTypeParameters
|
|
20
|
+
? stmt.members.filter((m) => (m.kind === "methodDeclaration" || m.kind === "propertyDeclaration") &&
|
|
21
|
+
m.isStatic)
|
|
22
|
+
: [];
|
|
23
|
+
const instanceMembers = hasTypeParameters
|
|
24
|
+
? stmt.members.filter((m) => m.kind === "constructorDeclaration" ||
|
|
25
|
+
((m.kind === "methodDeclaration" || m.kind === "propertyDeclaration") &&
|
|
26
|
+
!m.isStatic))
|
|
27
|
+
: stmt.members;
|
|
28
|
+
const synthesizedConstructors = (() => {
|
|
29
|
+
// If the class extends a base class and does not declare a constructor,
|
|
30
|
+
// TypeScript supplies a default constructor that forwards to `super(...args)`.
|
|
31
|
+
// In C#, we must emit an explicit forwarding constructor when the base has
|
|
32
|
+
// required parameters (otherwise the default parameterless constructor breaks).
|
|
33
|
+
const hasOwnCtor = instanceMembers.some((m) => m.kind === "constructorDeclaration");
|
|
34
|
+
if (hasOwnCtor)
|
|
35
|
+
return [];
|
|
36
|
+
if (!stmt.superClass || stmt.superClass.kind !== "referenceType")
|
|
37
|
+
return [];
|
|
38
|
+
if (!context.localTypes)
|
|
39
|
+
return [];
|
|
40
|
+
const baseName = stmt.superClass.name.split(".").pop() ?? stmt.superClass.name;
|
|
41
|
+
const baseInfo = context.localTypes.get(baseName);
|
|
42
|
+
if (!baseInfo || baseInfo.kind !== "class")
|
|
43
|
+
return [];
|
|
44
|
+
const baseCtors = baseInfo.members.filter((m) => m.kind === "constructorDeclaration");
|
|
45
|
+
if (baseCtors.length === 0)
|
|
46
|
+
return [];
|
|
47
|
+
const baseTypeArgs = stmt.superClass.typeArguments ?? [];
|
|
48
|
+
const substitutions = new Map();
|
|
49
|
+
for (let i = 0; i < baseInfo.typeParameters.length; i++) {
|
|
50
|
+
const paramName = baseInfo.typeParameters[i];
|
|
51
|
+
const argType = baseTypeArgs[i];
|
|
52
|
+
if (paramName && argType) {
|
|
53
|
+
substitutions.set(paramName, argType);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return baseCtors.map((baseCtor) => {
|
|
57
|
+
const forwardedParams = baseCtor.parameters.map((p) => ({
|
|
58
|
+
...p,
|
|
59
|
+
type: p.type ? substituteType(p.type, substitutions) : undefined,
|
|
60
|
+
}));
|
|
61
|
+
const superArgs = forwardedParams.map((p) => {
|
|
62
|
+
const name = p.pattern.kind === "identifierPattern" ? p.pattern.name : "arg";
|
|
63
|
+
return { kind: "identifier", name };
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
kind: "constructorDeclaration",
|
|
67
|
+
accessibility: baseCtor.accessibility ?? "public",
|
|
68
|
+
parameters: forwardedParams,
|
|
69
|
+
body: {
|
|
70
|
+
kind: "blockStatement",
|
|
71
|
+
statements: [
|
|
72
|
+
{
|
|
73
|
+
kind: "expressionStatement",
|
|
74
|
+
expression: {
|
|
75
|
+
kind: "call",
|
|
76
|
+
callee: { kind: "identifier", name: "super" },
|
|
77
|
+
arguments: superArgs,
|
|
78
|
+
isOptional: false,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
})();
|
|
86
|
+
const membersToEmit = synthesizedConstructors.length > 0
|
|
87
|
+
? [...synthesizedConstructors, ...instanceMembers]
|
|
88
|
+
: instanceMembers;
|
|
16
89
|
// Build type parameter names set FIRST - needed when emitting superclass, implements, and members
|
|
17
90
|
// Type parameters must be in scope before we emit types that reference them
|
|
18
91
|
const classTypeParams = new Set([
|
|
@@ -27,6 +100,8 @@ export const emitClassDeclaration = (stmt, context) => {
|
|
|
27
100
|
// Access modifiers
|
|
28
101
|
const accessibility = stmt.isExported ? "public" : "internal";
|
|
29
102
|
parts.push(accessibility);
|
|
103
|
+
if (needsUnsafe)
|
|
104
|
+
parts.push("unsafe");
|
|
30
105
|
// Emit struct or class based on isStruct flag (escape C# keywords)
|
|
31
106
|
parts.push(stmt.isStruct ? "struct" : "class");
|
|
32
107
|
const escapedClassName = escapeCSharpIdentifier(stmt.name);
|
|
@@ -38,18 +113,33 @@ export const emitClassDeclaration = (stmt, context) => {
|
|
|
38
113
|
const heritage = [];
|
|
39
114
|
// Handle superclass (extends clause)
|
|
40
115
|
if (stmt.superClass) {
|
|
41
|
-
const [
|
|
116
|
+
const [superClassType, newContext] = emitType(stmt.superClass, currentContext);
|
|
42
117
|
currentContext = newContext;
|
|
43
|
-
heritage.push(
|
|
118
|
+
heritage.push(superClassType);
|
|
44
119
|
}
|
|
45
120
|
// Handle interfaces (implements clause)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
121
|
+
// In C#, the heritage list allows exactly one base class + any number of interfaces.
|
|
122
|
+
// We only emit `implements` entries when we can confidently treat them as C# interfaces.
|
|
123
|
+
//
|
|
124
|
+
// This is required for generic constraints (e.g., `where T : IFoo`) to type-check,
|
|
125
|
+
// while avoiding invalid/unsafe emission for nominalized "shape" declarations that
|
|
126
|
+
// are emitted as C# classes (property-only TS interfaces, object-alias classes, etc.).
|
|
127
|
+
const implementedInterfaces = [];
|
|
128
|
+
for (const impl of stmt.implements) {
|
|
129
|
+
if (impl.kind !== "referenceType")
|
|
130
|
+
continue;
|
|
131
|
+
const localInfo = context.localTypes?.get(impl.name);
|
|
132
|
+
const isEmittedAsCSharpInterface = localInfo?.kind === "interface"
|
|
133
|
+
? localInfo.members.some((m) => m.kind === "methodSignature")
|
|
134
|
+
: impl.resolvedClrType !== undefined;
|
|
135
|
+
if (!isEmittedAsCSharpInterface) {
|
|
136
|
+
continue;
|
|
51
137
|
}
|
|
138
|
+
const [implType, newContext] = emitType(impl, currentContext);
|
|
139
|
+
currentContext = newContext;
|
|
140
|
+
implementedInterfaces.push(implType);
|
|
52
141
|
}
|
|
142
|
+
heritage.push(...implementedInterfaces);
|
|
53
143
|
const heritageStr = heritage.length > 0 ? ` : ${heritage.join(", ")}` : "";
|
|
54
144
|
const whereClause = whereClauses.length > 0
|
|
55
145
|
? `\n${ind} ${whereClauses.join(`\n${ind} `)}`
|
|
@@ -64,7 +154,7 @@ export const emitClassDeclaration = (stmt, context) => {
|
|
|
64
154
|
// typeParameters is inherited from currentContext via baseContext
|
|
65
155
|
};
|
|
66
156
|
const members = [];
|
|
67
|
-
for (const member of
|
|
157
|
+
for (const member of membersToEmit) {
|
|
68
158
|
const [memberCode, newContext] = emitClassMember(member, bodyContext);
|
|
69
159
|
members.push(memberCode);
|
|
70
160
|
currentContext = newContext;
|
|
@@ -76,7 +166,35 @@ export const emitClassDeclaration = (stmt, context) => {
|
|
|
76
166
|
const memberCode = members.join("\n\n");
|
|
77
167
|
// Build final code with attributes (if any)
|
|
78
168
|
const attrPrefix = attributesCode ? attributesCode + "\n" : "";
|
|
79
|
-
const
|
|
169
|
+
const mainClassCode = `${attrPrefix}${ind}${signature}${typeParamsStr}${heritageStr}${whereClause}\n${ind}{\n${memberCode}\n${ind}}`;
|
|
170
|
+
// TS allows static members on generic classes, but C# requires selecting a concrete arity.
|
|
171
|
+
// Emit static members into a non-generic companion static class (same name, different arity).
|
|
172
|
+
if (staticMembers.length > 0) {
|
|
173
|
+
const staticClassParts = [];
|
|
174
|
+
staticClassParts.push(accessibility, "static");
|
|
175
|
+
if (needsUnsafe)
|
|
176
|
+
staticClassParts.push("unsafe");
|
|
177
|
+
staticClassParts.push("class", escapedClassName);
|
|
178
|
+
const companionBaseContext = withClassName(indent(context), escapedClassName);
|
|
179
|
+
const companionBodyContext = {
|
|
180
|
+
...companionBaseContext,
|
|
181
|
+
hasSuperClass: undefined,
|
|
182
|
+
// IMPORTANT: do not introduce the generic class type parameters into this scope
|
|
183
|
+
};
|
|
184
|
+
const staticMemberCodes = [];
|
|
185
|
+
let companionContext = companionBodyContext;
|
|
186
|
+
for (const member of staticMembers) {
|
|
187
|
+
const [memberCode, newContext] = emitClassMember(member, companionContext);
|
|
188
|
+
staticMemberCodes.push(memberCode);
|
|
189
|
+
companionContext = newContext;
|
|
190
|
+
}
|
|
191
|
+
const staticSignature = staticClassParts.join(" ");
|
|
192
|
+
const staticBody = staticMemberCodes.join("\n\n");
|
|
193
|
+
const staticClassCode = `${ind}${staticSignature}\n${ind}{\n${staticBody}\n${ind}}`;
|
|
194
|
+
const code = `${staticClassCode}\n${mainClassCode}`;
|
|
195
|
+
return [code, currentContext];
|
|
196
|
+
}
|
|
197
|
+
const code = mainClassCode;
|
|
80
198
|
return [code, currentContext];
|
|
81
199
|
};
|
|
82
200
|
//# sourceMappingURL=classes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classes.js","sourceRoot":"","sources":["../../../src/statements/declarations/classes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAEL,SAAS,EACT,MAAM,EACN,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"classes.js","sourceRoot":"","sources":["../../../src/statements/declarations/classes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/statements/declarations/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/statements/declarations/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAC;AACjE,OAAO,EACL,cAAc,EAMf,MAAM,gBAAgB,CAAC;AA4BxB;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,MAAM,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,CAAC,EAC3D,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CAwPzB,CAAC"}
|
|
@@ -4,10 +4,19 @@
|
|
|
4
4
|
import { getIndent, indent, withAsync, withStatic, withScoped, } from "../../types.js";
|
|
5
5
|
import { emitType, emitTypeParameters } from "../../type-emitter.js";
|
|
6
6
|
import { emitBlockStatement } from "../blocks.js";
|
|
7
|
-
import {
|
|
7
|
+
import { emitParametersWithDestructuring, generateParameterDestructuring, } from "../classes.js";
|
|
8
8
|
import { escapeCSharpIdentifier } from "../../emitter-types/index.js";
|
|
9
9
|
import { needsBidirectionalSupport, hasGeneratorReturnType, extractGeneratorTypeArgs, } from "../../generator-wrapper.js";
|
|
10
10
|
import { emitAttributes } from "../../core/attributes.js";
|
|
11
|
+
const seedLocalNameMapFromParameters = (params, context) => {
|
|
12
|
+
const map = new Map(context.localNameMap ?? []);
|
|
13
|
+
for (const p of params) {
|
|
14
|
+
if (p.pattern.kind === "identifierPattern") {
|
|
15
|
+
map.set(p.pattern.name, escapeCSharpIdentifier(p.pattern.name));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return { ...context, localNameMap: map };
|
|
19
|
+
};
|
|
11
20
|
/**
|
|
12
21
|
* Emit a function declaration
|
|
13
22
|
*/
|
|
@@ -20,11 +29,15 @@ export const emitFunctionDeclaration = (stmt, context) => {
|
|
|
20
29
|
...(context.typeParameters ?? []),
|
|
21
30
|
...(stmt.typeParameters?.map((tp) => tp.name) ?? []),
|
|
22
31
|
]);
|
|
23
|
-
// Create context with type parameters in scope for
|
|
24
|
-
|
|
32
|
+
// Create context with type parameters in scope for signature emission
|
|
33
|
+
const signatureContext = {
|
|
25
34
|
...context,
|
|
26
35
|
typeParameters: funcTypeParams,
|
|
27
36
|
};
|
|
37
|
+
// Emit the <T, U> syntax and where clauses EARLY so nullable union emission
|
|
38
|
+
// can see type parameter constraint kinds when emitting return/parameter types.
|
|
39
|
+
const [typeParamsStr, whereClauses, typeParamContext] = emitTypeParameters(stmt.typeParameters, signatureContext);
|
|
40
|
+
let currentContext = typeParamContext;
|
|
28
41
|
// Access modifiers
|
|
29
42
|
const accessibility = stmt.isExported ? "public" : "private";
|
|
30
43
|
parts.push(accessibility);
|
|
@@ -75,15 +88,12 @@ export const emitFunctionDeclaration = (stmt, context) => {
|
|
|
75
88
|
}
|
|
76
89
|
// Function name
|
|
77
90
|
parts.push(escapeCSharpIdentifier(stmt.name));
|
|
78
|
-
//
|
|
79
|
-
const
|
|
80
|
-
currentContext =
|
|
81
|
-
// Parameters
|
|
82
|
-
const params = emitParameters(stmt.parameters, currentContext);
|
|
83
|
-
currentContext = params[1];
|
|
91
|
+
// Parameters (with destructuring support)
|
|
92
|
+
const paramsResult = emitParametersWithDestructuring(stmt.parameters, currentContext);
|
|
93
|
+
currentContext = paramsResult.context;
|
|
84
94
|
// Function body (not a static context - local variables)
|
|
85
95
|
// Use withScoped to set typeParameters and returnType for nested expressions
|
|
86
|
-
const baseBodyContext = withAsync(withStatic(indent(currentContext), false), stmt.isAsync);
|
|
96
|
+
const baseBodyContext = seedLocalNameMapFromParameters(stmt.parameters, withAsync(withStatic(indent(currentContext), false), stmt.isAsync));
|
|
87
97
|
// Emit body with scoped typeParameters and returnType
|
|
88
98
|
// funcTypeParams was already built at the start of this function
|
|
89
99
|
const [bodyCode] = withScoped(baseBodyContext, {
|
|
@@ -107,10 +117,16 @@ export const emitFunctionDeclaration = (stmt, context) => {
|
|
|
107
117
|
});
|
|
108
118
|
}
|
|
109
119
|
}
|
|
110
|
-
// Inject initialization code for generators
|
|
120
|
+
// Inject initialization code for generators, out parameters, and destructuring
|
|
111
121
|
let finalBodyCode = bodyCode;
|
|
112
122
|
const bodyInd = getIndent(baseBodyContext);
|
|
113
123
|
const injectLines = [];
|
|
124
|
+
// Generate parameter destructuring statements
|
|
125
|
+
if (paramsResult.destructuringParams.length > 0) {
|
|
126
|
+
const [destructuringStmts, newCtx] = generateParameterDestructuring(paramsResult.destructuringParams, bodyInd, currentContext);
|
|
127
|
+
currentContext = newCtx;
|
|
128
|
+
injectLines.push(...destructuringStmts);
|
|
129
|
+
}
|
|
114
130
|
// Handle bidirectional generators specially
|
|
115
131
|
if (stmt.isGenerator && isBidirectional) {
|
|
116
132
|
const exchangeName = `${stmt.name}_exchange`;
|
|
@@ -189,7 +205,7 @@ export const emitFunctionDeclaration = (stmt, context) => {
|
|
|
189
205
|
: "";
|
|
190
206
|
// Build final code with attributes (if any)
|
|
191
207
|
const attrPrefix = attributesCode ? attributesCode + "\n" : "";
|
|
192
|
-
const code = `${attrPrefix}${ind}${signature}${typeParamsStr}(${
|
|
208
|
+
const code = `${attrPrefix}${ind}${signature}${typeParamsStr}(${paramsResult.parameterList})${whereClause}\n${finalBodyCode}`;
|
|
193
209
|
// Return context - no usings tracking needed with global:: FQN approach
|
|
194
210
|
return [code, currentContext];
|
|
195
211
|
};
|