@tsonic/emitter 0.0.73 → 0.0.74
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.d.ts.map +1 -1
- package/dist/adapter-generator.js +2 -1
- package/dist/adapter-generator.js.map +1 -1
- package/dist/constants.d.ts +3 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +15 -6
- package/dist/constants.js.map +1 -1
- package/dist/core/format/attributes.d.ts.map +1 -1
- package/dist/core/format/attributes.js +5 -56
- package/dist/core/format/attributes.js.map +1 -1
- package/dist/core/format/attributes.test.js +1 -1
- package/dist/core/format/attributes.test.js.map +1 -1
- package/dist/core/format/backend-ast/builders.d.ts +13 -0
- package/dist/core/format/backend-ast/builders.d.ts.map +1 -0
- package/dist/core/format/backend-ast/builders.js +169 -0
- package/dist/core/format/backend-ast/builders.js.map +1 -0
- package/dist/core/format/backend-ast/builders.test.d.ts +2 -0
- package/dist/core/format/backend-ast/builders.test.d.ts.map +1 -0
- package/dist/core/format/backend-ast/builders.test.js +258 -0
- package/dist/core/format/backend-ast/builders.test.js.map +1 -0
- package/dist/core/format/backend-ast/index.d.ts +3 -2
- package/dist/core/format/backend-ast/index.d.ts.map +1 -1
- package/dist/core/format/backend-ast/index.js +2 -1
- package/dist/core/format/backend-ast/index.js.map +1 -1
- package/dist/core/format/backend-ast/invariants.test.d.ts +2 -0
- package/dist/core/format/backend-ast/invariants.test.d.ts.map +1 -0
- package/dist/core/format/backend-ast/invariants.test.js +72 -0
- package/dist/core/format/backend-ast/invariants.test.js.map +1 -0
- package/dist/core/format/backend-ast/printer.d.ts +1 -1
- package/dist/core/format/backend-ast/printer.d.ts.map +1 -1
- package/dist/core/format/backend-ast/printer.js +362 -119
- package/dist/core/format/backend-ast/printer.js.map +1 -1
- package/dist/core/format/backend-ast/printer.test.d.ts +2 -0
- package/dist/core/format/backend-ast/printer.test.d.ts.map +1 -0
- package/dist/core/format/backend-ast/printer.test.js +796 -0
- package/dist/core/format/backend-ast/printer.test.js.map +1 -0
- package/dist/core/format/backend-ast/types.d.ts +66 -14
- package/dist/core/format/backend-ast/types.d.ts.map +1 -1
- package/dist/core/format/backend-ast/utils.d.ts +12 -8
- package/dist/core/format/backend-ast/utils.d.ts.map +1 -1
- package/dist/core/format/backend-ast/utils.js +222 -19
- package/dist/core/format/backend-ast/utils.js.map +1 -1
- package/dist/core/format/backend-ast/utils.test.d.ts +2 -0
- package/dist/core/format/backend-ast/utils.test.d.ts.map +1 -0
- package/dist/core/format/backend-ast/utils.test.js +142 -0
- package/dist/core/format/backend-ast/utils.test.js.map +1 -0
- package/dist/core/format/module-emitter/assembly.d.ts +2 -2
- package/dist/core/format/module-emitter/assembly.d.ts.map +1 -1
- package/dist/core/format/module-emitter/assembly.js +7 -3
- package/dist/core/format/module-emitter/assembly.js.map +1 -1
- package/dist/core/format/module-emitter/header.d.ts +2 -1
- package/dist/core/format/module-emitter/header.d.ts.map +1 -1
- package/dist/core/format/module-emitter/header.js +2 -2
- package/dist/core/format/module-emitter/header.js.map +1 -1
- package/dist/core/format/module-emitter/orchestrator.js +1 -1
- package/dist/core/format/module-emitter/orchestrator.js.map +1 -1
- package/dist/core/format/module-emitter/static-container.d.ts.map +1 -1
- package/dist/core/format/module-emitter/static-container.js +3 -5
- package/dist/core/format/module-emitter/static-container.js.map +1 -1
- package/dist/core/module-emitter.test.js +1 -0
- package/dist/core/module-emitter.test.js.map +1 -1
- package/dist/core/semantic/boolean-context.d.ts.map +1 -1
- package/dist/core/semantic/boolean-context.js +45 -49
- package/dist/core/semantic/boolean-context.js.map +1 -1
- package/dist/core/semantic/imports.d.ts.map +1 -1
- package/dist/core/semantic/imports.js +16 -15
- package/dist/core/semantic/imports.js.map +1 -1
- package/dist/core/semantic/imports.test.js.map +1 -1
- package/dist/core/semantic/type-resolution.js +1 -2
- package/dist/core/semantic/type-resolution.js.map +1 -1
- package/dist/emitter-types/core.d.ts +19 -10
- package/dist/emitter-types/core.d.ts.map +1 -1
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +124 -44
- package/dist/emitter.js.map +1 -1
- package/dist/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +24 -43
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/access.d.ts.map +1 -1
- package/dist/expressions/access.js +11 -28
- package/dist/expressions/access.js.map +1 -1
- package/dist/expressions/calls/call-analysis.d.ts +0 -10
- package/dist/expressions/calls/call-analysis.d.ts.map +1 -1
- package/dist/expressions/calls/call-analysis.js +3 -62
- package/dist/expressions/calls/call-analysis.js.map +1 -1
- package/dist/expressions/calls/call-emitter.d.ts.map +1 -1
- package/dist/expressions/calls/call-emitter.js +89 -151
- package/dist/expressions/calls/call-emitter.js.map +1 -1
- package/dist/expressions/calls/new-emitter.d.ts.map +1 -1
- package/dist/expressions/calls/new-emitter.js +36 -69
- package/dist/expressions/calls/new-emitter.js.map +1 -1
- package/dist/expressions/collections.d.ts +3 -0
- package/dist/expressions/collections.d.ts.map +1 -1
- package/dist/expressions/collections.js +43 -70
- package/dist/expressions/collections.js.map +1 -1
- package/dist/expressions/functions.d.ts.map +1 -1
- package/dist/expressions/functions.js +1 -7
- package/dist/expressions/functions.js.map +1 -1
- package/dist/expressions/identifiers.d.ts.map +1 -1
- package/dist/expressions/identifiers.js +23 -44
- package/dist/expressions/identifiers.js.map +1 -1
- package/dist/expressions/index.test.js +128 -0
- package/dist/expressions/index.test.js.map +1 -1
- package/dist/expressions/literals.d.ts.map +1 -1
- package/dist/expressions/literals.js +9 -41
- package/dist/expressions/literals.js.map +1 -1
- package/dist/expressions/operators/assignment-emitter.d.ts.map +1 -1
- package/dist/expressions/operators/assignment-emitter.js +2 -6
- package/dist/expressions/operators/assignment-emitter.js.map +1 -1
- package/dist/expressions/operators/binary-emitter.d.ts.map +1 -1
- package/dist/expressions/operators/binary-emitter.js +16 -32
- package/dist/expressions/operators/binary-emitter.js.map +1 -1
- package/dist/expressions/operators/logical-emitter.d.ts.map +1 -1
- package/dist/expressions/operators/logical-emitter.js +1 -3
- package/dist/expressions/operators/logical-emitter.js.map +1 -1
- package/dist/expressions/operators/unary-emitter.d.ts.map +1 -1
- package/dist/expressions/operators/unary-emitter.js +9 -20
- package/dist/expressions/operators/unary-emitter.js.map +1 -1
- package/dist/expressions/other.d.ts.map +1 -1
- package/dist/expressions/other.js +6 -11
- package/dist/expressions/other.js.map +1 -1
- package/dist/generator-exchange.d.ts.map +1 -1
- package/dist/generator-exchange.js +3 -2
- package/dist/generator-exchange.js.map +1 -1
- package/dist/generator-wrapper.d.ts.map +1 -1
- package/dist/generator-wrapper.js +27 -56
- package/dist/generator-wrapper.js.map +1 -1
- package/dist/integration.test.js +1 -1
- package/dist/integration.test.js.map +1 -1
- package/dist/json-aot-generic.test.js +3 -0
- package/dist/json-aot-generic.test.js.map +1 -1
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +19 -40
- package/dist/patterns.js.map +1 -1
- package/dist/statements/classes/members/methods.d.ts.map +1 -1
- package/dist/statements/classes/members/methods.js +3 -9
- package/dist/statements/classes/members/methods.js.map +1 -1
- package/dist/statements/classes/parameters.d.ts.map +1 -1
- package/dist/statements/classes/parameters.js +2 -1
- 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 +5 -16
- package/dist/statements/classes/properties.js.map +1 -1
- package/dist/statements/control/conditionals/guard-analysis.d.ts +2 -1
- package/dist/statements/control/conditionals/guard-analysis.d.ts.map +1 -1
- package/dist/statements/control/conditionals/guard-analysis.js +19 -6
- package/dist/statements/control/conditionals/guard-analysis.js.map +1 -1
- package/dist/statements/control/conditionals/if-emitter.d.ts.map +1 -1
- package/dist/statements/control/conditionals/if-emitter.js +14 -9
- package/dist/statements/control/conditionals/if-emitter.js.map +1 -1
- package/dist/statements/control/exceptions.d.ts.map +1 -1
- package/dist/statements/control/exceptions.js +2 -4
- package/dist/statements/control/exceptions.js.map +1 -1
- package/dist/statements/control/loops.d.ts.map +1 -1
- package/dist/statements/control/loops.js +3 -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 +2 -4
- 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 +36 -66
- package/dist/statements/declarations/functions.js.map +1 -1
- package/dist/statements/declarations/interfaces-mutable-storage.test.js +10 -2
- package/dist/statements/declarations/interfaces-mutable-storage.test.js.map +1 -1
- package/dist/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/statements/declarations/interfaces.js +4 -12
- 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 +3 -8
- 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 +39 -37
- package/dist/statements/declarations/variables.js.map +1 -1
- package/dist/statements/index.test.js +94 -8
- package/dist/statements/index.test.js.map +1 -1
- package/dist/types/dictionaries.d.ts.map +1 -1
- package/dist/types/dictionaries.js +5 -5
- package/dist/types/dictionaries.js.map +1 -1
- package/dist/types/functions.d.ts.map +1 -1
- package/dist/types/functions.js +5 -25
- package/dist/types/functions.js.map +1 -1
- package/dist/types/primitives.d.ts.map +1 -1
- package/dist/types/primitives.js.map +1 -1
- package/dist/types/references.d.ts.map +1 -1
- package/dist/types/references.js +65 -132
- package/dist/types/references.js.map +1 -1
- package/dist/types/references.test.js +63 -51
- package/dist/types/references.test.js.map +1 -1
- package/dist/types/tuples.d.ts.map +1 -1
- package/dist/types/tuples.js +7 -17
- package/dist/types/tuples.js.map +1 -1
- package/dist/types/unions.d.ts.map +1 -1
- package/dist/types/unions.js +2 -5
- package/dist/types/unions.js.map +1 -1
- package/package.json +2 -2
- package/dist/expressions/parentheses.d.ts +0 -4
- package/dist/expressions/parentheses.d.ts.map +0 -1
- package/dist/expressions/parentheses.js +0 -91
- package/dist/expressions/parentheses.js.map +0 -1
package/dist/types/tuples.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* ValueTuple<T1..T7, ValueTuple<T8..>> (recursive for 15+, 22+, etc.)
|
|
7
7
|
*/
|
|
8
8
|
import { emitTypeAst } from "./emitter.js";
|
|
9
|
+
import { identifierType } from "../core/format/backend-ast/builders.js";
|
|
9
10
|
/**
|
|
10
11
|
* Helper to emit a list of tuple element types as CSharpTypeAst, threading context through.
|
|
11
12
|
*/
|
|
@@ -33,22 +34,12 @@ export const emitTupleType = (type, context) => {
|
|
|
33
34
|
const elems = type.elementTypes;
|
|
34
35
|
// Empty tuple type [] → ValueTuple (non-generic)
|
|
35
36
|
if (elems.length === 0) {
|
|
36
|
-
return [
|
|
37
|
-
{ kind: "identifierType", name: "global::System.ValueTuple" },
|
|
38
|
-
context,
|
|
39
|
-
];
|
|
37
|
+
return [identifierType("global::System.ValueTuple"), context];
|
|
40
38
|
}
|
|
41
39
|
// 1-7 elements: direct ValueTuple<T1, ..., Tn>
|
|
42
40
|
if (elems.length <= 7) {
|
|
43
41
|
const [typeAsts, ctx] = emitTupleElems(elems, context);
|
|
44
|
-
return [
|
|
45
|
-
{
|
|
46
|
-
kind: "identifierType",
|
|
47
|
-
name: "global::System.ValueTuple",
|
|
48
|
-
typeArguments: typeAsts,
|
|
49
|
-
},
|
|
50
|
-
ctx,
|
|
51
|
-
];
|
|
42
|
+
return [identifierType("global::System.ValueTuple", typeAsts), ctx];
|
|
52
43
|
}
|
|
53
44
|
// 8+ elements: nest as ValueTuple<T1..T7, ValueTuple<T8..>>
|
|
54
45
|
const first7 = elems.slice(0, 7);
|
|
@@ -57,11 +48,10 @@ export const emitTupleType = (type, context) => {
|
|
|
57
48
|
// Recursively emit rest as nested tuple (handles 15+, 22+, etc.)
|
|
58
49
|
const [restTypeAst, ctxAfterRest] = emitTupleType({ kind: "tupleType", elementTypes: rest }, ctxAfterFirst7);
|
|
59
50
|
return [
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
},
|
|
51
|
+
identifierType("global::System.ValueTuple", [
|
|
52
|
+
...first7TypeAsts,
|
|
53
|
+
restTypeAst,
|
|
54
|
+
]),
|
|
65
55
|
ctxAfterRest,
|
|
66
56
|
];
|
|
67
57
|
};
|
package/dist/types/tuples.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuples.js","sourceRoot":"","sources":["../../src/types/tuples.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"tuples.js","sourceRoot":"","sources":["../../src/types/tuples.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE;;GAEG;AACH,MAAM,cAAc,GAAG,CACrB,KAAwB,EACxB,OAAuB,EACY,EAAE;IACrC,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,GAAG,IAAI,CAAC;IACb,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,IAA4C,EAC5C,OAAuB,EACU,EAAE;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;IAEhC,iDAAiD;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,cAAc,CAAC,2BAA2B,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,+CAA+C;IAC/C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,cAAc,CAAC,2BAA2B,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,4DAA4D;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5B,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzE,iEAAiE;IACjE,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,aAAa,CAC/C,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,EACzC,cAAc,CACf,CAAC;IAEF,OAAO;QACL,cAAc,CAAC,2BAA2B,EAAE;YAC1C,GAAG,cAAc;YACjB,WAAW;SACZ,CAAC;QACF,YAAY;KACb,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unions.d.ts","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"unions.d.ts","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AASzE;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,OAAO,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,EAC5C,SAAS,cAAc,KACtB,CAAC,aAAa,EAAE,cAAc,CA+IhC,CAAC"}
|
package/dist/types/unions.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Union type emission
|
|
3
3
|
*/
|
|
4
4
|
import { emitTypeAst } from "./emitter.js";
|
|
5
|
+
import { identifierType } from "../core/format/backend-ast/builders.js";
|
|
5
6
|
const getBareTypeParameterName = (type) => {
|
|
6
7
|
if (type.kind === "typeParameterType")
|
|
7
8
|
return type.name;
|
|
@@ -122,11 +123,7 @@ export const emitUnionType = (type, context) => {
|
|
|
122
123
|
}
|
|
123
124
|
if (uniqueTypeAsts.length >= 2 && uniqueTypeAsts.length <= 8) {
|
|
124
125
|
return [
|
|
125
|
-
|
|
126
|
-
kind: "identifierType",
|
|
127
|
-
name: "global::Tsonic.Runtime.Union",
|
|
128
|
-
typeArguments: uniqueTypeAsts,
|
|
129
|
-
},
|
|
126
|
+
identifierType("global::Tsonic.Runtime.Union", uniqueTypeAsts),
|
|
130
127
|
currentContext,
|
|
131
128
|
];
|
|
132
129
|
}
|
package/dist/types/unions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unions.js","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"unions.js","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsonic/emitter",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.74",
|
|
4
4
|
"description": "C# code generator for Tsonic compiler",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"update-golden:js": "npx tsx scripts/update-golden-tests.ts js"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@tsonic/frontend": "0.0.
|
|
28
|
+
"@tsonic/frontend": "0.0.74"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/chai": "5.2.2",
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { IrExpression } from "@tsonic/frontend";
|
|
2
|
-
export declare const formatPostfixExpressionText: (expr: IrExpression, text: string) => string;
|
|
3
|
-
export declare const formatCastOperandText: (expr: IrExpression, text: string) => string;
|
|
4
|
-
//# sourceMappingURL=parentheses.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parentheses.d.ts","sourceRoot":"","sources":["../../src/expressions/parentheses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAuDhD,eAAO,MAAM,2BAA2B,GACtC,MAAM,YAAY,EAClB,MAAM,MAAM,KACX,MAaF,CAAC;AAgCF,eAAO,MAAM,qBAAqB,GAChC,MAAM,YAAY,EAClB,MAAM,MAAM,KACX,MAGF,CAAC"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parenthesization helpers for C# precedence correctness.
|
|
3
|
-
*
|
|
4
|
-
* C# precedence differs from TS in a few critical places:
|
|
5
|
-
* - Cast expressions like `(T)x` bind *less* tightly than postfix operators like `.`, `[]`, `()`.
|
|
6
|
-
* So `(${T})x.Member` parses as `(${T})(x.Member)` unless wrapped: `((T)x).Member`.
|
|
7
|
-
* - The `as` operator also requires parentheses when used as a postfix receiver: `(x as T).Member`.
|
|
8
|
-
* - The `?:` conditional operator must be parenthesized before postfix: `(cond ? a : b).Member`.
|
|
9
|
-
*
|
|
10
|
-
* Additionally, conditional access chains (`?.`, `?[`) must NOT be wrapped when continuing a chain,
|
|
11
|
-
* otherwise null-propagation semantics change:
|
|
12
|
-
* `x?.Y.Z` is not equivalent to `(x?.Y).Z`.
|
|
13
|
-
*/
|
|
14
|
-
const hasConditionalAccessChain = (text) => text.includes("?.") || text.includes("?[");
|
|
15
|
-
const needsParensForPostfixByKind = (kind) => {
|
|
16
|
-
// These IR kinds emit C# primary/postfix expressions that can be directly followed by
|
|
17
|
-
// `.member`, `[index]`, or `(args)` without changing parse/semantics.
|
|
18
|
-
switch (kind) {
|
|
19
|
-
case "identifier":
|
|
20
|
-
case "memberAccess":
|
|
21
|
-
case "call":
|
|
22
|
-
case "new":
|
|
23
|
-
case "asinterface":
|
|
24
|
-
case "defaultof":
|
|
25
|
-
case "nameof":
|
|
26
|
-
case "sizeof":
|
|
27
|
-
case "this":
|
|
28
|
-
case "literal":
|
|
29
|
-
case "array":
|
|
30
|
-
case "object":
|
|
31
|
-
case "templateLiteral":
|
|
32
|
-
return false;
|
|
33
|
-
default:
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
const needsParensForPostfixByText = (text) => {
|
|
38
|
-
const trimmed = text.trim();
|
|
39
|
-
// Cast-like forms frequently start with '(' (e.g. `(int)expr`) and must be wrapped
|
|
40
|
-
// when used as a postfix receiver/callee.
|
|
41
|
-
if (trimmed.startsWith("("))
|
|
42
|
-
return true;
|
|
43
|
-
// `as` has low precedence and must be wrapped before postfix operators.
|
|
44
|
-
if (trimmed.includes(" as "))
|
|
45
|
-
return true;
|
|
46
|
-
return false;
|
|
47
|
-
};
|
|
48
|
-
export const formatPostfixExpressionText = (expr, text) => {
|
|
49
|
-
// Never wrap conditional access chains when continuing a postfix chain, otherwise
|
|
50
|
-
// we change null-propagation semantics.
|
|
51
|
-
if (hasConditionalAccessChain(text))
|
|
52
|
-
return text;
|
|
53
|
-
if (needsParensForPostfixByKind(expr.kind) ||
|
|
54
|
-
needsParensForPostfixByText(text)) {
|
|
55
|
-
return `(${text})`;
|
|
56
|
-
}
|
|
57
|
-
return text;
|
|
58
|
-
};
|
|
59
|
-
const needsParensForCastOperandByKind = (kind) => {
|
|
60
|
-
// Cast operands must be a C# unary-expression; wrap composite expressions.
|
|
61
|
-
switch (kind) {
|
|
62
|
-
case "identifier":
|
|
63
|
-
case "memberAccess":
|
|
64
|
-
case "call":
|
|
65
|
-
case "new":
|
|
66
|
-
case "this":
|
|
67
|
-
case "literal":
|
|
68
|
-
case "array":
|
|
69
|
-
case "object":
|
|
70
|
-
case "templateLiteral":
|
|
71
|
-
case "unary":
|
|
72
|
-
case "update":
|
|
73
|
-
case "await":
|
|
74
|
-
case "numericNarrowing":
|
|
75
|
-
case "typeAssertion":
|
|
76
|
-
case "trycast":
|
|
77
|
-
case "stackalloc":
|
|
78
|
-
case "defaultof":
|
|
79
|
-
case "nameof":
|
|
80
|
-
case "sizeof":
|
|
81
|
-
return false;
|
|
82
|
-
default:
|
|
83
|
-
return true;
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
export const formatCastOperandText = (expr, text) => {
|
|
87
|
-
if (needsParensForCastOperandByKind(expr.kind))
|
|
88
|
-
return `(${text})`;
|
|
89
|
-
return text;
|
|
90
|
-
};
|
|
91
|
-
//# sourceMappingURL=parentheses.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parentheses.js","sourceRoot":"","sources":["../../src/expressions/parentheses.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,MAAM,yBAAyB,GAAG,CAAC,IAAY,EAAW,EAAE,CAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE7C,MAAM,2BAA2B,GAAG,CAAC,IAA0B,EAAW,EAAE;IAC1E,sFAAsF;IACtF,sEAAsE;IACtE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY,CAAC;QAClB,KAAK,cAAc,CAAC;QACpB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,aAAa,CAAC;QACnB,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC;QACf;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,IAAY,EAAW,EAAE;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,mFAAmF;IACnF,0CAA0C;IAC1C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,wEAAwE;IACxE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,IAAkB,EAClB,IAAY,EACJ,EAAE;IACV,kFAAkF;IAClF,wCAAwC;IACxC,IAAI,yBAAyB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,IACE,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;QACtC,2BAA2B,CAAC,IAAI,CAAC,EACjC,CAAC;QACD,OAAO,IAAI,IAAI,GAAG,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CACtC,IAA0B,EACjB,EAAE;IACX,2EAA2E;IAC3E,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY,CAAC;QAClB,KAAK,cAAc,CAAC;QACpB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,iBAAiB,CAAC;QACvB,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,kBAAkB,CAAC;QACxB,KAAK,eAAe,CAAC;QACrB,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAAkB,EAClB,IAAY,EACJ,EAAE;IACV,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,IAAI,GAAG,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|