@geastack/compiler 1.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/LICENSE +202 -0
- package/README.md +149 -0
- package/dist/cli-analyze.d.ts +1 -0
- package/dist/cli-analyze.js +61 -0
- package/dist/cli-coverage.d.ts +1 -0
- package/dist/cli-coverage.js +329 -0
- package/dist/cli-emit.d.ts +10 -0
- package/dist/cli-emit.js +398 -0
- package/dist/cli-module-graph.d.ts +18 -0
- package/dist/cli-module-graph.js +123 -0
- package/dist/cli-package-source.d.ts +5 -0
- package/dist/cli-package-source.js +116 -0
- package/dist/cli-project.d.ts +2 -0
- package/dist/cli-project.js +60 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +199 -0
- package/dist/compiler.d.ts +228 -0
- package/dist/compiler.js +1029 -0
- package/dist/conversion/algebra.d.ts +218 -0
- package/dist/conversion/algebra.js +155 -0
- package/dist/conversion/build.d.ts +67 -0
- package/dist/conversion/build.js +1378 -0
- package/dist/conversion/derive.d.ts +37 -0
- package/dist/conversion/derive.js +260 -0
- package/dist/conversion/graph-validation.d.ts +8 -0
- package/dist/conversion/graph-validation.js +97 -0
- package/dist/conversion/native-callable-adapter.d.ts +13 -0
- package/dist/conversion/native-callable-adapter.js +53 -0
- package/dist/conversion/native-class-reference.d.ts +12 -0
- package/dist/conversion/native-class-reference.js +39 -0
- package/dist/conversion/native-payload-transport.d.ts +25 -0
- package/dist/conversion/native-payload-transport.js +33 -0
- package/dist/conversion/native-selection.d.ts +49 -0
- package/dist/conversion/native-selection.js +135 -0
- package/dist/conversion/native-sum.d.ts +42 -0
- package/dist/conversion/native-sum.js +115 -0
- package/dist/conversion/nodes.d.ts +55 -0
- package/dist/conversion/nodes.js +91 -0
- package/dist/conversion/operand-view.d.ts +14 -0
- package/dist/conversion/operand-view.js +20 -0
- package/dist/conversion/record-view.d.ts +157 -0
- package/dist/conversion/record-view.js +273 -0
- package/dist/conversion/registry.d.ts +217 -0
- package/dist/conversion/registry.js +1 -0
- package/dist/diagnostics/model.d.ts +76 -0
- package/dist/diagnostics/model.js +60 -0
- package/dist/diagnostics/sweep.d.ts +31 -0
- package/dist/diagnostics/sweep.js +112 -0
- package/dist/identity/ids.d.ts +179 -0
- package/dist/identity/ids.js +212 -0
- package/dist/ir/absent-class-arm.d.ts +48 -0
- package/dist/ir/absent-class-arm.js +157 -0
- package/dist/ir/borrow-effects.d.ts +23 -0
- package/dist/ir/borrow-effects.js +151 -0
- package/dist/ir/borrowed-call-arguments.d.ts +40 -0
- package/dist/ir/borrowed-call-arguments.js +117 -0
- package/dist/ir/build.d.ts +168 -0
- package/dist/ir/build.js +459 -0
- package/dist/ir/call-dispatch.d.ts +38 -0
- package/dist/ir/call-dispatch.js +502 -0
- package/dist/ir/call-entry.d.ts +142 -0
- package/dist/ir/call-entry.js +386 -0
- package/dist/ir/callable-class-flow.d.ts +27 -0
- package/dist/ir/callable-class-flow.js +1386 -0
- package/dist/ir/callable-field-slots.d.ts +22 -0
- package/dist/ir/callable-field-slots.js +166 -0
- package/dist/ir/callable-identity-demand.d.ts +52 -0
- package/dist/ir/callable-identity-demand.js +460 -0
- package/dist/ir/callable-member-candidates.d.ts +9 -0
- package/dist/ir/callable-member-candidates.js +39 -0
- package/dist/ir/callable-records.d.ts +21 -0
- package/dist/ir/callable-records.js +411 -0
- package/dist/ir/captures.d.ts +26 -0
- package/dist/ir/captures.js +335 -0
- package/dist/ir/certificate.d.ts +45 -0
- package/dist/ir/certificate.js +47 -0
- package/dist/ir/certify/carrier-keys.d.ts +73 -0
- package/dist/ir/certify/carrier-keys.js +221 -0
- package/dist/ir/certify/function-source.d.ts +4 -0
- package/dist/ir/certify/function-source.js +28 -0
- package/dist/ir/certify/has-property-key.d.ts +88 -0
- package/dist/ir/certify/has-property-key.js +116 -0
- package/dist/ir/certify/instanceof-key.d.ts +24 -0
- package/dist/ir/certify/instanceof-key.js +35 -0
- package/dist/ir/certify/property-access-keys.d.ts +172 -0
- package/dist/ir/certify/property-access-keys.js +291 -0
- package/dist/ir/certify/property-access.d.ts +3 -0
- package/dist/ir/certify/property-access.js +597 -0
- package/dist/ir/certify/runtime-helper.d.ts +3 -0
- package/dist/ir/certify/runtime-helper.js +326 -0
- package/dist/ir/certify/typeof-operand.d.ts +14 -0
- package/dist/ir/certify/typeof-operand.js +16 -0
- package/dist/ir/certify.d.ts +123 -0
- package/dist/ir/certify.js +481 -0
- package/dist/ir/class-evaluation.d.ts +26 -0
- package/dist/ir/class-evaluation.js +50 -0
- package/dist/ir/class-static-fields.d.ts +60 -0
- package/dist/ir/class-static-fields.js +108 -0
- package/dist/ir/construct-entry.d.ts +26 -0
- package/dist/ir/construct-entry.js +117 -0
- package/dist/ir/dead-values.d.ts +90 -0
- package/dist/ir/dead-values.js +184 -0
- package/dist/ir/deferral.d.ts +99 -0
- package/dist/ir/deferral.js +409 -0
- package/dist/ir/dense-loops.d.ts +230 -0
- package/dist/ir/dense-loops.js +697 -0
- package/dist/ir/dominance.d.ts +82 -0
- package/dist/ir/dominance.js +268 -0
- package/dist/ir/emission-representations.d.ts +71 -0
- package/dist/ir/emission-representations.js +350 -0
- package/dist/ir/facts.d.ts +218 -0
- package/dist/ir/facts.js +181 -0
- package/dist/ir/fixed-data-definition.d.ts +19 -0
- package/dist/ir/fixed-data-definition.js +49 -0
- package/dist/ir/generator-split.d.ts +38 -0
- package/dist/ir/generator-split.js +329 -0
- package/dist/ir/hoist.d.ts +55 -0
- package/dist/ir/hoist.js +375 -0
- package/dist/ir/instantiation.d.ts +61 -0
- package/dist/ir/instantiation.js +137 -0
- package/dist/ir/integer-storage.d.ts +170 -0
- package/dist/ir/integer-storage.js +822 -0
- package/dist/ir/integers.d.ts +161 -0
- package/dist/ir/integers.js +539 -0
- package/dist/ir/integrity-restrictions.d.ts +50 -0
- package/dist/ir/integrity-restrictions.js +118 -0
- package/dist/ir/local-iterators.d.ts +4 -0
- package/dist/ir/local-iterators.js +27 -0
- package/dist/ir/lower-allocation.d.ts +4 -0
- package/dist/ir/lower-allocation.js +325 -0
- package/dist/ir/lower-completion.d.ts +15 -0
- package/dist/ir/lower-completion.js +25 -0
- package/dist/ir/lower-destructuring.d.ts +5 -0
- package/dist/ir/lower-destructuring.js +693 -0
- package/dist/ir/lower-element.d.ts +29 -0
- package/dist/ir/lower-element.js +111 -0
- package/dist/ir/lower-exceptions.d.ts +47 -0
- package/dist/ir/lower-exceptions.js +92 -0
- package/dist/ir/lower-flow.d.ts +137 -0
- package/dist/ir/lower-flow.js +600 -0
- package/dist/ir/lower-graph.d.ts +218 -0
- package/dist/ir/lower-graph.js +687 -0
- package/dist/ir/lower-invocation.d.ts +4 -0
- package/dist/ir/lower-invocation.js +514 -0
- package/dist/ir/lower-narrow.d.ts +53 -0
- package/dist/ir/lower-narrow.js +320 -0
- package/dist/ir/lower-operands.d.ts +272 -0
- package/dist/ir/lower-operands.js +461 -0
- package/dist/ir/lower-property.d.ts +21 -0
- package/dist/ir/lower-property.js +132 -0
- package/dist/ir/lower-protocol.d.ts +11 -0
- package/dist/ir/lower-protocol.js +118 -0
- package/dist/ir/lower-short-circuit.d.ts +41 -0
- package/dist/ir/lower-short-circuit.js +63 -0
- package/dist/ir/lower.d.ts +82 -0
- package/dist/ir/lower.js +1346 -0
- package/dist/ir/model.d.ts +1474 -0
- package/dist/ir/model.js +6 -0
- package/dist/ir/native-absent-property.d.ts +3 -0
- package/dist/ir/native-absent-property.js +13 -0
- package/dist/ir/native-array-transport.d.ts +7 -0
- package/dist/ir/native-array-transport.js +46 -0
- package/dist/ir/native-callable-bind.d.ts +9 -0
- package/dist/ir/native-callable-bind.js +30 -0
- package/dist/ir/native-carrier-predicate.d.ts +34 -0
- package/dist/ir/native-carrier-predicate.js +49 -0
- package/dist/ir/native-class-accessor.d.ts +18 -0
- package/dist/ir/native-class-accessor.js +52 -0
- package/dist/ir/native-class-construction.d.ts +16 -0
- package/dist/ir/native-class-construction.js +71 -0
- package/dist/ir/native-class-initialization.d.ts +15 -0
- package/dist/ir/native-class-initialization.js +56 -0
- package/dist/ir/native-class-origins.d.ts +13 -0
- package/dist/ir/native-class-origins.js +237 -0
- package/dist/ir/native-dictionary-transport.d.ts +6 -0
- package/dist/ir/native-dictionary-transport.js +37 -0
- package/dist/ir/native-enumeration.d.ts +14 -0
- package/dist/ir/native-enumeration.js +26 -0
- package/dist/ir/native-equality.d.ts +10 -0
- package/dist/ir/native-equality.js +18 -0
- package/dist/ir/native-field-owner.d.ts +37 -0
- package/dist/ir/native-field-owner.js +183 -0
- package/dist/ir/native-fixed-layout.d.ts +41 -0
- package/dist/ir/native-fixed-layout.js +232 -0
- package/dist/ir/native-host-construction.d.ts +53 -0
- package/dist/ir/native-host-construction.js +62 -0
- package/dist/ir/native-key-query.d.ts +4 -0
- package/dist/ir/native-key-query.js +38 -0
- package/dist/ir/native-merge-transport.d.ts +25 -0
- package/dist/ir/native-merge-transport.js +71 -0
- package/dist/ir/native-record-index-transport.d.ts +11 -0
- package/dist/ir/native-record-index-transport.js +34 -0
- package/dist/ir/native-record-index.d.ts +12 -0
- package/dist/ir/native-record-index.js +27 -0
- package/dist/ir/native-reflect-field.d.ts +5 -0
- package/dist/ir/native-reflect-field.js +33 -0
- package/dist/ir/native-sequence-transport.d.ts +7 -0
- package/dist/ir/native-sequence-transport.js +53 -0
- package/dist/ir/numeric-intrinsics.d.ts +13 -0
- package/dist/ir/numeric-intrinsics.js +57 -0
- package/dist/ir/object-value-conversions.d.ts +20 -0
- package/dist/ir/object-value-conversions.js +50 -0
- package/dist/ir/physical-class-reflection.d.ts +9 -0
- package/dist/ir/physical-class-reflection.js +57 -0
- package/dist/ir/presence-proof.d.ts +42 -0
- package/dist/ir/presence-proof.js +490 -0
- package/dist/ir/program-facts.d.ts +106 -0
- package/dist/ir/program-facts.js +319 -0
- package/dist/ir/proven-branches.d.ts +16 -0
- package/dist/ir/proven-branches.js +219 -0
- package/dist/ir/queries.d.ts +41 -0
- package/dist/ir/queries.js +213 -0
- package/dist/ir/reflection-demand.d.ts +64 -0
- package/dist/ir/reflection-demand.js +1394 -0
- package/dist/ir/refusal.d.ts +43 -0
- package/dist/ir/refusal.js +28 -0
- package/dist/ir/shake.d.ts +37 -0
- package/dist/ir/shake.js +1078 -0
- package/dist/ir/static-callables.d.ts +11 -0
- package/dist/ir/static-callables.js +163 -0
- package/dist/ir/string-layout-reuse.d.ts +13 -0
- package/dist/ir/string-layout-reuse.js +39 -0
- package/dist/ir/string-length-reuse.d.ts +8 -0
- package/dist/ir/string-length-reuse.js +47 -0
- package/dist/ir/transfer.d.ts +78 -0
- package/dist/ir/transfer.js +270 -0
- package/dist/ir/type-query-results.d.ts +25 -0
- package/dist/ir/type-query-results.js +96 -0
- package/dist/ir/typed-property-access.d.ts +100 -0
- package/dist/ir/typed-property-access.js +161 -0
- package/dist/ir/verify.d.ts +19 -0
- package/dist/ir/verify.js +355 -0
- package/dist/plugins/apple/constructors.d.ts +112 -0
- package/dist/plugins/apple/constructors.js +217 -0
- package/dist/plugins/apple/host.d.ts +181 -0
- package/dist/plugins/apple/host.js +262 -0
- package/dist/plugins/apple/jsx.d.ts +2 -0
- package/dist/plugins/apple/jsx.js +293 -0
- package/dist/plugins/apple/members.d.ts +16 -0
- package/dist/plugins/apple/members.js +190 -0
- package/dist/plugins/apple/plugin.d.ts +2 -0
- package/dist/plugins/apple/plugin.js +156 -0
- package/dist/plugins/gea/component-classes.d.ts +25 -0
- package/dist/plugins/gea/component-classes.js +162 -0
- package/dist/plugins/gea/component-inline.d.ts +13 -0
- package/dist/plugins/gea/component-inline.js +532 -0
- package/dist/plugins/gea/constructors.d.ts +23 -0
- package/dist/plugins/gea/constructors.js +100 -0
- package/dist/plugins/gea/contract.d.ts +150 -0
- package/dist/plugins/gea/contract.js +195 -0
- package/dist/plugins/gea/element-ref.d.ts +31 -0
- package/dist/plugins/gea/element-ref.js +45 -0
- package/dist/plugins/gea/host.d.ts +520 -0
- package/dist/plugins/gea/host.js +762 -0
- package/dist/plugins/gea/lower.d.ts +6 -0
- package/dist/plugins/gea/lower.js +195 -0
- package/dist/plugins/gea/members.d.ts +22 -0
- package/dist/plugins/gea/members.js +221 -0
- package/dist/plugins/gea/plugin.d.ts +22 -0
- package/dist/plugins/gea/plugin.js +307 -0
- package/dist/plugins/gea/prelude.d.ts +78 -0
- package/dist/plugins/gea/prelude.js +153 -0
- package/dist/plugins/gea/producer.d.ts +5 -0
- package/dist/plugins/gea/producer.js +52 -0
- package/dist/plugins/gea/reactive-slots.d.ts +49 -0
- package/dist/plugins/gea/reactive-slots.js +578 -0
- package/dist/plugins/gea/render-bridge.d.ts +6 -0
- package/dist/plugins/gea/render-bridge.js +281 -0
- package/dist/plugins/gea/slots.d.ts +15 -0
- package/dist/plugins/gea/slots.js +36 -0
- package/dist/plugins/gea/template-analysis.d.ts +151 -0
- package/dist/plugins/gea/template-analysis.js +346 -0
- package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
- package/dist/plugins/gea/user-agent-styles.js +94 -0
- package/dist/plugins/installed.d.ts +19 -0
- package/dist/plugins/installed.js +21 -0
- package/dist/plugins/load.d.ts +7 -0
- package/dist/plugins/load.js +207 -0
- package/dist/plugins/model.d.ts +735 -0
- package/dist/plugins/model.js +47 -0
- package/dist/plugins/webgl/host.d.ts +77 -0
- package/dist/plugins/webgl/host.js +162 -0
- package/dist/plugins/webgl/plugin.d.ts +40 -0
- package/dist/plugins/webgl/plugin.js +99 -0
- package/dist/preflight/obligations.d.ts +206 -0
- package/dist/preflight/obligations.js +36 -0
- package/dist/preflight/report.d.ts +20 -0
- package/dist/preflight/report.js +61 -0
- package/dist/preflight/run.d.ts +39 -0
- package/dist/preflight/run.js +403 -0
- package/dist/project-preparation.d.ts +33 -0
- package/dist/project-preparation.js +314 -0
- package/dist/projection/abi.d.ts +82 -0
- package/dist/projection/abi.js +349 -0
- package/dist/projection/apply-arguments.d.ts +12 -0
- package/dist/projection/apply-arguments.js +20 -0
- package/dist/projection/bindings.d.ts +250 -0
- package/dist/projection/bindings.js +340 -0
- package/dist/projection/callee.d.ts +196 -0
- package/dist/projection/callee.js +444 -0
- package/dist/projection/class-property-presence.d.ts +28 -0
- package/dist/projection/class-property-presence.js +58 -0
- package/dist/projection/class-prototype.d.ts +5 -0
- package/dist/projection/class-prototype.js +23 -0
- package/dist/projection/class-storage.d.ts +26 -0
- package/dist/projection/class-storage.js +236 -0
- package/dist/projection/classes.d.ts +283 -0
- package/dist/projection/classes.js +944 -0
- package/dist/projection/coercions.d.ts +20 -0
- package/dist/projection/coercions.js +33 -0
- package/dist/projection/dispatch.d.ts +167 -0
- package/dist/projection/dispatch.js +379 -0
- package/dist/projection/fields.d.ts +123 -0
- package/dist/projection/fields.js +383 -0
- package/dist/projection/instance-test.d.ts +78 -0
- package/dist/projection/instance-test.js +156 -0
- package/dist/projection/slots.d.ts +146 -0
- package/dist/projection/slots.js +663 -0
- package/dist/projection/synthesized-abi.d.ts +61 -0
- package/dist/projection/synthesized-abi.js +94 -0
- package/dist/representation/array-index.d.ts +14 -0
- package/dist/representation/array-index.js +17 -0
- package/dist/representation/callable-object.d.ts +3 -0
- package/dist/representation/callable-object.js +6 -0
- package/dist/representation/collections.d.ts +84 -0
- package/dist/representation/collections.js +139 -0
- package/dist/representation/derive.d.ts +159 -0
- package/dist/representation/derive.js +2546 -0
- package/dist/representation/difference.d.ts +30 -0
- package/dist/representation/difference.js +240 -0
- package/dist/representation/field-descriptor-policy.d.ts +19 -0
- package/dist/representation/field-descriptor-policy.js +39 -0
- package/dist/representation/function-constructor.d.ts +13 -0
- package/dist/representation/function-constructor.js +9 -0
- package/dist/representation/host-abi.d.ts +32 -0
- package/dist/representation/host-abi.js +97 -0
- package/dist/representation/host-templates.d.ts +67 -0
- package/dist/representation/host-templates.js +94 -0
- package/dist/representation/intersection.d.ts +84 -0
- package/dist/representation/intersection.js +149 -0
- package/dist/representation/literal-destination.d.ts +43 -0
- package/dist/representation/literal-destination.js +133 -0
- package/dist/representation/merge.d.ts +18 -0
- package/dist/representation/merge.js +83 -0
- package/dist/representation/model.d.ts +1160 -0
- package/dist/representation/model.js +1019 -0
- package/dist/representation/numeric-index.d.ts +13 -0
- package/dist/representation/numeric-index.js +29 -0
- package/dist/representation/object-shape.d.ts +109 -0
- package/dist/representation/object-shape.js +123 -0
- package/dist/representation/optional.d.ts +12 -0
- package/dist/representation/optional.js +87 -0
- package/dist/representation/plan.d.ts +60 -0
- package/dist/representation/plan.js +78 -0
- package/dist/representation/policies.d.ts +589 -0
- package/dist/representation/policies.js +107 -0
- package/dist/representation/primitive-domain.d.ts +1 -0
- package/dist/representation/primitive-domain.js +1 -0
- package/dist/representation/primitives.d.ts +44 -0
- package/dist/representation/primitives.js +78 -0
- package/dist/representation/publish.d.ts +49 -0
- package/dist/representation/publish.js +648 -0
- package/dist/representation/record-fields.d.ts +96 -0
- package/dist/representation/record-fields.js +116 -0
- package/dist/representation/template-object.d.ts +11 -0
- package/dist/representation/template-object.js +26 -0
- package/dist/representation/union.d.ts +30 -0
- package/dist/representation/union.js +324 -0
- package/dist/representation/value-records.d.ts +3 -0
- package/dist/representation/value-records.js +307 -0
- package/dist/representation/verify.d.ts +17 -0
- package/dist/representation/verify.js +221 -0
- package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
- package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
- package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
- package/dist/semantics/ambient-type-realization-transform.js +168 -0
- package/dist/semantics/ambient.d.ts +24 -0
- package/dist/semantics/ambient.js +119 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
- package/dist/semantics/callable-origins.d.ts +46 -0
- package/dist/semantics/callable-origins.js +354 -0
- package/dist/semantics/class-alias.d.ts +7 -0
- package/dist/semantics/class-alias.js +37 -0
- package/dist/semantics/class-heritage.d.ts +34 -0
- package/dist/semantics/class-heritage.js +104 -0
- package/dist/semantics/commonjs-wrapper.d.ts +69 -0
- package/dist/semantics/commonjs-wrapper.js +231 -0
- package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
- package/dist/semantics/constructor-slot-subclasses.js +112 -0
- package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
- package/dist/semantics/declaration-overlay-transform.js +2157 -0
- package/dist/semantics/define-property-source-transform.d.ts +4 -0
- package/dist/semantics/define-property-source-transform.js +437 -0
- package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
- package/dist/semantics/diagnostic-source-preparation.js +82 -0
- package/dist/semantics/documentation-ranges.d.ts +22 -0
- package/dist/semantics/documentation-ranges.js +36 -0
- package/dist/semantics/dynamic-fallback.d.ts +86 -0
- package/dist/semantics/dynamic-fallback.js +249 -0
- package/dist/semantics/frontend-timing.d.ts +6 -0
- package/dist/semantics/frontend-timing.js +35 -0
- package/dist/semantics/frontend.d.ts +504 -0
- package/dist/semantics/frontend.js +1157 -0
- package/dist/semantics/host-declaration-provenance.d.ts +11 -0
- package/dist/semantics/host-declaration-provenance.js +18 -0
- package/dist/semantics/host-methods.d.ts +24 -0
- package/dist/semantics/host-methods.js +74 -0
- package/dist/semantics/host-protocols.d.ts +429 -0
- package/dist/semantics/host-protocols.js +1501 -0
- package/dist/semantics/inherited-accessor.d.ts +7 -0
- package/dist/semantics/inherited-accessor.js +48 -0
- package/dist/semantics/interface-families.d.ts +70 -0
- package/dist/semantics/interface-families.js +180 -0
- package/dist/semantics/interface-implementors.d.ts +53 -0
- package/dist/semantics/interface-implementors.js +87 -0
- package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
- package/dist/semantics/jsdoc-namepath-transform.js +85 -0
- package/dist/semantics/model/coverage.d.ts +68 -0
- package/dist/semantics/model/coverage.js +73 -0
- package/dist/semantics/model/edges.d.ts +103 -0
- package/dist/semantics/model/edges.js +20 -0
- package/dist/semantics/model/graph.d.ts +55 -0
- package/dist/semantics/model/graph.js +129 -0
- package/dist/semantics/model/operands.d.ts +159 -0
- package/dist/semantics/model/operands.js +26 -0
- package/dist/semantics/model/operations.d.ts +496 -0
- package/dist/semantics/model/operations.js +2 -0
- package/dist/semantics/model/primitive-domain.d.ts +26 -0
- package/dist/semantics/model/primitive-domain.js +38 -0
- package/dist/semantics/model/selected-signature.d.ts +261 -0
- package/dist/semantics/model/selected-signature.js +55 -0
- package/dist/semantics/model/structural-type-table.d.ts +93 -0
- package/dist/semantics/model/structural-type-table.js +237 -0
- package/dist/semantics/model/structural-types.d.ts +367 -0
- package/dist/semantics/model/structural-types.js +200 -0
- package/dist/semantics/module-resolution.d.ts +23 -0
- package/dist/semantics/module-resolution.js +227 -0
- package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
- package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
- package/dist/semantics/node-project.d.ts +13 -0
- package/dist/semantics/node-project.js +107 -0
- package/dist/semantics/node-source-hooks.d.ts +1 -0
- package/dist/semantics/node-source-hooks.js +63 -0
- package/dist/semantics/normalize/absent-globals.d.ts +143 -0
- package/dist/semantics/normalize/absent-globals.js +191 -0
- package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
- package/dist/semantics/normalize/arguments-objects.js +60 -0
- package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
- package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
- package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
- package/dist/semantics/normalize/assignment-patterns.js +147 -0
- package/dist/semantics/normalize/bag-absence.d.ts +8 -0
- package/dist/semantics/normalize/bag-absence.js +42 -0
- package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
- package/dist/semantics/normalize/binding-fixpoint.js +140 -0
- package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
- package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
- package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
- package/dist/semantics/normalize/cells/agreement.js +34 -0
- package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
- package/dist/semantics/normalize/cells/candidates.js +35 -0
- package/dist/semantics/normalize/cells/facts.d.ts +19 -0
- package/dist/semantics/normalize/cells/facts.js +90 -0
- package/dist/semantics/normalize/cells/index.d.ts +10 -0
- package/dist/semantics/normalize/cells/index.js +6 -0
- package/dist/semantics/normalize/cells/model.d.ts +98 -0
- package/dist/semantics/normalize/cells/model.js +2 -0
- package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
- package/dist/semantics/normalize/cells/policies/bag.js +114 -0
- package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
- package/dist/semantics/normalize/cells/policies/collection.js +218 -0
- package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/field.js +40 -0
- package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
- package/dist/semantics/normalize/cells/policies/index.js +58 -0
- package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
- package/dist/semantics/normalize/cells/policies/local.js +37 -0
- package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
- package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
- package/dist/semantics/normalize/cells/policies/return.js +45 -0
- package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
- package/dist/semantics/normalize/cells/policies/shared.js +45 -0
- package/dist/semantics/normalize/cells/policy.d.ts +72 -0
- package/dist/semantics/normalize/cells/policy.js +18 -0
- package/dist/semantics/normalize/cells/registry.d.ts +14 -0
- package/dist/semantics/normalize/cells/registry.js +17 -0
- package/dist/semantics/normalize/census-refusal.d.ts +62 -0
- package/dist/semantics/normalize/census-refusal.js +27 -0
- package/dist/semantics/normalize/census.d.ts +109 -0
- package/dist/semantics/normalize/census.js +667 -0
- package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
- package/dist/semantics/normalize/collection-bindings.js +677 -0
- package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
- package/dist/semantics/normalize/commonjs-module-record.js +289 -0
- package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
- package/dist/semantics/normalize/commonjs-require.js +1527 -0
- package/dist/semantics/normalize/contribution.d.ts +63 -0
- package/dist/semantics/normalize/contribution.js +172 -0
- package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
- package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
- package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
- package/dist/semantics/normalize/derived-expression-type.js +3463 -0
- package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
- package/dist/semantics/normalize/evaluation-order.js +37 -0
- package/dist/semantics/normalize/field-bindings.d.ts +167 -0
- package/dist/semantics/normalize/field-bindings.js +1125 -0
- package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
- package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
- package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
- package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
- package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
- package/dist/semantics/normalize/flow/callable-completions.js +82 -0
- package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
- package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
- package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
- package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
- package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
- package/dist/semantics/normalize/flow/component-solver.js +587 -0
- package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
- package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
- package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
- package/dist/semantics/normalize/flow/export-importers.js +269 -0
- package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
- package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
- package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
- package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
- package/dist/semantics/normalize/flow/model.d.ts +357 -0
- package/dist/semantics/normalize/flow/model.js +177 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
- package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
- package/dist/semantics/normalize/flow/node-path-token.js +53 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
- package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
- package/dist/semantics/normalize/flow/origin-authority.js +2 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
- package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
- package/dist/semantics/normalize/flow/parameter-values.js +251 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
- package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
- package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
- package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
- package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
- package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
- package/dist/semantics/normalize/flow/source-class-data.js +838 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
- package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
- package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
- package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
- package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
- package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
- package/dist/semantics/normalize/flow/source-record-data.js +626 -0
- package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
- package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
- package/dist/semantics/normalize/flow/targets.d.ts +118 -0
- package/dist/semantics/normalize/flow/targets.js +405 -0
- package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
- package/dist/semantics/normalize/flow/value-flow.js +823 -0
- package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
- package/dist/semantics/normalize/flow/value-provenance.js +112 -0
- package/dist/semantics/normalize/gating.d.ts +51 -0
- package/dist/semantics/normalize/gating.js +560 -0
- package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
- package/dist/semantics/normalize/generic-function-choice.js +115 -0
- package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
- package/dist/semantics/normalize/global-host-mutations.js +5989 -0
- package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
- package/dist/semantics/normalize/host-effect-contracts.js +143 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
- package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
- package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
- package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
- package/dist/semantics/normalize/host-mutation-keys.js +183 -0
- package/dist/semantics/normalize/identities.d.ts +172 -0
- package/dist/semantics/normalize/identities.js +426 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
- package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
- package/dist/semantics/normalize/implicit-arguments.js +39 -0
- package/dist/semantics/normalize/instantiation.d.ts +73 -0
- package/dist/semantics/normalize/instantiation.js +399 -0
- package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
- package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
- package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
- package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
- package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
- package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
- package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
- package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
- package/dist/semantics/normalize/keyof.d.ts +32 -0
- package/dist/semantics/normalize/keyof.js +110 -0
- package/dist/semantics/normalize/local-bindings.d.ts +176 -0
- package/dist/semantics/normalize/local-bindings.js +1826 -0
- package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
- package/dist/semantics/normalize/logical-result-type.js +102 -0
- package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
- package/dist/semantics/normalize/namespace-paths.js +108 -0
- package/dist/semantics/normalize/normalize.d.ts +57 -0
- package/dist/semantics/normalize/normalize.js +68 -0
- package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
- package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
- package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
- package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
- package/dist/semantics/normalize/open-type-form.d.ts +10 -0
- package/dist/semantics/normalize/open-type-form.js +32 -0
- package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
- package/dist/semantics/normalize/parameter-bindings.js +3339 -0
- package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
- package/dist/semantics/normalize/parameter-slot.js +491 -0
- package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
- package/dist/semantics/normalize/physical-overload-result.js +99 -0
- package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
- package/dist/semantics/normalize/primitive-property-absence.js +60 -0
- package/dist/semantics/normalize/producer-context.d.ts +376 -0
- package/dist/semantics/normalize/producer-context.js +1 -0
- package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
- package/dist/semantics/normalize/producers/allocations.js +863 -0
- package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
- package/dist/semantics/normalize/producers/binding-kind.js +36 -0
- package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
- package/dist/semantics/normalize/producers/bindings.js +710 -0
- package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
- package/dist/semantics/normalize/producers/boundary.js +123 -0
- package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
- package/dist/semantics/normalize/producers/computations.d.ts +3 -0
- package/dist/semantics/normalize/producers/computations.js +613 -0
- package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
- package/dist/semantics/normalize/producers/control-loops.js +91 -0
- package/dist/semantics/normalize/producers/control.d.ts +30 -0
- package/dist/semantics/normalize/producers/control.js +923 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
- package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
- package/dist/semantics/normalize/producers/destructuring.js +1180 -0
- package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
- package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
- package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
- package/dist/semantics/normalize/producers/erasure.js +90 -0
- package/dist/semantics/normalize/producers/installed.d.ts +3 -0
- package/dist/semantics/normalize/producers/installed.js +55 -0
- package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
- package/dist/semantics/normalize/producers/invocations.js +1796 -0
- package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
- package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
- package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
- package/dist/semantics/normalize/producers/jsx.js +360 -0
- package/dist/semantics/normalize/producers/mint.d.ts +39 -0
- package/dist/semantics/normalize/producers/mint.js +44 -0
- package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
- package/dist/semantics/normalize/producers/nullish.js +27 -0
- package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
- package/dist/semantics/normalize/producers/object-assignment.js +204 -0
- package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
- package/dist/semantics/normalize/producers/object-tag.js +119 -0
- package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
- package/dist/semantics/normalize/producers/optional-chain.js +75 -0
- package/dist/semantics/normalize/producers/properties.d.ts +21 -0
- package/dist/semantics/normalize/producers/properties.js +1053 -0
- package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
- package/dist/semantics/normalize/producers/protocol.js +695 -0
- package/dist/semantics/normalize/producers/references.d.ts +53 -0
- package/dist/semantics/normalize/producers/references.js +1027 -0
- package/dist/semantics/normalize/producers/shared.d.ts +561 -0
- package/dist/semantics/normalize/producers/shared.js +1683 -0
- package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
- package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
- package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
- package/dist/semantics/normalize/producers/tagged-template.js +307 -0
- package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
- package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
- package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
- package/dist/semantics/normalize/property-key-domain.js +150 -0
- package/dist/semantics/normalize/reachability.d.ts +189 -0
- package/dist/semantics/normalize/reachability.js +1057 -0
- package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
- package/dist/semantics/normalize/reassigned-bindings.js +41 -0
- package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
- package/dist/semantics/normalize/record-storage-families.js +109 -0
- package/dist/semantics/normalize/return-bindings.d.ts +260 -0
- package/dist/semantics/normalize/return-bindings.js +1311 -0
- package/dist/semantics/normalize/return-paths.d.ts +2 -0
- package/dist/semantics/normalize/return-paths.js +28 -0
- package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
- package/dist/semantics/normalize/script-global-redefinition.js +75 -0
- package/dist/semantics/normalize/specialization.d.ts +201 -0
- package/dist/semantics/normalize/specialization.js +1824 -0
- package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
- package/dist/semantics/normalize/structural-array-element.js +700 -0
- package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
- package/dist/semantics/normalize/structural-array-read.js +124 -0
- package/dist/semantics/normalize/structural-callable.d.ts +12 -0
- package/dist/semantics/normalize/structural-callable.js +82 -0
- package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
- package/dist/semantics/normalize/structural-creation-order.js +111 -0
- package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
- package/dist/semantics/normalize/structural-declarations.js +968 -0
- package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
- package/dist/semantics/normalize/structural-declared-body.js +147 -0
- package/dist/semantics/normalize/structural-generics.d.ts +56 -0
- package/dist/semantics/normalize/structural-generics.js +120 -0
- package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
- package/dist/semantics/normalize/structural-indexed-access.js +126 -0
- package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
- package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
- package/dist/semantics/normalize/structural-joins.d.ts +44 -0
- package/dist/semantics/normalize/structural-joins.js +143 -0
- package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
- package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
- package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
- package/dist/semantics/normalize/structural-layout-type.js +1468 -0
- package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
- package/dist/semantics/normalize/structural-leaves.js +125 -0
- package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
- package/dist/semantics/normalize/structural-local-union.js +133 -0
- package/dist/semantics/normalize/structural-members.d.ts +26 -0
- package/dist/semantics/normalize/structural-members.js +84 -0
- package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
- package/dist/semantics/normalize/structural-mutable-method.js +109 -0
- package/dist/semantics/normalize/structural-parts.d.ts +131 -0
- package/dist/semantics/normalize/structural-parts.js +737 -0
- package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
- package/dist/semantics/normalize/structural-receiver.js +551 -0
- package/dist/semantics/normalize/structural-rules.d.ts +112 -0
- package/dist/semantics/normalize/structural-rules.js +93 -0
- package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
- package/dist/semantics/normalize/structural-self-reference.js +494 -0
- package/dist/semantics/normalize/structural.d.ts +202 -0
- package/dist/semantics/normalize/structural.js +4218 -0
- package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
- package/dist/semantics/normalize/unreduced-type-form.js +53 -0
- package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
- package/dist/semantics/normalize/unresolvable-names.js +140 -0
- package/dist/semantics/package-sources.d.ts +16 -0
- package/dist/semantics/package-sources.js +365 -0
- package/dist/semantics/program.d.ts +151 -0
- package/dist/semantics/program.js +667 -0
- package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-install-source-transform.js +341 -0
- package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-object-class-source-transform.js +525 -0
- package/dist/semantics/prototype-reparenting.d.ts +50 -0
- package/dist/semantics/prototype-reparenting.js +317 -0
- package/dist/semantics/stable-checker.d.ts +10 -0
- package/dist/semantics/stable-checker.js +148 -0
- package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
- package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
- package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
- package/dist/semantics/this-constructor-source-transform.js +122 -0
- package/dist/semantics/uninstantiable-classes.d.ts +22 -0
- package/dist/semantics/uninstantiable-classes.js +75 -0
- package/dist/targets/cpp/balanced-units.d.ts +3 -0
- package/dist/targets/cpp/balanced-units.js +58 -0
- package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
- package/dist/targets/cpp/borrowed-call-entry.js +68 -0
- package/dist/targets/cpp/captures.d.ts +68 -0
- package/dist/targets/cpp/captures.js +269 -0
- package/dist/targets/cpp/class-layout.d.ts +313 -0
- package/dist/targets/cpp/class-layout.js +483 -0
- package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
- package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
- package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
- package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
- package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
- package/dist/targets/cpp/class-ref-transport.js +32 -0
- package/dist/targets/cpp/conversions.d.ts +3 -0
- package/dist/targets/cpp/conversions.js +2027 -0
- package/dist/targets/cpp/deferral-safety.d.ts +82 -0
- package/dist/targets/cpp/deferral-safety.js +86 -0
- package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
- package/dist/targets/cpp/direct-call-receivers.js +79 -0
- package/dist/targets/cpp/document.d.ts +74 -0
- package/dist/targets/cpp/document.js +106 -0
- package/dist/targets/cpp/emit-allocation.d.ts +60 -0
- package/dist/targets/cpp/emit-allocation.js +573 -0
- package/dist/targets/cpp/emit-arrays.d.ts +119 -0
- package/dist/targets/cpp/emit-arrays.js +1047 -0
- package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
- package/dist/targets/cpp/emit-binding-reference.js +120 -0
- package/dist/targets/cpp/emit-bindings.d.ts +158 -0
- package/dist/targets/cpp/emit-bindings.js +769 -0
- package/dist/targets/cpp/emit-buffers.d.ts +156 -0
- package/dist/targets/cpp/emit-buffers.js +573 -0
- package/dist/targets/cpp/emit-callable.d.ts +230 -0
- package/dist/targets/cpp/emit-callable.js +2154 -0
- package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
- package/dist/targets/cpp/emit-carrier-members.js +1224 -0
- package/dist/targets/cpp/emit-coercion.d.ts +26 -0
- package/dist/targets/cpp/emit-coercion.js +39 -0
- package/dist/targets/cpp/emit-context.d.ts +1882 -0
- package/dist/targets/cpp/emit-context.js +904 -0
- package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
- package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
- package/dist/targets/cpp/emit-equality.d.ts +39 -0
- package/dist/targets/cpp/emit-equality.js +472 -0
- package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
- package/dist/targets/cpp/emit-exceptions.js +513 -0
- package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
- package/dist/targets/cpp/emit-field-owner.js +27 -0
- package/dist/targets/cpp/emit-in.d.ts +31 -0
- package/dist/targets/cpp/emit-in.js +426 -0
- package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
- package/dist/targets/cpp/emit-instanceof.js +601 -0
- package/dist/targets/cpp/emit-integers.d.ts +68 -0
- package/dist/targets/cpp/emit-integers.js +184 -0
- package/dist/targets/cpp/emit-iterator.d.ts +100 -0
- package/dist/targets/cpp/emit-iterator.js +1137 -0
- package/dist/targets/cpp/emit-json.d.ts +73 -0
- package/dist/targets/cpp/emit-json.js +823 -0
- package/dist/targets/cpp/emit-jsx.d.ts +74 -0
- package/dist/targets/cpp/emit-jsx.js +806 -0
- package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
- package/dist/targets/cpp/emit-mixed-binary.js +60 -0
- package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
- package/dist/targets/cpp/emit-namespaces.js +133 -0
- package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
- package/dist/targets/cpp/emit-narrowing.js +3967 -0
- package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
- package/dist/targets/cpp/emit-native-equality.js +14 -0
- package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
- package/dist/targets/cpp/emit-native-selection.js +37 -0
- package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
- package/dist/targets/cpp/emit-object-tag.js +108 -0
- package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
- package/dist/targets/cpp/emit-owned-record.js +15 -0
- package/dist/targets/cpp/emit-presence.d.ts +78 -0
- package/dist/targets/cpp/emit-presence.js +376 -0
- package/dist/targets/cpp/emit-properties.d.ts +105 -0
- package/dist/targets/cpp/emit-properties.js +1640 -0
- package/dist/targets/cpp/emit-record-view.d.ts +20 -0
- package/dist/targets/cpp/emit-record-view.js +354 -0
- package/dist/targets/cpp/emit-return.d.ts +5 -0
- package/dist/targets/cpp/emit-return.js +237 -0
- package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
- package/dist/targets/cpp/emit-sum-widening.js +69 -0
- package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
- package/dist/targets/cpp/emit-tonumber.js +177 -0
- package/dist/targets/cpp/emit-tostring.d.ts +92 -0
- package/dist/targets/cpp/emit-tostring.js +556 -0
- package/dist/targets/cpp/emit-typeof.d.ts +49 -0
- package/dist/targets/cpp/emit-typeof.js +317 -0
- package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
- package/dist/targets/cpp/emit-union-properties.js +1281 -0
- package/dist/targets/cpp/emit.d.ts +45 -0
- package/dist/targets/cpp/emit.js +2225 -0
- package/dist/targets/cpp/error-types.d.ts +4 -0
- package/dist/targets/cpp/error-types.js +11 -0
- package/dist/targets/cpp/function-source-reads.d.ts +72 -0
- package/dist/targets/cpp/function-source-reads.js +148 -0
- package/dist/targets/cpp/host/atomics.d.ts +25 -0
- package/dist/targets/cpp/host/atomics.js +63 -0
- package/dist/targets/cpp/host/core-globals.d.ts +108 -0
- package/dist/targets/cpp/host/core-globals.js +158 -0
- package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
- package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
- package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
- package/dist/targets/cpp/host/emit-host-arity.js +232 -0
- package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
- package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
- package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
- package/dist/targets/cpp/host/emit-host-object.js +2206 -0
- package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
- package/dist/targets/cpp/host/emit-host-properties.js +533 -0
- package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
- package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
- package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
- package/dist/targets/cpp/host/emit-host-value.js +392 -0
- package/dist/targets/cpp/host/host-members.d.ts +505 -0
- package/dist/targets/cpp/host/host-members.js +819 -0
- package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
- package/dist/targets/cpp/host/host-method-aliases.js +76 -0
- package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
- package/dist/targets/cpp/host/native-protocols.js +183 -0
- package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
- package/dist/targets/cpp/host/object-protocol.js +671 -0
- package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
- package/dist/targets/cpp/host-namespace-reads.js +113 -0
- package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
- package/dist/targets/cpp/manifest/capabilities.js +1484 -0
- package/dist/targets/cpp/manifest.d.ts +23 -0
- package/dist/targets/cpp/manifest.js +113 -0
- package/dist/targets/cpp/native-error-base.d.ts +38 -0
- package/dist/targets/cpp/native-error-base.js +74 -0
- package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
- package/dist/targets/cpp/native-narrowing-transport.js +151 -0
- package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
- package/dist/targets/cpp/native-selection-helpers.js +46 -0
- package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
- package/dist/targets/cpp/native-symbol-keys.js +34 -0
- package/dist/targets/cpp/ownership.d.ts +43 -0
- package/dist/targets/cpp/ownership.js +38 -0
- package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
- package/dist/targets/cpp/owning-conversion-input.js +12 -0
- package/dist/targets/cpp/property-read-claims.d.ts +62 -0
- package/dist/targets/cpp/property-read-claims.js +23 -0
- package/dist/targets/cpp/property-store-claims.d.ts +62 -0
- package/dist/targets/cpp/property-store-claims.js +26 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
- package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
- package/dist/targets/cpp/reactive-dependencies.js +432 -0
- package/dist/targets/cpp/reactive-origins.d.ts +44 -0
- package/dist/targets/cpp/reactive-origins.js +82 -0
- package/dist/targets/cpp/records.d.ts +277 -0
- package/dist/targets/cpp/records.js +2427 -0
- package/dist/targets/cpp/recursive-containers.d.ts +43 -0
- package/dist/targets/cpp/recursive-containers.js +144 -0
- package/dist/targets/cpp/regexp-types.d.ts +56 -0
- package/dist/targets/cpp/regexp-types.js +59 -0
- package/dist/targets/cpp/substrate.d.ts +125 -0
- package/dist/targets/cpp/substrate.js +12 -0
- package/dist/targets/cpp/translation-unit.d.ts +219 -0
- package/dist/targets/cpp/translation-unit.js +2063 -0
- package/dist/targets/cpp/types.d.ts +280 -0
- package/dist/targets/cpp/types.js +1135 -0
- package/dist/targets/cpp/virtual-methods.d.ts +95 -0
- package/dist/targets/cpp/virtual-methods.js +264 -0
- package/package.json +95 -0
- package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
- package/src/targets/cpp/runtime/gea_eval.h +1376 -0
- package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
- package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
- package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { semanticResultId } from '../../../identity/ids.js';
|
|
3
|
+
import { normalCompletion, pureEffects, throwingCompletion } from '../../model/operands.js';
|
|
4
|
+
import { blocked, mintOperationId, mintResult, operand } from './mint.js';
|
|
5
|
+
import { calleeAwareTypeAt, resolvedCalleeSignatureType, sourceForValue, unwrapErased, valueEdgesInto } from './shared.js';
|
|
6
|
+
const literalsOf = (template) => ts.isTemplateExpression(template) ? [template.head, ...template.templateSpans.map((span) => span.literal)] : [template];
|
|
7
|
+
const normalizeRawText = (rawText) => {
|
|
8
|
+
// Template Raw Value canonicalizes CR and CRLF to LF. Written as a scan
|
|
9
|
+
// rather than a replace so it states the two sequences it collapses.
|
|
10
|
+
let normalized = '';
|
|
11
|
+
for (let index = 0; index < rawText.length; index += 1) {
|
|
12
|
+
const character = rawText[index];
|
|
13
|
+
if (character !== '\r') {
|
|
14
|
+
normalized += character;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
normalized += '\n';
|
|
18
|
+
if (rawText[index + 1] === '\n')
|
|
19
|
+
index += 1;
|
|
20
|
+
}
|
|
21
|
+
return normalized;
|
|
22
|
+
};
|
|
23
|
+
const isHexDigit = (character) => character !== undefined &&
|
|
24
|
+
((character >= '0' && character <= '9') || (character >= 'a' && character <= 'f') || (character >= 'A' && character <= 'F'));
|
|
25
|
+
const isDecimalDigit = (character) => character !== undefined && character >= '0' && character <= '9';
|
|
26
|
+
/**
|
|
27
|
+
* The Template Value of one segment's raw text -- ECMA-262 12.9.6.1 -- or
|
|
28
|
+
* `null` when the segment contains a NotEscapeSequence, whose TV is
|
|
29
|
+
* `undefined`.
|
|
30
|
+
*
|
|
31
|
+
* Computed from the RAW text rather than read off `literal.text`, and that
|
|
32
|
+
* direction is the point. A tagged template is the one place in the language
|
|
33
|
+
* where an invalid escape is legal (12.9.6, the carve-out that makes
|
|
34
|
+
* `` tag`\unicode` `` parse where an untagged template is a syntax error), and
|
|
35
|
+
* its cooked value is then `undefined` rather than a string. TypeScript records
|
|
36
|
+
* that fact in a token flag its public API does not expose, and its `text`
|
|
37
|
+
* cannot stand in for the flag: a segment with a valid escape AND an invalid
|
|
38
|
+
* one (`` `a\nb\unicode c` ``) cooks the valid half and leaves the invalid one
|
|
39
|
+
* verbatim, so `text !== rawText` is true for a segment whose TV is undefined.
|
|
40
|
+
* That measurement is what ruled out the cheaper test.
|
|
41
|
+
*
|
|
42
|
+
* `segmentsOf` then checks this against TypeScript's own `text` and refuses on
|
|
43
|
+
* any disagreement, so the two are a cross-check rather than one authority
|
|
44
|
+
* silently replacing the other.
|
|
45
|
+
*/
|
|
46
|
+
const cookTemplateSegment = (raw) => {
|
|
47
|
+
let cooked = '';
|
|
48
|
+
let index = 0;
|
|
49
|
+
while (index < raw.length) {
|
|
50
|
+
const character = raw[index] ?? '';
|
|
51
|
+
if (character !== '\\') {
|
|
52
|
+
cooked += character;
|
|
53
|
+
index += 1;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const escape = raw[index + 1];
|
|
57
|
+
if (escape === undefined)
|
|
58
|
+
return null;
|
|
59
|
+
index += 2;
|
|
60
|
+
// A LineTerminatorSequence after a backslash is a line continuation and
|
|
61
|
+
// contributes nothing. CR and CRLF are already LF by the time this runs.
|
|
62
|
+
if (escape === '\n' || escape === '\u2028' || escape === '\u2029')
|
|
63
|
+
continue;
|
|
64
|
+
if (escape === 'b') {
|
|
65
|
+
cooked += '\b';
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (escape === 't') {
|
|
69
|
+
cooked += '\t';
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (escape === 'n') {
|
|
73
|
+
cooked += '\n';
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (escape === 'v') {
|
|
77
|
+
cooked += '\v';
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (escape === 'f') {
|
|
81
|
+
cooked += '\f';
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (escape === 'r') {
|
|
85
|
+
cooked += '\r';
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (escape === '0') {
|
|
89
|
+
// `\0` is NUL, but `\0` followed by a digit is a legacy octal escape,
|
|
90
|
+
// which a template may not contain.
|
|
91
|
+
if (isDecimalDigit(raw[index]))
|
|
92
|
+
return null;
|
|
93
|
+
cooked += '\u0000';
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (escape === 'x') {
|
|
97
|
+
const high = raw[index];
|
|
98
|
+
const low = raw[index + 1];
|
|
99
|
+
if (!isHexDigit(high) || !isHexDigit(low))
|
|
100
|
+
return null;
|
|
101
|
+
cooked += String.fromCharCode(Number.parseInt(`${high ?? ''}${low ?? ''}`, 16));
|
|
102
|
+
index += 2;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (escape === 'u') {
|
|
106
|
+
if (raw[index] === '{') {
|
|
107
|
+
const close = raw.indexOf('}', index + 1);
|
|
108
|
+
if (close < 0)
|
|
109
|
+
return null;
|
|
110
|
+
const digits = raw.slice(index + 1, close);
|
|
111
|
+
if (digits.length === 0 || [...digits].some((digit) => !isHexDigit(digit)))
|
|
112
|
+
return null;
|
|
113
|
+
const point = Number.parseInt(digits, 16);
|
|
114
|
+
if (point > 0x10ffff)
|
|
115
|
+
return null;
|
|
116
|
+
cooked += String.fromCodePoint(point);
|
|
117
|
+
index = close + 1;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const digits = raw.slice(index, index + 4);
|
|
121
|
+
if (digits.length !== 4 || [...digits].some((digit) => !isHexDigit(digit)))
|
|
122
|
+
return null;
|
|
123
|
+
cooked += String.fromCharCode(Number.parseInt(digits, 16));
|
|
124
|
+
index += 4;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
// A decimal digit after a backslash is a legacy octal (or `\8`/`\9`)
|
|
128
|
+
// escape; every other character is a NonEscapeCharacter and stands for
|
|
129
|
+
// itself.
|
|
130
|
+
if (isDecimalDigit(escape))
|
|
131
|
+
return null;
|
|
132
|
+
cooked += escape;
|
|
133
|
+
}
|
|
134
|
+
return cooked;
|
|
135
|
+
};
|
|
136
|
+
const segmentsOf = (template) => {
|
|
137
|
+
const cooked = [];
|
|
138
|
+
const raw = [];
|
|
139
|
+
for (const literal of literalsOf(template)) {
|
|
140
|
+
// Parsed program source always carries the exact token body. A synthesized
|
|
141
|
+
// node does not, and there is no way to cook one without it.
|
|
142
|
+
if (literal.rawText === undefined)
|
|
143
|
+
return { blocked: 'a tagged template segment carries no parsed raw text to build its raw array from' };
|
|
144
|
+
const rawValue = normalizeRawText(literal.rawText);
|
|
145
|
+
const cookedValue = cookTemplateSegment(rawValue);
|
|
146
|
+
if (cookedValue === null) {
|
|
147
|
+
raw.push(rawValue);
|
|
148
|
+
cooked.push(undefined);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
// Two authorities on one value. TypeScript cooked this segment while
|
|
152
|
+
// parsing it and this file cooked it again from the raw text; a
|
|
153
|
+
// disagreement means one of them is wrong about the language, and guessing
|
|
154
|
+
// which would put a string the program never wrote into the tag's hands.
|
|
155
|
+
if (cookedValue !== literal.text) {
|
|
156
|
+
return {
|
|
157
|
+
blocked: `a tagged template segment cooks to ${JSON.stringify(cookedValue)} from its raw text but TypeScript cooked it to ` +
|
|
158
|
+
`${JSON.stringify(literal.text)}; the two readings of one segment have to agree`
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
raw.push(rawValue);
|
|
162
|
+
cooked.push(cookedValue);
|
|
163
|
+
}
|
|
164
|
+
return { cooked, raw };
|
|
165
|
+
};
|
|
166
|
+
/** The type the tag's own first parameter declares -- the template object's, asked of the signature the checker resolved for this exact site. */
|
|
167
|
+
const templateObjectTypeOf = (context, node, signature) => {
|
|
168
|
+
const parameter = signature.getParameters()[0];
|
|
169
|
+
if (!parameter)
|
|
170
|
+
return null;
|
|
171
|
+
// STATED, not held: this asks what the resolved tag signature's own first
|
|
172
|
+
// parameter DECLARES -- the tag function's authored type, not a program
|
|
173
|
+
// binding a census could improve on. The checker's answer is the real
|
|
174
|
+
// question here.
|
|
175
|
+
return context.types.typeOf(context.checker.getTypeOfSymbolAtLocation(parameter, node));
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* The allocated value is always a complete `TemplateStringsArray`, regardless
|
|
179
|
+
* of how broadly the tag elects to receive it. In particular, a tag declared
|
|
180
|
+
* as `(strings: readonly string[])` still observes the real object, including
|
|
181
|
+
* its frozen own `raw` array; its parameter type is the invocation target, not
|
|
182
|
+
* a license to omit those source-value properties.
|
|
183
|
+
*/
|
|
184
|
+
const templateObjectValueTypeOf = (context) => {
|
|
185
|
+
const stringType = context.table.intern({ kind: 'primitive', primitive: 'string' });
|
|
186
|
+
const rawType = context.table.intern({ kind: 'array', element: stringType, readonly: false, extension: [] });
|
|
187
|
+
return context.table.intern({
|
|
188
|
+
kind: 'array',
|
|
189
|
+
element: stringType,
|
|
190
|
+
readonly: false,
|
|
191
|
+
extension: [
|
|
192
|
+
{
|
|
193
|
+
key: { kind: 'string', value: 'raw' },
|
|
194
|
+
type: rawType,
|
|
195
|
+
optional: false,
|
|
196
|
+
readonly: true,
|
|
197
|
+
accessor: null
|
|
198
|
+
}
|
|
199
|
+
]
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
export const contributeTaggedTemplate = (context, candidate, node) => {
|
|
203
|
+
const refuse = (reason) => ({
|
|
204
|
+
kind: 'blocked',
|
|
205
|
+
blocker: blocked(candidate.id, 'invocation', reason, 'P2')
|
|
206
|
+
});
|
|
207
|
+
const segments = segmentsOf(node.template);
|
|
208
|
+
if ('blocked' in segments)
|
|
209
|
+
return refuse(segments.blocked);
|
|
210
|
+
const signature = context.checker.getResolvedSignature(node);
|
|
211
|
+
if (!signature)
|
|
212
|
+
return refuse('a tagged template resolved no signature for its tag, so the template object has no declared parameter type');
|
|
213
|
+
const templateObjectType = templateObjectTypeOf(context, node, signature);
|
|
214
|
+
if (templateObjectType === null) {
|
|
215
|
+
return refuse('a tagged template names a tag that declares no first parameter for the template object to be passed as');
|
|
216
|
+
}
|
|
217
|
+
const templateObjectValueType = templateObjectValueTypeOf(context);
|
|
218
|
+
const stringType = context.table.intern({ kind: 'primitive', primitive: 'string' });
|
|
219
|
+
const undefinedType = context.table.intern({ kind: 'primitive', primitive: 'undefined' });
|
|
220
|
+
const allocationId = mintOperationId(context.ordinals, candidate.id, 'allocation');
|
|
221
|
+
const allocation = {
|
|
222
|
+
id: allocationId,
|
|
223
|
+
family: 'allocation',
|
|
224
|
+
allocated: 'template-object',
|
|
225
|
+
shape: templateObjectValueType,
|
|
226
|
+
callable: null,
|
|
227
|
+
caller: candidate.caller,
|
|
228
|
+
// The segments travel as constants because that is what they are: no step
|
|
229
|
+
// of the language computes them, and the emitter builds the object out of
|
|
230
|
+
// exactly these texts.
|
|
231
|
+
operands: [
|
|
232
|
+
...segments.cooked.map((text, index) => text === undefined
|
|
233
|
+
? operand('cooked', index, { kind: 'constant', text: 'undefined', literal: 'undefined' }, undefinedType)
|
|
234
|
+
: operand('cooked', index, { kind: 'constant', text, literal: 'string' }, stringType)),
|
|
235
|
+
...segments.raw.map((text, index) => operand('raw', index, { kind: 'constant', text, literal: 'string' }, stringType))
|
|
236
|
+
],
|
|
237
|
+
results: [mintResult(allocationId, 'value', templateObjectValueType)],
|
|
238
|
+
completion: normalCompletion,
|
|
239
|
+
// `allocates: false` is not an oversight. This operation yields the SAME
|
|
240
|
+
// object on every evaluation (`GetTemplateObject` caches per Parse Node),
|
|
241
|
+
// so nothing is created when it runs, and a consumer that treats it as a
|
|
242
|
+
// fresh identity per evaluation would be wrong about the one property that
|
|
243
|
+
// makes a template object what it is.
|
|
244
|
+
effects: { ...pureEffects, allocates: false },
|
|
245
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
246
|
+
};
|
|
247
|
+
const invocationId = mintOperationId(context.ordinals, candidate.id, 'invocation');
|
|
248
|
+
const calleeType = resolvedCalleeSignatureType(context, node.tag) ?? calleeAwareTypeAt(context, node.tag);
|
|
249
|
+
const operands = [operand('callee', 0, sourceForValue(context, node.tag), calleeType)];
|
|
250
|
+
const tagUnwrapped = unwrapErased(node.tag);
|
|
251
|
+
if (ts.isPropertyAccessExpression(tagUnwrapped) || ts.isElementAccessExpression(tagUnwrapped)) {
|
|
252
|
+
operands.push(operand('receiver', 0, sourceForValue(context, tagUnwrapped.expression), context.types.typeAt(tagUnwrapped.expression), {
|
|
253
|
+
kind: 'provenance'
|
|
254
|
+
}));
|
|
255
|
+
}
|
|
256
|
+
// Argument 0 is the template object, and the substitutions follow it in
|
|
257
|
+
// source order -- ECMA-262 13.3.11.1's `ArgumentListEvaluation` for a
|
|
258
|
+
// `TemplateLiteral`, which is also the shape every tag signature is written
|
|
259
|
+
// against (`(strings, ...values)`).
|
|
260
|
+
//
|
|
261
|
+
// Stated as `templateObjectValueType` -- the same type the allocation's own
|
|
262
|
+
// result carries -- not `templateObjectType`, the tag's DECLARED parameter
|
|
263
|
+
// type. A tag may narrow what it asks for (`(strings: readonly string[])`),
|
|
264
|
+
// but the value ECMA-262 actually hands it is always the complete object
|
|
265
|
+
// with its frozen `raw` array. Stamping the declared type here fed that
|
|
266
|
+
// narrower shape into the callee parameter's own binding census, so a tag
|
|
267
|
+
// stated no more specifically than its parameter list lost `raw` and its
|
|
268
|
+
// frozen-array identity entirely -- the parameter carrier a call-argument
|
|
269
|
+
// join produces can never be richer than what the argument itself states.
|
|
270
|
+
operands.push(operand('argument', 0, { kind: 'result', result: semanticResultId(allocationId, 'value') }, templateObjectValueType));
|
|
271
|
+
const substitutions = ts.isTemplateExpression(node.template) ? node.template.templateSpans.map((span) => span.expression) : [];
|
|
272
|
+
substitutions.forEach((expression, index) => {
|
|
273
|
+
operands.push(operand('argument', index + 1, sourceForValue(context, expression), context.types.typeAt(expression)));
|
|
274
|
+
});
|
|
275
|
+
const invocation = {
|
|
276
|
+
id: invocationId,
|
|
277
|
+
family: 'invocation',
|
|
278
|
+
caller: candidate.caller,
|
|
279
|
+
internalMethod: 'call',
|
|
280
|
+
optionalChain: false,
|
|
281
|
+
// No signature is published, and no exact target is proven. Both are the
|
|
282
|
+
// same honest answer an ordinary call gives when the checker withholds an
|
|
283
|
+
// overload set: the callee's own carrier is what supplies the calling
|
|
284
|
+
// convention, and a tag is reached through a value like any other callee.
|
|
285
|
+
// `invocations.ts`'s own `exactFunctionTarget` could prove one for a tag
|
|
286
|
+
// that names a source function directly, but it reads `node.expression`,
|
|
287
|
+
// which a tagged template does not have -- and the difference it makes is a
|
|
288
|
+
// direct call instead of one through the callable value, never whether
|
|
289
|
+
// anything boxes. Left `open` rather than widening a shared helper for it.
|
|
290
|
+
selectedSignature: null,
|
|
291
|
+
resultDivergence: { kind: 'none' },
|
|
292
|
+
target: { kind: 'open', evidence: ['tagged-template-callee', 'no-static-target-proof'] },
|
|
293
|
+
operands,
|
|
294
|
+
results: [mintResult(invocationId, 'value', context.types.typeAt(node))],
|
|
295
|
+
completion: throwingCompletion,
|
|
296
|
+
effects: { readsMutableState: true, writesMutableState: true, allocates: false, callsUserCode: true },
|
|
297
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
298
|
+
};
|
|
299
|
+
const edges = [
|
|
300
|
+
...valueEdgesInto(invocationId, operands),
|
|
301
|
+
// The object exists before the call that receives it. Stated explicitly
|
|
302
|
+
// because the two operations share one candidate and therefore one
|
|
303
|
+
// evaluation ordinal, which says nothing about their order.
|
|
304
|
+
{ kind: 'evaluation', from: allocationId, to: invocationId }
|
|
305
|
+
];
|
|
306
|
+
return { kind: 'operations', operations: [allocation, invocation], edges };
|
|
307
|
+
};
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type StructuralTypeId } from '../../../identity/ids.js';
|
|
3
|
+
import type { SemanticEdge } from '../../model/edges.js';
|
|
4
|
+
import { type OperandSource } from '../../model/operands.js';
|
|
5
|
+
import type { PropertyOperation } from '../../model/operations.js';
|
|
6
|
+
import type { CensusCandidate } from '../census.js';
|
|
7
|
+
import type { ProducerContext } from '../producer-context.js';
|
|
8
|
+
/**
|
|
9
|
+
* `...t` where `t` is a closed tuple: N positional reads, no iterator.
|
|
10
|
+
*
|
|
11
|
+
* A tuple is the one iterable whose iteration is settled before the program
|
|
12
|
+
* runs. Its length is part of its type and each position carries its own
|
|
13
|
+
* declared type, so `f(...pair)` is `f(pair[0], pair[1])` and `[...pair, x]`
|
|
14
|
+
* is `[pair[0], pair[1], x]` -- exactly, not approximately. Driving
|
|
15
|
+
* GetIterator/next() over it would ask the runtime to rediscover an arity the
|
|
16
|
+
* checker already stated, and would hand every position the *union* of the
|
|
17
|
+
* tuple's element types (`protocol.ts`'s `iterationElementType` has no other
|
|
18
|
+
* answer to give for a per-step value), losing the per-position typing that
|
|
19
|
+
* makes a tuple a tuple.
|
|
20
|
+
*
|
|
21
|
+
* The reads are minted as ordinary `[[Get]]`s with constant keys, which is
|
|
22
|
+
* what a tuple position IS in this compiler: `lower-allocation.ts`'s
|
|
23
|
+
* `lowerTupleLiteral` writes position `n` into the record field keyed
|
|
24
|
+
* `String(n)`, and `lower-destructuring.ts`'s `lowerTuplePatternRead` already
|
|
25
|
+
* reads one back with this identical shape. Minting a property operation
|
|
26
|
+
* rather than expanding inside a lowering is what keeps the expansion visible
|
|
27
|
+
* to every layer that has an opinion about a read: the representation plan
|
|
28
|
+
* selects a carrier for each position's own result, `preflight/property-access.ts`
|
|
29
|
+
* records a `property-access:<carrier>:get:false` obligation per read, and
|
|
30
|
+
* `preflight/invocation-arguments.ts` / `array-literal-elements.ts` record the
|
|
31
|
+
* conversion obligation for each expanded operand. An IR-level expansion would
|
|
32
|
+
* be invisible to all four and would certify a program whose reads nothing
|
|
33
|
+
* proved.
|
|
34
|
+
*
|
|
35
|
+
* Cross-family minting under one candidate is the established shape here --
|
|
36
|
+
* `control.ts` mints `protocol` operations for a loop candidate,
|
|
37
|
+
* `invocations.ts` mints the `reference`/`binding` pair `super(...)` needs --
|
|
38
|
+
* and `contribution.ts` attributes each minted operation to its own family's
|
|
39
|
+
* coverage rather than to the candidate's.
|
|
40
|
+
*/
|
|
41
|
+
/** One expanded position: the result to cite and the type that position carries. */
|
|
42
|
+
export interface TupleSpreadPosition {
|
|
43
|
+
readonly source: OperandSource;
|
|
44
|
+
readonly type: StructuralTypeId;
|
|
45
|
+
}
|
|
46
|
+
export interface TupleSpreadReads {
|
|
47
|
+
readonly operations: readonly PropertyOperation[];
|
|
48
|
+
readonly edges: readonly SemanticEdge[];
|
|
49
|
+
/** One entry per tuple position, in position order. */
|
|
50
|
+
readonly positions: readonly TupleSpreadPosition[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The per-position types of a tuple whose arity is closed, or `null` for
|
|
54
|
+
* anything else.
|
|
55
|
+
*
|
|
56
|
+
* `optional`/`rest`/`variadic` elements are each a reason the arity is NOT
|
|
57
|
+
* settled -- `[number, ...string[]]` has no compile-time length, and
|
|
58
|
+
* `[number, string?]` has two possible ones -- so a tuple carrying any of them
|
|
59
|
+
* is not admitted here and falls through to whatever its caller's general path
|
|
60
|
+
* is. This is the same closed-arity requirement `lowerTupleLiteral`'s own
|
|
61
|
+
* `layout.length !== operands.length` check enforces one layer down, asked
|
|
62
|
+
* before the operands are built rather than after.
|
|
63
|
+
*/
|
|
64
|
+
export declare const closedTupleElementTypesOf: (context: ProducerContext, type: StructuralTypeId) => readonly StructuralTypeId[] | null;
|
|
65
|
+
/**
|
|
66
|
+
* An OPEN-ENDED tuple a spread can still settle positionally: `k` required
|
|
67
|
+
* positions followed by exactly one `rest` element and nothing after it --
|
|
68
|
+
* `[DiagnosticMessage, ...DiagnosticArguments]`. The fixed positions expand
|
|
69
|
+
* to `[[Get]]`s like a closed tuple's (`mintPositionalSpreadReads`), and the
|
|
70
|
+
* tail is a range copy from `fixed.length` into the callee's rest array,
|
|
71
|
+
* which is exactly what the language's own iteration would hand it. An
|
|
72
|
+
* optional position before the rest, or a variadic position, has no such
|
|
73
|
+
* split and stays `null`.
|
|
74
|
+
*/
|
|
75
|
+
export declare const openTupleSpreadShapeOf: (context: ProducerContext, type: StructuralTypeId) => {
|
|
76
|
+
readonly fixed: readonly StructuralTypeId[];
|
|
77
|
+
readonly tail: StructuralTypeId;
|
|
78
|
+
} | null;
|
|
79
|
+
/** Whether `...expression`'s own source is a closed tuple, asked without minting anything. */
|
|
80
|
+
export declare const isClosedTupleSpread: (context: ProducerContext, expression: ts.Expression) => boolean;
|
|
81
|
+
export declare const declaredTupleRestArityOf: (context: ProducerContext, expression: ts.Expression) => number | null;
|
|
82
|
+
/**
|
|
83
|
+
* The positional reads a declared-tuple rest parameter spread expands to
|
|
84
|
+
* (`declaredTupleRestArityOf`), each typed as the DECLARED tuple's own
|
|
85
|
+
* position -- not as the array cell's element. The cell holds the join of
|
|
86
|
+
* every position (`[string, number, number]` is an array of `string | number`),
|
|
87
|
+
* and a read typed by that join handed `describe( name, x, y )` a
|
|
88
|
+
* `string | number` for `x`, which made `x * y` a dynamic multiplication with
|
|
89
|
+
* no C++ spelling. The declaration is what fixes the value at each position,
|
|
90
|
+
* and a closed tuple LOCAL's reads are typed the same way off the same
|
|
91
|
+
* tagged-union carrier.
|
|
92
|
+
*/
|
|
93
|
+
export declare const declaredTupleRestSpreadReads: (context: ProducerContext, candidate: CensusCandidate, expression: ts.Expression) => TupleSpreadReads | null;
|
|
94
|
+
/**
|
|
95
|
+
* The receiver both expansions below read positions off: `resolveExpressionOperand`'s
|
|
96
|
+
* own VALUE identity (which family published this expression's result --
|
|
97
|
+
* correctly resolved past an `as`/`satisfies`/`<T>` wrapper, since none of
|
|
98
|
+
* those own a runtime operation of their own), paired with the TYPE asked
|
|
99
|
+
* directly at `expression`, exactly as `isClosedTupleSpread`/
|
|
100
|
+
* `admitsMaxArityTupleSpread` (`spread-arguments.ts`) already ask it -- not
|
|
101
|
+
* `resolveExpressionOperand`'s own bundled `.type`, which asks past the same
|
|
102
|
+
* wrapper for the type too and disagrees with both admission gates the
|
|
103
|
+
* moment one is present. `args as Parameters<NewResponse>` (hono's
|
|
104
|
+
* `Context.newResponse`) is the concrete case: the CAST states a real closed
|
|
105
|
+
* shape the underlying `args` binding does not have on its own (an ordinary,
|
|
106
|
+
* open-arity array, once the rest-parameter census has done its job) -- an
|
|
107
|
+
* admission gate that reads the cast agrees to expand it, and an expansion
|
|
108
|
+
* that then reads past the cast right back to the array finds no tuple
|
|
109
|
+
* there and refuses, silently, for an admission that already said yes.
|
|
110
|
+
* `local-bindings.ts`'s `knownOrResolve` draws this identical line for a
|
|
111
|
+
* cast ("the checker's own answer there is taken as-is and never read
|
|
112
|
+
* past"); this is that same rule, asked with the SAME node the two
|
|
113
|
+
* admission gates already use, so the three can only ever agree.
|
|
114
|
+
*/
|
|
115
|
+
export declare const spreadReceiverOf: (context: ProducerContext, expression: ts.Expression) => {
|
|
116
|
+
readonly source: OperandSource;
|
|
117
|
+
readonly type: StructuralTypeId;
|
|
118
|
+
} | null;
|
|
119
|
+
/**
|
|
120
|
+
* The `[[Get]]`s a tuple's positions expand to, shared by every admission
|
|
121
|
+
* shape below -- each differs only in WHICH element types it is sound to ask
|
|
122
|
+
* for, never in how a position, once admitted, is read.
|
|
123
|
+
*
|
|
124
|
+
* The receiver is cited ONCE and read N times, which is what the language
|
|
125
|
+
* does: `f(...sideEffect())` evaluates `sideEffect()` a single time and then
|
|
126
|
+
* indexes the result. Citing the expression per position instead would name
|
|
127
|
+
* the same published result N times, which is harmless, but building the
|
|
128
|
+
* operand once makes that single evaluation explicit rather than incidental.
|
|
129
|
+
*/
|
|
130
|
+
export declare const mintPositionalSpreadReads: (context: ProducerContext, candidate: CensusCandidate, receiver: {
|
|
131
|
+
readonly source: OperandSource;
|
|
132
|
+
readonly type: StructuralTypeId;
|
|
133
|
+
}, elements: readonly StructuralTypeId[], firstIndex?: number) => TupleSpreadReads;
|
|
134
|
+
/**
|
|
135
|
+
* The positional reads `...expression` expands to, or `null` when the source
|
|
136
|
+
* is not a closed tuple or when no operation publishes its value.
|
|
137
|
+
*/
|
|
138
|
+
export declare const tupleSpreadReads: (context: ProducerContext, candidate: CensusCandidate, expression: ts.Expression) => TupleSpreadReads | null;
|
|
139
|
+
/**
|
|
140
|
+
* The per-position types of a tuple whose only "unsettled" elements are a
|
|
141
|
+
* trailing OPTIONAL run, or `null` for anything else -- including a `rest`/
|
|
142
|
+
* `variadic` element, which still has no settled arity at all.
|
|
143
|
+
*
|
|
144
|
+
* `closedTupleElementTypesOf` above is right to refuse an optional-tailed
|
|
145
|
+
* tuple for its own callers: a spread's DESTINATION cares about the source's
|
|
146
|
+
* true runtime LENGTH (`[...t]` with `t.length === 1` must allocate a
|
|
147
|
+
* one-element array, not `[t[0], undefined]`), and expanding to the tuple's
|
|
148
|
+
* full declared arity would silently manufacture a longer collection than the
|
|
149
|
+
* source ever had. `maxArityTupleSpreadReads` is the one context where a
|
|
150
|
+
* fixed-at-declared-arity expansion is still exact rather than approximate --
|
|
151
|
+
* see it for why.
|
|
152
|
+
*
|
|
153
|
+
* The type widening happens HERE, at the element, rather than being layered
|
|
154
|
+
* onto every read: `t[i]` for an absent optional position `i` already reads
|
|
155
|
+
* `undefined` by ordinary out-of-bounds `[[Get]]`, so the element's own type
|
|
156
|
+
* has to say so, exactly the way `parameter-slot.ts`'s `parameterSlotTypeOf`
|
|
157
|
+
* widens an optional PARAMETER's slot with `undefined` for the same reason.
|
|
158
|
+
* The union is flattened rather than nested -- a member that is already a
|
|
159
|
+
* union has its own members spliced in -- because only a flat union derives
|
|
160
|
+
* to this compiler's three-armed optional carrier (`parameter-slot.ts`'s own
|
|
161
|
+
* comment states why a nested one would not).
|
|
162
|
+
*/
|
|
163
|
+
export declare const maxArityTupleElementTypesOf: (context: ProducerContext, type: StructuralTypeId) => readonly StructuralTypeId[] | null;
|
|
164
|
+
/**
|
|
165
|
+
* `...expression`'s positional reads, over an OPTIONAL-tailed tuple, for the
|
|
166
|
+
* one context where that is still sound: a CALL ARGUMENT, where an omitted
|
|
167
|
+
* argument and an explicitly `undefined` one read identically at the callee.
|
|
168
|
+
*
|
|
169
|
+
* Ordinary JS parameter binding makes that true unconditionally: an omitted
|
|
170
|
+
* argument binds `undefined` (ECMA-262 `FunctionDeclarationInstantiation` /
|
|
171
|
+
* `IteratorBindingInitialization` over a shorter argument list), and a
|
|
172
|
+
* defaulted parameter's initializer triggers on `undefined` however it
|
|
173
|
+
* arrived -- there is no third state a NAMED, non-rest parameter can
|
|
174
|
+
* observe. So `f(...t)` with `t: [A, B?]` reads IDENTICALLY at the callee
|
|
175
|
+
* whether `t`'s true runtime length is 1 or 2, PROVIDED:
|
|
176
|
+
*
|
|
177
|
+
* - the callee has no REST formal anywhere the tuple's positions could
|
|
178
|
+
* land -- a rest parameter's own `.length` DOES observe the caller's true
|
|
179
|
+
* argument count, which this fixed-at-declared-arity expansion cannot
|
|
180
|
+
* track;
|
|
181
|
+
* - nothing else follows this spread in the argument list -- a written
|
|
182
|
+
* argument after it would land at a position that shifts with the
|
|
183
|
+
* tuple's TRUE length, which only the real spread ever knows.
|
|
184
|
+
*
|
|
185
|
+
* Both conditions are the CALLER's to check (`spread-arguments.ts`'s
|
|
186
|
+
* `restFrom` and its own last-argument scan) -- this function only expands
|
|
187
|
+
* the positions, exactly as `tupleSpreadReads` does for a closed tuple.
|
|
188
|
+
*/
|
|
189
|
+
export declare const maxArityTupleSpreadReads: (context: ProducerContext, candidate: CensusCandidate, expression: ts.Expression) => TupleSpreadReads | null;
|