@tsonic/frontend 0.0.4 → 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/exports.d.ts.map +1 -1
- package/dist/ir/builder/exports.js +8 -6
- package/dist/ir/builder/exports.js.map +1 -1
- package/dist/ir/builder/imports.d.ts.map +1 -1
- package/dist/ir/builder/imports.js +6 -6
- package/dist/ir/builder/imports.js.map +1 -1
- package/dist/ir/builder/statements.d.ts +7 -1
- package/dist/ir/builder/statements.d.ts.map +1 -1
- package/dist/ir/builder/statements.js +18 -5
- package/dist/ir/builder/statements.js.map +1 -1
- package/dist/ir/builder.test.js +70 -5
- package/dist/ir/builder.test.js.map +1 -1
- package/dist/ir/converters/anonymous-synthesis.d.ts +76 -0
- package/dist/ir/converters/anonymous-synthesis.d.ts.map +1 -0
- package/dist/ir/converters/anonymous-synthesis.js +307 -0
- package/dist/ir/converters/anonymous-synthesis.js.map +1 -0
- 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 +96 -1
- package/dist/ir/converters/expressions/calls.js.map +1 -1
- package/dist/ir/converters/expressions/collections.d.ts +3 -0
- package/dist/ir/converters/expressions/collections.d.ts.map +1 -1
- package/dist/ir/converters/expressions/collections.js +43 -2
- 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 +52 -5
- 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/conditionals.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/conditionals.js +4 -6
- package/dist/ir/converters/statements/control/conditionals.js.map +1 -1
- package/dist/ir/converters/statements/control/loops.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/loops.js +6 -5
- package/dist/ir/converters/statements/control/loops.js.map +1 -1
- package/dist/ir/converters/statements/declarations/interfaces.d.ts +4 -3
- package/dist/ir/converters/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/interfaces.js +55 -1
- package/dist/ir/converters/statements/declarations/interfaces.js.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts +8 -3
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.js +12 -2
- package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -1
- package/dist/ir/converters/synthetic-types.d.ts +38 -0
- package/dist/ir/converters/synthetic-types.d.ts.map +1 -0
- package/dist/ir/converters/synthetic-types.js +123 -0
- package/dist/ir/converters/synthetic-types.js.map +1 -0
- 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/statement-converter.d.ts +16 -1
- package/dist/ir/statement-converter.d.ts.map +1 -1
- package/dist/ir/statement-converter.js +32 -0
- package/dist/ir/statement-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/index.d.ts +1 -1
- package/dist/ir/type-converter/index.d.ts.map +1 -1
- package/dist/ir/type-converter/index.js +1 -1
- package/dist/ir/type-converter/index.js.map +1 -1
- package/dist/ir/type-converter/inference.d.ts +12 -0
- package/dist/ir/type-converter/inference.d.ts.map +1 -1
- package/dist/ir/type-converter/inference.js +172 -23
- 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 +2 -2
- package/dist/ir/type-converter/orchestrator.d.ts.map +1 -1
- package/dist/ir/type-converter/orchestrator.js +55 -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/type-converter.d.ts +1 -1
- package/dist/ir/type-converter.d.ts.map +1 -1
- package/dist/ir/type-converter.js +1 -1
- package/dist/ir/type-converter.js.map +1 -1
- package/dist/ir/types/expressions.d.ts +110 -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 +5 -3
- 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 +33 -1
- 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/resolver/clr-bindings-resolver.d.ts +9 -0
- package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.js +52 -3
- package/dist/resolver/clr-bindings-resolver.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/dist/validation/static-safety.d.ts +6 -1
- package/dist/validation/static-safety.d.ts.map +1 -1
- package/dist/validation/static-safety.js +144 -36
- package/dist/validation/static-safety.js.map +1 -1
- package/dist/validation/unsupported-utility-types.d.ts +38 -0
- package/dist/validation/unsupported-utility-types.d.ts.map +1 -0
- package/dist/validation/unsupported-utility-types.js +53 -0
- package/dist/validation/unsupported-utility-types.js.map +1 -0
- package/dist/validator.test.js +304 -14
- package/dist/validator.test.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
|
@@ -2,9 +2,62 @@
|
|
|
2
2
|
* Member access expression converters
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import { getInferredType } from "./helpers.js";
|
|
5
|
+
import { getInferredType, getSourceSpan } from "./helpers.js";
|
|
6
6
|
import { convertExpression } from "../../expression-converter.js";
|
|
7
7
|
import { getBindingRegistry } from "../statements/declarations/registry.js";
|
|
8
|
+
/**
|
|
9
|
+
* Classify computed member access for proof pass.
|
|
10
|
+
* This determines whether Int32 proof is required for the index.
|
|
11
|
+
*
|
|
12
|
+
* Classification is based on IR type kinds, NOT string matching.
|
|
13
|
+
* Both jsRuntimeArray (JS mode) and clrIndexer (dotnet mode) require Int32 proof,
|
|
14
|
+
* so we use clrIndexer as the default for TypeScript arrays.
|
|
15
|
+
*
|
|
16
|
+
* IMPORTANT: If classification cannot be determined reliably, returns "unknown"
|
|
17
|
+
* which causes a compile-time error (TSN5109). This is safer than misclassifying.
|
|
18
|
+
*
|
|
19
|
+
* @param objectType - The inferred type of the object being accessed
|
|
20
|
+
* @returns The access kind classification
|
|
21
|
+
*/
|
|
22
|
+
const classifyComputedAccess = (objectType) => {
|
|
23
|
+
if (!objectType)
|
|
24
|
+
return "unknown";
|
|
25
|
+
// TypeScript array type (number[], T[], etc.)
|
|
26
|
+
// Both clrIndexer and jsRuntimeArray require Int32 proof
|
|
27
|
+
if (objectType.kind === "arrayType") {
|
|
28
|
+
return "clrIndexer";
|
|
29
|
+
}
|
|
30
|
+
// IR dictionary type - this is the PRIMARY way to detect dictionaries
|
|
31
|
+
// tsbindgen should emit dictionaryType for Record<K,V> and {[key: K]: V}
|
|
32
|
+
if (objectType.kind === "dictionaryType") {
|
|
33
|
+
return "dictionary";
|
|
34
|
+
}
|
|
35
|
+
// String character access: string[int]
|
|
36
|
+
if (objectType.kind === "primitiveType" && objectType.name === "string") {
|
|
37
|
+
return "stringChar";
|
|
38
|
+
}
|
|
39
|
+
// Reference types - default to clrIndexer (safe: requires Int32 proof)
|
|
40
|
+
// Dictionary detection requires resolvedClrType to be reliable
|
|
41
|
+
if (objectType.kind === "referenceType") {
|
|
42
|
+
const clr = objectType.resolvedClrType;
|
|
43
|
+
// Dictionary types: no Int32 requirement (key is typed K)
|
|
44
|
+
// Use exact prefix matching for System.Collections.Generic.Dictionary
|
|
45
|
+
// Only detect if resolvedClrType is present (guaranteed by bindings)
|
|
46
|
+
if (clr) {
|
|
47
|
+
if (clr.startsWith("global::System.Collections.Generic.Dictionary`") ||
|
|
48
|
+
clr.startsWith("System.Collections.Generic.Dictionary`")) {
|
|
49
|
+
return "dictionary";
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// All other reference types (List<T>, Array, Span<T>, IList<T>, etc.)
|
|
53
|
+
// default to clrIndexer which requires Int32 proof.
|
|
54
|
+
// This is SAFE: if this is actually a Dictionary without resolvedClrType,
|
|
55
|
+
// the user would get a compile error (TSN5107) when using non-Int32 key,
|
|
56
|
+
// which is a safe failure mode (fails at compile time, not runtime).
|
|
57
|
+
return "clrIndexer";
|
|
58
|
+
}
|
|
59
|
+
return "unknown";
|
|
60
|
+
};
|
|
8
61
|
/**
|
|
9
62
|
* Extract the type name from an inferred type for binding lookup.
|
|
10
63
|
* Handles tsbindgen's naming convention where instance types are suffixed with $instance
|
|
@@ -103,6 +156,7 @@ const resolveHierarchicalBinding = (object, propertyName) => {
|
|
|
103
156
|
export const convertMemberExpression = (node, checker) => {
|
|
104
157
|
const isOptional = node.questionDotToken !== undefined;
|
|
105
158
|
const inferredType = getInferredType(node, checker);
|
|
159
|
+
const sourceSpan = getSourceSpan(node);
|
|
106
160
|
if (ts.isPropertyAccessExpression(node)) {
|
|
107
161
|
const object = convertExpression(node.expression, checker);
|
|
108
162
|
const propertyName = node.name.text;
|
|
@@ -115,17 +169,26 @@ export const convertMemberExpression = (node, checker) => {
|
|
|
115
169
|
isComputed: false,
|
|
116
170
|
isOptional,
|
|
117
171
|
inferredType,
|
|
172
|
+
sourceSpan,
|
|
118
173
|
memberBinding,
|
|
119
174
|
};
|
|
120
175
|
}
|
|
121
176
|
else {
|
|
177
|
+
// Element access (computed): obj[expr]
|
|
178
|
+
const object = convertExpression(node.expression, checker);
|
|
179
|
+
const objectType = getInferredType(node.expression, checker);
|
|
180
|
+
// Classify the access kind for proof pass
|
|
181
|
+
// This determines whether Int32 proof is required for the index
|
|
182
|
+
const accessKind = classifyComputedAccess(objectType);
|
|
122
183
|
return {
|
|
123
184
|
kind: "memberAccess",
|
|
124
|
-
object
|
|
185
|
+
object,
|
|
125
186
|
property: convertExpression(node.argumentExpression, checker),
|
|
126
187
|
isComputed: true,
|
|
127
188
|
isOptional,
|
|
128
189
|
inferredType,
|
|
190
|
+
sourceSpan,
|
|
191
|
+
accessKind,
|
|
129
192
|
};
|
|
130
193
|
}
|
|
131
194
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/access.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/access.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/calls.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/calls.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAuLnE;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,EAAE,CAAC,cAAc,EACvB,SAAS,EAAE,CAAC,WAAW,KACtB,gBA8BF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,EAAE,CAAC,aAAa,EACtB,SAAS,EAAE,CAAC,WAAW,KACtB,eAwBF,CAAC"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Call and new expression converters
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import { getInferredType, extractTypeArguments, checkIfRequiresSpecialization, } from "./helpers.js";
|
|
5
|
+
import { getInferredType, getSourceSpan, extractTypeArguments, checkIfRequiresSpecialization, } from "./helpers.js";
|
|
6
6
|
import { convertExpression } from "../../expression-converter.js";
|
|
7
|
+
import { convertType, convertTsTypeToIr } from "../../type-converter.js";
|
|
7
8
|
/**
|
|
8
9
|
* Extract argument passing modes from resolved signature
|
|
9
10
|
* Returns array aligned with arguments, indicating ref/out/in/value for each
|
|
@@ -50,6 +51,92 @@ const extractArgumentPassing = (node, checker) => {
|
|
|
50
51
|
return undefined;
|
|
51
52
|
}
|
|
52
53
|
};
|
|
54
|
+
/**
|
|
55
|
+
* Safely convert a ts.Type to IrType
|
|
56
|
+
*/
|
|
57
|
+
const convertTsTypeToIrSafe = (tsType, node, checker) => {
|
|
58
|
+
try {
|
|
59
|
+
const typeNode = checker.typeToTypeNode(tsType, node, ts.NodeBuilderFlags.None);
|
|
60
|
+
return typeNode
|
|
61
|
+
? convertType(typeNode, checker)
|
|
62
|
+
: convertTsTypeToIr(tsType, checker);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Extract type predicate narrowing metadata from a call expression.
|
|
70
|
+
* Returns narrowing info if the callee is a type predicate function (x is T).
|
|
71
|
+
*/
|
|
72
|
+
const extractNarrowing = (node, checker) => {
|
|
73
|
+
try {
|
|
74
|
+
const sig = checker.getResolvedSignature(node);
|
|
75
|
+
if (!sig)
|
|
76
|
+
return undefined;
|
|
77
|
+
const pred = checker.getTypePredicateOfSignature(sig);
|
|
78
|
+
// We only handle "param is T" predicates (not "this is T")
|
|
79
|
+
if (pred &&
|
|
80
|
+
pred.kind === ts.TypePredicateKind.Identifier &&
|
|
81
|
+
pred.parameterIndex !== undefined &&
|
|
82
|
+
pred.type) {
|
|
83
|
+
const targetType = convertTsTypeToIrSafe(pred.type, node, checker);
|
|
84
|
+
if (targetType) {
|
|
85
|
+
return {
|
|
86
|
+
kind: "typePredicate",
|
|
87
|
+
argIndex: pred.parameterIndex,
|
|
88
|
+
targetType,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Extract parameter types from resolved signature.
|
|
100
|
+
* Used for threading expectedType to array literal arguments etc.
|
|
101
|
+
*/
|
|
102
|
+
const extractParameterTypes = (node, checker) => {
|
|
103
|
+
try {
|
|
104
|
+
const signature = checker.getResolvedSignature(node);
|
|
105
|
+
if (!signature || !signature.declaration) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
const decl = signature.declaration;
|
|
109
|
+
let parameters = [];
|
|
110
|
+
// Extract parameters from declaration
|
|
111
|
+
if (ts.isFunctionDeclaration(decl) ||
|
|
112
|
+
ts.isMethodDeclaration(decl) ||
|
|
113
|
+
ts.isMethodSignature(decl) ||
|
|
114
|
+
ts.isConstructorDeclaration(decl) ||
|
|
115
|
+
ts.isArrowFunction(decl) ||
|
|
116
|
+
ts.isFunctionExpression(decl) ||
|
|
117
|
+
ts.isCallSignatureDeclaration(decl)) {
|
|
118
|
+
parameters = decl.parameters;
|
|
119
|
+
}
|
|
120
|
+
if (parameters.length === 0) {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
// Build parameter type array
|
|
124
|
+
const paramTypes = [];
|
|
125
|
+
for (const param of parameters) {
|
|
126
|
+
// Get the type node and convert it (this preserves origin: "explicit" for arrays)
|
|
127
|
+
if (param.type) {
|
|
128
|
+
paramTypes.push(convertType(param.type, checker));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
paramTypes.push(undefined);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return paramTypes;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
};
|
|
53
140
|
/**
|
|
54
141
|
* Convert call expression
|
|
55
142
|
*/
|
|
@@ -58,6 +145,8 @@ export const convertCallExpression = (node, checker) => {
|
|
|
58
145
|
const typeArguments = extractTypeArguments(node, checker);
|
|
59
146
|
const requiresSpecialization = checkIfRequiresSpecialization(node, checker);
|
|
60
147
|
const argumentPassing = extractArgumentPassing(node, checker);
|
|
148
|
+
const narrowing = extractNarrowing(node, checker);
|
|
149
|
+
const parameterTypes = extractParameterTypes(node, checker);
|
|
61
150
|
return {
|
|
62
151
|
kind: "call",
|
|
63
152
|
callee: convertExpression(node.expression, checker),
|
|
@@ -66,15 +155,19 @@ export const convertCallExpression = (node, checker) => {
|
|
|
66
155
|
return {
|
|
67
156
|
kind: "spread",
|
|
68
157
|
expression: convertExpression(arg.expression, checker),
|
|
158
|
+
sourceSpan: getSourceSpan(arg),
|
|
69
159
|
};
|
|
70
160
|
}
|
|
71
161
|
return convertExpression(arg, checker);
|
|
72
162
|
}),
|
|
73
163
|
isOptional: node.questionDotToken !== undefined,
|
|
74
164
|
inferredType: getInferredType(node, checker),
|
|
165
|
+
sourceSpan: getSourceSpan(node),
|
|
75
166
|
typeArguments,
|
|
76
167
|
requiresSpecialization,
|
|
77
168
|
argumentPassing,
|
|
169
|
+
parameterTypes,
|
|
170
|
+
narrowing,
|
|
78
171
|
};
|
|
79
172
|
};
|
|
80
173
|
/**
|
|
@@ -92,11 +185,13 @@ export const convertNewExpression = (node, checker) => {
|
|
|
92
185
|
return {
|
|
93
186
|
kind: "spread",
|
|
94
187
|
expression: convertExpression(arg.expression, checker),
|
|
188
|
+
sourceSpan: getSourceSpan(arg),
|
|
95
189
|
};
|
|
96
190
|
}
|
|
97
191
|
return convertExpression(arg, checker);
|
|
98
192
|
}) ?? [],
|
|
99
193
|
inferredType: getInferredType(node, checker),
|
|
194
|
+
sourceSpan: getSourceSpan(node),
|
|
100
195
|
typeArguments,
|
|
101
196
|
requiresSpecialization,
|
|
102
197
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/calls.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/calls.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,9 @@ import { IrArrayExpression, IrObjectExpression } from "../../types.js";
|
|
|
9
9
|
export declare const convertArrayLiteral: (node: ts.ArrayLiteralExpression, checker: ts.TypeChecker) => IrArrayExpression;
|
|
10
10
|
/**
|
|
11
11
|
* Convert object literal expression
|
|
12
|
+
*
|
|
13
|
+
* If no contextual nominal type exists and the literal is eligible for synthesis,
|
|
14
|
+
* a synthetic type is generated and used as the contextual type.
|
|
12
15
|
*/
|
|
13
16
|
export declare const convertObjectLiteral: (node: ts.ObjectLiteralExpression, checker: ts.TypeChecker) => IrObjectExpression;
|
|
14
17
|
//# sourceMappingURL=collections.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAGnB,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,EAAE,CAAC,sBAAsB,EAC/B,SAAS,EAAE,CAAC,WAAW,KACtB,iBAmBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,EAAE,CAAC,uBAAuB,EAChC,SAAS,EAAE,CAAC,WAAW,KACtB,kBAgGF,CAAC"}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* Collection expression converters (arrays and objects)
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import { getInferredType, getSourceSpan, getContextualType, } from "./helpers.js";
|
|
6
7
|
import { convertExpression } from "../../expression-converter.js";
|
|
8
|
+
import { computeShapeSignature, generateSyntheticName, getOrCreateSyntheticType, checkSynthesisEligibility, } from "../anonymous-synthesis.js";
|
|
7
9
|
/**
|
|
8
10
|
* Convert array literal expression
|
|
9
11
|
*/
|
|
@@ -18,18 +20,25 @@ export const convertArrayLiteral = (node, checker) => {
|
|
|
18
20
|
return {
|
|
19
21
|
kind: "spread",
|
|
20
22
|
expression: convertExpression(elem.expression, checker),
|
|
23
|
+
sourceSpan: getSourceSpan(elem),
|
|
21
24
|
};
|
|
22
25
|
}
|
|
23
26
|
return convertExpression(elem, checker);
|
|
24
27
|
}),
|
|
25
28
|
inferredType: getInferredType(node, checker),
|
|
29
|
+
sourceSpan: getSourceSpan(node),
|
|
26
30
|
};
|
|
27
31
|
};
|
|
28
32
|
/**
|
|
29
33
|
* Convert object literal expression
|
|
34
|
+
*
|
|
35
|
+
* If no contextual nominal type exists and the literal is eligible for synthesis,
|
|
36
|
+
* a synthetic type is generated and used as the contextual type.
|
|
30
37
|
*/
|
|
31
38
|
export const convertObjectLiteral = (node, checker) => {
|
|
32
39
|
const properties = [];
|
|
40
|
+
// Track if we have any spreads (needed for emitter IIFE lowering)
|
|
41
|
+
let hasSpreads = false;
|
|
33
42
|
node.properties.forEach((prop) => {
|
|
34
43
|
if (ts.isPropertyAssignment(prop)) {
|
|
35
44
|
const key = ts.isComputedPropertyName(prop.name)
|
|
@@ -53,6 +62,7 @@ export const convertObjectLiteral = (node, checker) => {
|
|
|
53
62
|
});
|
|
54
63
|
}
|
|
55
64
|
else if (ts.isSpreadAssignment(prop)) {
|
|
65
|
+
hasSpreads = true;
|
|
56
66
|
properties.push({
|
|
57
67
|
kind: "spread",
|
|
58
68
|
expression: convertExpression(prop.expression, checker),
|
|
@@ -60,11 +70,42 @@ export const convertObjectLiteral = (node, checker) => {
|
|
|
60
70
|
}
|
|
61
71
|
// Skip getters/setters/methods for now (can add later if needed)
|
|
62
72
|
});
|
|
73
|
+
// Try to get contextual type first
|
|
74
|
+
let contextualType = getContextualType(node, checker);
|
|
75
|
+
// If no contextual type, check if eligible for synthesis
|
|
76
|
+
if (!contextualType) {
|
|
77
|
+
const eligibility = checkSynthesisEligibility(node, checker);
|
|
78
|
+
if (eligibility.eligible) {
|
|
79
|
+
// Get the inferred type from TypeScript
|
|
80
|
+
const tsType = checker.getTypeAtLocation(node);
|
|
81
|
+
// Compute shape signature for deduplication
|
|
82
|
+
const shapeSignature = computeShapeSignature(tsType, checker);
|
|
83
|
+
// Get source file info for synthetic name
|
|
84
|
+
const sourceFile = node.getSourceFile();
|
|
85
|
+
const fileStem = path.basename(sourceFile.fileName, path.extname(sourceFile.fileName));
|
|
86
|
+
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
87
|
+
// Generate synthetic name
|
|
88
|
+
const syntheticName = generateSyntheticName(fileStem, line + 1, character + 1);
|
|
89
|
+
// Get or create synthetic type (handles deduplication)
|
|
90
|
+
// TODO: Handle generic type parameter capture
|
|
91
|
+
const syntheticEntry = getOrCreateSyntheticType(shapeSignature, syntheticName, tsType, checker, [] // No captured type params for now
|
|
92
|
+
);
|
|
93
|
+
// Create reference to synthetic type
|
|
94
|
+
const syntheticRef = {
|
|
95
|
+
kind: "referenceType",
|
|
96
|
+
name: syntheticEntry.name,
|
|
97
|
+
typeArguments: undefined, // TODO: Add type args if capturing generic params
|
|
98
|
+
};
|
|
99
|
+
contextualType = syntheticRef;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
63
102
|
return {
|
|
64
103
|
kind: "object",
|
|
65
104
|
properties,
|
|
66
105
|
inferredType: getInferredType(node, checker),
|
|
67
|
-
|
|
106
|
+
sourceSpan: getSourceSpan(node),
|
|
107
|
+
contextualType,
|
|
108
|
+
hasSpreads, // Add flag for emitter to know about spreads
|
|
68
109
|
};
|
|
69
110
|
};
|
|
70
111
|
//# sourceMappingURL=collections.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/collections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAE1B,MAAM,gBAAgB,CAAC;AAkExB;;GAEG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,EAAE,CAAC,kBAAkB,EAC3B,SAAS,EAAE,CAAC,WAAW,KACtB,oBAgBF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,EAAE,CAAC,aAAa,EACtB,SAAS,EAAE,CAAC,WAAW,KACtB,yBAgBF,CAAC"}
|
|
@@ -2,10 +2,55 @@
|
|
|
2
2
|
* Function expression converters (function expressions and arrow functions)
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import { getInferredType } from "./helpers.js";
|
|
5
|
+
import { getInferredType, getSourceSpan } from "./helpers.js";
|
|
6
6
|
import { convertExpression } from "../../expression-converter.js";
|
|
7
|
-
import {
|
|
8
|
-
import { convertType } from "../../type-converter.js";
|
|
7
|
+
import { convertBlockStatement } from "../../statement-converter.js";
|
|
8
|
+
import { convertType, convertBindingName, inferLambdaParamTypes, } from "../../type-converter.js";
|
|
9
|
+
/**
|
|
10
|
+
* Convert parameters for lambda expressions (arrow functions and function expressions).
|
|
11
|
+
* Uses contextual signature inference for parameters without explicit type annotations.
|
|
12
|
+
*/
|
|
13
|
+
const convertLambdaParameters = (node, checker) => {
|
|
14
|
+
// Get inferred types from contextual signature
|
|
15
|
+
const inference = inferLambdaParamTypes(node, checker);
|
|
16
|
+
return node.parameters.map((param, index) => {
|
|
17
|
+
let passing = "value";
|
|
18
|
+
let actualType = param.type;
|
|
19
|
+
// Detect ref<T>, out<T>, in<T> wrapper types (explicit annotation only)
|
|
20
|
+
if (param.type &&
|
|
21
|
+
ts.isTypeReferenceNode(param.type) &&
|
|
22
|
+
ts.isIdentifier(param.type.typeName)) {
|
|
23
|
+
const typeName = param.type.typeName.text;
|
|
24
|
+
if ((typeName === "ref" || typeName === "out" || typeName === "in") &&
|
|
25
|
+
param.type.typeArguments &&
|
|
26
|
+
param.type.typeArguments.length > 0) {
|
|
27
|
+
passing = typeName === "in" ? "in" : typeName;
|
|
28
|
+
actualType = param.type.typeArguments[0];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Determine the IrType for this parameter
|
|
32
|
+
let irType;
|
|
33
|
+
if (actualType) {
|
|
34
|
+
// Explicit type annotation - use it
|
|
35
|
+
irType = convertType(actualType, checker);
|
|
36
|
+
}
|
|
37
|
+
else if (inference) {
|
|
38
|
+
// No explicit type - use inferred type from contextual signature
|
|
39
|
+
irType = inference.paramTypes[index];
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
kind: "parameter",
|
|
43
|
+
pattern: convertBindingName(param.name),
|
|
44
|
+
type: irType,
|
|
45
|
+
initializer: param.initializer
|
|
46
|
+
? convertExpression(param.initializer, checker)
|
|
47
|
+
: undefined,
|
|
48
|
+
isOptional: !!param.questionToken,
|
|
49
|
+
isRest: !!param.dotDotDotToken,
|
|
50
|
+
passing,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
};
|
|
9
54
|
/**
|
|
10
55
|
* Convert function expression
|
|
11
56
|
*/
|
|
@@ -13,7 +58,7 @@ export const convertFunctionExpression = (node, checker) => {
|
|
|
13
58
|
return {
|
|
14
59
|
kind: "functionExpression",
|
|
15
60
|
name: node.name?.text,
|
|
16
|
-
parameters:
|
|
61
|
+
parameters: convertLambdaParameters(node, checker),
|
|
17
62
|
returnType: node.type ? convertType(node.type, checker) : undefined,
|
|
18
63
|
body: node.body
|
|
19
64
|
? convertBlockStatement(node.body, checker)
|
|
@@ -21,6 +66,7 @@ export const convertFunctionExpression = (node, checker) => {
|
|
|
21
66
|
isAsync: !!node.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword),
|
|
22
67
|
isGenerator: !!node.asteriskToken,
|
|
23
68
|
inferredType: getInferredType(node, checker),
|
|
69
|
+
sourceSpan: getSourceSpan(node),
|
|
24
70
|
};
|
|
25
71
|
};
|
|
26
72
|
/**
|
|
@@ -32,11 +78,12 @@ export const convertArrowFunction = (node, checker) => {
|
|
|
32
78
|
: convertExpression(node.body, checker);
|
|
33
79
|
return {
|
|
34
80
|
kind: "arrowFunction",
|
|
35
|
-
parameters:
|
|
81
|
+
parameters: convertLambdaParameters(node, checker),
|
|
36
82
|
returnType: node.type ? convertType(node.type, checker) : undefined,
|
|
37
83
|
body,
|
|
38
84
|
isAsync: !!node.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword),
|
|
39
85
|
inferredType: getInferredType(node, checker),
|
|
86
|
+
sourceSpan: getSourceSpan(node),
|
|
40
87
|
};
|
|
41
88
|
};
|
|
42
89
|
//# sourceMappingURL=functions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,20 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
5
|
import { IrType } from "../../types.js";
|
|
6
|
+
import { SourceLocation } from "../../../types/diagnostic.js";
|
|
7
|
+
/**
|
|
8
|
+
* Get source span for a TypeScript node.
|
|
9
|
+
* Returns a SourceLocation that can be used for diagnostics.
|
|
10
|
+
*/
|
|
11
|
+
export declare const getSourceSpan: (node: ts.Node) => SourceLocation | undefined;
|
|
6
12
|
/**
|
|
7
13
|
* Helper to get inferred type from TypeScript node
|
|
8
14
|
* Prefers contextual type (from assignment target, return position, etc.)
|
|
9
15
|
* over literal type to handle cases like empty arrays `[]` correctly.
|
|
16
|
+
*
|
|
17
|
+
* IMPORTANT: For numeric types, we do NOT use contextual type. This prevents
|
|
18
|
+
* numeric intent from leaking through TypeScript's contextual typing.
|
|
19
|
+
* The `numericNarrowing` IR node is the ONLY source of numeric intent.
|
|
10
20
|
*/
|
|
11
21
|
export declare const getInferredType: (node: ts.Node, checker: ts.TypeChecker) => IrType | undefined;
|
|
12
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,MAAM,EAA0B,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,EAAE,CAAC,IAAI,KAAG,cAAc,GAAG,SAc9D,CAAC;AAkIF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,KACtB,MAAM,GAAG,SA2EX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,aAAa,EAC1C,SAAS,EAAE,CAAC,WAAW,KACtB,SAAS,MAAM,EAAE,GAAG,SAoCtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,GACxC,MAAM,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,aAAa,EAC1C,SAAS,EAAE,CAAC,WAAW,KACtB,OA0CF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,OAAO,EAAE,CAAC,mBAAmB,KAC5B,MA8CF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,EAAE,CAAC,mBAAmB,KAC5B,OAKF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,EAAE,CAAC,UAAU,EACnB,SAAS,EAAE,CAAC,WAAW,KACtB,MAAM,GAAG,SAwCX,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,EAAE,CAAC,UAAU,EACnB,SAAS,EAAE,CAAC,WAAW,KACtB,MAAM,GAAG,SAMX,CAAC"}
|