@tsonic/frontend 0.0.14 → 0.0.15
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/graph/builder.js +2 -2
- package/dist/graph/builder.js.map +1 -1
- package/dist/graph/extraction/imports.js +1 -1
- package/dist/graph/extraction/imports.js.map +1 -1
- package/dist/graph/extraction/orchestrator.d.ts.map +1 -1
- package/dist/graph/extraction/orchestrator.js +1 -1
- package/dist/graph/extraction/orchestrator.js.map +1 -1
- package/dist/ir/binding/index.d.ts +134 -0
- package/dist/ir/binding/index.d.ts.map +1 -0
- package/dist/ir/binding/index.js +725 -0
- package/dist/ir/binding/index.js.map +1 -0
- package/dist/ir/binding-resolution.test.js +193 -52
- package/dist/ir/binding-resolution.test.js.map +1 -1
- package/dist/ir/builder/exports.d.ts +20 -2
- package/dist/ir/builder/exports.d.ts.map +1 -1
- package/dist/ir/builder/exports.js +65 -6
- package/dist/ir/builder/exports.js.map +1 -1
- package/dist/ir/builder/imports.d.ts +9 -5
- package/dist/ir/builder/imports.d.ts.map +1 -1
- package/dist/ir/builder/imports.js +20 -31
- package/dist/ir/builder/imports.js.map +1 -1
- package/dist/ir/builder/orchestrator.d.ts +10 -1
- package/dist/ir/builder/orchestrator.d.ts.map +1 -1
- package/dist/ir/builder/orchestrator.js +25 -14
- package/dist/ir/builder/orchestrator.js.map +1 -1
- package/dist/ir/builder/statements.d.ts +7 -1
- package/dist/ir/builder/statements.d.ts.map +1 -1
- package/dist/ir/builder/statements.js +7 -2
- package/dist/ir/builder/statements.js.map +1 -1
- package/dist/ir/builder/types.d.ts +3 -0
- package/dist/ir/builder/types.d.ts.map +1 -1
- package/dist/ir/builder/validation.d.ts +4 -1
- package/dist/ir/builder/validation.d.ts.map +1 -1
- package/dist/ir/builder/validation.js +37 -37
- package/dist/ir/builder/validation.js.map +1 -1
- package/dist/ir/builder.test.js +54 -111
- package/dist/ir/builder.test.js.map +1 -1
- package/dist/ir/clr-type-mappings.d.ts +42 -0
- package/dist/ir/clr-type-mappings.d.ts.map +1 -0
- package/dist/ir/clr-type-mappings.js +139 -0
- package/dist/ir/clr-type-mappings.js.map +1 -0
- package/dist/ir/converters/anonymous-synthesis.d.ts +30 -8
- package/dist/ir/converters/anonymous-synthesis.d.ts.map +1 -1
- package/dist/ir/converters/anonymous-synthesis.js +46 -55
- package/dist/ir/converters/anonymous-synthesis.js.map +1 -1
- package/dist/ir/converters/context.d.ts +40 -0
- package/dist/ir/converters/context.d.ts.map +1 -0
- package/dist/ir/converters/context.js +24 -0
- package/dist/ir/converters/context.js.map +1 -0
- package/dist/ir/converters/expressions/access.d.ts +6 -1
- package/dist/ir/converters/expressions/access.d.ts.map +1 -1
- package/dist/ir/converters/expressions/access.js +239 -15
- package/dist/ir/converters/expressions/access.js.map +1 -1
- package/dist/ir/converters/expressions/calls.d.ts +24 -3
- package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
- package/dist/ir/converters/expressions/calls.js +431 -391
- package/dist/ir/converters/expressions/calls.js.map +1 -1
- package/dist/ir/converters/expressions/collections.d.ts +16 -3
- package/dist/ir/converters/expressions/collections.d.ts.map +1 -1
- package/dist/ir/converters/expressions/collections.js +300 -46
- package/dist/ir/converters/expressions/collections.js.map +1 -1
- package/dist/ir/converters/expressions/functions.d.ts +10 -3
- package/dist/ir/converters/expressions/functions.d.ts.map +1 -1
- package/dist/ir/converters/expressions/functions.js +140 -32
- package/dist/ir/converters/expressions/functions.js.map +1 -1
- package/dist/ir/converters/expressions/helpers.d.ts +22 -23
- package/dist/ir/converters/expressions/helpers.d.ts.map +1 -1
- package/dist/ir/converters/expressions/helpers.js +242 -239
- package/dist/ir/converters/expressions/helpers.js.map +1 -1
- package/dist/ir/converters/expressions/index.d.ts +1 -1
- package/dist/ir/converters/expressions/index.d.ts.map +1 -1
- package/dist/ir/converters/expressions/index.js +1 -1
- package/dist/ir/converters/expressions/index.js.map +1 -1
- package/dist/ir/converters/expressions/literals.d.ts +12 -12
- package/dist/ir/converters/expressions/literals.d.ts.map +1 -1
- package/dist/ir/converters/expressions/literals.js +62 -17
- package/dist/ir/converters/expressions/literals.js.map +1 -1
- package/dist/ir/converters/expressions/numeric-recovery.test.d.ts +5 -2
- package/dist/ir/converters/expressions/numeric-recovery.test.d.ts.map +1 -1
- package/dist/ir/converters/expressions/numeric-recovery.test.js +62 -49
- package/dist/ir/converters/expressions/numeric-recovery.test.js.map +1 -1
- package/dist/ir/converters/expressions/operators.d.ts +13 -4
- package/dist/ir/converters/expressions/operators.d.ts.map +1 -1
- package/dist/ir/converters/expressions/operators.js +179 -33
- package/dist/ir/converters/expressions/operators.js.map +1 -1
- package/dist/ir/converters/expressions/other.d.ts +11 -3
- package/dist/ir/converters/expressions/other.d.ts.map +1 -1
- package/dist/ir/converters/expressions/other.js +26 -10
- package/dist/ir/converters/expressions/other.js.map +1 -1
- package/dist/ir/converters/statements/control/blocks.d.ts +8 -2
- package/dist/ir/converters/statements/control/blocks.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/blocks.js +7 -2
- package/dist/ir/converters/statements/control/blocks.js.map +1 -1
- package/dist/ir/converters/statements/control/conditionals.d.ts +14 -4
- package/dist/ir/converters/statements/control/conditionals.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/conditionals.js +19 -10
- package/dist/ir/converters/statements/control/conditionals.js.map +1 -1
- package/dist/ir/converters/statements/control/exceptions.d.ts +10 -3
- package/dist/ir/converters/statements/control/exceptions.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/exceptions.js +13 -7
- package/dist/ir/converters/statements/control/exceptions.js.map +1 -1
- package/dist/ir/converters/statements/control/loops.d.ts +16 -5
- package/dist/ir/converters/statements/control/loops.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/loops.js +25 -15
- package/dist/ir/converters/statements/control/loops.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/constructors.d.ts +3 -2
- package/dist/ir/converters/statements/declarations/classes/constructors.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/constructors.js +11 -7
- package/dist/ir/converters/statements/declarations/classes/constructors.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/methods.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/classes/methods.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/methods.js +63 -11
- package/dist/ir/converters/statements/declarations/classes/methods.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/orchestrator.js +60 -40
- package/dist/ir/converters/statements/declarations/classes/orchestrator.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts +6 -2
- package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/override-detection.js +49 -50
- package/dist/ir/converters/statements/declarations/classes/override-detection.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/properties.d.ts +9 -1
- package/dist/ir/converters/statements/declarations/classes/properties.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/properties.js +119 -16
- package/dist/ir/converters/statements/declarations/classes/properties.js.map +1 -1
- package/dist/ir/converters/statements/declarations/enums.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/enums.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/enums.js +8 -2
- package/dist/ir/converters/statements/declarations/enums.js.map +1 -1
- package/dist/ir/converters/statements/declarations/functions.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/functions.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/functions.js +11 -6
- package/dist/ir/converters/statements/declarations/functions.js.map +1 -1
- package/dist/ir/converters/statements/declarations/index.d.ts +3 -1
- package/dist/ir/converters/statements/declarations/index.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/index.js +3 -1
- package/dist/ir/converters/statements/declarations/index.js.map +1 -1
- package/dist/ir/converters/statements/declarations/interfaces.d.ts +3 -2
- package/dist/ir/converters/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/interfaces.js +26 -20
- package/dist/ir/converters/statements/declarations/interfaces.js.map +1 -1
- package/dist/ir/converters/statements/declarations/registry.d.ts +72 -0
- package/dist/ir/converters/statements/declarations/registry.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/registry.js +92 -0
- package/dist/ir/converters/statements/declarations/registry.js.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.js +6 -4
- package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -1
- package/dist/ir/converters/statements/declarations/variables.d.ts +11 -1
- package/dist/ir/converters/statements/declarations/variables.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/variables.js +123 -19
- package/dist/ir/converters/statements/declarations/variables.js.map +1 -1
- package/dist/ir/converters/statements/declarations.d.ts +4 -1
- package/dist/ir/converters/statements/declarations.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations.js +4 -1
- package/dist/ir/converters/statements/declarations.js.map +1 -1
- package/dist/ir/converters/statements/helpers.d.ts +4 -3
- package/dist/ir/converters/statements/helpers.d.ts.map +1 -1
- package/dist/ir/converters/statements/helpers.js +55 -31
- package/dist/ir/converters/statements/helpers.js.map +1 -1
- package/dist/ir/converters/statements/index.d.ts +1 -1
- package/dist/ir/converters/statements/index.d.ts.map +1 -1
- package/dist/ir/converters/statements/index.js +2 -1
- package/dist/ir/converters/statements/index.js.map +1 -1
- package/dist/ir/expression-converter.d.ts +10 -3
- package/dist/ir/expression-converter.d.ts.map +1 -1
- package/dist/ir/expression-converter.js +132 -57
- package/dist/ir/expression-converter.js.map +1 -1
- package/dist/ir/hierarchical-bindings-e2e.test.js +10 -6
- package/dist/ir/hierarchical-bindings-e2e.test.js.map +1 -1
- package/dist/ir/index.d.ts +5 -0
- package/dist/ir/index.d.ts.map +1 -1
- package/dist/ir/index.js +5 -0
- package/dist/ir/index.js.map +1 -1
- package/dist/ir/no-ts-type-inference.test.d.ts +17 -0
- package/dist/ir/no-ts-type-inference.test.d.ts.map +1 -0
- package/dist/ir/no-ts-type-inference.test.js +171 -0
- package/dist/ir/no-ts-type-inference.test.js.map +1 -0
- package/dist/ir/program-context.d.ts +74 -0
- package/dist/ir/program-context.d.ts.map +1 -0
- package/dist/ir/program-context.js +286 -0
- package/dist/ir/program-context.js.map +1 -0
- package/dist/ir/statement-converter.d.ts +14 -4
- package/dist/ir/statement-converter.d.ts.map +1 -1
- package/dist/ir/statement-converter.js +31 -21
- package/dist/ir/statement-converter.js.map +1 -1
- package/dist/ir/syntax/binding-patterns.d.ts +22 -0
- package/dist/ir/syntax/binding-patterns.d.ts.map +1 -0
- package/dist/ir/syntax/binding-patterns.js +92 -0
- package/dist/ir/syntax/binding-patterns.js.map +1 -0
- package/dist/ir/thisarg-inference.test.d.ts +8 -0
- package/dist/ir/thisarg-inference.test.d.ts.map +1 -0
- package/dist/ir/thisarg-inference.test.js +94 -0
- package/dist/ir/thisarg-inference.test.js.map +1 -0
- package/dist/ir/type-converter.d.ts +5 -2
- package/dist/ir/type-converter.d.ts.map +1 -1
- package/dist/ir/type-converter.js +5 -2
- package/dist/ir/type-converter.js.map +1 -1
- package/dist/ir/type-system/core.d.ts +29 -0
- package/dist/ir/type-system/core.d.ts.map +1 -0
- package/dist/ir/type-system/core.js +456 -0
- package/dist/ir/type-system/core.js.map +1 -0
- package/dist/ir/type-system/index.d.ts +21 -0
- package/dist/ir/type-system/index.d.ts.map +1 -0
- package/dist/ir/type-system/index.js +43 -0
- package/dist/ir/type-system/index.js.map +1 -0
- package/dist/ir/type-system/internal/handle-types.d.ts +98 -0
- package/dist/ir/type-system/internal/handle-types.d.ts.map +1 -0
- package/dist/ir/type-system/internal/handle-types.js +13 -0
- package/dist/ir/type-system/internal/handle-types.js.map +1 -0
- package/dist/ir/type-system/internal/nominal-env.d.ts +66 -0
- package/dist/ir/type-system/internal/nominal-env.d.ts.map +1 -0
- package/dist/ir/type-system/internal/nominal-env.js +301 -0
- package/dist/ir/type-system/internal/nominal-env.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/arrays.d.ts +11 -0
- package/dist/ir/type-system/internal/type-converter/arrays.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/arrays.js +2 -2
- package/dist/ir/type-system/internal/type-converter/arrays.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/converter.d.ts +17 -0
- package/dist/ir/type-system/internal/type-converter/converter.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/converter.js +16 -0
- package/dist/ir/type-system/internal/type-converter/converter.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/functions.d.ts +14 -0
- package/dist/ir/type-system/internal/type-converter/functions.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/functions.js +66 -0
- package/dist/ir/type-system/internal/type-converter/functions.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/index.d.ts +11 -0
- package/dist/ir/type-system/internal/type-converter/index.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/index.js +11 -0
- package/dist/ir/type-system/internal/type-converter/index.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/inference.d.ts +37 -0
- package/dist/ir/type-system/internal/type-converter/inference.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/inference.js +32 -0
- package/dist/ir/type-system/internal/type-converter/inference.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/literals.d.ts +1 -1
- package/dist/ir/type-system/internal/type-converter/literals.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/literals.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/objects.d.ts +20 -0
- package/dist/ir/type-system/internal/type-converter/objects.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/objects.js +56 -6
- package/dist/ir/type-system/internal/type-converter/objects.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/orchestrator.d.ts +3 -2
- package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/orchestrator.js +63 -21
- package/dist/ir/type-system/internal/type-converter/orchestrator.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/patterns.d.ts +12 -0
- package/dist/ir/type-system/internal/type-converter/patterns.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/patterns.js +22 -6
- package/dist/ir/type-system/internal/type-converter/patterns.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/primitives.d.ts +1 -1
- package/dist/ir/type-system/internal/type-converter/primitives.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/primitives.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/references.d.ts +3 -2
- package/dist/ir/type-system/internal/type-converter/references.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/references.js +551 -0
- package/dist/ir/type-system/internal/type-converter/references.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/unions-intersections.d.ts +15 -0
- package/dist/ir/type-system/internal/type-converter/unions-intersections.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/unions-intersections.js +22 -0
- package/dist/ir/type-system/internal/type-converter/unions-intersections.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/utility-types.d.ts +23 -36
- package/dist/ir/type-system/internal/type-converter/utility-types.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/utility-types.js +879 -0
- package/dist/ir/type-system/internal/type-converter/utility-types.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/utility-types.test.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/utility-types.test.js +398 -120
- package/dist/ir/type-system/internal/type-converter/utility-types.test.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter.d.ts +9 -0
- package/dist/ir/type-system/internal/type-converter.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter.js +9 -0
- package/dist/ir/type-system/internal/type-converter.js.map +1 -0
- package/dist/ir/type-system/internal/type-registry.d.ts +107 -0
- package/dist/ir/type-system/internal/type-registry.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-registry.js +534 -0
- package/dist/ir/type-system/internal/type-registry.js.map +1 -0
- package/dist/ir/type-system/internal/universe/alias-table.d.ts +92 -0
- package/dist/ir/type-system/internal/universe/alias-table.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/alias-table.js +222 -0
- package/dist/ir/type-system/internal/universe/alias-table.js.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.d.ts +44 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.js +1176 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.js.map +1 -0
- package/dist/ir/type-system/internal/universe/index.d.ts +26 -0
- package/dist/ir/type-system/internal/universe/index.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/index.js +30 -0
- package/dist/ir/type-system/internal/universe/index.js.map +1 -0
- package/dist/ir/type-system/internal/universe/resolution.d.ts +115 -0
- package/dist/ir/type-system/internal/universe/resolution.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/resolution.js +181 -0
- package/dist/ir/type-system/internal/universe/resolution.js.map +1 -0
- package/dist/ir/type-system/internal/universe/source-catalog.d.ts +62 -0
- package/dist/ir/type-system/internal/universe/source-catalog.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/source-catalog.js +91 -0
- package/dist/ir/type-system/internal/universe/source-catalog.js.map +1 -0
- package/dist/ir/type-system/internal/universe/types.d.ts +436 -0
- package/dist/ir/type-system/internal/universe/types.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/types.js +69 -0
- package/dist/ir/type-system/internal/universe/types.js.map +1 -0
- package/dist/ir/type-system/internal/universe/unified-universe.d.ts +70 -0
- package/dist/ir/type-system/internal/universe/unified-universe.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/unified-universe.js +319 -0
- package/dist/ir/type-system/internal/universe/unified-universe.js.map +1 -0
- package/dist/ir/type-system/type-system.d.ts +617 -0
- package/dist/ir/type-system/type-system.d.ts.map +1 -0
- package/dist/ir/type-system/type-system.js +2420 -0
- package/dist/ir/type-system/type-system.js.map +1 -0
- package/dist/ir/type-system/types.d.ts +176 -0
- package/dist/ir/type-system/types.d.ts.map +1 -0
- package/dist/ir/type-system/types.js +80 -0
- package/dist/ir/type-system/types.js.map +1 -0
- package/dist/ir/type-universe/assembly-catalog.d.ts +44 -0
- package/dist/ir/type-universe/assembly-catalog.d.ts.map +1 -0
- package/dist/ir/type-universe/assembly-catalog.js +532 -0
- package/dist/ir/type-universe/assembly-catalog.js.map +1 -0
- package/dist/ir/type-universe/assembly-catalog.test.d.ts +7 -0
- package/dist/ir/type-universe/assembly-catalog.test.d.ts.map +1 -0
- package/dist/ir/type-universe/assembly-catalog.test.js +105 -0
- package/dist/ir/type-universe/assembly-catalog.test.js.map +1 -0
- package/dist/ir/type-universe/index.d.ts +19 -0
- package/dist/ir/type-universe/index.d.ts.map +1 -0
- package/dist/ir/type-universe/index.js +21 -0
- package/dist/ir/type-universe/index.js.map +1 -0
- package/dist/ir/type-universe/types.d.ts +436 -0
- package/dist/ir/type-universe/types.d.ts.map +1 -0
- package/dist/ir/type-universe/types.js +69 -0
- package/dist/ir/type-universe/types.js.map +1 -0
- package/dist/ir/type-universe/unified-catalog.d.ts +70 -0
- package/dist/ir/type-universe/unified-catalog.d.ts.map +1 -0
- package/dist/ir/type-universe/unified-catalog.js +319 -0
- package/dist/ir/type-universe/unified-catalog.js.map +1 -0
- package/dist/ir/type-universe/unified-catalog.test.d.ts +7 -0
- package/dist/ir/type-universe/unified-catalog.test.d.ts.map +1 -0
- package/dist/ir/type-universe/unified-catalog.test.js +135 -0
- package/dist/ir/type-universe/unified-catalog.test.js.map +1 -0
- package/dist/ir/types/expressions.d.ts +33 -7
- package/dist/ir/types/expressions.d.ts.map +1 -1
- package/dist/ir/types/helpers.d.ts +22 -2
- package/dist/ir/types/helpers.d.ts.map +1 -1
- package/dist/ir/types/index.d.ts +4 -2
- 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.d.ts +144 -0
- package/dist/ir/types/ir-substitution.d.ts.map +1 -0
- package/dist/ir/types/ir-substitution.js +569 -0
- package/dist/ir/types/ir-substitution.js.map +1 -0
- package/dist/ir/types/ir-types.d.ts +9 -3
- package/dist/ir/types/ir-types.d.ts.map +1 -1
- package/dist/ir/types/numeric-helpers.d.ts +2 -1
- package/dist/ir/types/numeric-helpers.d.ts.map +1 -1
- package/dist/ir/types/numeric-helpers.js +9 -3
- package/dist/ir/types/numeric-helpers.js.map +1 -1
- package/dist/ir/types/statements.d.ts +13 -1
- package/dist/ir/types/statements.d.ts.map +1 -1
- package/dist/ir/types.d.ts +1 -1
- package/dist/ir/types.d.ts.map +1 -1
- package/dist/ir/types.js.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-pass.d.ts.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-pass.js +152 -8
- package/dist/ir/validation/anonymous-type-lowering-pass.js.map +1 -1
- package/dist/ir/validation/arrow-return-finalization-pass.d.ts +28 -0
- package/dist/ir/validation/arrow-return-finalization-pass.d.ts.map +1 -0
- package/dist/ir/validation/arrow-return-finalization-pass.js +416 -0
- package/dist/ir/validation/arrow-return-finalization-pass.js.map +1 -0
- package/dist/ir/validation/attribute-collection-pass.d.ts.map +1 -1
- package/dist/ir/validation/attribute-collection-pass.js +40 -6
- package/dist/ir/validation/attribute-collection-pass.js.map +1 -1
- package/dist/ir/validation/attribute-collection-pass.test.js +43 -36
- package/dist/ir/validation/attribute-collection-pass.test.js.map +1 -1
- package/dist/ir/validation/index.d.ts +3 -0
- package/dist/ir/validation/index.d.ts.map +1 -1
- package/dist/ir/validation/index.js +3 -0
- package/dist/ir/validation/index.js.map +1 -1
- package/dist/ir/validation/numeric-coercion-pass.d.ts +22 -16
- package/dist/ir/validation/numeric-coercion-pass.d.ts.map +1 -1
- package/dist/ir/validation/numeric-coercion-pass.js +159 -51
- package/dist/ir/validation/numeric-coercion-pass.js.map +1 -1
- package/dist/ir/validation/numeric-invariants.test.js +72 -108
- package/dist/ir/validation/numeric-invariants.test.js.map +1 -1
- package/dist/ir/validation/numeric-proof-pass.d.ts.map +1 -1
- package/dist/ir/validation/numeric-proof-pass.js +71 -23
- package/dist/ir/validation/numeric-proof-pass.js.map +1 -1
- package/dist/ir/validation/rest-type-synthesis-pass.d.ts +24 -0
- package/dist/ir/validation/rest-type-synthesis-pass.d.ts.map +1 -0
- package/dist/ir/validation/rest-type-synthesis-pass.js +417 -0
- package/dist/ir/validation/rest-type-synthesis-pass.js.map +1 -0
- package/dist/ir/validation/soundness-gate.d.ts +11 -1
- package/dist/ir/validation/soundness-gate.d.ts.map +1 -1
- package/dist/ir/validation/soundness-gate.js +42 -10
- package/dist/ir/validation/soundness-gate.js.map +1 -1
- package/dist/ir/validation/soundness-gate.test.js +19 -2
- package/dist/ir/validation/soundness-gate.test.js.map +1 -1
- package/dist/ir/validation/virtual-marking-pass.d.ts +16 -0
- package/dist/ir/validation/virtual-marking-pass.d.ts.map +1 -0
- package/dist/ir/validation/virtual-marking-pass.js +77 -0
- package/dist/ir/validation/virtual-marking-pass.js.map +1 -0
- package/dist/ir/validation/yield-lowering-pass.test.js +2 -2
- package/dist/ir/validation/yield-lowering-pass.test.js.map +1 -1
- package/dist/program/bindings.d.ts +28 -0
- package/dist/program/bindings.d.ts.map +1 -1
- package/dist/program/bindings.js +204 -2
- package/dist/program/bindings.js.map +1 -1
- package/dist/program/bindings.test.js +30 -0
- package/dist/program/bindings.test.js.map +1 -1
- package/dist/program/creation.d.ts.map +1 -1
- package/dist/program/creation.js +251 -4
- package/dist/program/creation.js.map +1 -1
- package/dist/program/dependency-graph.d.ts.map +1 -1
- package/dist/program/dependency-graph.js +25 -25
- package/dist/program/dependency-graph.js.map +1 -1
- package/dist/program/diagnostics.d.ts.map +1 -1
- package/dist/program/diagnostics.js +6 -0
- package/dist/program/diagnostics.js.map +1 -1
- package/dist/program/index.d.ts +1 -1
- package/dist/program/index.d.ts.map +1 -1
- package/dist/program/types.d.ts +8 -8
- package/dist/program/types.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.d.ts +1 -0
- package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.js +90 -34
- package/dist/resolver/clr-bindings-resolver.js.map +1 -1
- package/dist/resolver/import-resolution.d.ts +16 -1
- package/dist/resolver/import-resolution.d.ts.map +1 -1
- package/dist/resolver/import-resolution.js +29 -12
- package/dist/resolver/import-resolution.js.map +1 -1
- package/dist/resolver/naming.d.ts +1 -1
- package/dist/resolver/naming.d.ts.map +1 -1
- package/dist/resolver/naming.js +13 -2
- package/dist/resolver/naming.js.map +1 -1
- package/dist/resolver.test.js +4 -0
- package/dist/resolver.test.js.map +1 -1
- package/dist/symbol-table/builder.d.ts +3 -1
- package/dist/symbol-table/builder.d.ts.map +1 -1
- package/dist/symbol-table/builder.js +9 -8
- package/dist/symbol-table/builder.js.map +1 -1
- package/dist/symbol-table/types.d.ts +2 -2
- package/dist/symbol-table/types.d.ts.map +1 -1
- package/dist/types/diagnostic.d.ts +12 -2
- package/dist/types/diagnostic.d.ts.map +1 -1
- package/dist/types/diagnostic.js +5 -1
- package/dist/types/diagnostic.js.map +1 -1
- package/dist/validation/extension-methods.d.ts +17 -0
- package/dist/validation/extension-methods.d.ts.map +1 -0
- package/dist/validation/extension-methods.js +133 -0
- package/dist/validation/extension-methods.js.map +1 -0
- package/dist/validation/generics.d.ts.map +1 -1
- package/dist/validation/generics.js +1 -129
- package/dist/validation/generics.js.map +1 -1
- package/dist/validation/imports.js +1 -1
- package/dist/validation/imports.js.map +1 -1
- package/dist/validation/index.d.ts +1 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +1 -0
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/orchestrator.d.ts.map +1 -1
- package/dist/validation/orchestrator.js +2 -0
- package/dist/validation/orchestrator.js.map +1 -1
- package/dist/validation/static-safety.d.ts +1 -0
- package/dist/validation/static-safety.d.ts.map +1 -1
- package/dist/validation/static-safety.js +366 -96
- package/dist/validation/static-safety.js.map +1 -1
- package/dist/validator.test.js +77 -1
- package/dist/validator.test.js.map +1 -1
- package/package.json +2 -2
- package/dist/ir/type-converter/arrays.d.ts +0 -10
- package/dist/ir/type-converter/arrays.d.ts.map +0 -1
- package/dist/ir/type-converter/arrays.js.map +0 -1
- package/dist/ir/type-converter/converter.d.ts +0 -6
- package/dist/ir/type-converter/converter.d.ts.map +0 -1
- package/dist/ir/type-converter/converter.js +0 -6
- package/dist/ir/type-converter/converter.js.map +0 -1
- package/dist/ir/type-converter/functions.d.ts +0 -10
- package/dist/ir/type-converter/functions.d.ts.map +0 -1
- package/dist/ir/type-converter/functions.js +0 -15
- package/dist/ir/type-converter/functions.js.map +0 -1
- package/dist/ir/type-converter/index.d.ts +0 -7
- package/dist/ir/type-converter/index.d.ts.map +0 -1
- package/dist/ir/type-converter/index.js +0 -7
- package/dist/ir/type-converter/index.js.map +0 -1
- package/dist/ir/type-converter/inference.d.ts +0 -32
- package/dist/ir/type-converter/inference.d.ts.map +0 -1
- package/dist/ir/type-converter/inference.js +0 -297
- package/dist/ir/type-converter/inference.js.map +0 -1
- package/dist/ir/type-converter/literals.d.ts.map +0 -1
- package/dist/ir/type-converter/literals.js.map +0 -1
- package/dist/ir/type-converter/objects.d.ts +0 -16
- package/dist/ir/type-converter/objects.d.ts.map +0 -1
- package/dist/ir/type-converter/objects.js.map +0 -1
- package/dist/ir/type-converter/orchestrator.d.ts.map +0 -1
- package/dist/ir/type-converter/orchestrator.js.map +0 -1
- package/dist/ir/type-converter/patterns.d.ts +0 -10
- package/dist/ir/type-converter/patterns.d.ts.map +0 -1
- package/dist/ir/type-converter/patterns.js.map +0 -1
- package/dist/ir/type-converter/primitives.d.ts.map +0 -1
- package/dist/ir/type-converter/primitives.js.map +0 -1
- package/dist/ir/type-converter/references.d.ts.map +0 -1
- package/dist/ir/type-converter/references.js +0 -371
- package/dist/ir/type-converter/references.js.map +0 -1
- package/dist/ir/type-converter/unions-intersections.d.ts +0 -14
- package/dist/ir/type-converter/unions-intersections.d.ts.map +0 -1
- package/dist/ir/type-converter/unions-intersections.js +0 -22
- package/dist/ir/type-converter/unions-intersections.js.map +0 -1
- package/dist/ir/type-converter/utility-types.d.ts.map +0 -1
- package/dist/ir/type-converter/utility-types.js +0 -528
- package/dist/ir/type-converter/utility-types.js.map +0 -1
- package/dist/ir/type-converter/utility-types.test.d.ts.map +0 -1
- package/dist/ir/type-converter/utility-types.test.js.map +0 -1
- /package/dist/ir/{type-converter → type-system/internal/type-converter}/literals.js +0 -0
- /package/dist/ir/{type-converter → type-system/internal/type-converter}/primitives.js +0 -0
- /package/dist/ir/{type-converter → type-system/internal/type-converter}/utility-types.test.d.ts +0 -0
|
@@ -2,68 +2,208 @@
|
|
|
2
2
|
* Operator expression converters (binary, unary, update, assignment)
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import {
|
|
5
|
+
import { deriveIdentifierType, getSourceSpan, convertBinaryOperator, isAssignmentOperator, } from "./helpers.js";
|
|
6
6
|
import { convertExpression } from "../../expression-converter.js";
|
|
7
|
+
import { getBinaryResultKind, NUMERIC_KIND_TO_CSHARP, TSONIC_TO_NUMERIC_KIND, } from "../../types/numeric-kind.js";
|
|
8
|
+
const getNumericKindFromIrType = (type) => {
|
|
9
|
+
if (!type)
|
|
10
|
+
return undefined;
|
|
11
|
+
if (type.kind === "primitiveType") {
|
|
12
|
+
if (type.name === "int")
|
|
13
|
+
return "Int32";
|
|
14
|
+
if (type.name === "number")
|
|
15
|
+
return "Double";
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
if (type.kind === "referenceType") {
|
|
19
|
+
// Numeric proof pass can annotate using CLR kind names (e.g., "Int64").
|
|
20
|
+
if (type.name === "SByte" ||
|
|
21
|
+
type.name === "Byte" ||
|
|
22
|
+
type.name === "Int16" ||
|
|
23
|
+
type.name === "UInt16" ||
|
|
24
|
+
type.name === "Int32" ||
|
|
25
|
+
type.name === "UInt32" ||
|
|
26
|
+
type.name === "Int64" ||
|
|
27
|
+
type.name === "UInt64" ||
|
|
28
|
+
type.name === "Single" ||
|
|
29
|
+
type.name === "Double") {
|
|
30
|
+
return type.name;
|
|
31
|
+
}
|
|
32
|
+
return TSONIC_TO_NUMERIC_KIND.get(type.name);
|
|
33
|
+
}
|
|
34
|
+
return undefined;
|
|
35
|
+
};
|
|
36
|
+
const numericKindToIrType = (kind) => {
|
|
37
|
+
if (kind === "Int32")
|
|
38
|
+
return { kind: "primitiveType", name: "int" };
|
|
39
|
+
if (kind === "Double")
|
|
40
|
+
return { kind: "primitiveType", name: "number" };
|
|
41
|
+
// Use the canonical C# keyword spelling as the IR referenceType name
|
|
42
|
+
// (e.g., Int64 -> "long", UInt16 -> "ushort").
|
|
43
|
+
const alias = NUMERIC_KIND_TO_CSHARP.get(kind) ?? "double";
|
|
44
|
+
return { kind: "referenceType", name: alias };
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Derive result type from binary operator and operand types.
|
|
48
|
+
*
|
|
49
|
+
* DETERMINISTIC TYPING:
|
|
50
|
+
* - Arithmetic: both int → int, otherwise double
|
|
51
|
+
* - Comparison: always boolean
|
|
52
|
+
* - Bitwise: int
|
|
53
|
+
* - Logical: derives from operands
|
|
54
|
+
*/
|
|
55
|
+
const deriveBinaryResultType = (operator, leftType, rightType) => {
|
|
56
|
+
// Comparison operators always return boolean
|
|
57
|
+
if (["==", "!=", "===", "!==", "<", ">", "<=", ">="].includes(operator)) {
|
|
58
|
+
return { kind: "primitiveType", name: "boolean" };
|
|
59
|
+
}
|
|
60
|
+
// Bitwise operators return int
|
|
61
|
+
if (["&", "|", "^", "<<", ">>", ">>>"].includes(operator)) {
|
|
62
|
+
return { kind: "primitiveType", name: "int" };
|
|
63
|
+
}
|
|
64
|
+
// instanceof returns boolean
|
|
65
|
+
if (operator === "instanceof") {
|
|
66
|
+
return { kind: "primitiveType", name: "boolean" };
|
|
67
|
+
}
|
|
68
|
+
// in operator returns boolean
|
|
69
|
+
if (operator === "in") {
|
|
70
|
+
return { kind: "primitiveType", name: "boolean" };
|
|
71
|
+
}
|
|
72
|
+
// String concatenation: if either is string, result is string
|
|
73
|
+
if (operator === "+") {
|
|
74
|
+
if ((leftType?.kind === "primitiveType" && leftType.name === "string") ||
|
|
75
|
+
(rightType?.kind === "primitiveType" && rightType.name === "string")) {
|
|
76
|
+
return { kind: "primitiveType", name: "string" };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Arithmetic operators: both int → int, otherwise double
|
|
80
|
+
if (["+", "-", "*", "/", "%", "**"].includes(operator)) {
|
|
81
|
+
const leftKind = getNumericKindFromIrType(leftType);
|
|
82
|
+
const rightKind = getNumericKindFromIrType(rightType);
|
|
83
|
+
if (leftKind !== undefined && rightKind !== undefined) {
|
|
84
|
+
const resultKind = getBinaryResultKind(leftKind, rightKind);
|
|
85
|
+
return numericKindToIrType(resultKind);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Logical operators: result type is one of the operand types
|
|
89
|
+
// For &&, ||, ?? the result depends on which branch is taken
|
|
90
|
+
if (["&&", "||", "??"].includes(operator)) {
|
|
91
|
+
return leftType ?? rightType;
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Derive result type from unary operator and operand type.
|
|
97
|
+
*/
|
|
98
|
+
const deriveUnaryResultType = (operator, operandType) => {
|
|
99
|
+
// Logical not always returns boolean
|
|
100
|
+
if (operator === "!") {
|
|
101
|
+
return { kind: "primitiveType", name: "boolean" };
|
|
102
|
+
}
|
|
103
|
+
// Bitwise not returns int
|
|
104
|
+
if (operator === "~") {
|
|
105
|
+
return { kind: "primitiveType", name: "int" };
|
|
106
|
+
}
|
|
107
|
+
// Numeric + and - return same type as operand
|
|
108
|
+
if (operator === "+" || operator === "-") {
|
|
109
|
+
return operandType;
|
|
110
|
+
}
|
|
111
|
+
// typeof always returns string
|
|
112
|
+
if (operator === "typeof") {
|
|
113
|
+
return { kind: "primitiveType", name: "string" };
|
|
114
|
+
}
|
|
115
|
+
// void always returns undefined (void type)
|
|
116
|
+
if (operator === "void") {
|
|
117
|
+
return { kind: "voidType" };
|
|
118
|
+
}
|
|
119
|
+
// delete returns boolean
|
|
120
|
+
if (operator === "delete") {
|
|
121
|
+
return { kind: "primitiveType", name: "boolean" };
|
|
122
|
+
}
|
|
123
|
+
// ++/-- return same type as operand
|
|
124
|
+
if (operator === "++" || operator === "--") {
|
|
125
|
+
return operandType;
|
|
126
|
+
}
|
|
127
|
+
return operandType;
|
|
128
|
+
};
|
|
7
129
|
/**
|
|
8
130
|
* Convert binary expression (including logical and assignment)
|
|
131
|
+
*
|
|
132
|
+
* Threads expectedType through:
|
|
133
|
+
* - Assignment RHS: gets LHS type
|
|
134
|
+
* - Nullish coalescing (??): RHS gets expectedType (fallback value)
|
|
135
|
+
* - Logical OR (||): RHS gets expectedType (fallback value)
|
|
9
136
|
*/
|
|
10
|
-
export const convertBinaryExpression = (node,
|
|
137
|
+
export const convertBinaryExpression = (node, ctx, expectedType) => {
|
|
11
138
|
const operator = convertBinaryOperator(node.operatorToken);
|
|
12
|
-
const inferredType = getInferredType(node, checker);
|
|
13
139
|
const sourceSpan = getSourceSpan(node);
|
|
14
140
|
// Handle assignment separately
|
|
141
|
+
// Thread LHS type to RHS for deterministic typing (e.g., x = 10 where x: int)
|
|
15
142
|
if (isAssignmentOperator(node.operatorToken)) {
|
|
143
|
+
// DETERMINISTIC: Derive LHS type from declaration (for identifiers)
|
|
144
|
+
const leftExpr = ts.isIdentifier(node.left)
|
|
145
|
+
? {
|
|
146
|
+
kind: "identifier",
|
|
147
|
+
name: node.left.text,
|
|
148
|
+
inferredType: deriveIdentifierType(node.left, ctx),
|
|
149
|
+
sourceSpan: getSourceSpan(node.left),
|
|
150
|
+
}
|
|
151
|
+
: convertExpression(node.left, ctx, undefined);
|
|
152
|
+
const lhsType = leftExpr.inferredType;
|
|
153
|
+
const rightExpr = convertExpression(node.right, ctx, lhsType);
|
|
16
154
|
return {
|
|
17
155
|
kind: "assignment",
|
|
18
156
|
operator: operator,
|
|
19
|
-
left:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
name: node.left.text,
|
|
23
|
-
sourceSpan: getSourceSpan(node.left),
|
|
24
|
-
}
|
|
25
|
-
: convertExpression(node.left, checker),
|
|
26
|
-
right: convertExpression(node.right, checker),
|
|
27
|
-
inferredType,
|
|
157
|
+
left: leftExpr,
|
|
158
|
+
right: rightExpr,
|
|
159
|
+
inferredType: lhsType, // Assignment result is LHS type
|
|
28
160
|
sourceSpan,
|
|
29
161
|
};
|
|
30
162
|
}
|
|
31
163
|
// Handle logical operators
|
|
164
|
+
// For ?? and ||, the RHS is the fallback value, so it gets expectedType
|
|
165
|
+
// For &&, the RHS is only reached if LHS is truthy, no type coercion needed
|
|
32
166
|
if (operator === "&&" || operator === "||" || operator === "??") {
|
|
167
|
+
const rhsExpectedType = operator === "??" || operator === "||" ? expectedType : undefined;
|
|
168
|
+
const leftExpr = convertExpression(node.left, ctx, undefined);
|
|
169
|
+
const rightExpr = convertExpression(node.right, ctx, rhsExpectedType);
|
|
33
170
|
return {
|
|
34
171
|
kind: "logical",
|
|
35
172
|
operator,
|
|
36
|
-
left:
|
|
37
|
-
right:
|
|
38
|
-
inferredType,
|
|
173
|
+
left: leftExpr,
|
|
174
|
+
right: rightExpr,
|
|
175
|
+
inferredType: deriveBinaryResultType(operator, leftExpr.inferredType, rightExpr.inferredType),
|
|
39
176
|
sourceSpan,
|
|
40
177
|
};
|
|
41
178
|
}
|
|
42
179
|
// Regular binary expression
|
|
180
|
+
const leftExpr = convertExpression(node.left, ctx, undefined);
|
|
181
|
+
const rightExpr = convertExpression(node.right, ctx, undefined);
|
|
43
182
|
return {
|
|
44
183
|
kind: "binary",
|
|
45
184
|
operator: operator,
|
|
46
|
-
left:
|
|
47
|
-
right:
|
|
48
|
-
inferredType,
|
|
185
|
+
left: leftExpr,
|
|
186
|
+
right: rightExpr,
|
|
187
|
+
inferredType: deriveBinaryResultType(operator, leftExpr.inferredType, rightExpr.inferredType),
|
|
49
188
|
sourceSpan,
|
|
50
189
|
};
|
|
51
190
|
};
|
|
52
191
|
/**
|
|
53
192
|
* Convert prefix unary expression
|
|
54
193
|
*/
|
|
55
|
-
export const convertUnaryExpression = (node,
|
|
56
|
-
const inferredType = getInferredType(node, checker);
|
|
194
|
+
export const convertUnaryExpression = (node, ctx) => {
|
|
57
195
|
const sourceSpan = getSourceSpan(node);
|
|
196
|
+
const operandExpr = convertExpression(node.operand, ctx, undefined);
|
|
58
197
|
// Check if it's an increment/decrement (++ or --)
|
|
59
198
|
if (node.operator === ts.SyntaxKind.PlusPlusToken ||
|
|
60
199
|
node.operator === ts.SyntaxKind.MinusMinusToken) {
|
|
200
|
+
const updateOperator = node.operator === ts.SyntaxKind.PlusPlusToken ? "++" : "--";
|
|
61
201
|
return {
|
|
62
202
|
kind: "update",
|
|
63
|
-
operator:
|
|
203
|
+
operator: updateOperator,
|
|
64
204
|
prefix: true,
|
|
65
|
-
expression:
|
|
66
|
-
inferredType,
|
|
205
|
+
expression: operandExpr,
|
|
206
|
+
inferredType: deriveUnaryResultType(updateOperator, operandExpr.inferredType),
|
|
67
207
|
sourceSpan,
|
|
68
208
|
};
|
|
69
209
|
}
|
|
@@ -86,39 +226,45 @@ export const convertUnaryExpression = (node, checker) => {
|
|
|
86
226
|
return {
|
|
87
227
|
kind: "unary",
|
|
88
228
|
operator,
|
|
89
|
-
expression:
|
|
90
|
-
inferredType,
|
|
229
|
+
expression: operandExpr,
|
|
230
|
+
inferredType: deriveUnaryResultType(operator, operandExpr.inferredType),
|
|
91
231
|
sourceSpan,
|
|
92
232
|
};
|
|
93
233
|
};
|
|
94
234
|
/**
|
|
95
235
|
* Convert postfix unary expression (++ or --)
|
|
236
|
+
*
|
|
237
|
+
* DETERMINISTIC TYPING: Result type derived from operand type.
|
|
238
|
+
* ++/-- return same type as operand (int → int, number → number)
|
|
96
239
|
*/
|
|
97
|
-
export const convertUpdateExpression = (node,
|
|
98
|
-
const inferredType = getInferredType(node, checker);
|
|
240
|
+
export const convertUpdateExpression = (node, ctx) => {
|
|
99
241
|
const sourceSpan = getSourceSpan(node);
|
|
100
242
|
if (ts.isPrefixUnaryExpression(node)) {
|
|
101
243
|
// Check if it's an increment or decrement
|
|
102
244
|
if (node.operator === ts.SyntaxKind.PlusPlusToken ||
|
|
103
245
|
node.operator === ts.SyntaxKind.MinusMinusToken) {
|
|
246
|
+
const operandExpr = convertExpression(node.operand, ctx, undefined);
|
|
247
|
+
const updateOperator = node.operator === ts.SyntaxKind.PlusPlusToken ? "++" : "--";
|
|
104
248
|
return {
|
|
105
249
|
kind: "update",
|
|
106
|
-
operator:
|
|
250
|
+
operator: updateOperator,
|
|
107
251
|
prefix: true,
|
|
108
|
-
expression:
|
|
109
|
-
inferredType,
|
|
252
|
+
expression: operandExpr,
|
|
253
|
+
inferredType: deriveUnaryResultType(updateOperator, operandExpr.inferredType),
|
|
110
254
|
sourceSpan,
|
|
111
255
|
};
|
|
112
256
|
}
|
|
113
257
|
}
|
|
114
258
|
// Handle postfix unary expression
|
|
115
259
|
const postfix = node;
|
|
260
|
+
const operandExpr = convertExpression(postfix.operand, ctx, undefined);
|
|
261
|
+
const updateOperator = postfix.operator === ts.SyntaxKind.PlusPlusToken ? "++" : "--";
|
|
116
262
|
return {
|
|
117
263
|
kind: "update",
|
|
118
|
-
operator:
|
|
264
|
+
operator: updateOperator,
|
|
119
265
|
prefix: false,
|
|
120
|
-
expression:
|
|
121
|
-
inferredType,
|
|
266
|
+
expression: operandExpr,
|
|
267
|
+
inferredType: deriveUnaryResultType(updateOperator, operandExpr.inferredType),
|
|
122
268
|
sourceSpan,
|
|
123
269
|
};
|
|
124
270
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/operators.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/operators.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,21 @@
|
|
|
2
2
|
* Miscellaneous expression converters (conditional, template literals)
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import { IrConditionalExpression, IrTemplateLiteralExpression } from "../../types.js";
|
|
5
|
+
import { IrConditionalExpression, IrTemplateLiteralExpression, IrType } from "../../types.js";
|
|
6
|
+
import type { ProgramContext } from "../../program-context.js";
|
|
6
7
|
/**
|
|
7
8
|
* Convert conditional (ternary) expression
|
|
9
|
+
*
|
|
10
|
+
* DETERMINISTIC TYPING:
|
|
11
|
+
* - Threads expectedType to both branches for consistent typing
|
|
12
|
+
* - Result type is expectedType if available, otherwise derives from whenTrue branch
|
|
13
|
+
* Example: `const x: int = cond ? 5 : 10` → both 5 and 10 get expectedType `int`
|
|
8
14
|
*/
|
|
9
|
-
export declare const convertConditionalExpression: (node: ts.ConditionalExpression,
|
|
15
|
+
export declare const convertConditionalExpression: (node: ts.ConditionalExpression, ctx: ProgramContext, expectedType: IrType | undefined) => IrConditionalExpression;
|
|
10
16
|
/**
|
|
11
17
|
* Convert template literal expression
|
|
18
|
+
*
|
|
19
|
+
* DETERMINISTIC TYPING: Template literals always produce string type.
|
|
12
20
|
*/
|
|
13
|
-
export declare const convertTemplateLiteral: (node: ts.TemplateExpression | ts.NoSubstitutionTemplateLiteral,
|
|
21
|
+
export declare const convertTemplateLiteral: (node: ts.TemplateExpression | ts.NoSubstitutionTemplateLiteral, ctx: ProgramContext) => IrTemplateLiteralExpression;
|
|
14
22
|
//# sourceMappingURL=other.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"other.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/other.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"other.d.ts","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/other.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAE3B,MAAM,EACP,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACvC,MAAM,EAAE,CAAC,qBAAqB,EAC9B,KAAK,cAAc,EACnB,cAAc,MAAM,GAAG,SAAS,KAC/B,uBAeF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,EAAE,CAAC,kBAAkB,GAAG,EAAE,CAAC,6BAA6B,EAC9D,KAAK,cAAc,KAClB,2BAgCF,CAAC"}
|
|
@@ -2,45 +2,61 @@
|
|
|
2
2
|
* Miscellaneous expression converters (conditional, template literals)
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import {
|
|
5
|
+
import { getSourceSpan } from "./helpers.js";
|
|
6
6
|
import { convertExpression } from "../../expression-converter.js";
|
|
7
7
|
/**
|
|
8
8
|
* Convert conditional (ternary) expression
|
|
9
|
+
*
|
|
10
|
+
* DETERMINISTIC TYPING:
|
|
11
|
+
* - Threads expectedType to both branches for consistent typing
|
|
12
|
+
* - Result type is expectedType if available, otherwise derives from whenTrue branch
|
|
13
|
+
* Example: `const x: int = cond ? 5 : 10` → both 5 and 10 get expectedType `int`
|
|
9
14
|
*/
|
|
10
|
-
export const convertConditionalExpression = (node,
|
|
15
|
+
export const convertConditionalExpression = (node, ctx, expectedType) => {
|
|
16
|
+
const whenTrue = convertExpression(node.whenTrue, ctx, expectedType);
|
|
17
|
+
const whenFalse = convertExpression(node.whenFalse, ctx, expectedType);
|
|
18
|
+
// DETERMINISTIC: Use expectedType if available, otherwise derive from whenTrue
|
|
19
|
+
const inferredType = expectedType ?? whenTrue.inferredType;
|
|
11
20
|
return {
|
|
12
21
|
kind: "conditional",
|
|
13
|
-
condition: convertExpression(node.condition,
|
|
14
|
-
whenTrue
|
|
15
|
-
whenFalse
|
|
16
|
-
inferredType
|
|
22
|
+
condition: convertExpression(node.condition, ctx, undefined),
|
|
23
|
+
whenTrue,
|
|
24
|
+
whenFalse,
|
|
25
|
+
inferredType,
|
|
17
26
|
sourceSpan: getSourceSpan(node),
|
|
18
27
|
};
|
|
19
28
|
};
|
|
20
29
|
/**
|
|
21
30
|
* Convert template literal expression
|
|
31
|
+
*
|
|
32
|
+
* DETERMINISTIC TYPING: Template literals always produce string type.
|
|
22
33
|
*/
|
|
23
|
-
export const convertTemplateLiteral = (node,
|
|
34
|
+
export const convertTemplateLiteral = (node, ctx) => {
|
|
35
|
+
// DETERMINISTIC: Template literals always produce string
|
|
36
|
+
const stringType = {
|
|
37
|
+
kind: "primitiveType",
|
|
38
|
+
name: "string",
|
|
39
|
+
};
|
|
24
40
|
if (ts.isNoSubstitutionTemplateLiteral(node)) {
|
|
25
41
|
return {
|
|
26
42
|
kind: "templateLiteral",
|
|
27
43
|
quasis: [node.text],
|
|
28
44
|
expressions: [],
|
|
29
|
-
inferredType:
|
|
45
|
+
inferredType: stringType,
|
|
30
46
|
sourceSpan: getSourceSpan(node),
|
|
31
47
|
};
|
|
32
48
|
}
|
|
33
49
|
const quasis = [node.head.text];
|
|
34
50
|
const expressions = [];
|
|
35
51
|
node.templateSpans.forEach((span) => {
|
|
36
|
-
expressions.push(convertExpression(span.expression,
|
|
52
|
+
expressions.push(convertExpression(span.expression, ctx, undefined));
|
|
37
53
|
quasis.push(span.literal.text);
|
|
38
54
|
});
|
|
39
55
|
return {
|
|
40
56
|
kind: "templateLiteral",
|
|
41
57
|
quasis,
|
|
42
58
|
expressions,
|
|
43
|
-
inferredType:
|
|
59
|
+
inferredType: stringType,
|
|
44
60
|
sourceSpan: getSourceSpan(node),
|
|
45
61
|
};
|
|
46
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"other.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/other.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"other.js","sourceRoot":"","sources":["../../../../src/ir/converters/expressions/other.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAOjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,IAA8B,EAC9B,GAAmB,EACnB,YAAgC,EACP,EAAE;IAC3B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAEvE,+EAA+E;IAC/E,MAAM,YAAY,GAAG,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC;IAE3D,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC;QAC5D,QAAQ;QACR,SAAS;QACT,YAAY;QACZ,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC;KAChC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAA8D,EAC9D,GAAmB,EACU,EAAE;IAC/B,yDAAyD;IACzD,MAAM,UAAU,GAAG;QACjB,IAAI,EAAE,eAAwB;QAC9B,IAAI,EAAE,QAAiB;KACxB,CAAC;IAEF,IAAI,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YACnB,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,UAAU;YACxB,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC;SAChC,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAmB,EAAE,CAAC;IAEvC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,MAAM;QACN,WAAW;QACX,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC;KAChC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Block statement converter
|
|
3
|
+
*
|
|
4
|
+
* Phase 5 Step 4: Uses ProgramContext instead of Binding.
|
|
3
5
|
*/
|
|
4
6
|
import * as ts from "typescript";
|
|
5
|
-
import { IrBlockStatement } from "../../../types.js";
|
|
7
|
+
import { IrBlockStatement, IrType } from "../../../types.js";
|
|
8
|
+
import type { ProgramContext } from "../../../program-context.js";
|
|
6
9
|
/**
|
|
7
10
|
* Convert block statement
|
|
11
|
+
*
|
|
12
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
13
|
+
* Pass `undefined` explicitly when not inside a function.
|
|
8
14
|
*/
|
|
9
|
-
export declare const convertBlockStatement: (node: ts.Block,
|
|
15
|
+
export declare const convertBlockStatement: (node: ts.Block, ctx: ProgramContext, expectedReturnType: IrType | undefined) => IrBlockStatement;
|
|
10
16
|
//# sourceMappingURL=blocks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/blocks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/blocks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAe,gBAAgB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,EAAE,CAAC,KAAK,EACd,KAAK,cAAc,EACnB,oBAAoB,MAAM,GAAG,SAAS,KACrC,gBAOF,CAAC"}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Block statement converter
|
|
3
|
+
*
|
|
4
|
+
* Phase 5 Step 4: Uses ProgramContext instead of Binding.
|
|
3
5
|
*/
|
|
4
6
|
import { convertStatement } from "../../../statement-converter.js";
|
|
5
7
|
/**
|
|
6
8
|
* Convert block statement
|
|
9
|
+
*
|
|
10
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
11
|
+
* Pass `undefined` explicitly when not inside a function.
|
|
7
12
|
*/
|
|
8
|
-
export const convertBlockStatement = (node,
|
|
13
|
+
export const convertBlockStatement = (node, ctx, expectedReturnType) => {
|
|
9
14
|
return {
|
|
10
15
|
kind: "blockStatement",
|
|
11
16
|
statements: node.statements
|
|
12
|
-
.map((s) => convertStatement(s,
|
|
17
|
+
.map((s) => convertStatement(s, ctx, expectedReturnType))
|
|
13
18
|
.filter((s) => s !== null),
|
|
14
19
|
};
|
|
15
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/blocks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/blocks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGnE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAAc,EACd,GAAmB,EACnB,kBAAsC,EACpB,EAAE;IACpB,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,UAAU,EAAE,IAAI,CAAC,UAAU;aACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;aACxD,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;KAC/C,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Conditional statement converters (if, switch)
|
|
3
|
+
*
|
|
4
|
+
* Phase 5 Step 4: Uses ProgramContext instead of Binding.
|
|
3
5
|
*/
|
|
4
6
|
import * as ts from "typescript";
|
|
5
|
-
import { IrIfStatement, IrSwitchStatement, IrSwitchCase } from "../../../types.js";
|
|
7
|
+
import { IrIfStatement, IrSwitchStatement, IrSwitchCase, IrType } from "../../../types.js";
|
|
8
|
+
import type { ProgramContext } from "../../../program-context.js";
|
|
6
9
|
/**
|
|
7
10
|
* Convert if statement
|
|
11
|
+
*
|
|
12
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
13
|
+
* Passed through to nested statements for return expressions.
|
|
8
14
|
*/
|
|
9
|
-
export declare const convertIfStatement: (node: ts.IfStatement,
|
|
15
|
+
export declare const convertIfStatement: (node: ts.IfStatement, ctx: ProgramContext, expectedReturnType?: IrType) => IrIfStatement;
|
|
10
16
|
/**
|
|
11
17
|
* Convert switch statement
|
|
18
|
+
*
|
|
19
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
12
20
|
*/
|
|
13
|
-
export declare const convertSwitchStatement: (node: ts.SwitchStatement,
|
|
21
|
+
export declare const convertSwitchStatement: (node: ts.SwitchStatement, ctx: ProgramContext, expectedReturnType?: IrType) => IrSwitchStatement;
|
|
14
22
|
/**
|
|
15
23
|
* Convert switch case
|
|
24
|
+
*
|
|
25
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
16
26
|
*/
|
|
17
|
-
export declare const convertSwitchCase: (node: ts.CaseOrDefaultClause,
|
|
27
|
+
export declare const convertSwitchCase: (node: ts.CaseOrDefaultClause, ctx: ProgramContext, expectedReturnType?: IrType) => IrSwitchCase;
|
|
18
28
|
//# sourceMappingURL=conditionals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditionals.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"conditionals.d.ts","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,MAAM,EACP,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,EAAE,CAAC,WAAW,EACpB,KAAK,cAAc,EACnB,qBAAqB,MAAM,KAC1B,aAgBF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,EAAE,CAAC,eAAe,EACxB,KAAK,cAAc,EACnB,qBAAqB,MAAM,KAC1B,iBAQF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,EAAE,CAAC,mBAAmB,EAC5B,KAAK,cAAc,EACnB,qBAAqB,MAAM,KAC1B,YAUF,CAAC"}
|
|
@@ -1,44 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Conditional statement converters (if, switch)
|
|
3
|
+
*
|
|
4
|
+
* Phase 5 Step 4: Uses ProgramContext instead of Binding.
|
|
3
5
|
*/
|
|
4
6
|
import * as ts from "typescript";
|
|
5
7
|
import { convertExpression } from "../../../expression-converter.js";
|
|
6
8
|
import { convertStatementSingle, flattenStatementResult, convertStatement, } from "../../../statement-converter.js";
|
|
7
9
|
/**
|
|
8
10
|
* Convert if statement
|
|
11
|
+
*
|
|
12
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
13
|
+
* Passed through to nested statements for return expressions.
|
|
9
14
|
*/
|
|
10
|
-
export const convertIfStatement = (node,
|
|
11
|
-
const thenStmt = convertStatementSingle(node.thenStatement,
|
|
15
|
+
export const convertIfStatement = (node, ctx, expectedReturnType) => {
|
|
16
|
+
const thenStmt = convertStatementSingle(node.thenStatement, ctx, expectedReturnType);
|
|
12
17
|
const elseStmt = node.elseStatement
|
|
13
|
-
? convertStatementSingle(node.elseStatement,
|
|
18
|
+
? convertStatementSingle(node.elseStatement, ctx, expectedReturnType)
|
|
14
19
|
: undefined;
|
|
15
20
|
return {
|
|
16
21
|
kind: "ifStatement",
|
|
17
|
-
condition: convertExpression(node.expression,
|
|
22
|
+
condition: convertExpression(node.expression, ctx, undefined),
|
|
18
23
|
thenStatement: thenStmt ?? { kind: "emptyStatement" },
|
|
19
24
|
elseStatement: elseStmt ?? undefined,
|
|
20
25
|
};
|
|
21
26
|
};
|
|
22
27
|
/**
|
|
23
28
|
* Convert switch statement
|
|
29
|
+
*
|
|
30
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
24
31
|
*/
|
|
25
|
-
export const convertSwitchStatement = (node,
|
|
32
|
+
export const convertSwitchStatement = (node, ctx, expectedReturnType) => {
|
|
26
33
|
return {
|
|
27
34
|
kind: "switchStatement",
|
|
28
|
-
expression: convertExpression(node.expression,
|
|
29
|
-
cases: node.caseBlock.clauses.map((clause) => convertSwitchCase(clause,
|
|
35
|
+
expression: convertExpression(node.expression, ctx, undefined),
|
|
36
|
+
cases: node.caseBlock.clauses.map((clause) => convertSwitchCase(clause, ctx, expectedReturnType)),
|
|
30
37
|
};
|
|
31
38
|
};
|
|
32
39
|
/**
|
|
33
40
|
* Convert switch case
|
|
41
|
+
*
|
|
42
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
34
43
|
*/
|
|
35
|
-
export const convertSwitchCase = (node,
|
|
44
|
+
export const convertSwitchCase = (node, ctx, expectedReturnType) => {
|
|
36
45
|
return {
|
|
37
46
|
kind: "switchCase",
|
|
38
47
|
test: ts.isCaseClause(node)
|
|
39
|
-
? convertExpression(node.expression,
|
|
48
|
+
? convertExpression(node.expression, ctx, undefined)
|
|
40
49
|
: undefined,
|
|
41
|
-
statements: node.statements.flatMap((s) => flattenStatementResult(convertStatement(s,
|
|
50
|
+
statements: node.statements.flatMap((s) => flattenStatementResult(convertStatement(s, ctx, expectedReturnType))),
|
|
42
51
|
};
|
|
43
52
|
};
|
|
44
53
|
//# sourceMappingURL=conditionals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditionals.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"conditionals.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAOjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AAGzC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAAoB,EACpB,GAAmB,EACnB,kBAA2B,EACZ,EAAE;IACjB,MAAM,QAAQ,GAAG,sBAAsB,CACrC,IAAI,CAAC,aAAa,EAClB,GAAG,EACH,kBAAkB,CACnB,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa;QACjC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,kBAAkB,CAAC;QACrE,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC;QAC7D,aAAa,EAAE,QAAQ,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACrD,aAAa,EAAE,QAAQ,IAAI,SAAS;KACrC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAwB,EACxB,GAAmB,EACnB,kBAA2B,EACR,EAAE;IACrB,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC;QAC9D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3C,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,kBAAkB,CAAC,CACnD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAA4B,EAC5B,GAAmB,EACnB,kBAA2B,EACb,EAAE;IAChB,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC;YACpD,CAAC,CAAC,SAAS;QACb,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CACrE;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Exception handling converters (try, catch)
|
|
3
|
+
*
|
|
4
|
+
* Phase 5 Step 4: Uses ProgramContext instead of Binding.
|
|
3
5
|
*/
|
|
4
6
|
import * as ts from "typescript";
|
|
5
|
-
import { IrTryStatement, IrCatchClause } from "../../../types.js";
|
|
7
|
+
import { IrTryStatement, IrCatchClause, IrType } from "../../../types.js";
|
|
8
|
+
import type { ProgramContext } from "../../../program-context.js";
|
|
6
9
|
/**
|
|
7
10
|
* Convert try statement
|
|
11
|
+
*
|
|
12
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
8
13
|
*/
|
|
9
|
-
export declare const convertTryStatement: (node: ts.TryStatement,
|
|
14
|
+
export declare const convertTryStatement: (node: ts.TryStatement, ctx: ProgramContext, expectedReturnType?: IrType) => IrTryStatement;
|
|
10
15
|
/**
|
|
11
16
|
* Convert catch clause
|
|
17
|
+
*
|
|
18
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
12
19
|
*/
|
|
13
|
-
export declare const convertCatchClause: (node: ts.CatchClause,
|
|
20
|
+
export declare const convertCatchClause: (node: ts.CatchClause, ctx: ProgramContext, expectedReturnType?: IrType) => IrCatchClause;
|
|
14
21
|
//# sourceMappingURL=exceptions.d.ts.map
|