@tsonic/emitter 0.0.1 → 0.0.2
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 -0
- package/dist/adapter-generator.d.ts +28 -0
- package/dist/adapter-generator.d.ts.map +1 -0
- package/dist/adapter-generator.js +83 -0
- package/dist/adapter-generator.js.map +1 -0
- package/dist/array.test.d.ts +6 -0
- package/dist/array.test.d.ts.map +1 -0
- package/dist/array.test.js +274 -0
- package/dist/array.test.js.map +1 -0
- package/dist/async-investigation.test.d.ts +5 -0
- package/dist/async-investigation.test.d.ts.map +1 -0
- package/dist/async-investigation.test.js +239 -0
- package/dist/async-investigation.test.js.map +1 -0
- package/dist/constants.d.ts +15 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +22 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/exports.d.ts +10 -0
- package/dist/core/exports.d.ts.map +1 -0
- package/dist/core/exports.js +28 -0
- package/dist/core/exports.js.map +1 -0
- package/dist/core/imports.d.ts +26 -0
- package/dist/core/imports.d.ts.map +1 -0
- package/dist/core/imports.js +189 -0
- package/dist/core/imports.js.map +1 -0
- package/dist/core/imports.test.d.ts +6 -0
- package/dist/core/imports.test.d.ts.map +1 -0
- package/dist/core/imports.test.js +76 -0
- package/dist/core/imports.test.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/{src/core/index.ts → dist/core/index.js} +1 -1
- package/dist/core/index.js.map +1 -0
- package/dist/core/module-emitter/assembly.d.ts +21 -0
- package/dist/core/module-emitter/assembly.d.ts.map +1 -0
- package/dist/core/module-emitter/assembly.js +58 -0
- package/dist/core/module-emitter/assembly.js.map +1 -0
- package/dist/core/module-emitter/header.d.ts +10 -0
- package/dist/core/module-emitter/header.d.ts.map +1 -0
- package/dist/core/module-emitter/header.js +13 -0
- package/dist/core/module-emitter/header.js.map +1 -0
- package/{src/core/module-emitter/index.ts → dist/core/module-emitter/index.d.ts} +3 -10
- package/dist/core/module-emitter/index.d.ts.map +1 -0
- package/dist/core/module-emitter/index.js +10 -0
- package/dist/core/module-emitter/index.js.map +1 -0
- package/dist/core/module-emitter/namespace.d.ts +14 -0
- package/dist/core/module-emitter/namespace.d.ts.map +1 -0
- package/dist/core/module-emitter/namespace.js +26 -0
- package/dist/core/module-emitter/namespace.js.map +1 -0
- package/dist/core/module-emitter/orchestrator.d.ts +10 -0
- package/dist/core/module-emitter/orchestrator.d.ts.map +1 -0
- package/dist/core/module-emitter/orchestrator.js +58 -0
- package/dist/core/module-emitter/orchestrator.js.map +1 -0
- package/dist/core/module-emitter/separation.d.ts +14 -0
- package/dist/core/module-emitter/separation.d.ts.map +1 -0
- package/dist/core/module-emitter/separation.js +27 -0
- package/dist/core/module-emitter/separation.js.map +1 -0
- package/dist/core/module-emitter/static-container.d.ts +18 -0
- package/dist/core/module-emitter/static-container.d.ts.map +1 -0
- package/dist/core/module-emitter/static-container.js +49 -0
- package/dist/core/module-emitter/static-container.js.map +1 -0
- package/dist/core/module-emitter.d.ts +6 -0
- package/dist/core/module-emitter.d.ts.map +1 -0
- package/{src/core/module-emitter.ts → dist/core/module-emitter.js} +1 -1
- package/dist/core/module-emitter.js.map +1 -0
- package/dist/core/module-emitter.test.d.ts +6 -0
- package/dist/core/module-emitter.test.d.ts.map +1 -0
- package/dist/core/module-emitter.test.js +147 -0
- package/dist/core/module-emitter.test.js.map +1 -0
- package/dist/core/module-map.d.ts +35 -0
- package/dist/core/module-map.d.ts.map +1 -0
- package/dist/core/module-map.js +170 -0
- package/dist/core/module-map.js.map +1 -0
- package/dist/core/options.d.ts +9 -0
- package/dist/core/options.d.ts.map +1 -0
- package/dist/core/options.js +14 -0
- package/dist/core/options.js.map +1 -0
- package/dist/core/type-params.d.ts +9 -0
- package/dist/core/type-params.d.ts.map +1 -0
- package/dist/core/type-params.js +31 -0
- package/dist/core/type-params.js.map +1 -0
- package/dist/emitter-types/context.d.ts +29 -0
- package/dist/emitter-types/context.d.ts.map +1 -0
- package/dist/emitter-types/context.js +68 -0
- package/dist/emitter-types/context.js.map +1 -0
- package/dist/emitter-types/core.d.ts +129 -0
- package/dist/emitter-types/core.d.ts.map +1 -0
- package/dist/emitter-types/core.js +5 -0
- package/dist/emitter-types/core.js.map +1 -0
- package/dist/emitter-types/csharp-types.d.ts +27 -0
- package/dist/emitter-types/csharp-types.d.ts.map +1 -0
- package/dist/emitter-types/csharp-types.js +5 -0
- package/dist/emitter-types/csharp-types.js.map +1 -0
- package/dist/emitter-types/formatting.d.ts +9 -0
- package/dist/emitter-types/formatting.d.ts.map +1 -0
- package/dist/emitter-types/formatting.js +11 -0
- package/dist/emitter-types/formatting.js.map +1 -0
- package/dist/emitter-types/fqn.d.ts +53 -0
- package/dist/emitter-types/fqn.d.ts.map +1 -0
- package/dist/emitter-types/fqn.js +65 -0
- package/dist/emitter-types/fqn.js.map +1 -0
- package/dist/emitter-types/index.d.ts +9 -0
- package/dist/emitter-types/index.d.ts.map +1 -0
- package/dist/emitter-types/index.js +7 -0
- package/dist/emitter-types/index.js.map +1 -0
- package/dist/emitter.d.ts +27 -0
- package/dist/emitter.d.ts.map +1 -0
- package/dist/emitter.js +80 -0
- package/dist/emitter.js.map +1 -0
- package/dist/expression-emitter.d.ts +15 -0
- package/dist/expression-emitter.d.ts.map +1 -0
- package/dist/expression-emitter.js +67 -0
- package/dist/expression-emitter.js.map +1 -0
- package/dist/expressions/access.d.ts +12 -0
- package/dist/expressions/access.d.ts.map +1 -0
- package/dist/expressions/access.js +77 -0
- package/dist/expressions/access.js.map +1 -0
- package/dist/expressions/calls.d.ts +18 -0
- package/dist/expressions/calls.d.ts.map +1 -0
- package/dist/expressions/calls.js +207 -0
- package/dist/expressions/calls.js.map +1 -0
- package/dist/expressions/collections.d.ts +24 -0
- package/dist/expressions/collections.d.ts.map +1 -0
- package/dist/expressions/collections.js +254 -0
- package/dist/expressions/collections.js.map +1 -0
- package/dist/expressions/functions.d.ts +18 -0
- package/dist/expressions/functions.d.ts.map +1 -0
- package/dist/expressions/functions.js +60 -0
- package/dist/expressions/functions.js.map +1 -0
- package/dist/expressions/identifiers.d.ts +22 -0
- package/dist/expressions/identifiers.d.ts.map +1 -0
- package/dist/expressions/identifiers.js +99 -0
- package/dist/expressions/identifiers.js.map +1 -0
- package/dist/expressions/index.d.ts +12 -0
- package/dist/expressions/index.d.ts.map +1 -0
- package/{src/expressions/index.ts → dist/expressions/index.js} +3 -21
- package/dist/expressions/index.js.map +1 -0
- package/dist/expressions/index.test.d.ts +6 -0
- package/dist/expressions/index.test.d.ts.map +1 -0
- package/dist/expressions/index.test.js +480 -0
- package/dist/expressions/index.test.js.map +1 -0
- package/dist/expressions/literals.d.ts +31 -0
- package/dist/expressions/literals.d.ts.map +1 -0
- package/dist/expressions/literals.js +116 -0
- package/dist/expressions/literals.js.map +1 -0
- package/dist/expressions/operators.d.ts +52 -0
- package/dist/expressions/operators.d.ts.map +1 -0
- package/dist/expressions/operators.js +166 -0
- package/dist/expressions/operators.js.map +1 -0
- package/dist/expressions/other.d.ts +24 -0
- package/dist/expressions/other.d.ts.map +1 -0
- package/dist/expressions/other.js +43 -0
- package/dist/expressions/other.js.map +1 -0
- package/dist/generator-exchange.d.ts +11 -0
- package/dist/generator-exchange.d.ts.map +1 -0
- package/dist/generator-exchange.js +92 -0
- package/dist/generator-exchange.js.map +1 -0
- package/dist/generator.test.d.ts +6 -0
- package/dist/generator.test.d.ts.map +1 -0
- package/dist/generator.test.js +177 -0
- package/dist/generator.test.js.map +1 -0
- package/dist/golden-tests/config-parser.d.ts +9 -0
- package/dist/golden-tests/config-parser.d.ts.map +1 -0
- package/dist/golden-tests/config-parser.js +57 -0
- package/dist/golden-tests/config-parser.js.map +1 -0
- package/dist/golden-tests/discovery.d.ts +9 -0
- package/dist/golden-tests/discovery.d.ts.map +1 -0
- package/dist/golden-tests/discovery.js +51 -0
- package/dist/golden-tests/discovery.js.map +1 -0
- package/{src/golden-tests/index.ts → dist/golden-tests/index.d.ts} +1 -1
- package/dist/golden-tests/index.d.ts.map +1 -0
- package/dist/golden-tests/index.js +9 -0
- package/dist/golden-tests/index.js.map +1 -0
- package/dist/golden-tests/registration.d.ts +9 -0
- package/dist/golden-tests/registration.d.ts.map +1 -0
- package/dist/golden-tests/registration.js +23 -0
- package/dist/golden-tests/registration.js.map +1 -0
- package/dist/golden-tests/runner.d.ts +13 -0
- package/dist/golden-tests/runner.d.ts.map +1 -0
- package/dist/golden-tests/runner.js +99 -0
- package/dist/golden-tests/runner.js.map +1 -0
- package/dist/golden-tests/tree-builder.d.ts +9 -0
- package/dist/golden-tests/tree-builder.d.ts.map +1 -0
- package/dist/golden-tests/tree-builder.js +35 -0
- package/dist/golden-tests/tree-builder.js.map +1 -0
- package/dist/golden-tests/types.d.ts +19 -0
- package/dist/golden-tests/types.d.ts.map +1 -0
- package/dist/golden-tests/types.js +5 -0
- package/dist/golden-tests/types.js.map +1 -0
- package/dist/golden.test.d.ts +11 -0
- package/dist/golden.test.d.ts.map +1 -0
- package/{src/golden.test.ts → dist/golden.test.js} +15 -20
- package/dist/golden.test.js.map +1 -0
- package/dist/hierarchical-bindings.test.d.ts +6 -0
- package/dist/hierarchical-bindings.test.d.ts.map +1 -0
- package/dist/hierarchical-bindings.test.js +194 -0
- package/dist/hierarchical-bindings.test.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.js} +2 -7
- package/dist/index.js.map +1 -0
- package/dist/integration.test.d.ts +6 -0
- package/dist/integration.test.d.ts.map +1 -0
- package/dist/integration.test.js +234 -0
- package/dist/integration.test.js.map +1 -0
- package/dist/specialization/call-site-rewriting.test.d.ts +6 -0
- package/dist/specialization/call-site-rewriting.test.d.ts.map +1 -0
- package/dist/specialization/call-site-rewriting.test.js +92 -0
- package/dist/specialization/call-site-rewriting.test.js.map +1 -0
- package/dist/specialization/collection/expressions.d.ts +10 -0
- package/dist/specialization/collection/expressions.d.ts.map +1 -0
- package/dist/specialization/collection/expressions.js +142 -0
- package/dist/specialization/collection/expressions.js.map +1 -0
- package/dist/specialization/collection/index.d.ts +7 -0
- package/dist/specialization/collection/index.d.ts.map +1 -0
- package/{src/specialization/collection/index.ts → dist/specialization/collection/index.js} +1 -1
- package/dist/specialization/collection/index.js.map +1 -0
- package/dist/specialization/collection/orchestrator.d.ts +11 -0
- package/dist/specialization/collection/orchestrator.d.ts.map +1 -0
- package/dist/specialization/collection/orchestrator.js +18 -0
- package/dist/specialization/collection/orchestrator.js.map +1 -0
- package/dist/specialization/collection/statements.d.ts +10 -0
- package/dist/specialization/collection/statements.d.ts.map +1 -0
- package/dist/specialization/collection/statements.js +75 -0
- package/dist/specialization/collection/statements.js.map +1 -0
- package/dist/specialization/collection.d.ts +6 -0
- package/dist/specialization/collection.d.ts.map +1 -0
- package/dist/specialization/collection.js +6 -0
- package/dist/specialization/collection.js.map +1 -0
- package/dist/specialization/generation.d.ts +11 -0
- package/dist/specialization/generation.d.ts.map +1 -0
- package/dist/specialization/generation.js +137 -0
- package/dist/specialization/generation.js.map +1 -0
- package/dist/specialization/generic-classes.test.d.ts +6 -0
- package/dist/specialization/generic-classes.test.d.ts.map +1 -0
- package/dist/specialization/generic-classes.test.js +55 -0
- package/dist/specialization/generic-classes.test.js.map +1 -0
- package/dist/specialization/generic-functions.test.d.ts +6 -0
- package/dist/specialization/generic-functions.test.d.ts.map +1 -0
- package/dist/specialization/generic-functions.test.js +275 -0
- package/dist/specialization/generic-functions.test.js.map +1 -0
- package/dist/specialization/helpers.d.ts +13 -0
- package/dist/specialization/helpers.d.ts.map +1 -0
- package/dist/specialization/helpers.js +33 -0
- package/dist/specialization/helpers.js.map +1 -0
- package/dist/specialization/index.d.ts +10 -0
- package/dist/specialization/index.d.ts.map +1 -0
- package/{src/specialization/index.ts → dist/specialization/index.js} +3 -17
- package/dist/specialization/index.js.map +1 -0
- package/dist/specialization/interfaces.test.d.ts +6 -0
- package/dist/specialization/interfaces.test.d.ts.map +1 -0
- package/dist/specialization/interfaces.test.js +139 -0
- package/dist/specialization/interfaces.test.js.map +1 -0
- package/dist/specialization/naming.d.ts +13 -0
- package/dist/specialization/naming.d.ts.map +1 -0
- package/dist/specialization/naming.js +25 -0
- package/dist/specialization/naming.js.map +1 -0
- package/dist/specialization/substitution.d.ts +17 -0
- package/dist/specialization/substitution.d.ts.map +1 -0
- package/dist/specialization/substitution.js +150 -0
- package/dist/specialization/substitution.js.map +1 -0
- package/dist/specialization/type-aliases.test.d.ts +6 -0
- package/dist/specialization/type-aliases.test.d.ts.map +1 -0
- package/dist/specialization/type-aliases.test.js +124 -0
- package/dist/specialization/type-aliases.test.js.map +1 -0
- package/dist/specialization/types.d.ts +14 -0
- package/dist/specialization/types.d.ts.map +1 -0
- package/dist/specialization/types.js +5 -0
- package/dist/specialization/types.js.map +1 -0
- package/{src/specialization-generator.ts → dist/specialization-generator.d.ts} +4 -15
- package/dist/specialization-generator.d.ts.map +1 -0
- package/dist/specialization-generator.js +11 -0
- package/dist/specialization-generator.js.map +1 -0
- package/dist/statement-emitter.d.ts +13 -0
- package/dist/statement-emitter.d.ts.map +1 -0
- package/dist/statement-emitter.js +67 -0
- package/dist/statement-emitter.js.map +1 -0
- package/dist/statements/blocks.d.ts +40 -0
- package/dist/statements/blocks.d.ts.map +1 -0
- package/dist/statements/blocks.js +86 -0
- package/dist/statements/blocks.js.map +1 -0
- package/{src/statements/classes/helpers.ts → dist/statements/classes/helpers.d.ts} +2 -3
- package/dist/statements/classes/helpers.d.ts.map +1 -0
- package/dist/statements/classes/helpers.js +8 -0
- package/dist/statements/classes/helpers.js.map +1 -0
- package/dist/statements/classes/index.d.ts +9 -0
- package/dist/statements/classes/index.d.ts.map +1 -0
- package/{src/statements/classes/index.ts → dist/statements/classes/index.js} +2 -6
- package/dist/statements/classes/index.js.map +1 -0
- package/dist/statements/classes/inline-types.d.ts +21 -0
- package/dist/statements/classes/inline-types.d.ts.map +1 -0
- package/dist/statements/classes/inline-types.js +50 -0
- package/dist/statements/classes/inline-types.js.map +1 -0
- package/dist/statements/classes/members/constructors.d.ts +12 -0
- package/dist/statements/classes/members/constructors.d.ts.map +1 -0
- package/dist/statements/classes/members/constructors.js +90 -0
- package/dist/statements/classes/members/constructors.js.map +1 -0
- package/dist/statements/classes/members/index.d.ts +8 -0
- package/dist/statements/classes/members/index.d.ts.map +1 -0
- package/{src/statements/classes/members/index.ts → dist/statements/classes/members/index.js} +1 -1
- package/dist/statements/classes/members/index.js.map +1 -0
- package/dist/statements/classes/members/methods.d.ts +12 -0
- package/dist/statements/classes/members/methods.d.ts.map +1 -0
- package/dist/statements/classes/members/methods.js +100 -0
- package/dist/statements/classes/members/methods.js.map +1 -0
- package/dist/statements/classes/members/orchestrator.d.ts +10 -0
- package/dist/statements/classes/members/orchestrator.d.ts.map +1 -0
- package/dist/statements/classes/members/orchestrator.js +24 -0
- package/dist/statements/classes/members/orchestrator.js.map +1 -0
- package/dist/statements/classes/members/properties.d.ts +12 -0
- package/dist/statements/classes/members/properties.d.ts.map +1 -0
- package/dist/statements/classes/members/properties.js +48 -0
- package/dist/statements/classes/members/properties.js.map +1 -0
- package/dist/statements/classes/members.d.ts +6 -0
- package/dist/statements/classes/members.d.ts.map +1 -0
- package/{src/statements/classes/members.ts → dist/statements/classes/members.js} +1 -1
- package/dist/statements/classes/members.js.map +1 -0
- package/dist/statements/classes/parameters.d.ts +10 -0
- package/dist/statements/classes/parameters.d.ts.map +1 -0
- package/dist/statements/classes/parameters.js +50 -0
- package/dist/statements/classes/parameters.js.map +1 -0
- package/dist/statements/classes/properties.d.ts +11 -0
- package/dist/statements/classes/properties.d.ts.map +1 -0
- package/dist/statements/classes/properties.js +74 -0
- package/dist/statements/classes/properties.js.map +1 -0
- package/dist/statements/classes.d.ts +6 -0
- package/dist/statements/classes.d.ts.map +1 -0
- package/dist/statements/classes.js +6 -0
- package/dist/statements/classes.js.map +1 -0
- package/dist/statements/control/conditionals.d.ts +18 -0
- package/dist/statements/control/conditionals.d.ts.map +1 -0
- package/dist/statements/control/conditionals.js +98 -0
- package/dist/statements/control/conditionals.js.map +1 -0
- package/dist/statements/control/exceptions.d.ts +18 -0
- package/dist/statements/control/exceptions.d.ts.map +1 -0
- package/dist/statements/control/exceptions.js +38 -0
- package/dist/statements/control/exceptions.js.map +1 -0
- package/dist/statements/control/index.d.ts +7 -0
- package/dist/statements/control/index.d.ts.map +1 -0
- package/{src/statements/control/index.ts → dist/statements/control/index.js} +2 -6
- package/dist/statements/control/index.js.map +1 -0
- package/dist/statements/control/loops.d.ts +29 -0
- package/dist/statements/control/loops.d.ts.map +1 -0
- package/dist/statements/control/loops.js +186 -0
- package/dist/statements/control/loops.js.map +1 -0
- package/dist/statements/control.d.ts +6 -0
- package/dist/statements/control.d.ts.map +1 -0
- package/dist/statements/control.js +6 -0
- package/dist/statements/control.js.map +1 -0
- package/dist/statements/declarations/classes.d.ts +12 -0
- package/dist/statements/declarations/classes.d.ts.map +1 -0
- package/dist/statements/declarations/classes.js +61 -0
- package/dist/statements/declarations/classes.js.map +1 -0
- package/dist/statements/declarations/enums.d.ts +12 -0
- package/dist/statements/declarations/enums.d.ts.map +1 -0
- package/dist/statements/declarations/enums.js +25 -0
- package/dist/statements/declarations/enums.js.map +1 -0
- package/dist/statements/declarations/functions.d.ts +12 -0
- package/dist/statements/declarations/functions.d.ts.map +1 -0
- package/dist/statements/declarations/functions.js +110 -0
- package/dist/statements/declarations/functions.js.map +1 -0
- package/dist/statements/declarations/index.d.ts +10 -0
- package/dist/statements/declarations/index.d.ts.map +1 -0
- package/{src/statements/declarations/index.ts → dist/statements/declarations/index.js} +1 -1
- package/dist/statements/declarations/index.js.map +1 -0
- package/dist/statements/declarations/interfaces.d.ts +12 -0
- package/dist/statements/declarations/interfaces.d.ts.map +1 -0
- package/dist/statements/declarations/interfaces.js +85 -0
- package/dist/statements/declarations/interfaces.js.map +1 -0
- package/dist/statements/declarations/structs.test.d.ts +5 -0
- package/dist/statements/declarations/structs.test.d.ts.map +1 -0
- package/dist/statements/declarations/structs.test.js +165 -0
- package/dist/statements/declarations/structs.test.js.map +1 -0
- package/dist/statements/declarations/type-aliases.d.ts +12 -0
- package/dist/statements/declarations/type-aliases.d.ts.map +1 -0
- package/dist/statements/declarations/type-aliases.js +80 -0
- package/dist/statements/declarations/type-aliases.js.map +1 -0
- package/dist/statements/declarations/variables.d.ts +12 -0
- package/dist/statements/declarations/variables.d.ts.map +1 -0
- package/dist/statements/declarations/variables.js +120 -0
- package/dist/statements/declarations/variables.js.map +1 -0
- package/dist/statements/declarations.d.ts +6 -0
- package/dist/statements/declarations.d.ts.map +1 -0
- package/dist/statements/declarations.js +6 -0
- package/dist/statements/declarations.js.map +1 -0
- package/dist/statements/index.d.ts +8 -0
- package/dist/statements/index.d.ts.map +1 -0
- package/dist/statements/index.js +12 -0
- package/dist/statements/index.js.map +1 -0
- package/dist/statements/index.test.d.ts +6 -0
- package/dist/statements/index.test.d.ts.map +1 -0
- package/dist/statements/index.test.js +248 -0
- package/dist/statements/index.test.js.map +1 -0
- package/dist/tests/emitter/expression-emission.test.d.ts +6 -0
- package/dist/tests/emitter/expression-emission.test.d.ts.map +1 -0
- package/dist/tests/emitter/expression-emission.test.js +322 -0
- package/dist/tests/emitter/expression-emission.test.js.map +1 -0
- package/dist/tests/emitter/import-handling.test.d.ts +6 -0
- package/dist/tests/emitter/import-handling.test.d.ts.map +1 -0
- package/dist/tests/emitter/import-handling.test.js +76 -0
- package/dist/tests/emitter/import-handling.test.js.map +1 -0
- package/dist/tests/emitter/module-generation.test.d.ts +6 -0
- package/dist/tests/emitter/module-generation.test.d.ts.map +1 -0
- package/dist/tests/emitter/module-generation.test.js +147 -0
- package/dist/tests/emitter/module-generation.test.js.map +1 -0
- package/dist/tests/emitter/statement-emission.test.d.ts +6 -0
- package/dist/tests/emitter/statement-emission.test.d.ts.map +1 -0
- package/dist/tests/emitter/statement-emission.test.js +138 -0
- package/dist/tests/emitter/statement-emission.test.js.map +1 -0
- package/dist/tests/emitter/type-emission.test.d.ts +6 -0
- package/dist/tests/emitter/type-emission.test.d.ts.map +1 -0
- package/dist/tests/emitter/type-emission.test.js +109 -0
- package/dist/tests/emitter/type-emission.test.js.map +1 -0
- package/dist/tests/generics/call-site-rewriting.test.d.ts +6 -0
- package/dist/tests/generics/call-site-rewriting.test.d.ts.map +1 -0
- package/dist/tests/generics/call-site-rewriting.test.js +92 -0
- package/dist/tests/generics/call-site-rewriting.test.js.map +1 -0
- package/dist/tests/generics/generic-classes.test.d.ts +6 -0
- package/dist/tests/generics/generic-classes.test.d.ts.map +1 -0
- package/dist/tests/generics/generic-classes.test.js +55 -0
- package/dist/tests/generics/generic-classes.test.js.map +1 -0
- package/dist/tests/generics/generic-functions.test.d.ts +6 -0
- package/dist/tests/generics/generic-functions.test.d.ts.map +1 -0
- package/dist/tests/generics/generic-functions.test.js +275 -0
- package/dist/tests/generics/generic-functions.test.js.map +1 -0
- package/dist/tests/generics/interfaces.test.d.ts +6 -0
- package/dist/tests/generics/interfaces.test.d.ts.map +1 -0
- package/dist/tests/generics/interfaces.test.js +139 -0
- package/dist/tests/generics/interfaces.test.js.map +1 -0
- package/dist/tests/generics/type-aliases.test.d.ts +6 -0
- package/dist/tests/generics/type-aliases.test.d.ts.map +1 -0
- package/dist/tests/generics/type-aliases.test.js +124 -0
- package/dist/tests/generics/type-aliases.test.js.map +1 -0
- package/dist/tests/hierarchical-bindings-full-pipeline.test.d.ts +6 -0
- package/dist/tests/hierarchical-bindings-full-pipeline.test.d.ts.map +1 -0
- package/dist/tests/hierarchical-bindings-full-pipeline.test.js +202 -0
- package/dist/tests/hierarchical-bindings-full-pipeline.test.js.map +1 -0
- package/dist/tests/ref-out-parameters.test.d.ts +5 -0
- package/dist/tests/ref-out-parameters.test.d.ts.map +1 -0
- package/dist/tests/ref-out-parameters.test.js +136 -0
- package/dist/tests/ref-out-parameters.test.js.map +1 -0
- package/dist/tests/structs/struct-emission.test.d.ts +5 -0
- package/dist/tests/structs/struct-emission.test.d.ts.map +1 -0
- package/dist/tests/structs/struct-emission.test.js +165 -0
- package/dist/tests/structs/struct-emission.test.js.map +1 -0
- package/dist/type-assertion.test.d.ts +6 -0
- package/dist/type-assertion.test.d.ts.map +1 -0
- package/dist/type-assertion.test.js +133 -0
- package/dist/type-assertion.test.js.map +1 -0
- package/dist/type-emitter.d.ts +6 -0
- package/dist/type-emitter.d.ts.map +1 -0
- package/dist/type-emitter.js +6 -0
- package/dist/type-emitter.js.map +1 -0
- package/dist/types/arrays.d.ts +12 -0
- package/dist/types/arrays.d.ts.map +1 -0
- package/dist/types/arrays.js +15 -0
- package/dist/types/arrays.js.map +1 -0
- package/dist/types/dictionaries.d.ts +17 -0
- package/dist/types/dictionaries.d.ts.map +1 -0
- package/dist/types/dictionaries.js +37 -0
- package/dist/types/dictionaries.js.map +1 -0
- package/dist/types/emitter.d.ts +10 -0
- package/dist/types/emitter.d.ts.map +1 -0
- package/dist/types/emitter.js +53 -0
- package/dist/types/emitter.js.map +1 -0
- package/dist/types/functions.d.ts +12 -0
- package/dist/types/functions.d.ts.map +1 -0
- package/dist/types/functions.js +34 -0
- package/dist/types/functions.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/{src/types/index.ts → dist/types/index.js} +1 -1
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.test.d.ts +6 -0
- package/dist/types/index.test.d.ts.map +1 -0
- package/dist/types/index.test.js +109 -0
- package/dist/types/index.test.js.map +1 -0
- package/dist/types/intersections.d.ts +12 -0
- package/dist/types/intersections.d.ts.map +1 -0
- package/dist/types/intersections.js +13 -0
- package/dist/types/intersections.js.map +1 -0
- package/dist/types/literals.d.ts +12 -0
- package/dist/types/literals.d.ts.map +1 -0
- package/dist/types/literals.js +20 -0
- package/dist/types/literals.js.map +1 -0
- package/{src/types/objects.ts → dist/types/objects.d.ts} +4 -11
- package/dist/types/objects.d.ts.map +1 -0
- package/dist/types/objects.js +19 -0
- package/dist/types/objects.js.map +1 -0
- package/dist/types/parameters.d.ts +15 -0
- package/dist/types/parameters.d.ts.map +1 -0
- package/dist/types/parameters.js +69 -0
- package/dist/types/parameters.js.map +1 -0
- package/dist/types/parameters.test.d.ts +5 -0
- package/dist/types/parameters.test.d.ts.map +1 -0
- package/dist/types/parameters.test.js +135 -0
- package/dist/types/parameters.test.js.map +1 -0
- package/dist/types/primitives.d.ts +12 -0
- package/dist/types/primitives.d.ts.map +1 -0
- package/dist/types/primitives.js +17 -0
- package/dist/types/primitives.js.map +1 -0
- package/dist/types/references.d.ts +14 -0
- package/dist/types/references.d.ts.map +1 -0
- package/dist/types/references.js +154 -0
- package/dist/types/references.js.map +1 -0
- package/dist/types/unions.d.ts +12 -0
- package/dist/types/unions.d.ts.map +1 -0
- package/dist/types/unions.js +45 -0
- package/dist/types/unions.js.map +1 -0
- package/dist/types/unions.test.d.ts +6 -0
- package/dist/types/unions.test.d.ts.map +1 -0
- package/dist/types/unions.test.js +367 -0
- package/dist/types/unions.test.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/union.test.d.ts +6 -0
- package/dist/union.test.d.ts.map +1 -0
- package/dist/union.test.js +367 -0
- package/dist/union.test.js.map +1 -0
- package/package.json +5 -2
- package/scripts/update-golden-tests.ts +0 -119
- package/src/adapter-generator.ts +0 -112
- package/src/array.test.ts +0 -301
- package/src/constants.ts +0 -32
- package/src/core/exports.ts +0 -36
- package/src/core/imports.test.ts +0 -83
- package/src/core/imports.ts +0 -243
- package/src/core/module-emitter/assembly.ts +0 -83
- package/src/core/module-emitter/header.ts +0 -19
- package/src/core/module-emitter/namespace.ts +0 -39
- package/src/core/module-emitter/orchestrator.ts +0 -98
- package/src/core/module-emitter/separation.ts +0 -41
- package/src/core/module-emitter/static-container.ts +0 -75
- package/src/core/module-emitter.test.ts +0 -154
- package/src/core/module-map.ts +0 -218
- package/src/core/options.ts +0 -16
- package/src/core/type-params.ts +0 -34
- package/src/emitter-types/context.ts +0 -91
- package/src/emitter-types/core.ts +0 -138
- package/src/emitter-types/csharp-types.ts +0 -42
- package/src/emitter-types/formatting.ts +0 -13
- package/src/emitter-types/fqn.ts +0 -81
- package/src/emitter-types/index.ts +0 -31
- package/src/emitter.ts +0 -107
- package/src/expression-emitter.ts +0 -112
- package/src/expressions/access.ts +0 -104
- package/src/expressions/calls.ts +0 -264
- package/src/expressions/collections.ts +0 -354
- package/src/expressions/functions.ts +0 -71
- package/src/expressions/identifiers.ts +0 -125
- package/src/expressions/index.test.ts +0 -515
- package/src/expressions/literals.ts +0 -138
- package/src/expressions/operators.ts +0 -211
- package/src/expressions/other.ts +0 -63
- package/src/generator-exchange.ts +0 -120
- package/src/generator.test.ts +0 -193
- package/src/golden-tests/config-parser.ts +0 -67
- package/src/golden-tests/discovery.ts +0 -61
- package/src/golden-tests/registration.ts +0 -26
- package/src/golden-tests/runner.ts +0 -131
- package/src/golden-tests/tree-builder.ts +0 -43
- package/src/golden-tests/types.ts +0 -21
- package/src/hierarchical-bindings.test.ts +0 -258
- package/src/integration.test.ts +0 -303
- package/src/specialization/call-site-rewriting.test.ts +0 -99
- package/src/specialization/collection/expressions.ts +0 -184
- package/src/specialization/collection/orchestrator.ts +0 -25
- package/src/specialization/collection/statements.ts +0 -91
- package/src/specialization/collection.ts +0 -10
- package/src/specialization/generation.ts +0 -189
- package/src/specialization/generic-classes.test.ts +0 -59
- package/src/specialization/generic-functions.test.ts +0 -292
- package/src/specialization/helpers.ts +0 -39
- package/src/specialization/interfaces.test.ts +0 -151
- package/src/specialization/naming.ts +0 -34
- package/src/specialization/substitution.ts +0 -186
- package/src/specialization/type-aliases.test.ts +0 -134
- package/src/specialization/types.ts +0 -19
- package/src/statement-emitter.ts +0 -117
- package/src/statements/blocks.ts +0 -115
- package/src/statements/classes/inline-types.ts +0 -79
- package/src/statements/classes/members/constructors.ts +0 -123
- package/src/statements/classes/members/methods.ts +0 -137
- package/src/statements/classes/members/orchestrator.ts +0 -33
- package/src/statements/classes/members/properties.ts +0 -62
- package/src/statements/classes/parameters.ts +0 -69
- package/src/statements/classes/properties.ts +0 -95
- package/src/statements/classes.ts +0 -14
- package/src/statements/control/conditionals.ts +0 -134
- package/src/statements/control/exceptions.ts +0 -59
- package/src/statements/control/loops.ts +0 -250
- package/src/statements/control.ts +0 -14
- package/src/statements/declarations/classes.ts +0 -89
- package/src/statements/declarations/enums.ts +0 -32
- package/src/statements/declarations/functions.ts +0 -147
- package/src/statements/declarations/interfaces.ts +0 -116
- package/src/statements/declarations/structs.test.ts +0 -182
- package/src/statements/declarations/type-aliases.ts +0 -104
- package/src/statements/declarations/variables.ts +0 -159
- package/src/statements/declarations.ts +0 -13
- package/src/statements/index.test.ts +0 -258
- package/src/statements/index.ts +0 -43
- package/src/type-assertion.test.ts +0 -143
- package/src/type-emitter.ts +0 -18
- package/src/types/arrays.ts +0 -21
- package/src/types/dictionaries.ts +0 -52
- package/src/types/emitter.ts +0 -76
- package/src/types/functions.ts +0 -45
- package/src/types/index.test.ts +0 -116
- package/src/types/intersections.ts +0 -19
- package/src/types/literals.ts +0 -26
- package/src/types/parameters.test.ts +0 -146
- package/src/types/parameters.ts +0 -95
- package/src/types/primitives.ts +0 -24
- package/src/types/references.ts +0 -187
- package/src/types/unions.test.ts +0 -397
- package/src/types/unions.ts +0 -62
- package/src/types.ts +0 -33
- package/testcases/README.md +0 -213
- package/testcases/arrays/basic/ArrayLiteral.ts +0 -4
- package/testcases/arrays/basic/config.yaml +0 -1
- package/testcases/arrays/destructuring/ArrayDestructure.ts +0 -4
- package/testcases/arrays/destructuring/config.yaml +0 -1
- package/testcases/arrays/methods/ArrayMethods.ts +0 -6
- package/testcases/arrays/methods/config.yaml +0 -1
- package/testcases/arrays/multidimensional/MultiDimensional.ts +0 -10
- package/testcases/arrays/multidimensional/config.yaml +0 -1
- package/testcases/arrays/spread/ArraySpread.ts +0 -3
- package/testcases/arrays/spread/config.yaml +0 -1
- package/testcases/async/basic/AsyncFunction.ts +0 -5
- package/testcases/async/basic/config.yaml +0 -1
- package/testcases/classes/abstract/AbstractClasses.ts +0 -53
- package/testcases/classes/abstract/config.yaml +0 -1
- package/testcases/classes/basic/Person.ts +0 -12
- package/testcases/classes/basic/config.yaml +0 -1
- package/testcases/classes/constructor/User.ts +0 -11
- package/testcases/classes/constructor/config.yaml +0 -1
- package/testcases/classes/field-inference/Counter.ts +0 -11
- package/testcases/classes/field-inference/config.yaml +0 -1
- package/testcases/classes/inheritance/Inheritance.ts +0 -24
- package/testcases/classes/inheritance/config.yaml +0 -1
- package/testcases/classes/static-members/MathHelper.ts +0 -12
- package/testcases/classes/static-members/config.yaml +0 -1
- package/testcases/control-flow/error-handling/ErrorHandling.ts +0 -13
- package/testcases/control-flow/error-handling/config.yaml +0 -1
- package/testcases/control-flow/loops/Loops.ts +0 -21
- package/testcases/control-flow/loops/config.yaml +0 -1
- package/testcases/control-flow/switch/SwitchStatement.ts +0 -15
- package/testcases/control-flow/switch/config.yaml +0 -1
- package/testcases/edge-cases/complex-expressions/ComplexExpressions.ts +0 -10
- package/testcases/edge-cases/complex-expressions/config.yaml +0 -1
- package/testcases/edge-cases/nested-scopes/NestedScopes.ts +0 -10
- package/testcases/edge-cases/nested-scopes/config.yaml +0 -1
- package/testcases/edge-cases/shadowing/Shadowing.ts +0 -16
- package/testcases/edge-cases/shadowing/config.yaml +0 -1
- package/testcases/functions/arrow/ArrowFunction.ts +0 -5
- package/testcases/functions/arrow/config.yaml +0 -1
- package/testcases/functions/basic/Greet.ts +0 -3
- package/testcases/functions/basic/config.yaml +0 -1
- package/testcases/functions/closures/Closures.ts +0 -11
- package/testcases/functions/closures/config.yaml +0 -1
- package/testcases/functions/default-params/DefaultParams.ts +0 -7
- package/testcases/functions/default-params/config.yaml +0 -1
- package/testcases/functions/rest-params/RestParams.ts +0 -7
- package/testcases/functions/rest-params/config.yaml +0 -1
- package/testcases/functions/type-guards/TypeGuards.ts +0 -52
- package/testcases/functions/type-guards/config.yaml +0 -1
- package/testcases/operators/logical/LogicalOperators.ts +0 -11
- package/testcases/operators/logical/config.yaml +0 -1
- package/testcases/operators/nullish-coalescing/NullishCoalescing.ts +0 -7
- package/testcases/operators/nullish-coalescing/config.yaml +0 -1
- package/testcases/operators/optional-chaining/OptionalChaining.ts +0 -15
- package/testcases/operators/optional-chaining/config.yaml +0 -1
- package/testcases/real-world/advanced-generics/advanced-generics.ts +0 -116
- package/testcases/real-world/advanced-generics/config.yaml +0 -1
- package/testcases/real-world/async-ops/async-ops.ts +0 -67
- package/testcases/real-world/async-ops/config.yaml +0 -1
- package/testcases/real-world/business-logic/business-logic.ts +0 -215
- package/testcases/real-world/business-logic/config.yaml +0 -1
- package/testcases/real-world/calculator/calculator.ts +0 -29
- package/testcases/real-world/calculator/config.yaml +0 -1
- package/testcases/real-world/data-structures/config.yaml +0 -1
- package/testcases/real-world/data-structures/data-structures.ts +0 -133
- package/testcases/real-world/functional/config.yaml +0 -1
- package/testcases/real-world/functional/functional.ts +0 -116
- package/testcases/real-world/shapes/config.yaml +0 -1
- package/testcases/real-world/shapes/shapes.ts +0 -87
- package/testcases/real-world/string-utils/config.yaml +0 -1
- package/testcases/real-world/string-utils/string-utils.ts +0 -47
- package/testcases/real-world/todo-list/config.yaml +0 -1
- package/testcases/real-world/todo-list/todo-list.ts +0 -52
- package/testcases/real-world/type-guards/config.yaml +0 -1
- package/testcases/real-world/type-guards/type-guards.ts +0 -71
- package/testcases/structs/basic/Point.ts +0 -9
- package/testcases/structs/basic/config.yaml +0 -1
- package/testcases/types/conditional/ConditionalTypes.ts +0 -35
- package/testcases/types/conditional/config.yaml +0 -1
- package/testcases/types/constants/ModuleConstants.ts +0 -6
- package/testcases/types/constants/config.yaml +0 -1
- package/testcases/types/generics/Generics.ts +0 -15
- package/testcases/types/generics/config.yaml +0 -1
- package/testcases/types/interfaces/Interfaces.ts +0 -14
- package/testcases/types/interfaces/config.yaml +0 -1
- package/testcases/types/mapped/MappedTypes.ts +0 -27
- package/testcases/types/mapped/config.yaml +0 -1
- package/testcases/types/tuples-intersections/TuplesAndIntersections.ts +0 -46
- package/testcases/types/tuples-intersections/config.yaml +0 -1
- package/testcases/types/unions/UnionTypes.ts +0 -11
- package/testcases/types/unions/config.yaml +0 -1
- package/tsconfig.json +0 -14
package/src/emitter.ts
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Main C# Emitter - Public API
|
|
3
|
-
* Orchestrates code generation from IR
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { IrModule, Diagnostic } from "@tsonic/frontend";
|
|
7
|
-
import { EmitterOptions } from "./types.js";
|
|
8
|
-
import { emitModule } from "./core/module-emitter.js";
|
|
9
|
-
import { buildModuleMap } from "./core/module-map.js";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Result of batch emission
|
|
13
|
-
*/
|
|
14
|
-
export type EmitResult =
|
|
15
|
-
| { readonly ok: true; readonly files: Map<string, string> }
|
|
16
|
-
| { readonly ok: false; readonly errors: readonly Diagnostic[] };
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Emit a complete C# file from an IR module
|
|
20
|
-
*/
|
|
21
|
-
export const emitCSharpFile = (
|
|
22
|
-
module: IrModule,
|
|
23
|
-
options: Partial<EmitterOptions> = {}
|
|
24
|
-
): string => {
|
|
25
|
-
return emitModule(module, options);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Batch emit multiple IR modules.
|
|
30
|
-
* Returns an error if there are file name collisions after normalization.
|
|
31
|
-
*/
|
|
32
|
-
export const emitCSharpFiles = (
|
|
33
|
-
modules: readonly IrModule[],
|
|
34
|
-
options: Partial<EmitterOptions> = {}
|
|
35
|
-
): EmitResult => {
|
|
36
|
-
// Build module map for cross-file import resolution
|
|
37
|
-
const moduleMapResult = buildModuleMap(modules);
|
|
38
|
-
|
|
39
|
-
if (!moduleMapResult.ok) {
|
|
40
|
-
return { ok: false, errors: moduleMapResult.errors };
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const moduleMap = moduleMapResult.value;
|
|
44
|
-
const exportMap = moduleMapResult.exportMap;
|
|
45
|
-
const results = new Map<string, string>();
|
|
46
|
-
|
|
47
|
-
// Find common root directory for all modules
|
|
48
|
-
const commonRoot = findCommonRoot(modules.map((m) => m.filePath));
|
|
49
|
-
|
|
50
|
-
for (const module of modules) {
|
|
51
|
-
// Create relative path from common root
|
|
52
|
-
const relativePath = module.filePath.startsWith(commonRoot)
|
|
53
|
-
? module.filePath.slice(commonRoot.length).replace(/^\//, "")
|
|
54
|
-
: module.filePath;
|
|
55
|
-
const outputPath = relativePath.replace(/\.ts$/, ".cs");
|
|
56
|
-
|
|
57
|
-
// Mark this module as entry point if it matches the entry point path
|
|
58
|
-
const isEntryPoint = !!(
|
|
59
|
-
options.entryPointPath && module.filePath === options.entryPointPath
|
|
60
|
-
);
|
|
61
|
-
const moduleOptions = {
|
|
62
|
-
...options,
|
|
63
|
-
isEntryPoint,
|
|
64
|
-
moduleMap, // Pass module map to each module emission
|
|
65
|
-
exportMap, // Pass export map for re-export resolution
|
|
66
|
-
};
|
|
67
|
-
const code = emitModule(module, moduleOptions);
|
|
68
|
-
results.set(outputPath, code);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return { ok: true, files: results };
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Find the common root directory for a set of file paths
|
|
76
|
-
*/
|
|
77
|
-
const findCommonRoot = (paths: readonly string[]): string => {
|
|
78
|
-
if (paths.length === 0) return "";
|
|
79
|
-
if (paths.length === 1) {
|
|
80
|
-
const firstPath = paths[0];
|
|
81
|
-
if (!firstPath) return "";
|
|
82
|
-
const lastSlash = firstPath.lastIndexOf("/");
|
|
83
|
-
return lastSlash >= 0 ? firstPath.slice(0, lastSlash + 1) : "";
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Split all paths into segments
|
|
87
|
-
const segments = paths.map((p) => p.split("/"));
|
|
88
|
-
const firstSegments = segments[0];
|
|
89
|
-
if (!firstSegments) return "";
|
|
90
|
-
|
|
91
|
-
const minLength = Math.min(...segments.map((s) => s.length));
|
|
92
|
-
|
|
93
|
-
let commonLength = 0;
|
|
94
|
-
for (let i = 0; i < minLength; i++) {
|
|
95
|
-
const segment = firstSegments[i];
|
|
96
|
-
if (segment && segments.every((s) => s[i] === segment)) {
|
|
97
|
-
commonLength = i + 1;
|
|
98
|
-
} else {
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return firstSegments.slice(0, commonLength).join("/") + "/";
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
// Re-export emitModule for backward compatibility
|
|
107
|
-
export { emitModule } from "./core/module-emitter.js";
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Expression Emitter - IR expressions to C# code
|
|
3
|
-
* Main dispatcher - delegates to specialized modules
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { IrExpression, IrType } from "@tsonic/frontend";
|
|
7
|
-
import { EmitterContext, CSharpFragment } from "./types.js";
|
|
8
|
-
|
|
9
|
-
// Import expression emitters from specialized modules
|
|
10
|
-
import { emitLiteral } from "./expressions/literals.js";
|
|
11
|
-
import { emitIdentifier } from "./expressions/identifiers.js";
|
|
12
|
-
import { emitArray, emitObject } from "./expressions/collections.js";
|
|
13
|
-
import { emitMemberAccess } from "./expressions/access.js";
|
|
14
|
-
import { emitCall, emitNew } from "./expressions/calls.js";
|
|
15
|
-
import {
|
|
16
|
-
emitBinary,
|
|
17
|
-
emitLogical,
|
|
18
|
-
emitUnary,
|
|
19
|
-
emitUpdate,
|
|
20
|
-
emitAssignment,
|
|
21
|
-
emitConditional,
|
|
22
|
-
} from "./expressions/operators.js";
|
|
23
|
-
import {
|
|
24
|
-
emitFunctionExpression,
|
|
25
|
-
emitArrowFunction,
|
|
26
|
-
} from "./expressions/functions.js";
|
|
27
|
-
import {
|
|
28
|
-
emitTemplateLiteral,
|
|
29
|
-
emitSpread,
|
|
30
|
-
emitAwait,
|
|
31
|
-
} from "./expressions/other.js";
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Emit a C# expression from an IR expression
|
|
35
|
-
* @param expr The IR expression to emit
|
|
36
|
-
* @param context The emitter context
|
|
37
|
-
* @param expectedType Optional expected type for contextual typing (e.g., array element type inference)
|
|
38
|
-
*/
|
|
39
|
-
export const emitExpression = (
|
|
40
|
-
expr: IrExpression,
|
|
41
|
-
context: EmitterContext,
|
|
42
|
-
expectedType?: IrType
|
|
43
|
-
): [CSharpFragment, EmitterContext] => {
|
|
44
|
-
switch (expr.kind) {
|
|
45
|
-
case "literal":
|
|
46
|
-
return emitLiteral(expr, context);
|
|
47
|
-
|
|
48
|
-
case "identifier":
|
|
49
|
-
return emitIdentifier(expr, context);
|
|
50
|
-
|
|
51
|
-
case "array":
|
|
52
|
-
return emitArray(expr, context, expectedType);
|
|
53
|
-
|
|
54
|
-
case "object":
|
|
55
|
-
return emitObject(expr, context);
|
|
56
|
-
|
|
57
|
-
case "memberAccess":
|
|
58
|
-
return emitMemberAccess(expr, context);
|
|
59
|
-
|
|
60
|
-
case "call":
|
|
61
|
-
return emitCall(expr, context);
|
|
62
|
-
|
|
63
|
-
case "new":
|
|
64
|
-
return emitNew(expr, context);
|
|
65
|
-
|
|
66
|
-
case "binary":
|
|
67
|
-
return emitBinary(expr, context);
|
|
68
|
-
|
|
69
|
-
case "logical":
|
|
70
|
-
return emitLogical(expr, context);
|
|
71
|
-
|
|
72
|
-
case "unary":
|
|
73
|
-
return emitUnary(expr, context);
|
|
74
|
-
|
|
75
|
-
case "update":
|
|
76
|
-
return emitUpdate(expr, context);
|
|
77
|
-
|
|
78
|
-
case "assignment":
|
|
79
|
-
return emitAssignment(expr, context);
|
|
80
|
-
|
|
81
|
-
case "conditional":
|
|
82
|
-
return emitConditional(expr, context);
|
|
83
|
-
|
|
84
|
-
case "functionExpression":
|
|
85
|
-
return emitFunctionExpression(expr, context);
|
|
86
|
-
|
|
87
|
-
case "arrowFunction":
|
|
88
|
-
return emitArrowFunction(expr, context);
|
|
89
|
-
|
|
90
|
-
case "templateLiteral":
|
|
91
|
-
return emitTemplateLiteral(expr, context);
|
|
92
|
-
|
|
93
|
-
case "spread":
|
|
94
|
-
return emitSpread(expr, context);
|
|
95
|
-
|
|
96
|
-
case "await":
|
|
97
|
-
return emitAwait(expr, context);
|
|
98
|
-
|
|
99
|
-
case "this":
|
|
100
|
-
return [{ text: "this" }, context];
|
|
101
|
-
|
|
102
|
-
default:
|
|
103
|
-
// Fallback for unhandled expressions
|
|
104
|
-
return [{ text: "/* TODO: unhandled expression */" }, context];
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
// Re-export commonly used functions for backward compatibility
|
|
109
|
-
export {
|
|
110
|
-
emitTypeArguments,
|
|
111
|
-
generateSpecializedName,
|
|
112
|
-
} from "./expressions/identifiers.js";
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Member access expression emitters
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { IrExpression } from "@tsonic/frontend";
|
|
6
|
-
import { EmitterContext, CSharpFragment } from "../types.js";
|
|
7
|
-
import { emitExpression } from "../expression-emitter.js";
|
|
8
|
-
import {
|
|
9
|
-
isExplicitViewProperty,
|
|
10
|
-
extractInterfaceNameFromView,
|
|
11
|
-
} from "@tsonic/frontend/types/explicit-views.js";
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Emit a member access expression (dot notation or bracket notation)
|
|
15
|
-
*/
|
|
16
|
-
export const emitMemberAccess = (
|
|
17
|
-
expr: Extract<IrExpression, { kind: "memberAccess" }>,
|
|
18
|
-
context: EmitterContext
|
|
19
|
-
): [CSharpFragment, EmitterContext] => {
|
|
20
|
-
// Check if this is a hierarchical member binding
|
|
21
|
-
if (expr.memberBinding) {
|
|
22
|
-
// Emit the full CLR type and member with global:: prefix
|
|
23
|
-
const { assembly, type, member } = expr.memberBinding;
|
|
24
|
-
const text = `global::${assembly}.${type}.${member}`;
|
|
25
|
-
return [{ text }, context];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const [objectFrag, newContext] = emitExpression(expr.object, context);
|
|
29
|
-
|
|
30
|
-
// Default runtime to "js" when not specified
|
|
31
|
-
const runtime = context.options.runtime ?? "js";
|
|
32
|
-
|
|
33
|
-
if (expr.isComputed) {
|
|
34
|
-
// Check if this is array index access - rewrite to static helper
|
|
35
|
-
const objectType = expr.object.inferredType;
|
|
36
|
-
const isArrayType = objectType?.kind === "arrayType";
|
|
37
|
-
|
|
38
|
-
// For TS arrays, use Tsonic.Runtime.Array.get() in BOTH modes
|
|
39
|
-
// This provides TS array semantics (auto-grow, sparse arrays, etc.)
|
|
40
|
-
// Note: Tsonic.Runtime is compiler support for lowered TS constructs (both modes)
|
|
41
|
-
// Tsonic.JSRuntime is JS built-ins like .map/.filter (js mode only)
|
|
42
|
-
if (isArrayType) {
|
|
43
|
-
const indexContext = { ...newContext, isArrayIndex: true };
|
|
44
|
-
const [propFrag, contextWithIndex] = emitExpression(
|
|
45
|
-
expr.property as IrExpression,
|
|
46
|
-
indexContext
|
|
47
|
-
);
|
|
48
|
-
const finalContext = { ...contextWithIndex, isArrayIndex: false };
|
|
49
|
-
const text = `global::Tsonic.Runtime.Array.get(${objectFrag.text}, ${propFrag.text})`;
|
|
50
|
-
return [{ text }, finalContext];
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// CLR indexer access (non-TS-array types like List<T>, string, etc.)
|
|
54
|
-
// CLR indexers require integral indices.
|
|
55
|
-
// This applies in BOTH js and dotnet modes - CLR type requirements are mode-independent.
|
|
56
|
-
const indexContext = { ...newContext, isArrayIndex: true };
|
|
57
|
-
const [propFrag, contextWithIndex] = emitExpression(
|
|
58
|
-
expr.property as IrExpression,
|
|
59
|
-
indexContext
|
|
60
|
-
);
|
|
61
|
-
const finalContext = { ...contextWithIndex, isArrayIndex: false };
|
|
62
|
-
const accessor = expr.isOptional ? "?[" : "[";
|
|
63
|
-
|
|
64
|
-
// Check if the index is already known to be int (e.g., canonical loop counter)
|
|
65
|
-
const indexExpr = expr.property as IrExpression;
|
|
66
|
-
const isKnownInt =
|
|
67
|
-
indexExpr.kind === "identifier" &&
|
|
68
|
-
context.intLoopVars?.has(indexExpr.name);
|
|
69
|
-
|
|
70
|
-
// Skip cast if index is known int, otherwise cast for safety
|
|
71
|
-
const indexText = isKnownInt ? propFrag.text : `(int)(${propFrag.text})`;
|
|
72
|
-
const text = `${objectFrag.text}${accessor}${indexText}]`;
|
|
73
|
-
return [{ text }, finalContext];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Property access
|
|
77
|
-
const prop = expr.property as string;
|
|
78
|
-
const objectType = expr.object.inferredType;
|
|
79
|
-
const isArrayType = objectType?.kind === "arrayType";
|
|
80
|
-
|
|
81
|
-
// In JS runtime mode, rewrite array.length → global::Tsonic.Runtime.Array.length(array)
|
|
82
|
-
// In dotnet mode, there is no JS emulation - users access .Count directly on List<T>
|
|
83
|
-
if (isArrayType && prop === "length" && runtime === "js") {
|
|
84
|
-
const text = `global::Tsonic.Runtime.Array.length(${objectFrag.text})`;
|
|
85
|
-
return [{ text }, newContext];
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Handle explicit interface view properties (As_IInterface)
|
|
89
|
-
if (isExplicitViewProperty(prop)) {
|
|
90
|
-
const interfaceName = extractInterfaceNameFromView(prop);
|
|
91
|
-
if (interfaceName) {
|
|
92
|
-
// Emit as C# interface cast: ((IInterface)obj)
|
|
93
|
-
// TODO: Need to look up full interface name from metadata
|
|
94
|
-
// For now, use the extracted short name
|
|
95
|
-
const text = `((${interfaceName})${objectFrag.text})`;
|
|
96
|
-
return [{ text }, newContext];
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Regular property access
|
|
101
|
-
const accessor = expr.isOptional ? "?." : ".";
|
|
102
|
-
const text = `${objectFrag.text}${accessor}${prop}`;
|
|
103
|
-
return [{ text }, newContext];
|
|
104
|
-
};
|
package/src/expressions/calls.ts
DELETED
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Call and new expression emitters
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { IrExpression } from "@tsonic/frontend";
|
|
6
|
-
import { EmitterContext, CSharpFragment } from "../types.js";
|
|
7
|
-
import { emitExpression } from "../expression-emitter.js";
|
|
8
|
-
import { emitTypeArguments, generateSpecializedName } from "./identifiers.js";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Ref/out/in parameter handling:
|
|
12
|
-
* The frontend extracts parameter passing modes from resolved signatures
|
|
13
|
-
* and attaches them to IrCallExpression.argumentPassing array.
|
|
14
|
-
* The emitter reads this array and prefixes arguments with ref/out/in keywords.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Check if an expression is an lvalue (can be passed by reference)
|
|
19
|
-
* Only identifiers and member accesses are lvalues in C#
|
|
20
|
-
*/
|
|
21
|
-
const isLValue = (expr: IrExpression): boolean => {
|
|
22
|
-
return expr.kind === "identifier" || expr.kind === "memberAccess";
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Check if a call expression needs an explicit cast because the inferred type
|
|
27
|
-
* differs from the C# return type. This handles cases like Math.floor() which
|
|
28
|
-
* returns double in C# but is cast to int in TypeScript via `as int`.
|
|
29
|
-
*/
|
|
30
|
-
const needsIntCast = (
|
|
31
|
-
expr: Extract<IrExpression, { kind: "call" }>,
|
|
32
|
-
calleeName: string
|
|
33
|
-
): boolean => {
|
|
34
|
-
// Check if the inferred type is int (a reference type from @tsonic/types)
|
|
35
|
-
const inferredType = expr.inferredType;
|
|
36
|
-
if (
|
|
37
|
-
!inferredType ||
|
|
38
|
-
inferredType.kind !== "referenceType" ||
|
|
39
|
-
inferredType.name !== "int"
|
|
40
|
-
) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Check if this is a Math method that returns double
|
|
45
|
-
const mathMethodsReturningDouble = [
|
|
46
|
-
"Math.floor",
|
|
47
|
-
"Math.ceil",
|
|
48
|
-
"Math.round",
|
|
49
|
-
"Math.abs",
|
|
50
|
-
"Math.pow",
|
|
51
|
-
"Math.sqrt",
|
|
52
|
-
"Math.min",
|
|
53
|
-
"Math.max",
|
|
54
|
-
"Tsonic.JSRuntime.Math.floor",
|
|
55
|
-
"Tsonic.JSRuntime.Math.ceil",
|
|
56
|
-
"Tsonic.JSRuntime.Math.round",
|
|
57
|
-
];
|
|
58
|
-
|
|
59
|
-
return mathMethodsReturningDouble.some(
|
|
60
|
-
(m) => calleeName === m || calleeName.endsWith(`.${m.split(".").pop()}`)
|
|
61
|
-
);
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Emit a function call expression
|
|
66
|
-
*/
|
|
67
|
-
export const emitCall = (
|
|
68
|
-
expr: Extract<IrExpression, { kind: "call" }>,
|
|
69
|
-
context: EmitterContext
|
|
70
|
-
): [CSharpFragment, EmitterContext] => {
|
|
71
|
-
// Type-aware method call rewriting
|
|
72
|
-
// Use inferredType to determine if we need to rewrite as static helper
|
|
73
|
-
if (
|
|
74
|
-
expr.callee.kind === "memberAccess" &&
|
|
75
|
-
typeof expr.callee.property === "string"
|
|
76
|
-
) {
|
|
77
|
-
const methodName = expr.callee.property;
|
|
78
|
-
const objectType = expr.callee.object.inferredType;
|
|
79
|
-
|
|
80
|
-
// Rewrite based on type:
|
|
81
|
-
// - string → Tsonic.JSRuntime.String.method()
|
|
82
|
-
// - number → Tsonic.JSRuntime.Number.method()
|
|
83
|
-
// - Array<T> → Tsonic.JSRuntime.Array.method() (extension methods on List<T>)
|
|
84
|
-
// - Other custom types → Keep as instance method
|
|
85
|
-
|
|
86
|
-
const isStringType =
|
|
87
|
-
objectType?.kind === "primitiveType" && objectType.name === "string";
|
|
88
|
-
const isNumberType =
|
|
89
|
-
objectType?.kind === "primitiveType" && objectType.name === "number";
|
|
90
|
-
const isArrayType = objectType?.kind === "arrayType";
|
|
91
|
-
|
|
92
|
-
const shouldRewriteAsStatic = isStringType || isNumberType || isArrayType;
|
|
93
|
-
|
|
94
|
-
// Only rewrite to JSRuntime in "js" mode
|
|
95
|
-
// In "dotnet" mode, there is no JS emulation - use .NET APIs directly
|
|
96
|
-
const runtime = context.options.runtime ?? "js";
|
|
97
|
-
if (shouldRewriteAsStatic && runtime === "js") {
|
|
98
|
-
// Runtime mode "js": Use Tsonic.JSRuntime
|
|
99
|
-
// Determine which runtime class based on type
|
|
100
|
-
let runtimeClass: string;
|
|
101
|
-
if (isStringType) {
|
|
102
|
-
runtimeClass = "String";
|
|
103
|
-
} else if (isNumberType) {
|
|
104
|
-
runtimeClass = "Number";
|
|
105
|
-
} else {
|
|
106
|
-
runtimeClass = "Array";
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Rewrite: obj.method(args) → global::Tsonic.JSRuntime.{Class}.method(obj, args)
|
|
110
|
-
const [objectFrag, objContext] = emitExpression(
|
|
111
|
-
expr.callee.object,
|
|
112
|
-
context
|
|
113
|
-
);
|
|
114
|
-
let currentContext = objContext;
|
|
115
|
-
|
|
116
|
-
const args: string[] = [objectFrag.text]; // Object becomes first argument
|
|
117
|
-
for (let i = 0; i < expr.arguments.length; i++) {
|
|
118
|
-
const arg = expr.arguments[i];
|
|
119
|
-
if (!arg) continue; // Skip undefined (shouldn't happen in valid IR)
|
|
120
|
-
if (arg.kind === "spread") {
|
|
121
|
-
const [spreadFrag, ctx] = emitExpression(
|
|
122
|
-
arg.expression,
|
|
123
|
-
currentContext
|
|
124
|
-
);
|
|
125
|
-
args.push(`params ${spreadFrag.text}`);
|
|
126
|
-
currentContext = ctx;
|
|
127
|
-
} else {
|
|
128
|
-
const [argFrag, ctx] = emitExpression(arg, currentContext);
|
|
129
|
-
// Check if this argument needs ref/out/in prefix
|
|
130
|
-
// Note: argumentPassing[i] corresponds to method parameter i+1 (first param is the object)
|
|
131
|
-
// Only add prefix if argument is an lvalue (identifier or member access)
|
|
132
|
-
const passingMode = expr.argumentPassing?.[i + 1];
|
|
133
|
-
const prefix =
|
|
134
|
-
passingMode && passingMode !== "value" && isLValue(arg)
|
|
135
|
-
? `${passingMode} `
|
|
136
|
-
: "";
|
|
137
|
-
args.push(`${prefix}${argFrag.text}`);
|
|
138
|
-
currentContext = ctx;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const text = `global::Tsonic.JSRuntime.${runtimeClass}.${methodName}(${args.join(", ")})`;
|
|
143
|
-
return [{ text }, currentContext];
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Regular function call
|
|
148
|
-
const [calleeFrag, newContext] = emitExpression(expr.callee, context);
|
|
149
|
-
let currentContext = newContext;
|
|
150
|
-
|
|
151
|
-
// Handle generic type arguments
|
|
152
|
-
let typeArgsStr = "";
|
|
153
|
-
let finalCalleeName = calleeFrag.text;
|
|
154
|
-
|
|
155
|
-
if (expr.typeArguments && expr.typeArguments.length > 0) {
|
|
156
|
-
if (expr.requiresSpecialization) {
|
|
157
|
-
// Monomorphisation: Generate specialized method name
|
|
158
|
-
// e.g., process<string> → process__string
|
|
159
|
-
const [specializedName, specContext] = generateSpecializedName(
|
|
160
|
-
calleeFrag.text,
|
|
161
|
-
expr.typeArguments,
|
|
162
|
-
currentContext
|
|
163
|
-
);
|
|
164
|
-
finalCalleeName = specializedName;
|
|
165
|
-
currentContext = specContext;
|
|
166
|
-
} else {
|
|
167
|
-
// Emit explicit type arguments for generic call
|
|
168
|
-
// e.g., identity<string>(value)
|
|
169
|
-
const [typeArgs, typeContext] = emitTypeArguments(
|
|
170
|
-
expr.typeArguments,
|
|
171
|
-
currentContext
|
|
172
|
-
);
|
|
173
|
-
typeArgsStr = typeArgs;
|
|
174
|
-
currentContext = typeContext;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const args: string[] = [];
|
|
179
|
-
for (let i = 0; i < expr.arguments.length; i++) {
|
|
180
|
-
const arg = expr.arguments[i];
|
|
181
|
-
if (!arg) continue; // Skip undefined (shouldn't happen in valid IR)
|
|
182
|
-
if (arg.kind === "spread") {
|
|
183
|
-
// Spread in function call
|
|
184
|
-
const [spreadFrag, ctx] = emitExpression(arg.expression, currentContext);
|
|
185
|
-
args.push(`params ${spreadFrag.text}`);
|
|
186
|
-
currentContext = ctx;
|
|
187
|
-
} else {
|
|
188
|
-
const [argFrag, ctx] = emitExpression(arg, currentContext);
|
|
189
|
-
// Check if this argument needs ref/out/in prefix
|
|
190
|
-
// Only add prefix if argument is an lvalue (identifier or member access)
|
|
191
|
-
const passingMode = expr.argumentPassing?.[i];
|
|
192
|
-
const prefix =
|
|
193
|
-
passingMode && passingMode !== "value" && isLValue(arg)
|
|
194
|
-
? `${passingMode} `
|
|
195
|
-
: "";
|
|
196
|
-
args.push(`${prefix}${argFrag.text}`);
|
|
197
|
-
currentContext = ctx;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const callOp = expr.isOptional ? "?." : "";
|
|
202
|
-
const callText = `${finalCalleeName}${typeArgsStr}${callOp}(${args.join(", ")})`;
|
|
203
|
-
|
|
204
|
-
// Add cast if needed (e.g., Math.floor returning double but asserted as int)
|
|
205
|
-
const text = needsIntCast(expr, finalCalleeName)
|
|
206
|
-
? `(int)${callText}`
|
|
207
|
-
: callText;
|
|
208
|
-
|
|
209
|
-
return [{ text }, currentContext];
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Emit a new expression
|
|
214
|
-
*/
|
|
215
|
-
export const emitNew = (
|
|
216
|
-
expr: Extract<IrExpression, { kind: "new" }>,
|
|
217
|
-
context: EmitterContext
|
|
218
|
-
): [CSharpFragment, EmitterContext] => {
|
|
219
|
-
const [calleeFrag, newContext] = emitExpression(expr.callee, context);
|
|
220
|
-
let currentContext = newContext;
|
|
221
|
-
|
|
222
|
-
// Handle generic type arguments
|
|
223
|
-
let typeArgsStr = "";
|
|
224
|
-
let finalClassName = calleeFrag.text;
|
|
225
|
-
|
|
226
|
-
if (expr.typeArguments && expr.typeArguments.length > 0) {
|
|
227
|
-
if (expr.requiresSpecialization) {
|
|
228
|
-
// Monomorphisation: Generate specialized class name
|
|
229
|
-
// e.g., new Box<string>() → new Box__string()
|
|
230
|
-
const [specializedName, specContext] = generateSpecializedName(
|
|
231
|
-
calleeFrag.text,
|
|
232
|
-
expr.typeArguments,
|
|
233
|
-
currentContext
|
|
234
|
-
);
|
|
235
|
-
finalClassName = specializedName;
|
|
236
|
-
currentContext = specContext;
|
|
237
|
-
} else {
|
|
238
|
-
// Emit explicit type arguments for generic constructor
|
|
239
|
-
// e.g., new Box<string>(value)
|
|
240
|
-
const [typeArgs, typeContext] = emitTypeArguments(
|
|
241
|
-
expr.typeArguments,
|
|
242
|
-
currentContext
|
|
243
|
-
);
|
|
244
|
-
typeArgsStr = typeArgs;
|
|
245
|
-
currentContext = typeContext;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
const args: string[] = [];
|
|
250
|
-
for (const arg of expr.arguments) {
|
|
251
|
-
if (arg.kind === "spread") {
|
|
252
|
-
const [spreadFrag, ctx] = emitExpression(arg.expression, currentContext);
|
|
253
|
-
args.push(`params ${spreadFrag.text}`);
|
|
254
|
-
currentContext = ctx;
|
|
255
|
-
} else {
|
|
256
|
-
const [argFrag, ctx] = emitExpression(arg, currentContext);
|
|
257
|
-
args.push(argFrag.text);
|
|
258
|
-
currentContext = ctx;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
const text = `new ${finalClassName}${typeArgsStr}(${args.join(", ")})`;
|
|
263
|
-
return [{ text }, currentContext];
|
|
264
|
-
};
|