@tsonic/frontend 0.0.62 → 0.0.63
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/dependency-graph.d.ts +1 -1
- package/dist/dependency-graph.d.ts.map +1 -1
- package/dist/dependency-graph.js +1 -1
- package/dist/dependency-graph.js.map +1 -1
- package/dist/dotnet-metadata.d.ts +0 -12
- package/dist/dotnet-metadata.d.ts.map +1 -1
- package/dist/dotnet-metadata.js +0 -24
- package/dist/dotnet-metadata.js.map +1 -1
- package/dist/generic-function-values.d.ts +11 -0
- package/dist/generic-function-values.d.ts.map +1 -0
- package/dist/generic-function-values.js +243 -0
- package/dist/generic-function-values.js.map +1 -0
- package/dist/generic-function-values.test.d.ts +2 -0
- package/dist/generic-function-values.test.d.ts.map +1 -0
- package/dist/generic-function-values.test.js +256 -0
- package/dist/generic-function-values.test.js.map +1 -0
- package/dist/graph/extraction/imports.d.ts +5 -0
- package/dist/graph/extraction/imports.d.ts.map +1 -1
- package/dist/graph/extraction/imports.js +30 -0
- package/dist/graph/extraction/imports.js.map +1 -1
- package/dist/graph/extraction/index.d.ts +1 -1
- package/dist/graph/extraction/index.d.ts.map +1 -1
- package/dist/graph/extraction/index.js +1 -1
- package/dist/graph/extraction/index.js.map +1 -1
- package/dist/graph/extraction/orchestrator.d.ts.map +1 -1
- package/dist/graph/extraction/orchestrator.js +16 -2
- package/dist/graph/extraction/orchestrator.js.map +1 -1
- package/dist/graph/extraction.d.ts +1 -1
- package/dist/graph/extraction.d.ts.map +1 -1
- package/dist/graph/extraction.js +1 -1
- package/dist/graph/extraction.js.map +1 -1
- package/dist/ir/binding/binding-factory.d.ts +17 -0
- package/dist/ir/binding/binding-factory.d.ts.map +1 -0
- package/dist/ir/binding/binding-factory.js +765 -0
- package/dist/ir/binding/binding-factory.js.map +1 -0
- package/dist/ir/binding/binding-helpers.d.ts +90 -0
- package/dist/ir/binding/binding-helpers.d.ts.map +1 -0
- package/dist/ir/binding/binding-helpers.js +387 -0
- package/dist/ir/binding/binding-helpers.js.map +1 -0
- package/dist/ir/binding/binding-types.d.ts +203 -0
- package/dist/ir/binding/binding-types.d.ts.map +1 -0
- package/dist/ir/binding/binding-types.js +9 -0
- package/dist/ir/binding/binding-types.js.map +1 -0
- package/dist/ir/binding/index.d.ts +4 -158
- package/dist/ir/binding/index.d.ts.map +1 -1
- package/dist/ir/binding/index.js +3 -1134
- package/dist/ir/binding/index.js.map +1 -1
- package/dist/ir/builder.test.js +223 -0
- package/dist/ir/builder.test.js.map +1 -1
- package/dist/ir/converters/anonymous-synthesis.d.ts +3 -3
- package/dist/ir/converters/anonymous-synthesis.d.ts.map +1 -1
- package/dist/ir/converters/anonymous-synthesis.js +45 -8
- package/dist/ir/converters/anonymous-synthesis.js.map +1 -1
- package/dist/ir/converters/expressions/access/access-converter.d.ts +14 -0
- package/dist/ir/converters/expressions/access/access-converter.d.ts.map +1 -0
- package/dist/ir/converters/expressions/access/access-converter.js +141 -0
- package/dist/ir/converters/expressions/access/access-converter.js.map +1 -0
- package/dist/ir/converters/expressions/access/binding-resolution.d.ts +35 -0
- package/dist/ir/converters/expressions/access/binding-resolution.d.ts.map +1 -0
- package/dist/ir/converters/expressions/access/binding-resolution.js +384 -0
- package/dist/ir/converters/expressions/access/binding-resolution.js.map +1 -0
- package/dist/ir/converters/expressions/access/member-resolution.d.ts +67 -0
- package/dist/ir/converters/expressions/access/member-resolution.d.ts.map +1 -0
- package/dist/ir/converters/expressions/access/member-resolution.js +262 -0
- package/dist/ir/converters/expressions/access/member-resolution.js.map +1 -0
- package/dist/ir/converters/expressions/access.d.ts +1 -7
- package/dist/ir/converters/expressions/access.d.ts.map +1 -1
- package/dist/ir/converters/expressions/access.js +1 -720
- package/dist/ir/converters/expressions/access.js.map +1 -1
- package/dist/ir/converters/expressions/calls/call-converter.d.ts +23 -0
- package/dist/ir/converters/expressions/calls/call-converter.d.ts.map +1 -0
- package/dist/ir/converters/expressions/calls/call-converter.js +526 -0
- package/dist/ir/converters/expressions/calls/call-converter.js.map +1 -0
- package/dist/ir/converters/expressions/calls/call-site-analysis.d.ts +53 -0
- package/dist/ir/converters/expressions/calls/call-site-analysis.d.ts.map +1 -0
- package/dist/ir/converters/expressions/calls/call-site-analysis.js +554 -0
- package/dist/ir/converters/expressions/calls/call-site-analysis.js.map +1 -0
- package/dist/ir/converters/expressions/calls/new-converter.d.ts +21 -0
- package/dist/ir/converters/expressions/calls/new-converter.d.ts.map +1 -0
- package/dist/ir/converters/expressions/calls/new-converter.js +182 -0
- package/dist/ir/converters/expressions/calls/new-converter.js.map +1 -0
- package/dist/ir/converters/expressions/calls.d.ts +2 -28
- package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
- package/dist/ir/converters/expressions/calls.js +2 -1344
- package/dist/ir/converters/expressions/calls.js.map +1 -1
- package/dist/ir/converters/expressions/collections.d.ts.map +1 -1
- package/dist/ir/converters/expressions/collections.js +37 -6
- package/dist/ir/converters/expressions/collections.js.map +1 -1
- package/dist/ir/converters/expressions/functions.js +1 -1
- package/dist/ir/converters/expressions/functions.js.map +1 -1
- package/dist/ir/converters/expressions/helpers.d.ts.map +1 -1
- package/dist/ir/converters/expressions/helpers.js +1 -0
- package/dist/ir/converters/expressions/helpers.js.map +1 -1
- package/dist/ir/converters/expressions/other.d.ts.map +1 -1
- package/dist/ir/converters/expressions/other.js +3 -2
- package/dist/ir/converters/expressions/other.js.map +1 -1
- package/dist/ir/converters/flow-narrowing.d.ts.map +1 -1
- package/dist/ir/converters/flow-narrowing.js +3 -2
- package/dist/ir/converters/flow-narrowing.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/methods.js +1 -1
- package/dist/ir/converters/statements/declarations/classes/methods.js.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.js +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -1
- package/dist/ir/converters/statements/declarations/variables.d.ts +2 -2
- package/dist/ir/converters/statements/declarations/variables.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/variables.js +289 -2
- package/dist/ir/converters/statements/declarations/variables.js.map +1 -1
- package/dist/ir/expression-converter.d.ts +0 -1
- package/dist/ir/expression-converter.d.ts.map +1 -1
- package/dist/ir/expression-converter.js +0 -2
- package/dist/ir/expression-converter.js.map +1 -1
- package/dist/ir/generic-function-value-lowering.test.d.ts +2 -0
- package/dist/ir/generic-function-value-lowering.test.d.ts.map +1 -0
- package/dist/ir/generic-function-value-lowering.test.js +312 -0
- package/dist/ir/generic-function-value-lowering.test.js.map +1 -0
- package/dist/ir/generic-validator.d.ts +3 -4
- package/dist/ir/generic-validator.d.ts.map +1 -1
- package/dist/ir/generic-validator.js +3 -35
- package/dist/ir/generic-validator.js.map +1 -1
- package/dist/ir/program-context.d.ts +7 -0
- package/dist/ir/program-context.d.ts.map +1 -1
- package/dist/ir/program-context.js +1 -0
- package/dist/ir/program-context.js.map +1 -1
- package/dist/ir/statement-converter.d.ts +0 -2
- package/dist/ir/statement-converter.d.ts.map +1 -1
- package/dist/ir/statement-converter.js +0 -3
- package/dist/ir/statement-converter.js.map +1 -1
- package/dist/ir/type-system/internal/handle-types.d.ts +16 -16
- package/dist/ir/type-system/internal/handle-types.d.ts.map +1 -1
- package/dist/ir/type-system/internal/nominal-env.d.ts +0 -2
- package/dist/ir/type-system/internal/nominal-env.d.ts.map +1 -1
- package/dist/ir/type-system/internal/nominal-env.js +2 -6
- package/dist/ir/type-system/internal/nominal-env.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/converter.d.ts +3 -1
- package/dist/ir/type-system/internal/type-converter/converter.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/converter.js +3 -1
- package/dist/ir/type-system/internal/type-converter/converter.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/objects.js +7 -1
- package/dist/ir/type-system/internal/type-converter/objects.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts +0 -2
- package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/orchestrator.js +315 -23
- package/dist/ir/type-system/internal/type-converter/orchestrator.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/orchestrator.test.d.ts +2 -0
- package/dist/ir/type-system/internal/type-converter/orchestrator.test.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/orchestrator.test.js +265 -0
- package/dist/ir/type-system/internal/type-converter/orchestrator.test.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/primitives.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/primitives.js +5 -0
- package/dist/ir/type-system/internal/type-converter/primitives.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/references.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/references.js +67 -29
- package/dist/ir/type-system/internal/type-converter/references.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/utility-types.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/utility-types.js +145 -0
- package/dist/ir/type-system/internal/type-converter/utility-types.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/utility-types.test.js +91 -1
- package/dist/ir/type-system/internal/type-converter/utility-types.test.js.map +1 -1
- package/dist/ir/type-system/internal/type-registry.d.ts +1 -1
- package/dist/ir/type-system/internal/type-registry.js +7 -7
- package/dist/ir/type-system/internal/type-registry.js.map +1 -1
- package/dist/ir/type-system/internal/universe/alias-table.d.ts +0 -14
- package/dist/ir/type-system/internal/universe/alias-table.d.ts.map +1 -1
- package/dist/ir/type-system/internal/universe/alias-table.js +0 -17
- package/dist/ir/type-system/internal/universe/alias-table.js.map +1 -1
- package/dist/ir/type-system/internal/universe/clr-catalog.d.ts +3 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.d.ts.map +1 -1
- package/dist/ir/type-system/internal/universe/clr-catalog.js +4 -1044
- package/dist/ir/type-system/internal/universe/clr-catalog.js.map +1 -1
- package/dist/ir/type-system/internal/universe/clr-entry-converter.d.ts +51 -0
- package/dist/ir/type-system/internal/universe/clr-entry-converter.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-entry-converter.js +657 -0
- package/dist/ir/type-system/internal/universe/clr-entry-converter.js.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.d.ts +52 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.js +415 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.js.map +1 -0
- package/dist/ir/type-system/internal/universe/index.d.ts +1 -1
- package/dist/ir/type-system/internal/universe/index.d.ts.map +1 -1
- package/dist/ir/type-system/internal/universe/index.js +1 -3
- package/dist/ir/type-system/internal/universe/index.js.map +1 -1
- package/dist/ir/type-system/internal/universe/unified-universe.test.js +2 -0
- package/dist/ir/type-system/internal/universe/unified-universe.test.js.map +1 -1
- package/dist/ir/type-system/type-system-call-resolution.d.ts +69 -0
- package/dist/ir/type-system/type-system-call-resolution.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-call-resolution.js +1121 -0
- package/dist/ir/type-system/type-system-call-resolution.js.map +1 -0
- package/dist/ir/type-system/type-system-inference.d.ts +98 -0
- package/dist/ir/type-system/type-system-inference.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-inference.js +1083 -0
- package/dist/ir/type-system/type-system-inference.js.map +1 -0
- package/dist/ir/type-system/type-system-relations.d.ts +15 -0
- package/dist/ir/type-system/type-system-relations.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-relations.js +152 -0
- package/dist/ir/type-system/type-system-relations.js.map +1 -0
- package/dist/ir/type-system/type-system-state.d.ts +436 -0
- package/dist/ir/type-system/type-system-state.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-state.js +212 -0
- package/dist/ir/type-system/type-system-state.js.map +1 -0
- package/dist/ir/type-system/type-system-utilities.d.ts +56 -0
- package/dist/ir/type-system/type-system-utilities.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-utilities.js +373 -0
- package/dist/ir/type-system/type-system-utilities.js.map +1 -0
- package/dist/ir/type-system/type-system.d.ts +17 -358
- package/dist/ir/type-system/type-system.d.ts.map +1 -1
- package/dist/ir/type-system/type-system.js +67 -2945
- package/dist/ir/type-system/type-system.js.map +1 -1
- package/dist/ir/types/index.d.ts +1 -0
- 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-substitution.js +1 -1
- package/dist/ir/types/ir-substitution.js.map +1 -1
- package/dist/ir/types/statements.d.ts +1 -1
- package/dist/ir/types/type-ops.d.ts +9 -0
- package/dist/ir/types/type-ops.d.ts.map +1 -0
- package/dist/ir/types/type-ops.js +134 -0
- package/dist/ir/types/type-ops.js.map +1 -0
- package/dist/ir/types/type-ops.test.d.ts +2 -0
- package/dist/ir/types/type-ops.test.d.ts.map +1 -0
- package/dist/ir/types/type-ops.test.js +73 -0
- package/dist/ir/types/type-ops.test.js.map +1 -0
- package/dist/ir/validation/attribute-collection/arg-extractor.d.ts +58 -0
- package/dist/ir/validation/attribute-collection/arg-extractor.d.ts.map +1 -0
- package/dist/ir/validation/attribute-collection/arg-extractor.js +284 -0
- package/dist/ir/validation/attribute-collection/arg-extractor.js.map +1 -0
- package/dist/ir/validation/attribute-collection/marker-parser.d.ts +28 -0
- package/dist/ir/validation/attribute-collection/marker-parser.d.ts.map +1 -0
- package/dist/ir/validation/attribute-collection/marker-parser.js +404 -0
- package/dist/ir/validation/attribute-collection/marker-parser.js.map +1 -0
- package/dist/ir/validation/attribute-collection/orchestrator.d.ts +28 -0
- package/dist/ir/validation/attribute-collection/orchestrator.d.ts.map +1 -0
- package/dist/ir/validation/attribute-collection/orchestrator.js +332 -0
- package/dist/ir/validation/attribute-collection/orchestrator.js.map +1 -0
- package/dist/ir/validation/attribute-collection-pass.d.ts +1 -23
- package/dist/ir/validation/attribute-collection-pass.d.ts.map +1 -1
- package/dist/ir/validation/attribute-collection-pass.js +1 -961
- package/dist/ir/validation/attribute-collection-pass.js.map +1 -1
- package/dist/ir/validation/attribute-collection-pass.test.js +12 -6
- package/dist/ir/validation/attribute-collection-pass.test.js.map +1 -1
- package/dist/ir/validation/soundness-gate.d.ts.map +1 -1
- package/dist/ir/validation/soundness-gate.js +2 -1
- package/dist/ir/validation/soundness-gate.js.map +1 -1
- package/dist/ir/validation/soundness-gate.test.js +69 -0
- package/dist/ir/validation/soundness-gate.test.js.map +1 -1
- package/dist/ir/validation/yield-lowering-pass.d.ts +11 -5
- package/dist/ir/validation/yield-lowering-pass.d.ts.map +1 -1
- package/dist/ir/validation/yield-lowering-pass.js +942 -48
- package/dist/ir/validation/yield-lowering-pass.js.map +1 -1
- package/dist/ir/validation/yield-lowering-pass.test.js +1333 -127
- package/dist/ir/validation/yield-lowering-pass.test.js.map +1 -1
- package/dist/program/binding-loader.d.ts +37 -0
- package/dist/program/binding-loader.d.ts.map +1 -0
- package/dist/program/binding-loader.js +155 -0
- package/dist/program/binding-loader.js.map +1 -0
- package/dist/program/binding-registry.d.ts +106 -0
- package/dist/program/binding-registry.d.ts.map +1 -0
- package/dist/program/binding-registry.js +590 -0
- package/dist/program/binding-registry.js.map +1 -0
- package/dist/program/binding-types.d.ts +166 -0
- package/dist/program/binding-types.d.ts.map +1 -0
- package/dist/program/binding-types.js +57 -0
- package/dist/program/binding-types.js.map +1 -0
- package/dist/program/bindings.d.ts +6 -271
- package/dist/program/bindings.d.ts.map +1 -1
- package/dist/program/bindings.js +7 -781
- package/dist/program/bindings.js.map +1 -1
- package/dist/resolver/clr-bindings-resolver.d.ts +0 -1
- package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.js +22 -32
- package/dist/resolver/clr-bindings-resolver.js.map +1 -1
- package/dist/resolver/clr-bindings-resolver.test.js +0 -27
- package/dist/resolver/clr-bindings-resolver.test.js.map +1 -1
- package/dist/resolver/import-resolution.d.ts +1 -1
- package/dist/resolver/import-resolution.d.ts.map +1 -1
- package/dist/resolver/import-resolution.js +2 -7
- package/dist/resolver/import-resolution.js.map +1 -1
- package/dist/resolver/naming.d.ts.map +1 -1
- package/dist/resolver/naming.js +1 -0
- package/dist/resolver/naming.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/features.d.ts.map +1 -1
- package/dist/validation/features.js +38 -13
- package/dist/validation/features.js.map +1 -1
- package/dist/validation/features.test.d.ts +2 -0
- package/dist/validation/features.test.d.ts.map +1 -0
- package/dist/validation/features.test.js +273 -0
- package/dist/validation/features.test.js.map +1 -0
- package/dist/validation/generics.d.ts +1 -1
- package/dist/validation/generics.d.ts.map +1 -1
- package/dist/validation/generics.js +2 -26
- package/dist/validation/generics.js.map +1 -1
- package/dist/validation/imports.d.ts.map +1 -1
- package/dist/validation/imports.js +2 -1
- package/dist/validation/imports.js.map +1 -1
- package/dist/validation/imports.test.d.ts +2 -0
- package/dist/validation/imports.test.d.ts.map +1 -0
- package/dist/validation/imports.test.js +112 -0
- package/dist/validation/imports.test.js.map +1 -0
- package/dist/validation/static-safety.d.ts +6 -6
- package/dist/validation/static-safety.d.ts.map +1 -1
- package/dist/validation/static-safety.js +163 -109
- package/dist/validation/static-safety.js.map +1 -1
- package/dist/validation/unsupported-utility-types.d.ts +3 -3
- package/dist/validation/unsupported-utility-types.d.ts.map +1 -1
- package/dist/validation/unsupported-utility-types.js +4 -7
- package/dist/validation/unsupported-utility-types.js.map +1 -1
- package/dist/validator.maximus.test.d.ts +2 -0
- package/dist/validator.maximus.test.d.ts.map +1 -0
- package/dist/validator.maximus.test.js +1214 -0
- package/dist/validator.maximus.test.js.map +1 -0
- package/dist/validator.test.js +152 -18
- package/dist/validator.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/ir/converters/statements/declarations/registry.d.ts +0 -96
- package/dist/ir/converters/statements/declarations/registry.d.ts.map +0 -1
- package/dist/ir/converters/statements/declarations/registry.js +0 -130
- package/dist/ir/converters/statements/declarations/registry.js.map +0 -1
- package/dist/ir/this-parameter-inference.test.d.ts +0 -13
- package/dist/ir/this-parameter-inference.test.d.ts.map +0 -1
- package/dist/ir/this-parameter-inference.test.js +0 -165
- package/dist/ir/this-parameter-inference.test.js.map +0 -1
- package/dist/metadata/bindings-loader.d.ts +0 -41
- package/dist/metadata/bindings-loader.d.ts.map +0 -1
- package/dist/metadata/bindings-loader.js +0 -308
- package/dist/metadata/bindings-loader.js.map +0 -1
- package/dist/metadata/bindings-loader.test.d.ts +0 -5
- package/dist/metadata/bindings-loader.test.d.ts.map +0 -1
- package/dist/metadata/bindings-loader.test.js +0 -117
- package/dist/metadata/bindings-loader.test.js.map +0 -1
- package/dist/metadata/index.d.ts +0 -8
- package/dist/metadata/index.d.ts.map +0 -1
- package/dist/metadata/index.js +0 -7
- package/dist/metadata/index.js.map +0 -1
- package/dist/metadata/library-loader.d.ts +0 -42
- package/dist/metadata/library-loader.d.ts.map +0 -1
- package/dist/metadata/library-loader.js +0 -126
- package/dist/metadata/library-loader.js.map +0 -1
- package/dist/metadata/loader.d.ts +0 -26
- package/dist/metadata/loader.d.ts.map +0 -1
- package/dist/metadata/loader.js +0 -333
- package/dist/metadata/loader.js.map +0 -1
- package/dist/metadata/loader.test.d.ts +0 -5
- package/dist/metadata/loader.test.d.ts.map +0 -1
- package/dist/metadata/loader.test.js +0 -119
- package/dist/metadata/loader.test.js.map +0 -1
- package/dist/resolver/naming-policy.d.ts +0 -20
- package/dist/resolver/naming-policy.d.ts.map +0 -1
- package/dist/resolver/naming-policy.js +0 -40
- package/dist/resolver/naming-policy.js.map +0 -1
- package/dist/types/bindings.d.ts +0 -153
- package/dist/types/bindings.d.ts.map +0 -1
- package/dist/types/bindings.js +0 -14
- package/dist/types/bindings.js.map +0 -1
- package/dist/types/metadata.d.ts +0 -196
- package/dist/types/metadata.d.ts.map +0 -1
- package/dist/types/metadata.js +0 -10
- package/dist/types/metadata.js.map +0 -1
- package/dist/types/nested-types.d.ts +0 -111
- package/dist/types/nested-types.d.ts.map +0 -1
- package/dist/types/nested-types.js +0 -176
- package/dist/types/nested-types.js.map +0 -1
- package/dist/types/nested-types.test.d.ts +0 -5
- package/dist/types/nested-types.test.d.ts.map +0 -1
- package/dist/types/nested-types.test.js +0 -135
- package/dist/types/nested-types.test.js.map +0 -1
- package/dist/types/ref-parameters.d.ts +0 -123
- package/dist/types/ref-parameters.d.ts.map +0 -1
- package/dist/types/ref-parameters.js +0 -203
- package/dist/types/ref-parameters.js.map +0 -1
- package/dist/types/ref-parameters.test.d.ts +0 -5
- package/dist/types/ref-parameters.test.d.ts.map +0 -1
- package/dist/types/ref-parameters.test.js +0 -147
- package/dist/types/ref-parameters.test.js.map +0 -1
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeSystem Shared Types, State, and Leaf Helpers
|
|
3
|
+
*
|
|
4
|
+
* This is the leaf module in the type-system DAG. It contains:
|
|
5
|
+
* - All shared type/interface definitions used by split modules
|
|
6
|
+
* - TypeSystemState type (the DI container for all type-system functions)
|
|
7
|
+
* - Pure helper functions that have no cross-module dependencies
|
|
8
|
+
*
|
|
9
|
+
* DAG position: LEAF (no imports from other type-system-* split modules)
|
|
10
|
+
*/
|
|
11
|
+
import type { IrType, IrPrimitiveType, IrMethodSignature } from "../types/index.js";
|
|
12
|
+
import type { Diagnostic, DiagnosticCode } from "../../types/diagnostic.js";
|
|
13
|
+
import type { DeclId, SignatureId, MemberId, TypeSyntaxId, TypeParameterInfo, ParameterMode } from "./types.js";
|
|
14
|
+
import { unknownType, neverType, voidType } from "./types.js";
|
|
15
|
+
import type { AliasTable } from "./internal/universe/alias-table.js";
|
|
16
|
+
import type { TypeId, UnifiedTypeCatalog } from "./internal/universe/types.js";
|
|
17
|
+
export { unknownType, neverType, voidType };
|
|
18
|
+
/**
|
|
19
|
+
* MemberRef — Reference to a member by ID or name.
|
|
20
|
+
*
|
|
21
|
+
* byId: Use when MemberId is available (stable identity).
|
|
22
|
+
* byName: Use for dynamic access (property access expressions).
|
|
23
|
+
*/
|
|
24
|
+
export type MemberRef = {
|
|
25
|
+
readonly kind: "byId";
|
|
26
|
+
readonly id: MemberId;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: "byName";
|
|
29
|
+
readonly name: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* CallQuery — Input to resolveCall().
|
|
33
|
+
*
|
|
34
|
+
* Contains all information needed to resolve a call site.
|
|
35
|
+
*
|
|
36
|
+
* IMPORTANT (Alice's spec): argumentCount is REQUIRED for totality.
|
|
37
|
+
* Even if signature lookup fails, TypeSystem must return correct-arity
|
|
38
|
+
* arrays filled with unknownType. This prevents fallback behavior.
|
|
39
|
+
*/
|
|
40
|
+
export type CallQuery = {
|
|
41
|
+
/** The signature being called (from Binding.resolveCallSignature) */
|
|
42
|
+
readonly sigId: SignatureId;
|
|
43
|
+
/**
|
|
44
|
+
* Number of arguments at the call site.
|
|
45
|
+
*
|
|
46
|
+
* REQUIRED for totality: Used to construct correct-arity poisoned result
|
|
47
|
+
* when signature lookup fails. Without this, TypeSystem cannot guarantee
|
|
48
|
+
* parameterTypes.length === argumentCount.
|
|
49
|
+
*/
|
|
50
|
+
readonly argumentCount: number;
|
|
51
|
+
/** Receiver type for member calls (e.g., `arr` in `arr.map(...)`) */
|
|
52
|
+
readonly receiverType?: IrType;
|
|
53
|
+
/** Explicit type arguments from call syntax (e.g., `fn<string>(...)`) */
|
|
54
|
+
readonly explicitTypeArgs?: readonly IrType[];
|
|
55
|
+
/** Argument types for deterministic unification (undefined = unknown) */
|
|
56
|
+
readonly argTypes?: readonly (IrType | undefined)[];
|
|
57
|
+
/**
|
|
58
|
+
* Contextual expected return type from call site usage.
|
|
59
|
+
*
|
|
60
|
+
* Used for deterministic generic inference when method type parameters only
|
|
61
|
+
* appear in the return position (e.g., `ok<T>(value: T): Ok<T>` in
|
|
62
|
+
* `return ok({...})` where function return type is `Result<Payload, string>`).
|
|
63
|
+
*/
|
|
64
|
+
readonly expectedReturnType?: IrType;
|
|
65
|
+
/** Blame location for diagnostics */
|
|
66
|
+
readonly site?: Site;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* ResolvedCall — Output of resolveCall().
|
|
70
|
+
*
|
|
71
|
+
* Contains fully instantiated types after all substitutions applied.
|
|
72
|
+
*/
|
|
73
|
+
export type ResolvedCall = {
|
|
74
|
+
/** Fully instantiated parameter types (undefined = missing annotation) */
|
|
75
|
+
readonly parameterTypes: readonly (IrType | undefined)[];
|
|
76
|
+
/** Parameter passing modes (value, ref, out, in) */
|
|
77
|
+
readonly parameterModes: readonly ParameterMode[];
|
|
78
|
+
/** Fully instantiated return type */
|
|
79
|
+
readonly returnType: IrType;
|
|
80
|
+
/**
|
|
81
|
+
* Type predicate info for narrowing (x is T).
|
|
82
|
+
* Only present if the function has a type predicate return type.
|
|
83
|
+
*/
|
|
84
|
+
readonly typePredicate?: TypePredicateResult;
|
|
85
|
+
/** Diagnostics emitted during resolution */
|
|
86
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* TypePredicateResult — Resolved type predicate info.
|
|
90
|
+
*
|
|
91
|
+
* Extracted from SignatureInfo.typePredicate and converted to IR types.
|
|
92
|
+
*/
|
|
93
|
+
export type TypePredicateResult = {
|
|
94
|
+
readonly kind: "param";
|
|
95
|
+
readonly parameterIndex: number;
|
|
96
|
+
readonly targetType: IrType;
|
|
97
|
+
} | {
|
|
98
|
+
readonly kind: "this";
|
|
99
|
+
readonly targetType: IrType;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Site — Blame location for diagnostics.
|
|
103
|
+
*
|
|
104
|
+
* Used to report errors at the correct source location.
|
|
105
|
+
*/
|
|
106
|
+
export type Site = {
|
|
107
|
+
/** Source file path */
|
|
108
|
+
readonly file?: string;
|
|
109
|
+
/** 0-based line number */
|
|
110
|
+
readonly line?: number;
|
|
111
|
+
/** 0-based column number */
|
|
112
|
+
readonly column?: number;
|
|
113
|
+
/** Original AST node (for detailed location) */
|
|
114
|
+
readonly node?: unknown;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Type substitution map — maps type parameter names to concrete types.
|
|
118
|
+
*/
|
|
119
|
+
export type TypeSubstitutionMap = ReadonlyMap<string, IrType>;
|
|
120
|
+
/**
|
|
121
|
+
* Raw signature information extracted from Binding.
|
|
122
|
+
*
|
|
123
|
+
* This is the pre-substitution form stored in the signature cache.
|
|
124
|
+
*/
|
|
125
|
+
export type RawSignatureInfo = {
|
|
126
|
+
/** Parameter types (undefined = missing annotation → TSN5201) */
|
|
127
|
+
readonly parameterTypes: readonly (IrType | undefined)[];
|
|
128
|
+
/** TypeScript `this:` parameter type (if present). Excluded from `parameterTypes`. */
|
|
129
|
+
readonly thisParameterType?: IrType;
|
|
130
|
+
/** Return type (voidType if not specified) */
|
|
131
|
+
readonly returnType: IrType;
|
|
132
|
+
/** Parameter modes */
|
|
133
|
+
readonly parameterModes: readonly ParameterMode[];
|
|
134
|
+
/** Type parameters for generic methods */
|
|
135
|
+
readonly typeParameters: readonly TypeParameterInfo[];
|
|
136
|
+
/** Parameter names (for diagnostics) */
|
|
137
|
+
readonly parameterNames: readonly string[];
|
|
138
|
+
/**
|
|
139
|
+
* Type predicate (x is T) - extracted at Binding registration time.
|
|
140
|
+
* Contains target type as IrType.
|
|
141
|
+
*/
|
|
142
|
+
readonly typePredicate?: TypePredicateResult;
|
|
143
|
+
/**
|
|
144
|
+
* Declaring identity — CRITICAL for inheritance substitution.
|
|
145
|
+
*
|
|
146
|
+
* Without this, resolveCall cannot compute receiver substitution.
|
|
147
|
+
* Uses simple TS name, resolved via UnifiedTypeCatalog.resolveTsName().
|
|
148
|
+
*/
|
|
149
|
+
readonly declaringTypeTsName?: string;
|
|
150
|
+
readonly declaringMemberName?: string;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* HandleRegistry — maps opaque handles to their underlying data.
|
|
154
|
+
*
|
|
155
|
+
* Created and managed by the Binding layer. TypeSystem uses this
|
|
156
|
+
* to look up declaration and signature information.
|
|
157
|
+
*/
|
|
158
|
+
export type HandleRegistry = {
|
|
159
|
+
/** Get declaration info for a DeclId */
|
|
160
|
+
getDecl(id: DeclId): DeclInfo | undefined;
|
|
161
|
+
/** Get signature info for a SignatureId */
|
|
162
|
+
getSignature(id: SignatureId): SignatureInfo | undefined;
|
|
163
|
+
/** Get member info for a MemberId */
|
|
164
|
+
getMember(id: MemberId): MemberInfo | undefined;
|
|
165
|
+
/**
|
|
166
|
+
* Get captured type syntax for a TypeSyntaxId.
|
|
167
|
+
*
|
|
168
|
+
* Returns the TypeNode that was captured via Binding.captureTypeSyntax().
|
|
169
|
+
* TypeSystem uses this internally to convert captured syntax to IrType.
|
|
170
|
+
*/
|
|
171
|
+
getTypeSyntax(id: TypeSyntaxId): TypeSyntaxInfo | undefined;
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* Type syntax info stored in the handle registry.
|
|
175
|
+
*/
|
|
176
|
+
export type TypeSyntaxInfo = {
|
|
177
|
+
/** The captured TypeNode (ts.TypeNode, cast to unknown) */
|
|
178
|
+
readonly typeNode: unknown;
|
|
179
|
+
};
|
|
180
|
+
/**
|
|
181
|
+
* Captured class member names for override detection.
|
|
182
|
+
* Pure data — no TS nodes.
|
|
183
|
+
*/
|
|
184
|
+
export type ClassMemberNames = {
|
|
185
|
+
readonly methods: ReadonlySet<string>;
|
|
186
|
+
readonly properties: ReadonlySet<string>;
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* Declaration info in the handle registry.
|
|
190
|
+
*/
|
|
191
|
+
export type DeclInfo = {
|
|
192
|
+
/** Explicit type annotation (ts.TypeNode, cast to unknown) */
|
|
193
|
+
readonly typeNode?: unknown;
|
|
194
|
+
/** Declaration kind */
|
|
195
|
+
readonly kind: DeclKind;
|
|
196
|
+
/** Fully-qualified name */
|
|
197
|
+
readonly fqName?: string;
|
|
198
|
+
/** Declaration AST node (ts.Declaration, cast to unknown) */
|
|
199
|
+
readonly declNode?: unknown;
|
|
200
|
+
/** Captured class member names (for class declarations only) */
|
|
201
|
+
readonly classMemberNames?: ClassMemberNames;
|
|
202
|
+
};
|
|
203
|
+
export type DeclKind = "variable" | "function" | "class" | "interface" | "typeAlias" | "enum" | "parameter" | "property" | "method";
|
|
204
|
+
/**
|
|
205
|
+
* Signature info in the handle registry.
|
|
206
|
+
*
|
|
207
|
+
* IMPORTANT: Must include declaring identity for resolveCall().
|
|
208
|
+
*/
|
|
209
|
+
export type SignatureInfo = {
|
|
210
|
+
/** Parameter nodes */
|
|
211
|
+
readonly parameters: readonly ParameterNode[];
|
|
212
|
+
/** Type node of a TypeScript `this:` parameter (if present). Excluded from `parameters`. */
|
|
213
|
+
readonly thisTypeNode?: unknown;
|
|
214
|
+
/** Return type node (ts.TypeNode, cast to unknown) */
|
|
215
|
+
readonly returnTypeNode?: unknown;
|
|
216
|
+
/** Type parameters */
|
|
217
|
+
readonly typeParameters?: readonly TypeParameterNode[];
|
|
218
|
+
/**
|
|
219
|
+
* Declaring type simple TS name (e.g., "Box" not "Test.Box").
|
|
220
|
+
*
|
|
221
|
+
* CRITICAL: Required for inheritance substitution in resolveCall().
|
|
222
|
+
* Resolved via UnifiedTypeCatalog.resolveTsName() to get CLR FQ name.
|
|
223
|
+
*/
|
|
224
|
+
readonly declaringTypeTsName?: string;
|
|
225
|
+
/**
|
|
226
|
+
* Declaring member name.
|
|
227
|
+
*
|
|
228
|
+
* CRITICAL: Required for inheritance substitution in resolveCall().
|
|
229
|
+
*/
|
|
230
|
+
readonly declaringMemberName?: string;
|
|
231
|
+
/**
|
|
232
|
+
* Type predicate information for `x is T` return types.
|
|
233
|
+
*
|
|
234
|
+
* Extracted at registration time via pure syntax inspection.
|
|
235
|
+
* Contains targetTypeNode which TypeSystem converts to IrType.
|
|
236
|
+
*/
|
|
237
|
+
readonly typePredicate?: SignatureTypePredicateRaw;
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* Raw type predicate info as stored in SignatureInfo.
|
|
241
|
+
* Contains TypeNode, not IrType.
|
|
242
|
+
*/
|
|
243
|
+
export type SignatureTypePredicateRaw = {
|
|
244
|
+
readonly kind: "param";
|
|
245
|
+
readonly parameterName: string;
|
|
246
|
+
readonly parameterIndex: number;
|
|
247
|
+
readonly targetTypeNode: unknown;
|
|
248
|
+
} | {
|
|
249
|
+
readonly kind: "this";
|
|
250
|
+
readonly targetTypeNode: unknown;
|
|
251
|
+
};
|
|
252
|
+
export type ParameterNode = {
|
|
253
|
+
readonly name: string;
|
|
254
|
+
readonly typeNode?: unknown;
|
|
255
|
+
readonly isOptional: boolean;
|
|
256
|
+
readonly isRest: boolean;
|
|
257
|
+
readonly mode?: ParameterMode;
|
|
258
|
+
};
|
|
259
|
+
export type TypeParameterNode = {
|
|
260
|
+
readonly name: string;
|
|
261
|
+
readonly constraintNode?: unknown;
|
|
262
|
+
readonly defaultNode?: unknown;
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* Member info in the handle registry.
|
|
266
|
+
*/
|
|
267
|
+
export type MemberInfo = {
|
|
268
|
+
readonly name: string;
|
|
269
|
+
readonly declNode?: unknown;
|
|
270
|
+
readonly typeNode?: unknown;
|
|
271
|
+
readonly isOptional: boolean;
|
|
272
|
+
readonly isReadonly: boolean;
|
|
273
|
+
};
|
|
274
|
+
/**
|
|
275
|
+
* TypeRegistry API — minimal interface needed by TypeSystem.
|
|
276
|
+
*
|
|
277
|
+
* After Step 3, TypeRegistry stores pure IR.
|
|
278
|
+
*/
|
|
279
|
+
export type TypeRegistryAPI = {
|
|
280
|
+
/** Resolve a type by fully-qualified name */
|
|
281
|
+
resolveNominal(fqName: string): TypeRegistryEntry | undefined;
|
|
282
|
+
/** Resolve a type by simple name (returns first match) */
|
|
283
|
+
resolveBySimpleName(simpleName: string): TypeRegistryEntry | undefined;
|
|
284
|
+
/** Get fully-qualified name from simple name */
|
|
285
|
+
getFQName(simpleName: string): string | undefined;
|
|
286
|
+
/** Get member type from a nominal type (pure IR after Step 3) */
|
|
287
|
+
getMemberType(fqNominal: string, memberName: string): IrType | undefined;
|
|
288
|
+
/** Check if a type is registered */
|
|
289
|
+
hasType(fqName: string): boolean;
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
292
|
+
* Type parameter info in TypeRegistry.
|
|
293
|
+
*
|
|
294
|
+
* Pure IR representation of type parameters.
|
|
295
|
+
*/
|
|
296
|
+
export type TypeParameterEntry = {
|
|
297
|
+
readonly name: string;
|
|
298
|
+
readonly constraint?: IrType;
|
|
299
|
+
readonly defaultType?: IrType;
|
|
300
|
+
};
|
|
301
|
+
/**
|
|
302
|
+
* TypeRegistry entry.
|
|
303
|
+
*
|
|
304
|
+
* After Step 3, members/heritage store IrType, not TypeNodes.
|
|
305
|
+
*/
|
|
306
|
+
export type TypeRegistryEntry = {
|
|
307
|
+
readonly kind: "class" | "interface" | "typeAlias";
|
|
308
|
+
readonly name: string;
|
|
309
|
+
readonly fullyQualifiedName: string;
|
|
310
|
+
readonly typeParameters: readonly TypeParameterEntry[];
|
|
311
|
+
readonly members: ReadonlyMap<string, TypeRegistryMemberInfo>;
|
|
312
|
+
};
|
|
313
|
+
/**
|
|
314
|
+
* Member info in TypeRegistry.
|
|
315
|
+
*
|
|
316
|
+
* Pure IR representation - stores IrType, not TypeNode.
|
|
317
|
+
*/
|
|
318
|
+
export type TypeRegistryMemberInfo = {
|
|
319
|
+
readonly kind: "property" | "method" | "indexSignature";
|
|
320
|
+
readonly name: string;
|
|
321
|
+
readonly type: IrType | undefined;
|
|
322
|
+
readonly isOptional: boolean;
|
|
323
|
+
readonly isReadonly: boolean;
|
|
324
|
+
readonly methodSignatures?: readonly IrMethodSignature[];
|
|
325
|
+
};
|
|
326
|
+
/**
|
|
327
|
+
* NominalEnv API — Phase 6: TypeId-based interface.
|
|
328
|
+
*/
|
|
329
|
+
export type NominalEnvAPI = {
|
|
330
|
+
/** Get inheritance chain for a type (returns TypeIds) */
|
|
331
|
+
getInheritanceChain(typeId: TypeId): readonly TypeId[];
|
|
332
|
+
/** Get substitution for a parent type given child instantiation */
|
|
333
|
+
getInstantiation(receiverTypeId: TypeId, receiverTypeArgs: readonly IrType[], targetTypeId: TypeId): ReadonlyMap<string, IrType> | undefined;
|
|
334
|
+
/** Find the declaring type of a member in the inheritance chain */
|
|
335
|
+
findMemberDeclaringType(receiverTypeId: TypeId, receiverTypeArgs: readonly IrType[], memberName: string): MemberLookupResult | undefined;
|
|
336
|
+
};
|
|
337
|
+
/**
|
|
338
|
+
* Result of looking up a member in the inheritance chain.
|
|
339
|
+
*/
|
|
340
|
+
export type MemberLookupResult = {
|
|
341
|
+
/** TypeId of the type that declares the member */
|
|
342
|
+
readonly declaringTypeId: TypeId;
|
|
343
|
+
/** Substitution to apply to the member's declared type */
|
|
344
|
+
readonly substitution: ReadonlyMap<string, IrType>;
|
|
345
|
+
};
|
|
346
|
+
/**
|
|
347
|
+
* Mapping from primitive type names to their nominal type names.
|
|
348
|
+
*
|
|
349
|
+
* Used by typeOfMember to look up members on primitives.
|
|
350
|
+
* e.g., `"hello".length` → String.length
|
|
351
|
+
*/
|
|
352
|
+
export declare const BUILTIN_NOMINALS: Readonly<Record<string, string>>;
|
|
353
|
+
/**
|
|
354
|
+
* Create a poisoned ResolvedCall with correct arity.
|
|
355
|
+
*
|
|
356
|
+
* CRITICAL (Alice's spec): Empty arrays are ILLEGAL.
|
|
357
|
+
* Poisoned results must have correct arity so callers cannot
|
|
358
|
+
* detect failure via `length === 0`.
|
|
359
|
+
*
|
|
360
|
+
* @param arity Number of parameters/arguments (from CallQuery.argumentCount)
|
|
361
|
+
* @param diagnostics Diagnostics explaining why resolution failed
|
|
362
|
+
*/
|
|
363
|
+
export declare const poisonedCall: (arity: number, diagnostics: readonly Diagnostic[]) => ResolvedCall;
|
|
364
|
+
/**
|
|
365
|
+
* Nominal lookup result cached for member lookups.
|
|
366
|
+
*/
|
|
367
|
+
export type NominalLookupResult = {
|
|
368
|
+
readonly targetNominal: string;
|
|
369
|
+
readonly memberType: IrType;
|
|
370
|
+
readonly substitution: ReadonlyMap<string, IrType>;
|
|
371
|
+
};
|
|
372
|
+
/**
|
|
373
|
+
* TypeSystemState — shared state for all type-system functions.
|
|
374
|
+
*
|
|
375
|
+
* This replaces the closure-based shared state from the monolithic
|
|
376
|
+
* createTypeSystem() function. Maps are reference types; all functions
|
|
377
|
+
* sharing the same TypeSystemState see the same cache. No cloning.
|
|
378
|
+
*/
|
|
379
|
+
export type TypeSystemState = {
|
|
380
|
+
readonly handleRegistry: HandleRegistry;
|
|
381
|
+
readonly typeRegistry: TypeRegistryAPI;
|
|
382
|
+
readonly nominalEnv: NominalEnvAPI;
|
|
383
|
+
readonly convertTypeNodeRaw: (node: unknown) => IrType;
|
|
384
|
+
readonly unifiedCatalog: UnifiedTypeCatalog;
|
|
385
|
+
readonly aliasTable: AliasTable;
|
|
386
|
+
readonly resolveIdentifier: (node: unknown) => DeclId | undefined;
|
|
387
|
+
readonly resolveCallSignature: (node: unknown) => SignatureId | undefined;
|
|
388
|
+
readonly resolveConstructorSignature: (node: unknown) => SignatureId | undefined;
|
|
389
|
+
readonly declTypeCache: Map<number, IrType>;
|
|
390
|
+
readonly memberDeclaredTypeCache: Map<string, IrType>;
|
|
391
|
+
readonly signatureRawCache: Map<number, RawSignatureInfo>;
|
|
392
|
+
readonly nominalMemberLookupCache: Map<string, NominalLookupResult | null>;
|
|
393
|
+
readonly diagnostics: Diagnostic[];
|
|
394
|
+
};
|
|
395
|
+
export declare const emitDiagnostic: (state: TypeSystemState, code: DiagnosticCode, message: string, site?: Site) => void;
|
|
396
|
+
/**
|
|
397
|
+
* Create a cache key for member type lookup.
|
|
398
|
+
*/
|
|
399
|
+
export declare const makeMemberCacheKey: (fqName: string, memberName: string, typeArgs?: readonly IrType[]) => string;
|
|
400
|
+
/**
|
|
401
|
+
* Create a cache key for nominal lookup.
|
|
402
|
+
*/
|
|
403
|
+
export declare const makeNominalLookupKey: (fqName: string, typeArgs: readonly IrType[], memberName: string) => string;
|
|
404
|
+
export declare const isNullishPrimitive: (t: IrType) => t is IrPrimitiveType & {
|
|
405
|
+
name: "null" | "undefined";
|
|
406
|
+
};
|
|
407
|
+
export declare const addUndefinedToType: (type: IrType) => IrType;
|
|
408
|
+
/**
|
|
409
|
+
* Resolve a surface name to a canonical TypeId.
|
|
410
|
+
*
|
|
411
|
+
* Order:
|
|
412
|
+
* 1) AliasTable (primitives/globals/System.* canonicalization)
|
|
413
|
+
* 2) UnifiedTypeCatalog by tsName
|
|
414
|
+
* 3) UnifiedTypeCatalog by clrName
|
|
415
|
+
*
|
|
416
|
+
* IMPORTANT (airplane-grade):
|
|
417
|
+
* Resolution must be arity-aware when type arguments are present. Facade
|
|
418
|
+
* types often omit the `_N` generic arity suffix (e.g. `IList<T>` is a
|
|
419
|
+
* facade over `IList_1<T>`). When `arity` is provided and the direct
|
|
420
|
+
* resolution doesn't match, we deterministically try `<name>_<arity>`.
|
|
421
|
+
*/
|
|
422
|
+
export declare const resolveTypeIdByName: (state: TypeSystemState, name: string, arity?: number) => TypeId | undefined;
|
|
423
|
+
/**
|
|
424
|
+
* Normalize a receiver type to nominal form for member lookup.
|
|
425
|
+
*
|
|
426
|
+
* Phase 6: Returns TypeId + typeArgs for TypeId-based NominalEnv.
|
|
427
|
+
*
|
|
428
|
+
* ALICE'S RULE R3: Primitive-to-nominal bridging is part of TypeSystem.
|
|
429
|
+
*/
|
|
430
|
+
export declare const normalizeToNominal: (state: TypeSystemState, type: IrType) => {
|
|
431
|
+
typeId: TypeId;
|
|
432
|
+
typeArgs: readonly IrType[];
|
|
433
|
+
} | undefined;
|
|
434
|
+
export declare const stripTsonicExtensionWrappers: (type: IrType) => IrType;
|
|
435
|
+
export declare const stripNullishForInference: (type: IrType) => IrType | undefined;
|
|
436
|
+
//# sourceMappingURL=type-system-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-system-state.d.ts","sourceRoot":"","sources":["../../../src/ir/type-system/type-system-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeSystem Shared Types, State, and Leaf Helpers
|
|
3
|
+
*
|
|
4
|
+
* This is the leaf module in the type-system DAG. It contains:
|
|
5
|
+
* - All shared type/interface definitions used by split modules
|
|
6
|
+
* - TypeSystemState type (the DI container for all type-system functions)
|
|
7
|
+
* - Pure helper functions that have no cross-module dependencies
|
|
8
|
+
*
|
|
9
|
+
* DAG position: LEAF (no imports from other type-system-* split modules)
|
|
10
|
+
*/
|
|
11
|
+
import { unknownType, neverType, voidType } from "./types.js";
|
|
12
|
+
import { stableIrTypeKey } from "../types/type-ops.js";
|
|
13
|
+
// Re-export constants for convenience
|
|
14
|
+
export { unknownType, neverType, voidType };
|
|
15
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
16
|
+
// BUILTIN NOMINAL MAPPING
|
|
17
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
18
|
+
/**
|
|
19
|
+
* Mapping from primitive type names to their nominal type names.
|
|
20
|
+
*
|
|
21
|
+
* Used by typeOfMember to look up members on primitives.
|
|
22
|
+
* e.g., `"hello".length` → String.length
|
|
23
|
+
*/
|
|
24
|
+
export const BUILTIN_NOMINALS = {
|
|
25
|
+
string: "String",
|
|
26
|
+
number: "Number",
|
|
27
|
+
boolean: "Boolean",
|
|
28
|
+
bigint: "BigInt",
|
|
29
|
+
symbol: "Symbol",
|
|
30
|
+
};
|
|
31
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
32
|
+
// POISON VALUES
|
|
33
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
34
|
+
/**
|
|
35
|
+
* Create a poisoned ResolvedCall with correct arity.
|
|
36
|
+
*
|
|
37
|
+
* CRITICAL (Alice's spec): Empty arrays are ILLEGAL.
|
|
38
|
+
* Poisoned results must have correct arity so callers cannot
|
|
39
|
+
* detect failure via `length === 0`.
|
|
40
|
+
*
|
|
41
|
+
* @param arity Number of parameters/arguments (from CallQuery.argumentCount)
|
|
42
|
+
* @param diagnostics Diagnostics explaining why resolution failed
|
|
43
|
+
*/
|
|
44
|
+
export const poisonedCall = (arity, diagnostics) => ({
|
|
45
|
+
parameterTypes: Array(arity).fill(unknownType),
|
|
46
|
+
parameterModes: Array(arity).fill("value"),
|
|
47
|
+
returnType: unknownType,
|
|
48
|
+
diagnostics,
|
|
49
|
+
});
|
|
50
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
51
|
+
// DIAGNOSTIC HELPERS
|
|
52
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
53
|
+
export const emitDiagnostic = (state, code, message, site) => {
|
|
54
|
+
const location = site?.file !== undefined &&
|
|
55
|
+
site?.line !== undefined &&
|
|
56
|
+
site?.column !== undefined
|
|
57
|
+
? {
|
|
58
|
+
file: site.file,
|
|
59
|
+
line: site.line,
|
|
60
|
+
column: site.column,
|
|
61
|
+
length: 1, // Default length
|
|
62
|
+
}
|
|
63
|
+
: undefined;
|
|
64
|
+
state.diagnostics.push({
|
|
65
|
+
code,
|
|
66
|
+
severity: "error",
|
|
67
|
+
message,
|
|
68
|
+
location,
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
72
|
+
// CACHE KEY HELPERS
|
|
73
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
74
|
+
/**
|
|
75
|
+
* Create a cache key for member type lookup.
|
|
76
|
+
*/
|
|
77
|
+
export const makeMemberCacheKey = (fqName, memberName, typeArgs) => {
|
|
78
|
+
if (typeArgs && typeArgs.length > 0) {
|
|
79
|
+
return `${fqName}:${memberName}:${typeArgs.map(stableIrTypeKey).join(",")}`;
|
|
80
|
+
}
|
|
81
|
+
return `${fqName}:${memberName}`;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Create a cache key for nominal lookup.
|
|
85
|
+
*/
|
|
86
|
+
export const makeNominalLookupKey = (fqName, typeArgs, memberName) => {
|
|
87
|
+
return `${fqName}:${typeArgs.map(stableIrTypeKey).join(",")}:${memberName}`;
|
|
88
|
+
};
|
|
89
|
+
// Helper to check if type is null/undefined primitive
|
|
90
|
+
export const isNullishPrimitive = (t) => {
|
|
91
|
+
return (t.kind === "primitiveType" && (t.name === "null" || t.name === "undefined"));
|
|
92
|
+
};
|
|
93
|
+
export const addUndefinedToType = (type) => {
|
|
94
|
+
const undefinedType = { kind: "primitiveType", name: "undefined" };
|
|
95
|
+
if (type.kind === "unionType") {
|
|
96
|
+
const hasUndefined = type.types.some((x) => x.kind === "primitiveType" && x.name === "undefined");
|
|
97
|
+
return hasUndefined
|
|
98
|
+
? type
|
|
99
|
+
: { ...type, types: [...type.types, undefinedType] };
|
|
100
|
+
}
|
|
101
|
+
return { kind: "unionType", types: [type, undefinedType] };
|
|
102
|
+
};
|
|
103
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
104
|
+
// TYPE ID RESOLUTION
|
|
105
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
106
|
+
/**
|
|
107
|
+
* Resolve a surface name to a canonical TypeId.
|
|
108
|
+
*
|
|
109
|
+
* Order:
|
|
110
|
+
* 1) AliasTable (primitives/globals/System.* canonicalization)
|
|
111
|
+
* 2) UnifiedTypeCatalog by tsName
|
|
112
|
+
* 3) UnifiedTypeCatalog by clrName
|
|
113
|
+
*
|
|
114
|
+
* IMPORTANT (airplane-grade):
|
|
115
|
+
* Resolution must be arity-aware when type arguments are present. Facade
|
|
116
|
+
* types often omit the `_N` generic arity suffix (e.g. `IList<T>` is a
|
|
117
|
+
* facade over `IList_1<T>`). When `arity` is provided and the direct
|
|
118
|
+
* resolution doesn't match, we deterministically try `<name>_<arity>`.
|
|
119
|
+
*/
|
|
120
|
+
export const resolveTypeIdByName = (state, name, arity) => {
|
|
121
|
+
const direct = state.aliasTable.get(name) ??
|
|
122
|
+
state.unifiedCatalog.resolveTsName(name) ??
|
|
123
|
+
state.unifiedCatalog.resolveClrName(name);
|
|
124
|
+
if (arity === undefined)
|
|
125
|
+
return direct;
|
|
126
|
+
if (direct) {
|
|
127
|
+
const directArity = state.unifiedCatalog.getTypeParameters(direct).length;
|
|
128
|
+
if (directArity === arity)
|
|
129
|
+
return direct;
|
|
130
|
+
}
|
|
131
|
+
// Facade name without arity suffix → try tsbindgen's structural encoding.
|
|
132
|
+
if (arity > 0) {
|
|
133
|
+
const suffixed = `${name}_${arity}`;
|
|
134
|
+
const candidate = state.aliasTable.get(suffixed) ??
|
|
135
|
+
state.unifiedCatalog.resolveTsName(suffixed) ??
|
|
136
|
+
state.unifiedCatalog.resolveClrName(suffixed);
|
|
137
|
+
if (candidate) {
|
|
138
|
+
const candidateArity = state.unifiedCatalog.getTypeParameters(candidate).length;
|
|
139
|
+
if (candidateArity === arity)
|
|
140
|
+
return candidate;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
};
|
|
145
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
146
|
+
// NORMALIZATION HELPERS
|
|
147
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
148
|
+
/**
|
|
149
|
+
* Normalize a receiver type to nominal form for member lookup.
|
|
150
|
+
*
|
|
151
|
+
* Phase 6: Returns TypeId + typeArgs for TypeId-based NominalEnv.
|
|
152
|
+
*
|
|
153
|
+
* ALICE'S RULE R3: Primitive-to-nominal bridging is part of TypeSystem.
|
|
154
|
+
*/
|
|
155
|
+
export const normalizeToNominal = (state, type) => {
|
|
156
|
+
if (type.kind === "referenceType") {
|
|
157
|
+
const arity = type.typeArguments?.length;
|
|
158
|
+
const typeId = type.typeId ??
|
|
159
|
+
(type.resolvedClrType
|
|
160
|
+
? resolveTypeIdByName(state, type.resolvedClrType, arity)
|
|
161
|
+
: undefined) ??
|
|
162
|
+
resolveTypeIdByName(state, type.name, arity);
|
|
163
|
+
if (!typeId)
|
|
164
|
+
return undefined;
|
|
165
|
+
return { typeId, typeArgs: type.typeArguments ?? [] };
|
|
166
|
+
}
|
|
167
|
+
if (type.kind === "primitiveType") {
|
|
168
|
+
const typeId = resolveTypeIdByName(state, type.name, 0);
|
|
169
|
+
if (!typeId)
|
|
170
|
+
return undefined;
|
|
171
|
+
return { typeId, typeArgs: [] };
|
|
172
|
+
}
|
|
173
|
+
if (type.kind === "arrayType") {
|
|
174
|
+
const arrayTypeId = resolveTypeIdByName(state, "Array", 1);
|
|
175
|
+
if (!arrayTypeId)
|
|
176
|
+
return undefined;
|
|
177
|
+
return { typeId: arrayTypeId, typeArgs: [type.elementType] };
|
|
178
|
+
}
|
|
179
|
+
return undefined;
|
|
180
|
+
};
|
|
181
|
+
// tsbindgen-generated "sticky extension scope" helpers are TS-only wrappers that
|
|
182
|
+
// must erase for deterministic IR typing and call inference.
|
|
183
|
+
//
|
|
184
|
+
// Example (generated bindings for Tsonic source):
|
|
185
|
+
// import type { ExtensionMethods as __TsonicExt_Ef } from "@tsonic/efcore/Microsoft.EntityFrameworkCore.js";
|
|
186
|
+
// readonly Tenants: __TsonicExt_Ef<...>;
|
|
187
|
+
//
|
|
188
|
+
// These wrapper types have no CLR identity. For the compiler, the only meaningful
|
|
189
|
+
// runtime/CLR shape is the inner type argument.
|
|
190
|
+
export const stripTsonicExtensionWrappers = (type) => {
|
|
191
|
+
if (type.kind === "referenceType") {
|
|
192
|
+
if (type.name.startsWith("__TsonicExt_") &&
|
|
193
|
+
(type.typeArguments?.length ?? 0) === 1) {
|
|
194
|
+
const inner = type.typeArguments?.[0];
|
|
195
|
+
return inner ? stripTsonicExtensionWrappers(inner) : type;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return type;
|
|
199
|
+
};
|
|
200
|
+
export const stripNullishForInference = (type) => {
|
|
201
|
+
if (isNullishPrimitive(type))
|
|
202
|
+
return undefined;
|
|
203
|
+
if (type.kind !== "unionType")
|
|
204
|
+
return type;
|
|
205
|
+
const filtered = type.types.filter((t) => !isNullishPrimitive(t));
|
|
206
|
+
if (filtered.length === 0)
|
|
207
|
+
return undefined;
|
|
208
|
+
if (filtered.length === 1 && filtered[0])
|
|
209
|
+
return filtered[0];
|
|
210
|
+
return { kind: "unionType", types: filtered };
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=type-system-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-system-state.js","sourceRoot":"","sources":["../../../src/ir/type-system/type-system-state.ts"],"names":[],"mappings":"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"}
|