@tsonic/emitter 0.0.5 → 0.0.12
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.js +6 -6
- package/dist/array.test.js.map +1 -1
- package/dist/core/imports.test.js +6 -3
- package/dist/core/imports.test.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/type-compatibility.d.ts +26 -0
- package/dist/core/type-compatibility.d.ts.map +1 -0
- package/dist/core/type-compatibility.js +109 -0
- package/dist/core/type-compatibility.js.map +1 -0
- package/dist/core/type-resolution.d.ts +81 -1
- package/dist/core/type-resolution.d.ts.map +1 -1
- package/dist/core/type-resolution.js +258 -0
- package/dist/core/type-resolution.js.map +1 -1
- package/dist/core/type-resolution.test.js +110 -1
- package/dist/core/type-resolution.test.js.map +1 -1
- package/dist/emitter-types/context.d.ts.map +1 -1
- package/dist/emitter-types/context.js +21 -1
- package/dist/emitter-types/context.js.map +1 -1
- package/dist/emitter-types/core.d.ts +26 -0
- package/dist/emitter-types/core.d.ts.map +1 -1
- package/dist/emitter-types/identifiers.d.ts.map +1 -1
- package/dist/emitter-types/identifiers.js +4 -43
- package/dist/emitter-types/identifiers.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/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +48 -0
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/access.d.ts.map +1 -1
- package/dist/expressions/access.js +97 -13
- package/dist/expressions/access.js.map +1 -1
- package/dist/expressions/calls.d.ts.map +1 -1
- package/dist/expressions/calls.js +5 -1
- package/dist/expressions/calls.js.map +1 -1
- package/dist/expressions/collections.d.ts +3 -2
- package/dist/expressions/collections.d.ts.map +1 -1
- package/dist/expressions/collections.js +214 -24
- package/dist/expressions/collections.js.map +1 -1
- package/dist/expressions/functions.d.ts +2 -2
- package/dist/expressions/functions.d.ts.map +1 -1
- package/dist/expressions/functions.js +81 -38
- package/dist/expressions/functions.js.map +1 -1
- package/dist/expressions/identifiers.d.ts.map +1 -1
- package/dist/expressions/identifiers.js +27 -7
- package/dist/expressions/identifiers.js.map +1 -1
- package/dist/expressions/index.test.js +189 -4
- package/dist/expressions/index.test.js.map +1 -1
- package/dist/expressions/literals.d.ts +4 -6
- package/dist/expressions/literals.d.ts.map +1 -1
- package/dist/expressions/literals.js +41 -17
- package/dist/expressions/literals.js.map +1 -1
- package/dist/expressions/literals.test.js +41 -0
- package/dist/expressions/literals.test.js.map +1 -1
- package/dist/expressions/operators.d.ts +4 -0
- package/dist/expressions/operators.d.ts.map +1 -1
- package/dist/expressions/operators.js +145 -12
- package/dist/expressions/operators.js.map +1 -1
- package/dist/expressions/other.d.ts.map +1 -1
- package/dist/expressions/other.js +9 -2
- package/dist/expressions/other.js.map +1 -1
- package/dist/generator-exchange.d.ts +1 -1
- package/dist/generator-exchange.d.ts.map +1 -1
- package/dist/generator-exchange.js +15 -4
- package/dist/generator-exchange.js.map +1 -1
- package/dist/generator-wrapper.d.ts +84 -0
- package/dist/generator-wrapper.d.ts.map +1 -0
- package/dist/generator-wrapper.js +312 -0
- package/dist/generator-wrapper.js.map +1 -0
- package/dist/generator-wrapper.test.d.ts +12 -0
- package/dist/generator-wrapper.test.d.ts.map +1 -0
- package/dist/generator-wrapper.test.js +179 -0
- package/dist/generator-wrapper.test.js.map +1 -0
- package/dist/generator.test.js +596 -6
- package/dist/generator.test.js.map +1 -1
- package/dist/golden-tests/config-parser.d.ts.map +1 -1
- package/dist/golden-tests/config-parser.js +81 -11
- package/dist/golden-tests/config-parser.js.map +1 -1
- package/dist/golden-tests/discovery.d.ts.map +1 -1
- package/dist/golden-tests/discovery.js +15 -5
- package/dist/golden-tests/discovery.js.map +1 -1
- package/dist/golden-tests/runner.d.ts.map +1 -1
- package/dist/golden-tests/runner.js +62 -7
- package/dist/golden-tests/runner.js.map +1 -1
- package/dist/golden-tests/types.d.ts +11 -1
- package/dist/golden-tests/types.d.ts.map +1 -1
- package/dist/hierarchical-bindings.test.js +2 -2
- package/dist/hierarchical-bindings.test.js.map +1 -1
- package/dist/integration.test.js +49 -2
- package/dist/integration.test.js.map +1 -1
- package/dist/invariants/emitter-globals-subset.test.d.ts +15 -0
- package/dist/invariants/emitter-globals-subset.test.d.ts.map +1 -0
- package/dist/invariants/emitter-globals-subset.test.js +137 -0
- package/dist/invariants/emitter-globals-subset.test.js.map +1 -0
- package/dist/invariants/numeric-proof-contract.test.d.ts +19 -0
- package/dist/invariants/numeric-proof-contract.test.d.ts.map +1 -0
- package/dist/invariants/numeric-proof-contract.test.js +560 -0
- package/dist/invariants/numeric-proof-contract.test.js.map +1 -0
- package/dist/specialization/generic-functions.test.js +10 -0
- package/dist/specialization/generic-functions.test.js.map +1 -1
- package/dist/specialization/substitution.d.ts.map +1 -1
- package/dist/specialization/substitution.js +7 -0
- package/dist/specialization/substitution.js.map +1 -1
- package/dist/statement-emitter.d.ts.map +1 -1
- package/dist/statement-emitter.js +5 -1
- package/dist/statement-emitter.js.map +1 -1
- package/dist/statements/blocks.d.ts +39 -1
- package/dist/statements/blocks.d.ts.map +1 -1
- package/dist/statements/blocks.js +129 -3
- package/dist/statements/blocks.js.map +1 -1
- package/dist/statements/classes/members/methods.d.ts.map +1 -1
- package/dist/statements/classes/members/methods.js +3 -1
- package/dist/statements/classes/members/methods.js.map +1 -1
- package/dist/statements/control/conditionals.d.ts.map +1 -1
- package/dist/statements/control/conditionals.js +215 -1
- package/dist/statements/control/conditionals.js.map +1 -1
- package/dist/statements/control/loops.d.ts +6 -0
- package/dist/statements/control/loops.d.ts.map +1 -1
- package/dist/statements/control/loops.js +9 -2
- 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 +13 -5
- 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 +91 -25
- 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 +11 -1
- 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 +11 -1
- package/dist/statements/declarations/type-aliases.js.map +1 -1
- package/dist/statements/index.test.js +165 -3
- package/dist/statements/index.test.js.map +1 -1
- package/dist/types/arrays.d.ts +10 -1
- package/dist/types/arrays.d.ts.map +1 -1
- package/dist/types/arrays.js +16 -1
- package/dist/types/arrays.js.map +1 -1
- package/dist/types/dictionaries.d.ts +3 -2
- package/dist/types/dictionaries.d.ts.map +1 -1
- package/dist/types/dictionaries.js +14 -8
- package/dist/types/dictionaries.js.map +1 -1
- package/dist/types/emitter.d.ts.map +1 -1
- package/dist/types/emitter.js +3 -0
- package/dist/types/emitter.js.map +1 -1
- package/dist/types/index.test.js +5 -2
- package/dist/types/index.test.js.map +1 -1
- package/dist/types/references.d.ts.map +1 -1
- package/dist/types/references.js +128 -29
- package/dist/types/references.js.map +1 -1
- package/dist/types/references.test.d.ts +11 -0
- package/dist/types/references.test.d.ts.map +1 -0
- package/dist/types/references.test.js +384 -0
- package/dist/types/references.test.js.map +1 -0
- package/dist/types/tuples.d.ts +23 -0
- package/dist/types/tuples.d.ts.map +1 -0
- package/dist/types/tuples.js +54 -0
- package/dist/types/tuples.js.map +1 -0
- package/dist/types/unions.test.js +62 -15
- package/dist/types/unions.test.js.map +1 -1
- 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 -2
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mechanical Invariant Test: Emitter Special-Cases ⊆ Globals
|
|
3
|
+
*
|
|
4
|
+
* This test verifies that every identifier the emitter "just knows" about
|
|
5
|
+
* via special-casing exists in at least one globals package.
|
|
6
|
+
*
|
|
7
|
+
* The principle: The emitter must not emit CLR mappings for types that
|
|
8
|
+
* aren't declared in the globals packages. If a type isn't in globals,
|
|
9
|
+
* TypeScript name resolution will fail first (which is correct behavior).
|
|
10
|
+
*
|
|
11
|
+
* Source of truth for special-cased identifiers:
|
|
12
|
+
* - packages/emitter/src/types/references.ts
|
|
13
|
+
*/
|
|
14
|
+
import { describe, it } from "mocha";
|
|
15
|
+
import { strict as assert } from "assert";
|
|
16
|
+
/**
|
|
17
|
+
* Types that the emitter special-cases with hardcoded CLR mappings.
|
|
18
|
+
* Each entry specifies which runtime mode(s) the special-casing applies to.
|
|
19
|
+
*
|
|
20
|
+
* IMPORTANT: When adding new special-cases to the emitter, you MUST:
|
|
21
|
+
* 1. Add the type to this list
|
|
22
|
+
* 2. Ensure the type is declared in the appropriate globals package(s)
|
|
23
|
+
* 3. Update the assertions below
|
|
24
|
+
*/
|
|
25
|
+
const EMITTER_SPECIAL_CASES = {
|
|
26
|
+
// From references.ts:192 - Array<T> → List<T>
|
|
27
|
+
Array: { js: true, dotnet: true },
|
|
28
|
+
// From references.ts:204,217 - Promise<T> → Task<T>
|
|
29
|
+
Promise: { js: true, dotnet: true },
|
|
30
|
+
// From references.ts:236 - PromiseLike<T> → Task<T>
|
|
31
|
+
PromiseLike: { js: true, dotnet: true },
|
|
32
|
+
// From references.ts:232 - Error → Exception (JS mode only)
|
|
33
|
+
Error: { js: true, dotnet: false },
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Types that MUST be declared in js-globals for the emitter to work correctly.
|
|
37
|
+
* These are types that have special-case handling when runtime === "js".
|
|
38
|
+
*/
|
|
39
|
+
const REQUIRED_IN_JS_GLOBALS = ["Array", "Promise", "PromiseLike", "Error"];
|
|
40
|
+
/**
|
|
41
|
+
* Types that MUST be declared in dotnet-globals for the emitter to work correctly.
|
|
42
|
+
* These are types that have special-case handling when runtime === "dotnet".
|
|
43
|
+
*/
|
|
44
|
+
const REQUIRED_IN_DOTNET_GLOBALS = ["Array", "Promise", "PromiseLike"];
|
|
45
|
+
/**
|
|
46
|
+
* Types that are NOT in any globals package.
|
|
47
|
+
* These must NOT be special-cased because TS name resolution will fail first.
|
|
48
|
+
* If the emitter special-cased these, it would produce wrong output for code
|
|
49
|
+
* that can't even type-check.
|
|
50
|
+
*/
|
|
51
|
+
const TYPES_NOT_IN_ANY_GLOBALS = [
|
|
52
|
+
"Map", // Not in globals - must fail at TS name resolution
|
|
53
|
+
"Set", // Not in globals - must fail at TS name resolution
|
|
54
|
+
"WeakMap", // Not in globals
|
|
55
|
+
"WeakSet", // Not in globals
|
|
56
|
+
"Date", // Not in globals (uses System.DateTime via imports)
|
|
57
|
+
"parseInt", // Not in globals
|
|
58
|
+
"parseFloat", // Not in globals
|
|
59
|
+
"isNaN", // Not in globals
|
|
60
|
+
"isFinite", // Not in globals
|
|
61
|
+
];
|
|
62
|
+
/**
|
|
63
|
+
* Types that ARE in js-globals but are NOT special-cased by the emitter.
|
|
64
|
+
* This is correct behavior - they go through normal type resolution.
|
|
65
|
+
* These are listed here to document that they're intentionally not special-cased.
|
|
66
|
+
*
|
|
67
|
+
* Note: These types are legitimate in JS mode and resolve through the normal
|
|
68
|
+
* import/binding path, not hardcoded CLR mappings.
|
|
69
|
+
*/
|
|
70
|
+
const IN_JS_GLOBALS_NOT_SPECIAL_CASED = [
|
|
71
|
+
"console", // In js-globals, resolves via normal path
|
|
72
|
+
"Math", // In js-globals, resolves via normal path
|
|
73
|
+
"JSON", // In js-globals, resolves via normal path
|
|
74
|
+
"RegExp", // In js-globals (minimal), resolves via normal path
|
|
75
|
+
];
|
|
76
|
+
describe("Emitter-Globals Subset Invariant", () => {
|
|
77
|
+
describe("Special-cased types exist in appropriate globals", () => {
|
|
78
|
+
it("all JS-mode special cases are in js-globals", () => {
|
|
79
|
+
const jsSpecialCases = Object.entries(EMITTER_SPECIAL_CASES)
|
|
80
|
+
.filter(([_, modes]) => modes.js)
|
|
81
|
+
.map(([name]) => name);
|
|
82
|
+
// This assertion documents the invariant
|
|
83
|
+
assert.deepEqual(jsSpecialCases.sort(), REQUIRED_IN_JS_GLOBALS.sort(), "JS-mode special cases must match required js-globals types");
|
|
84
|
+
});
|
|
85
|
+
it("all dotnet-mode special cases are in dotnet-globals", () => {
|
|
86
|
+
const dotnetSpecialCases = Object.entries(EMITTER_SPECIAL_CASES)
|
|
87
|
+
.filter(([_, modes]) => modes.dotnet)
|
|
88
|
+
.map(([name]) => name);
|
|
89
|
+
assert.deepEqual(dotnetSpecialCases.sort(), REQUIRED_IN_DOTNET_GLOBALS.sort(), "Dotnet-mode special cases must match required dotnet-globals types");
|
|
90
|
+
});
|
|
91
|
+
it("Error is only special-cased in JS mode", () => {
|
|
92
|
+
const errorConfig = EMITTER_SPECIAL_CASES.Error;
|
|
93
|
+
assert.equal(errorConfig.js, true, "Error should be special-cased in JS mode");
|
|
94
|
+
assert.equal(errorConfig.dotnet, false, "Error should NOT be special-cased in dotnet mode");
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("Types not in globals are not special-cased", () => {
|
|
98
|
+
it("Map is not special-cased (not in any globals)", () => {
|
|
99
|
+
assert.equal(EMITTER_SPECIAL_CASES["Map"], undefined, "Map must not be special-cased - it's not in globals, TS will fail first");
|
|
100
|
+
});
|
|
101
|
+
it("Set is not special-cased (not in any globals)", () => {
|
|
102
|
+
assert.equal(EMITTER_SPECIAL_CASES["Set"], undefined, "Set must not be special-cased - it's not in globals, TS will fail first");
|
|
103
|
+
});
|
|
104
|
+
it("no types outside globals are special-cased", () => {
|
|
105
|
+
for (const typeName of TYPES_NOT_IN_ANY_GLOBALS) {
|
|
106
|
+
assert.equal(EMITTER_SPECIAL_CASES[typeName], undefined, `${typeName} must not be special-cased - it's not in any globals package`);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe("JS-globals types correctly handled", () => {
|
|
111
|
+
it("console/Math/JSON are in js-globals but not special-cased (correct)", () => {
|
|
112
|
+
// These types ARE in js-globals and should NOT be special-cased.
|
|
113
|
+
// They resolve through normal type resolution, not hardcoded CLR mappings.
|
|
114
|
+
for (const typeName of IN_JS_GLOBALS_NOT_SPECIAL_CASED) {
|
|
115
|
+
assert.equal(EMITTER_SPECIAL_CASES[typeName], undefined, `${typeName} is in js-globals but should NOT be special-cased (uses normal resolution)`);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe("Invariant documentation", () => {
|
|
120
|
+
it("documents the complete list of special-cased types", () => {
|
|
121
|
+
const specialCasedTypes = Object.keys(EMITTER_SPECIAL_CASES);
|
|
122
|
+
// This test will fail if someone adds a new special case without updating this file
|
|
123
|
+
assert.deepEqual(specialCasedTypes.sort(), ["Array", "Error", "Promise", "PromiseLike"], "Complete list of emitter special-cased types");
|
|
124
|
+
});
|
|
125
|
+
it("documents source locations for special cases", () => {
|
|
126
|
+
// This is a documentation test - it reminds maintainers where to look
|
|
127
|
+
const sourceLocations = {
|
|
128
|
+
Array: "packages/emitter/src/types/references.ts:192",
|
|
129
|
+
Promise: "packages/emitter/src/types/references.ts:204,217",
|
|
130
|
+
PromiseLike: "packages/emitter/src/types/references.ts:236",
|
|
131
|
+
Error: "packages/emitter/src/types/references.ts:232",
|
|
132
|
+
};
|
|
133
|
+
assert.equal(Object.keys(sourceLocations).length, Object.keys(EMITTER_SPECIAL_CASES).length, "All special cases should have documented source locations");
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=emitter-globals-subset.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter-globals-subset.test.js","sourceRoot":"","sources":["../../src/invariants/emitter-globals-subset.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract Test: Numeric Proof System (Behavioral)
|
|
3
|
+
*
|
|
4
|
+
* These tests enforce the contract between the numeric proof pass (frontend)
|
|
5
|
+
* and the emitter (backend) using BEHAVIOR, not source code pattern matching.
|
|
6
|
+
*
|
|
7
|
+
* Key contract:
|
|
8
|
+
* 1. Only the proof pass determines whether an expression is proven Int32
|
|
9
|
+
* 2. The emitter checks IR markers (numericIntent) and ICEs if missing
|
|
10
|
+
* 3. TSN5107 is triggered based on accessKind, not heuristic name matching
|
|
11
|
+
* 4. TSN5109 is triggered when accessKind is unknown/missing (compiler bug)
|
|
12
|
+
*
|
|
13
|
+
* Test approach:
|
|
14
|
+
* - Create IR fixtures with specific accessKind values
|
|
15
|
+
* - Run proof pass and assert diagnostics or success
|
|
16
|
+
* - Run emitter and verify ICE behavior for unproven indices
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=numeric-proof-contract.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numeric-proof-contract.test.d.ts","sourceRoot":"","sources":["../../src/invariants/numeric-proof-contract.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
|