@tsonic/emitter 0.0.14 → 0.0.16
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/adapter-generator.js +3 -3
- package/dist/adapter-generator.js.map +1 -1
- package/dist/array.test.d.ts +1 -1
- package/dist/array.test.js +18 -17
- 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 +7 -12
- package/dist/core/imports.js.map +1 -1
- package/dist/core/local-types.d.ts.map +1 -1
- package/dist/core/local-types.js +12 -0
- package/dist/core/local-types.js.map +1 -1
- package/dist/core/module-emitter/orchestrator.d.ts.map +1 -1
- package/dist/core/module-emitter/orchestrator.js +15 -2
- package/dist/core/module-emitter/orchestrator.js.map +1 -1
- package/dist/core/module-emitter/static-container.d.ts.map +1 -1
- package/dist/core/module-emitter/static-container.js +30 -4
- package/dist/core/module-emitter/static-container.js.map +1 -1
- package/dist/core/module-emitter.test.js +6 -6
- package/dist/core/module-map.d.ts.map +1 -1
- package/dist/core/module-map.js +42 -0
- package/dist/core/module-map.js.map +1 -1
- package/dist/core/naming-collisions.d.ts +4 -0
- package/dist/core/naming-collisions.d.ts.map +1 -0
- package/dist/core/naming-collisions.js +191 -0
- package/dist/core/naming-collisions.js.map +1 -0
- package/dist/core/type-member-index.d.ts +4 -0
- package/dist/core/type-member-index.d.ts.map +1 -0
- package/dist/core/type-member-index.js +62 -0
- package/dist/core/type-member-index.js.map +1 -0
- 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 +5 -3
- package/dist/emitter-types/context.js.map +1 -1
- package/dist/emitter-types/core.d.ts +45 -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/emitter-types/index.d.ts +1 -1
- package/dist/emitter-types/index.d.ts.map +1 -1
- package/dist/emitter-types/index.js.map +1 -1
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +12 -1
- package/dist/emitter.js.map +1 -1
- package/dist/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +255 -73
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/access.d.ts +3 -1
- package/dist/expressions/access.d.ts.map +1 -1
- package/dist/expressions/access.js +144 -50
- package/dist/expressions/access.js.map +1 -1
- package/dist/expressions/calls.d.ts.map +1 -1
- package/dist/expressions/calls.js +266 -88
- package/dist/expressions/calls.js.map +1 -1
- package/dist/expressions/collections.d.ts.map +1 -1
- package/dist/expressions/collections.js +169 -57
- 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 +11 -30
- package/dist/expressions/identifiers.js.map +1 -1
- package/dist/expressions/index.test.js +89 -200
- 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 +94 -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 +84 -24
- 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/expressions/parentheses.d.ts +4 -0
- package/dist/expressions/parentheses.d.ts.map +1 -0
- package/dist/expressions/parentheses.js +83 -0
- package/dist/expressions/parentheses.js.map +1 -0
- 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 +5 -2
- package/dist/generator-exchange.js.map +1 -1
- package/dist/generator-wrapper.d.ts.map +1 -1
- package/dist/generator-wrapper.js +13 -7
- package/dist/generator-wrapper.js.map +1 -1
- package/dist/generator-wrapper.test.js +12 -12
- package/dist/generator-wrapper.test.js.map +1 -1
- package/dist/generator.test.js +42 -42
- 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 +18 -12
- package/dist/hierarchical-bindings.test.js.map +1 -1
- package/dist/integration.test.js +76 -35
- 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/naming-policy.d.ts +5 -0
- package/dist/naming-policy.d.ts.map +1 -0
- package/dist/naming-policy.js +10 -0
- package/dist/naming-policy.js.map +1 -0
- 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/generic-classes.test.js +1 -1
- package/dist/specialization/generic-functions.test.js +6 -6
- package/dist/specialization/interfaces.test.js +5 -5
- 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 +6 -6
- 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 +1 -1
- package/dist/statements/classes/inline-types.d.ts.map +1 -1
- package/dist/statements/classes/inline-types.js +15 -5
- 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 +40 -14
- 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 +62 -25
- 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 +70 -10
- 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 +6 -7
- 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 +193 -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 +150 -12
- package/dist/statements/declarations/classes.js.map +1 -1
- package/dist/statements/declarations/enums.d.ts.map +1 -1
- package/dist/statements/declarations/enums.js +2 -1
- package/dist/statements/declarations/enums.js.map +1 -1
- package/dist/statements/declarations/functions.d.ts.map +1 -1
- package/dist/statements/declarations/functions.js +44 -19
- 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 +71 -10
- package/dist/statements/declarations/interfaces.js.map +1 -1
- package/dist/statements/declarations/structs.test.js +5 -5
- package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
- package/dist/statements/declarations/type-aliases.js +24 -5
- 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 +194 -37
- 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/type-assertion.test.js +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/emitter.d.ts.map +1 -1
- package/dist/types/emitter.js +3 -2
- package/dist/types/emitter.js.map +1 -1
- package/dist/types/index.test.js +3 -3
- package/dist/types/parameters.d.ts +1 -1
- package/dist/types/parameters.d.ts.map +1 -1
- package/dist/types/parameters.js +77 -8
- 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 +126 -55
- package/dist/types/references.js.map +1 -1
- package/dist/types/references.test.js +46 -106
- 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/dist/types/unions.test.js +9 -9
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Main dispatcher - delegates to specialized modules
|
|
4
4
|
*/
|
|
5
5
|
import { emitType } from "./type-emitter.js";
|
|
6
|
+
import { substituteTypeArgs } from "./core/type-resolution.js";
|
|
6
7
|
// Import expression emitters from specialized modules
|
|
7
8
|
import { emitLiteral } from "./expressions/literals.js";
|
|
8
9
|
import { emitIdentifier } from "./expressions/identifiers.js";
|
|
@@ -12,6 +13,134 @@ import { emitCall, emitNew } from "./expressions/calls.js";
|
|
|
12
13
|
import { emitBinary, emitLogical, emitUnary, emitUpdate, emitAssignment, emitConditional, } from "./expressions/operators.js";
|
|
13
14
|
import { emitFunctionExpression, emitArrowFunction, } from "./expressions/functions.js";
|
|
14
15
|
import { emitTemplateLiteral, emitSpread, emitAwait, } from "./expressions/other.js";
|
|
16
|
+
import { formatCastOperandText } from "./expressions/parentheses.js";
|
|
17
|
+
const getBareTypeParameterName = (type, context) => {
|
|
18
|
+
if (type.kind === "typeParameterType")
|
|
19
|
+
return type.name;
|
|
20
|
+
if (type.kind === "referenceType" &&
|
|
21
|
+
(context.typeParameters?.has(type.name) ?? false) &&
|
|
22
|
+
(!type.typeArguments || type.typeArguments.length === 0)) {
|
|
23
|
+
return type.name;
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
};
|
|
27
|
+
const getUnconstrainedNullishTypeParamName = (type, context) => {
|
|
28
|
+
if (type.kind !== "unionType")
|
|
29
|
+
return undefined;
|
|
30
|
+
const nonNullTypes = type.types.filter((t) => !(t.kind === "primitiveType" &&
|
|
31
|
+
(t.name === "null" || t.name === "undefined")));
|
|
32
|
+
if (nonNullTypes.length !== 1)
|
|
33
|
+
return undefined;
|
|
34
|
+
const nonNull = nonNullTypes[0];
|
|
35
|
+
if (!nonNull)
|
|
36
|
+
return undefined;
|
|
37
|
+
const typeParamName = getBareTypeParameterName(nonNull, context);
|
|
38
|
+
if (!typeParamName)
|
|
39
|
+
return undefined;
|
|
40
|
+
const constraintKind = context.typeParamConstraints?.get(typeParamName) ?? "unconstrained";
|
|
41
|
+
return constraintKind === "unconstrained" ? typeParamName : undefined;
|
|
42
|
+
};
|
|
43
|
+
const maybeCastNullishTypeParam = (expr, fragment, context, expectedType) => {
|
|
44
|
+
if (!expectedType)
|
|
45
|
+
return [fragment, context];
|
|
46
|
+
if (!expr.inferredType)
|
|
47
|
+
return [fragment, context];
|
|
48
|
+
const expectedTypeParam = getBareTypeParameterName(expectedType, context);
|
|
49
|
+
if (!expectedTypeParam)
|
|
50
|
+
return [fragment, context];
|
|
51
|
+
const unionTypeParam = getUnconstrainedNullishTypeParamName(expr.inferredType, context);
|
|
52
|
+
if (!unionTypeParam)
|
|
53
|
+
return [fragment, context];
|
|
54
|
+
if (unionTypeParam !== expectedTypeParam)
|
|
55
|
+
return [fragment, context];
|
|
56
|
+
const [typeName, newContext] = emitType(expectedType, context);
|
|
57
|
+
return [{ text: `(${typeName})${fragment.text}` }, newContext];
|
|
58
|
+
};
|
|
59
|
+
const getNullableUnionBaseType = (type) => {
|
|
60
|
+
if (type.kind !== "unionType")
|
|
61
|
+
return undefined;
|
|
62
|
+
const nonNullTypes = type.types.filter((t) => !(t.kind === "primitiveType" &&
|
|
63
|
+
(t.name === "null" || t.name === "undefined")));
|
|
64
|
+
if (nonNullTypes.length !== 1)
|
|
65
|
+
return undefined;
|
|
66
|
+
return nonNullTypes[0];
|
|
67
|
+
};
|
|
68
|
+
const isNonNullableValueType = (type) => {
|
|
69
|
+
if (type.kind === "primitiveType") {
|
|
70
|
+
return (type.name === "number" ||
|
|
71
|
+
type.name === "int" ||
|
|
72
|
+
type.name === "boolean" ||
|
|
73
|
+
type.name === "char");
|
|
74
|
+
}
|
|
75
|
+
if (type.kind === "referenceType") {
|
|
76
|
+
// C# primitive aliases represented as reference types via @tsonic/core.
|
|
77
|
+
// Keep this list strict — we only unwrap when `.Value` exists.
|
|
78
|
+
return (type.name === "sbyte" ||
|
|
79
|
+
type.name === "short" ||
|
|
80
|
+
type.name === "int" ||
|
|
81
|
+
type.name === "long" ||
|
|
82
|
+
type.name === "nint" ||
|
|
83
|
+
type.name === "int128" ||
|
|
84
|
+
type.name === "byte" ||
|
|
85
|
+
type.name === "ushort" ||
|
|
86
|
+
type.name === "uint" ||
|
|
87
|
+
type.name === "ulong" ||
|
|
88
|
+
type.name === "nuint" ||
|
|
89
|
+
type.name === "uint128" ||
|
|
90
|
+
type.name === "half" ||
|
|
91
|
+
type.name === "float" ||
|
|
92
|
+
type.name === "double" ||
|
|
93
|
+
type.name === "decimal" ||
|
|
94
|
+
type.name === "bool" ||
|
|
95
|
+
type.name === "char");
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
};
|
|
99
|
+
const isSameTypeForNullableUnwrap = (base, expected) => {
|
|
100
|
+
if (base.kind !== expected.kind)
|
|
101
|
+
return false;
|
|
102
|
+
if (base.kind === "primitiveType" && expected.kind === "primitiveType") {
|
|
103
|
+
return base.name === expected.name;
|
|
104
|
+
}
|
|
105
|
+
if (base.kind === "referenceType" && expected.kind === "referenceType") {
|
|
106
|
+
// This unwrap is only for Nullable<T> value types, so keep matching strict.
|
|
107
|
+
return (base.name === expected.name &&
|
|
108
|
+
(base.typeArguments?.length ?? 0) === 0 &&
|
|
109
|
+
(expected.typeArguments?.length ?? 0) === 0);
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
};
|
|
113
|
+
const maybeUnwrapNullableValueType = (expr, fragment, context, expectedType) => {
|
|
114
|
+
if (!expectedType)
|
|
115
|
+
return [fragment, context];
|
|
116
|
+
if (!expr.inferredType)
|
|
117
|
+
return [fragment, context];
|
|
118
|
+
// Only unwrap direct nullable values. For composite expressions (e.g. `a ?? b`)
|
|
119
|
+
// C# nullish coalescing already produces a non-nullable result when the
|
|
120
|
+
// fallback is non-nullable, so adding `.Value` is incorrect.
|
|
121
|
+
if (expr.kind !== "identifier" && expr.kind !== "memberAccess") {
|
|
122
|
+
return [fragment, context];
|
|
123
|
+
}
|
|
124
|
+
// If a narrowing pass already rewrote this identifier (e.g., `id` → `id.Value`
|
|
125
|
+
// or `id` → `id__n`), don't apply a second Nullable<T> unwrap.
|
|
126
|
+
if (expr.kind === "identifier" &&
|
|
127
|
+
(context.narrowedBindings?.has(expr.name) ?? false)) {
|
|
128
|
+
return [fragment, context];
|
|
129
|
+
}
|
|
130
|
+
const nullableBase = getNullableUnionBaseType(expr.inferredType);
|
|
131
|
+
if (!nullableBase)
|
|
132
|
+
return [fragment, context];
|
|
133
|
+
// Only unwrap when the expected type is a non-nullable value type and
|
|
134
|
+
// the expression is a nullable union of that exact base type.
|
|
135
|
+
if (!isNonNullableValueType(expectedType))
|
|
136
|
+
return [fragment, context];
|
|
137
|
+
if (!isSameTypeForNullableUnwrap(nullableBase, expectedType)) {
|
|
138
|
+
return [fragment, context];
|
|
139
|
+
}
|
|
140
|
+
const needsParens = expr.kind !== "identifier" && expr.kind !== "memberAccess";
|
|
141
|
+
const inner = needsParens ? `(${fragment.text})` : fragment.text;
|
|
142
|
+
return [{ text: `${inner}.Value` }, context];
|
|
143
|
+
};
|
|
15
144
|
/**
|
|
16
145
|
* Emit a numeric narrowing expression.
|
|
17
146
|
*
|
|
@@ -33,22 +162,13 @@ const emitNumericNarrowing = (expr, context) => {
|
|
|
33
162
|
);
|
|
34
163
|
return [innerCode, newContext];
|
|
35
164
|
}
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
expr.proof.source.type === "narrowing") {
|
|
44
|
-
const [innerCode, newContext] = emitExpression(expr.expression, context
|
|
45
|
-
// No expectedType - the expression produces the target type naturally
|
|
46
|
-
);
|
|
47
|
-
return [innerCode, newContext];
|
|
48
|
-
}
|
|
49
|
-
// For dotnetReturn and other proof types, emit without forcing a cast
|
|
50
|
-
const [innerCode, newContext] = emitExpression(expr.expression, context);
|
|
51
|
-
return [innerCode, newContext];
|
|
165
|
+
// Numeric narrowings represent explicit user intent (`x as int`, `x as long`).
|
|
166
|
+
// Even when the conversion is proven sound, C# generic inference can become
|
|
167
|
+
// ambiguous without an explicit cast (e.g., choosing between `int` and `long`).
|
|
168
|
+
const [innerCode, ctx1] = emitExpression(expr.expression, context);
|
|
169
|
+
const [typeName, ctx2] = emitType(expr.inferredType, ctx1);
|
|
170
|
+
const operandText = formatCastOperandText(expr.expression, innerCode.text);
|
|
171
|
+
return [{ text: `(${typeName})${operandText}` }, ctx2];
|
|
52
172
|
}
|
|
53
173
|
// HARD GATE: No proof means the proof pass failed to catch an unprovable narrowing.
|
|
54
174
|
// This is an internal compiler error - the proof pass should have aborted compilation.
|
|
@@ -65,20 +185,77 @@ const emitNumericNarrowing = (expr, context) => {
|
|
|
65
185
|
* This is a checked cast that throws InvalidCastException on failure.
|
|
66
186
|
*/
|
|
67
187
|
const emitTypeAssertion = (expr, context) => {
|
|
68
|
-
const [innerCode, ctx1] = emitExpression(expr.expression, context);
|
|
69
|
-
const
|
|
70
|
-
|
|
188
|
+
const [innerCode, ctx1] = emitExpression(expr.expression, context, expr.targetType);
|
|
189
|
+
const resolveRuntimeCastTarget = (target, ctx) => {
|
|
190
|
+
// 1) Resolve local type aliases for runtime casting.
|
|
191
|
+
// TypeScript type aliases have no runtime representation in C#, except for
|
|
192
|
+
// object-literal aliases which we synthesize as classes (`Foo__Alias`).
|
|
193
|
+
if (target.kind === "referenceType" && ctx.localTypes) {
|
|
194
|
+
const typeInfo = ctx.localTypes.get(target.name);
|
|
195
|
+
if (typeInfo?.kind === "typeAlias") {
|
|
196
|
+
if (typeInfo.type.kind !== "objectType") {
|
|
197
|
+
const substituted = target.typeArguments && target.typeArguments.length > 0
|
|
198
|
+
? substituteTypeArgs(typeInfo.type, typeInfo.typeParameters, target.typeArguments)
|
|
199
|
+
: typeInfo.type;
|
|
200
|
+
return resolveRuntimeCastTarget(substituted, ctx);
|
|
201
|
+
}
|
|
202
|
+
// objectType aliases are emitted as `Name__Alias` by emitReferenceType
|
|
203
|
+
return target;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// 2) Erase tsbindgen extension-method wrapper types at runtime:
|
|
207
|
+
// ExtensionMethods<TShape> is type-only; values are just TShape.
|
|
208
|
+
if (target.kind === "referenceType" && target.typeArguments?.length) {
|
|
209
|
+
const importBinding = ctx.importBindings?.get(target.name);
|
|
210
|
+
const clrName = importBinding?.kind === "type" ? importBinding.clrName : "";
|
|
211
|
+
if (clrName.endsWith(".ExtensionMethods")) {
|
|
212
|
+
const shape = target.typeArguments[0];
|
|
213
|
+
if (shape)
|
|
214
|
+
return resolveRuntimeCastTarget(shape, ctx);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// 3) Intersection types have no C# cast target; cast to the first runtime-like constituent.
|
|
218
|
+
if (target.kind === "intersectionType") {
|
|
219
|
+
for (const part of target.types) {
|
|
220
|
+
const resolved = resolveRuntimeCastTarget(part, ctx);
|
|
221
|
+
if (resolved.kind !== "intersectionType" && resolved.kind !== "objectType") {
|
|
222
|
+
return resolved;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const fallback = target.types[0];
|
|
226
|
+
return fallback ? resolveRuntimeCastTarget(fallback, ctx) : target;
|
|
227
|
+
}
|
|
228
|
+
return target;
|
|
229
|
+
};
|
|
230
|
+
const runtimeTarget = resolveRuntimeCastTarget(expr.targetType, ctx1);
|
|
231
|
+
const [typeName, ctx2] = emitType(runtimeTarget, ctx1);
|
|
232
|
+
const operandText = formatCastOperandText(expr.expression, innerCode.text);
|
|
233
|
+
return [{ text: `(${typeName})${operandText}` }, ctx2];
|
|
71
234
|
};
|
|
72
235
|
/**
|
|
73
|
-
* Emit a
|
|
236
|
+
* Emit a trycast expression.
|
|
74
237
|
*
|
|
75
|
-
* TypeScript `
|
|
238
|
+
* TypeScript `trycast<T>(x)` becomes C# `x as T` (safe cast).
|
|
76
239
|
* This returns null if the cast fails instead of throwing.
|
|
77
240
|
*/
|
|
78
241
|
const emitTryCast = (expr, context) => {
|
|
79
242
|
const [innerCode, ctx1] = emitExpression(expr.expression, context);
|
|
80
243
|
const [typeName, ctx2] = emitType(expr.targetType, ctx1);
|
|
81
|
-
|
|
244
|
+
const operandText = formatCastOperandText(expr.expression, innerCode.text);
|
|
245
|
+
return [{ text: `${operandText} as ${typeName}` }, ctx2];
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* Emit a stackalloc expression.
|
|
249
|
+
*
|
|
250
|
+
* TypeScript `stackalloc<T>(n)` becomes C# `stackalloc T[n]`.
|
|
251
|
+
*/
|
|
252
|
+
const emitStackAlloc = (expr, context) => {
|
|
253
|
+
const [elementTypeName, ctx1] = emitType(expr.elementType, context);
|
|
254
|
+
const [sizeFrag, ctx2] = emitExpression(expr.size, ctx1, {
|
|
255
|
+
kind: "primitiveType",
|
|
256
|
+
name: "int",
|
|
257
|
+
});
|
|
258
|
+
return [{ text: `stackalloc ${elementTypeName}[${sizeFrag.text}]` }, ctx2];
|
|
82
259
|
};
|
|
83
260
|
/**
|
|
84
261
|
* Emit a C# expression from an IR expression
|
|
@@ -87,57 +264,62 @@ const emitTryCast = (expr, context) => {
|
|
|
87
264
|
* @param expectedType Optional expected type for contextual typing (e.g., array element type inference)
|
|
88
265
|
*/
|
|
89
266
|
export const emitExpression = (expr, context, expectedType) => {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
267
|
+
const [fragment, newContext] = (() => {
|
|
268
|
+
switch (expr.kind) {
|
|
269
|
+
case "literal":
|
|
270
|
+
// Pass expectedType for null → default conversion in generic contexts
|
|
271
|
+
// Numeric literals use raw lexeme (no contextual widening under new spec)
|
|
272
|
+
return emitLiteral(expr, context, expectedType);
|
|
273
|
+
case "identifier":
|
|
274
|
+
return emitIdentifier(expr, context);
|
|
275
|
+
case "array":
|
|
276
|
+
return emitArray(expr, context, expectedType);
|
|
277
|
+
case "object":
|
|
278
|
+
return emitObject(expr, context, expectedType);
|
|
279
|
+
case "memberAccess":
|
|
280
|
+
return emitMemberAccess(expr, context);
|
|
281
|
+
case "call":
|
|
282
|
+
return emitCall(expr, context);
|
|
283
|
+
case "new":
|
|
284
|
+
return emitNew(expr, context);
|
|
285
|
+
case "binary":
|
|
286
|
+
return emitBinary(expr, context, expectedType);
|
|
287
|
+
case "logical":
|
|
288
|
+
return emitLogical(expr, context);
|
|
289
|
+
case "unary":
|
|
290
|
+
return emitUnary(expr, context, expectedType);
|
|
291
|
+
case "update":
|
|
292
|
+
return emitUpdate(expr, context);
|
|
293
|
+
case "assignment":
|
|
294
|
+
return emitAssignment(expr, context);
|
|
295
|
+
case "conditional":
|
|
296
|
+
return emitConditional(expr, context, expectedType);
|
|
297
|
+
case "functionExpression":
|
|
298
|
+
return emitFunctionExpression(expr, context);
|
|
299
|
+
case "arrowFunction":
|
|
300
|
+
return emitArrowFunction(expr, context);
|
|
301
|
+
case "templateLiteral":
|
|
302
|
+
return emitTemplateLiteral(expr, context);
|
|
303
|
+
case "spread":
|
|
304
|
+
return emitSpread(expr, context);
|
|
305
|
+
case "await":
|
|
306
|
+
return emitAwait(expr, context);
|
|
307
|
+
case "this":
|
|
308
|
+
return [{ text: "this" }, context];
|
|
309
|
+
case "numericNarrowing":
|
|
310
|
+
return emitNumericNarrowing(expr, context);
|
|
311
|
+
case "typeAssertion":
|
|
312
|
+
return emitTypeAssertion(expr, context);
|
|
313
|
+
case "trycast":
|
|
314
|
+
return emitTryCast(expr, context);
|
|
315
|
+
case "stackalloc":
|
|
316
|
+
return emitStackAlloc(expr, context);
|
|
317
|
+
default:
|
|
318
|
+
throw new Error(`Unhandled IR expression kind: ${String(expr.kind)}`);
|
|
319
|
+
}
|
|
320
|
+
})();
|
|
321
|
+
const [castedFrag, castedContext] = maybeCastNullishTypeParam(expr, fragment, newContext, expectedType);
|
|
322
|
+
return maybeUnwrapNullableValueType(expr, castedFrag, castedContext, expectedType);
|
|
141
323
|
};
|
|
142
324
|
// Re-export commonly used functions for backward compatibility
|
|
143
325
|
export { emitTypeArguments, generateSpecializedName, } from "./expressions/identifiers.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression-emitter.js","sourceRoot":"","sources":["../src/expression-emitter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"expression-emitter.js","sourceRoot":"","sources":["../src/expression-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { IrExpression } from "@tsonic/frontend";
|
|
5
5
|
import { EmitterContext, CSharpFragment } from "../types.js";
|
|
6
|
+
type MemberAccessUsage = "value" | "call";
|
|
6
7
|
/**
|
|
7
8
|
* Emit a member access expression (dot notation or bracket notation)
|
|
8
9
|
*/
|
|
9
10
|
export declare const emitMemberAccess: (expr: Extract<IrExpression, {
|
|
10
11
|
kind: "memberAccess";
|
|
11
|
-
}>, context: EmitterContext) => [CSharpFragment, EmitterContext];
|
|
12
|
+
}>, context: EmitterContext, usage?: MemberAccessUsage) => [CSharpFragment, EmitterContext];
|
|
13
|
+
export {};
|
|
12
14
|
//# sourceMappingURL=access.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/expressions/access.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/expressions/access.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA2D7D,KAAK,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC;AAqM1C;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,EACrD,SAAS,cAAc,EACvB,QAAO,iBAA2B,KACjC,CAAC,cAAc,EAAE,cAAc,CAoMjC,CAAC"}
|