@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,710 @@
|
|
|
1
|
+
import { enclosingArgumentsFunction, implicitArgumentsSlotOf, isBodiedSignatureDeclaration } from '../implicit-arguments.js';
|
|
2
|
+
export { argumentsObjectPhantomOrdinalAt, isArgumentsObjectIdentifier } from '../implicit-arguments.js';
|
|
3
|
+
import ts from 'typescript';
|
|
4
|
+
import { operationId, regionId, semanticResultId } from '../../../identity/ids.js';
|
|
5
|
+
import { normalCompletion, pureEffects } from '../../model/operands.js';
|
|
6
|
+
import { blocked, mintOperationId, mintResult, operand } from './mint.js';
|
|
7
|
+
import { bindingKindOf, bindingKindOfElement } from './binding-kind.js';
|
|
8
|
+
import { boundElementType, citeBoundElementValue } from './destructuring.js';
|
|
9
|
+
import { citeExpressionResult } from './references.js';
|
|
10
|
+
import { resultEdge } from './shared.js';
|
|
11
|
+
/**
|
|
12
|
+
* The binding a destructuring element introduces.
|
|
13
|
+
*
|
|
14
|
+
* Extraction and introduction are two operations, not one: the destructuring
|
|
15
|
+
* family answers "which value does this position yield", and this family
|
|
16
|
+
* answers "which name now holds it, with what mutability and dead zone". Fusing
|
|
17
|
+
* them would put one question under two authorities, and the two answers would
|
|
18
|
+
* eventually disagree.
|
|
19
|
+
*
|
|
20
|
+
* An element whose own name is a nested pattern binds nothing here -- the
|
|
21
|
+
* nested pattern's elements are the declarations, and each is its own candidate
|
|
22
|
+
* -- so this contributes an empty, fully covered publication rather than a
|
|
23
|
+
* blocker: nothing is missing, there is simply nothing at this coordinate.
|
|
24
|
+
*/
|
|
25
|
+
const contributeBindingElement = (candidate, node, context) => {
|
|
26
|
+
if (!ts.isIdentifier(node.name))
|
|
27
|
+
return { kind: 'operations', operations: [], edges: [] };
|
|
28
|
+
const { mutable, temporalDeadZone } = bindingKindOfElement(node);
|
|
29
|
+
const extracted = citeBoundElementValue(node, context.identities);
|
|
30
|
+
const type = boundElementType(node, context);
|
|
31
|
+
const id = mintOperationId(context.ordinals, candidate.id, 'binding');
|
|
32
|
+
const declaration = context.identities.declarationIdOf(node);
|
|
33
|
+
const operation = {
|
|
34
|
+
id,
|
|
35
|
+
family: 'binding',
|
|
36
|
+
action: 'initialize',
|
|
37
|
+
declaration,
|
|
38
|
+
mutable,
|
|
39
|
+
temporalDeadZone,
|
|
40
|
+
...(context.commonJsBindings.has(declaration)
|
|
41
|
+
? {
|
|
42
|
+
commonJs: {
|
|
43
|
+
global: context.commonJsBindings.get(declaration),
|
|
44
|
+
owner: regionId(context.identities.nodeIdOf(node.getSourceFile()), 'module-body')
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
: {}),
|
|
48
|
+
...(isParameterBindingElement(node) ? { parameterInitialization: true } : {}),
|
|
49
|
+
caller: candidate.caller,
|
|
50
|
+
operands: [operand('initializer', 0, extracted, type)],
|
|
51
|
+
results: [mintResult(id, 'value', type)],
|
|
52
|
+
completion: normalCompletion,
|
|
53
|
+
effects: { ...pureEffects, writesMutableState: true },
|
|
54
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
55
|
+
};
|
|
56
|
+
const edges = extracted.kind === 'result' ? [{ kind: 'value', result: extracted.result, to: id, role: 'initializer', ordinal: 0 }] : [];
|
|
57
|
+
return { kind: 'operations', operations: [operation], edges };
|
|
58
|
+
};
|
|
59
|
+
/** Whether a nested binding element ultimately belongs to a formal parameter pattern. */
|
|
60
|
+
const isParameterBindingElement = (node) => {
|
|
61
|
+
for (let current = node.parent; current; current = current.parent) {
|
|
62
|
+
if (ts.isParameter(current))
|
|
63
|
+
return true;
|
|
64
|
+
if (ts.isVariableDeclaration(current))
|
|
65
|
+
return false;
|
|
66
|
+
if (!ts.isBindingElement(current) && !ts.isArrayBindingPattern(current) && !ts.isObjectBindingPattern(current))
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* The identity a defaulted parameter's raw argument value publishes under.
|
|
73
|
+
*
|
|
74
|
+
* A default initializer runs only when the caller's own value is exactly
|
|
75
|
+
* `undefined`, which is a presence test over the raw, pre-default argument --
|
|
76
|
+
* not over the named binding a program reads afterward, which by then always
|
|
77
|
+
* excludes `undefined` (ECMA-262 9.2.10). Something has to be citable *as*
|
|
78
|
+
* that raw value for a guard to test it, and `semantics/normalize/gating.ts`
|
|
79
|
+
* has to name the exact same result `contributeDefaultedParameter` mints,
|
|
80
|
+
* independently and in advance -- the same way every other cross-producer
|
|
81
|
+
* citation in this compiler agrees on an identity rather than looking one up.
|
|
82
|
+
*/
|
|
83
|
+
export const parameterValueResultOf = (node, identities) => semanticResultId(operationId(identities.nodeIdOf(node), 'reference', 0), 'value');
|
|
84
|
+
/**
|
|
85
|
+
* The identity a formal parameter's own binding publishes its value under.
|
|
86
|
+
*
|
|
87
|
+
* The value AFTER `FunctionDeclarationInstantiation` has run -- so the default
|
|
88
|
+
* applied where there is one, and the raw argument where there is not. Both
|
|
89
|
+
* shapes below mint that binding as the first `binding`-family operation at
|
|
90
|
+
* the parameter's node, which is what makes one rule serve both.
|
|
91
|
+
*
|
|
92
|
+
* Cited by `producers/class-lifecycle.ts`, which needs it for the store half
|
|
93
|
+
* of a parameter property: `constructor(readonly name: T)` assigns the value
|
|
94
|
+
* the parameter is BOUND to, not the raw slot -- `constructor(readonly n = 5)`
|
|
95
|
+
* stores 5 when the caller passed nothing.
|
|
96
|
+
*/
|
|
97
|
+
export const parameterBindingResultOf = (node, identities) => semanticResultId(operationId(identities.nodeIdOf(node), 'binding', 0), 'value');
|
|
98
|
+
/**
|
|
99
|
+
* The physical position a formal parameter occupies in its callable's frame.
|
|
100
|
+
*
|
|
101
|
+
* A `this` parameter is a type annotation with no argument slot behind it, so
|
|
102
|
+
* it is not counted; every parameter after one would otherwise be off by one
|
|
103
|
+
* against the ABI the signature shape describes.
|
|
104
|
+
*/
|
|
105
|
+
const abiOrdinalOf = (node) => {
|
|
106
|
+
const parameters = node.parent.parameters;
|
|
107
|
+
const physical = parameters.filter((parameter) => !(ts.isIdentifier(parameter.name) && parameter.name.text === 'this'));
|
|
108
|
+
return physical.indexOf(node);
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* The full logical `arguments` value at one reference site.
|
|
112
|
+
*
|
|
113
|
+
* `arguments[i]` is unmapped in every ES module (ES modules are always strict
|
|
114
|
+
* mode, and strict-mode `arguments` never aliases a named parameter's later
|
|
115
|
+
* reassignment -- ECMA-262 `MakeArgGetter`/`MakeArgSetter` bindings are
|
|
116
|
+
* SLOPPY-mode only), so every position reads the RAW value the caller passed,
|
|
117
|
+
* not whatever the named binding holds now. That raw value is available
|
|
118
|
+
* directly from the frame at `{kind:'parameter', ordinal}` for every
|
|
119
|
+
* position, the same source `contributeParameter`'s own binding reads.
|
|
120
|
+
*
|
|
121
|
+
* A `restFrom` REST PARAMETER (real or, through `implicitArgumentsSlotOf`, the checker's own phantom) is a DIFFERENT ECMAScript
|
|
122
|
+
* concept: it packs only the TAIL of the argument list, from its own ordinal
|
|
123
|
+
* onward, into a fresh array. `arguments`, by contrast, is EVERY argument, so
|
|
124
|
+
* where the phantom sits at ordinal `P > 0`, `arguments` is P declared
|
|
125
|
+
* parameters concatenated with that tail -- built as a range copy through the
|
|
126
|
+
* same array-literal-with-spread shape `allocations.ts`'s own producer
|
|
127
|
+
* builds for `[a, b, ...c]` (see `spread-arguments.ts`'s module comment: "the
|
|
128
|
+
* same `appendRange`... an array literal's own admitted spread emits"), never
|
|
129
|
+
* an alias of either source.
|
|
130
|
+
*
|
|
131
|
+
* `P === 0` (every forwarding shim this compiler has seen: `function
|
|
132
|
+
* texImage2D(){ gl.texImage2D(...arguments) }`) degenerates to exactly the
|
|
133
|
+
* phantom's own rest array -- no concatenation needed, so none is built.
|
|
134
|
+
*
|
|
135
|
+
* Every occurrence mints its own copy of these operations, the same way
|
|
136
|
+
* `buildThisReference` (`references.ts`) mints one operation per `this`
|
|
137
|
+
* keyword rather than sharing one across the function: cheap, and correct
|
|
138
|
+
* only because `arguments` is exclusively READ by every body this compiler
|
|
139
|
+
* normalizes -- an unmapped `arguments[i] = x` write would observably diverge
|
|
140
|
+
* from a second, independently-read copy, and is not admitted here.
|
|
141
|
+
*
|
|
142
|
+
* Returns `null` when `node` is not inside a function with this recognized
|
|
143
|
+
* phantom shape at all -- callers should treat that exactly as "this is not
|
|
144
|
+
* the magic `arguments` binding this compiler can bind," the same fail-closed
|
|
145
|
+
* answer `citeExpressionResult` gives any other unmodelled expression.
|
|
146
|
+
*/
|
|
147
|
+
export const argumentsObjectValueAt = (node, mintAgainst, caller, evaluationOrdinal, context) => {
|
|
148
|
+
const fn = enclosingArgumentsFunction(node);
|
|
149
|
+
if (!fn)
|
|
150
|
+
return null;
|
|
151
|
+
const signature = context.checker.getSignatureFromDeclaration(fn);
|
|
152
|
+
const phantom = signature ? implicitArgumentsSlotOf(signature) : null;
|
|
153
|
+
if (!phantom)
|
|
154
|
+
return null;
|
|
155
|
+
// Read the same slot as the callable ABI. The signature mapper owns the
|
|
156
|
+
// census-to-structural translation, including the checker fallback when
|
|
157
|
+
// complete argument evidence is unavailable.
|
|
158
|
+
if (!signature)
|
|
159
|
+
return null;
|
|
160
|
+
const frame = context.table.get(context.types.resolvedSignatureTypeOf(signature, 'call')).shape;
|
|
161
|
+
const restType = frame.kind === 'signature' ? frame.call[0]?.parameters[phantom.ordinal]?.type : undefined;
|
|
162
|
+
if (restType === undefined)
|
|
163
|
+
return null;
|
|
164
|
+
const restId = mintOperationId(context.ordinals, mintAgainst, 'reference');
|
|
165
|
+
const restResult = mintResult(restId, 'value', restType);
|
|
166
|
+
// Same shape `contributeDefaultedParameter`'s raw-argument citation mints
|
|
167
|
+
// above, and for the identical reason: `projection/abi.ts`'s
|
|
168
|
+
// `parameterCarrierKeys` already recognizes `reference`/`parameter-value`
|
|
169
|
+
// as evidence ordinal `phantom.ordinal` is physically bound, so this needs
|
|
170
|
+
// no change there to satisfy the ABI projection's own arity check.
|
|
171
|
+
const restOperation = {
|
|
172
|
+
id: restId,
|
|
173
|
+
family: 'reference',
|
|
174
|
+
form: 'parameter-value',
|
|
175
|
+
strict: true,
|
|
176
|
+
unresolvableThrows: false,
|
|
177
|
+
hasNoCell: false,
|
|
178
|
+
caller,
|
|
179
|
+
operands: [operand('argument', 0, { kind: 'parameter', ordinal: phantom.ordinal }, restType, { kind: 'provenance' })],
|
|
180
|
+
results: [restResult],
|
|
181
|
+
completion: normalCompletion,
|
|
182
|
+
effects: pureEffects,
|
|
183
|
+
evaluationOrdinal
|
|
184
|
+
};
|
|
185
|
+
if (phantom.ordinal === 0)
|
|
186
|
+
return { operations: [restOperation], edges: [], value: restResult.id, type: restType };
|
|
187
|
+
const operands = [];
|
|
188
|
+
for (let i = 0; i < phantom.ordinal; i++) {
|
|
189
|
+
const declared = fn.parameters[i];
|
|
190
|
+
const elementType = declared ? context.types.typeAt(declared) : restType;
|
|
191
|
+
operands.push(operand('element', i, { kind: 'parameter', ordinal: i }, elementType));
|
|
192
|
+
}
|
|
193
|
+
operands.push(operand('spread', phantom.ordinal, { kind: 'result', result: restResult.id }, restType));
|
|
194
|
+
const arrayId = mintOperationId(context.ordinals, mintAgainst, 'allocation');
|
|
195
|
+
const arrayOperation = {
|
|
196
|
+
id: arrayId,
|
|
197
|
+
family: 'allocation',
|
|
198
|
+
caller,
|
|
199
|
+
allocated: 'array-literal',
|
|
200
|
+
callable: null,
|
|
201
|
+
// The census element covers the complete argument list, including the
|
|
202
|
+
// declared prefix, so the signature's array carrier also holds this copy.
|
|
203
|
+
shape: restType,
|
|
204
|
+
operands,
|
|
205
|
+
results: [mintResult(arrayId, 'value', restType)],
|
|
206
|
+
completion: normalCompletion,
|
|
207
|
+
effects: { readsMutableState: false, writesMutableState: false, allocates: true, callsUserCode: false },
|
|
208
|
+
evaluationOrdinal
|
|
209
|
+
};
|
|
210
|
+
return {
|
|
211
|
+
operations: [restOperation, arrayOperation],
|
|
212
|
+
edges: [{ kind: 'value', result: restResult.id, to: arrayId, role: 'spread', ordinal: phantom.ordinal }],
|
|
213
|
+
value: semanticResultId(arrayId, 'value'),
|
|
214
|
+
type: restType
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
/**
|
|
218
|
+
* Whether a parameter binds a cell in a real calling frame.
|
|
219
|
+
*
|
|
220
|
+
* A parameter's parent can be a type-level shape with no frame behind it at
|
|
221
|
+
* all -- `FunctionTypeNode`, `ConstructorTypeNode`, `MethodSignature`,
|
|
222
|
+
* `CallSignatureDeclaration`, `ConstructSignatureDeclaration`, and
|
|
223
|
+
* `IndexSignatureDeclaration` all declare a parameter list without ever
|
|
224
|
+
* calling it. Those parents are not in `BodiedSignatureDeclaration` at all, so
|
|
225
|
+
* they answer `false` here directly. An ambient declaration or an overload
|
|
226
|
+
* signature has a parent kind that *can* carry a body (`FunctionDeclaration`)
|
|
227
|
+
* but this particular one does not (`declare function f(x: number): void`, or
|
|
228
|
+
* one signature of an overloaded function with no implementation) -- checking
|
|
229
|
+
* `.body` catches those the kind test alone would miss. Every one of these
|
|
230
|
+
* shapes has no ABI a caller ever writes an argument into, so publishing an
|
|
231
|
+
* `initialize` operand sourced from an ABI position would mint a read of a
|
|
232
|
+
* frame slot nothing populates.
|
|
233
|
+
*/
|
|
234
|
+
const hasArgumentFrame = (node) => {
|
|
235
|
+
const parent = node.parent;
|
|
236
|
+
return isBodiedSignatureDeclaration(parent) && parent.body !== undefined;
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* The structural type ECMAScript's default-parameter initializer eliminates:
|
|
240
|
+
* exactly the `undefined` arm of a union, never `null`. Only a union the
|
|
241
|
+
* checker widened with `undefined` needs the strip -- an inferred parameter
|
|
242
|
+
* (`p = 0`, no annotation) is never widened that way to begin with, and
|
|
243
|
+
* `checker.getNonNullableType` strips both absence values, which is the wrong
|
|
244
|
+
* rule here: `function f(x: number | null = 0)` still binds `x` to `null`
|
|
245
|
+
* when a caller passes it, and only an omitted or explicitly `undefined`
|
|
246
|
+
* argument runs the initializer.
|
|
247
|
+
*
|
|
248
|
+
* This filters the *structural* union rather than reconstructing a `ts.Type`.
|
|
249
|
+
* `ts.TypeChecker.getUnionType` is internal and not part of the public API,
|
|
250
|
+
* so a `ts.Type`-level strip has no way to spell "the union of the two
|
|
251
|
+
* declared members that are left" once `undefined` has more than one
|
|
252
|
+
* sibling -- `function f(x: string | number | undefined = 0)` would have had
|
|
253
|
+
* to fall back to the whole three-armed type, leaving `undefined` in the
|
|
254
|
+
* binding's cell despite the initializer having just eliminated it, which is
|
|
255
|
+
* exactly the `binding-read-conversion` mismatch this produced against every
|
|
256
|
+
* later read (each of which derives its own, `undefined`-free structural
|
|
257
|
+
* type independently). `StructuralTypeTable` has no such restriction: a
|
|
258
|
+
* structural `union` is public data this file already constructs directly
|
|
259
|
+
* two lines below, so dropping one member and re-interning -- or unwrapping
|
|
260
|
+
* to the sole remaining member -- needs nothing internal.
|
|
261
|
+
*/
|
|
262
|
+
const withoutUndefinedMember = (id, table) => {
|
|
263
|
+
const type = table.get(id);
|
|
264
|
+
if (type.shape.kind !== 'union')
|
|
265
|
+
return id;
|
|
266
|
+
const remaining = type.shape.members.filter((memberId) => {
|
|
267
|
+
const member = table.get(memberId);
|
|
268
|
+
return member.shape.kind !== 'primitive' || member.shape.primitive !== 'undefined';
|
|
269
|
+
});
|
|
270
|
+
if (remaining.length === type.shape.members.length)
|
|
271
|
+
return id;
|
|
272
|
+
const [first, ...rest] = remaining;
|
|
273
|
+
if (!first)
|
|
274
|
+
return id;
|
|
275
|
+
return rest.length === 0 ? first : table.intern({ kind: 'union', members: remaining });
|
|
276
|
+
};
|
|
277
|
+
/** Whether a type IS `undefined`, or a union every member of which is -- the one initializer that replaces nothing. */
|
|
278
|
+
const isUndefinedType = (id, table) => {
|
|
279
|
+
const shape = table.get(id).shape;
|
|
280
|
+
if (shape.kind === 'primitive')
|
|
281
|
+
return shape.primitive === 'undefined';
|
|
282
|
+
return shape.kind === 'union' && shape.members.every((member) => isUndefinedType(member, table));
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* A defaulted parameter's three operations: the raw argument as a citable
|
|
286
|
+
* guard, the default itself, and the named binding.
|
|
287
|
+
*
|
|
288
|
+
* `function f(x = 0)` binds `x` inside the body via
|
|
289
|
+
* `FunctionDeclarationInstantiation` -> `IteratorBindingInitialization` ->
|
|
290
|
+
* `KeyedBindingInitialization`'s Initializer_opt clause -- the exact same
|
|
291
|
+
* production a destructuring element's own default already goes through,
|
|
292
|
+
* which is why this reuses that family's operation rather than inventing a
|
|
293
|
+
* second "default" shape: `family: 'destructuring', form: 'default-value'`
|
|
294
|
+
* (`contributeDefault` above -- sibling code, not this parameter's own -- for
|
|
295
|
+
* the object/array-pattern case) already models "fire only when the extracted
|
|
296
|
+
* value is exactly `undefined`" with its own identity rather than the shared
|
|
297
|
+
* conditional-edge vocabulary, for the reason given on that function: the
|
|
298
|
+
* vocabulary only has `nullish`, which conflates `null` with `undefined`.
|
|
299
|
+
*
|
|
300
|
+
* The raw argument's own structural type is built here rather than read off
|
|
301
|
+
* the parameter the way every other operand's type is, because the checker's
|
|
302
|
+
* answer for it is not one shape across the two ways to spell a default:
|
|
303
|
+
* `p: number | undefined = 0`'s parameter declaration reports the full
|
|
304
|
+
* annotation, `number | undefined`, but `p = 0`'s already reports the
|
|
305
|
+
* narrowed, `undefined`-free `number` there -- the same checker API
|
|
306
|
+
* disagreeing with itself across two spellings of one feature. Building
|
|
307
|
+
* `payload | undefined` directly, from the same payload type the default's
|
|
308
|
+
* own result publishes, is what makes this operand's carrier agree with
|
|
309
|
+
* `representation/derive.ts`'s `abiOf` regardless of which spelling produced
|
|
310
|
+
* it, since both widen the same payload with the same absence value; a
|
|
311
|
+
* parameter whose own declared type already carries a *different* absence
|
|
312
|
+
* value (`p: number | null = 0`) has that same union collapse fail closed in
|
|
313
|
+
* `abiOf`, for the reason given on the `optionalOf` call there.
|
|
314
|
+
*/
|
|
315
|
+
const contributeDefaultedParameter = (candidate, node, context) => {
|
|
316
|
+
const cited = citeExpressionResult(node.initializer, context);
|
|
317
|
+
if (cited.kind === 'unmodelled') {
|
|
318
|
+
return { kind: 'blocked', blocker: blocked(candidate.id, 'binding', `default parameter initializer ${cited.reason}`, null) };
|
|
319
|
+
}
|
|
320
|
+
// `undefined` is stripped from the body type because the initializer runs
|
|
321
|
+
// exactly when the argument was `undefined` and replaces it -- unless the
|
|
322
|
+
// initializer's own value IS `undefined`, in which case it replaces nothing
|
|
323
|
+
// and the body really can observe one. `p: EventName | undefined = undefined`
|
|
324
|
+
// is that case, it is ordinary TypeScript (which types the binding
|
|
325
|
+
// `EventName | undefined` there, exactly as this now does), and stripping it
|
|
326
|
+
// anyway gave the initializer's own constant the undefined-free carrier --
|
|
327
|
+
// a literal `undefined` asserted into a `gea::TaggedUnion<std::string,
|
|
328
|
+
// gea::Symbol>`, which has no state for it.
|
|
329
|
+
// STATED, not held: this parameter's own written annotation, needed
|
|
330
|
+
// verbatim (see the comment above) precisely because the checker's answer
|
|
331
|
+
// to it differs across two annotation spellings -- the exact fact this
|
|
332
|
+
// code compensates for, not one a census should paper over.
|
|
333
|
+
// ...and asked of the CENSUS first, exactly as `structural-parts.ts`'s
|
|
334
|
+
// `parameterOf` opens with `parameters.typeAt(declaration)` for the SLOT
|
|
335
|
+
// this operand reads. The checker's answer at an UNANNOTATED defaulted
|
|
336
|
+
// parameter is not the written annotation the paragraph above is about --
|
|
337
|
+
// there is none -- it is the DEFAULT INITIALIZER'S own type, and a default
|
|
338
|
+
// value is not a type. `RenderTarget.js`'s `_setTextureOptions( options =
|
|
339
|
+
// {} )` is the measured case: the ABI slot and every body read carried
|
|
340
|
+
// `RenderTarget_Options` (the census answer, from the call sites), while
|
|
341
|
+
// the binding that initializes the cell both of those read through carried
|
|
342
|
+
// `{}` -- 26 unmet `binding-read-conversion:record(...;)->record(... 20
|
|
343
|
+
// fields ...)` obligations on the three.js app, one per read, and not one of them a
|
|
344
|
+
// capability that was missing. Three authorities over one parameter, the
|
|
345
|
+
// same shape `parameter-slot.ts`'s header records for rest parameters, and
|
|
346
|
+
// closed the same way. Where the parameter DOES state a type the census
|
|
347
|
+
// publishes nothing and the checker still answers, so the annotated
|
|
348
|
+
// spellings this function compensates for are untouched.
|
|
349
|
+
// The mapper's own answer for the parameter, not the checker's `ts.Type`
|
|
350
|
+
// re-interned: for a destructured parameter the mapper lays the value out
|
|
351
|
+
// as the array its call sites pass (`impliedPatternArrayElementAt`), where
|
|
352
|
+
// the checker's tuple would put a record in the slot the pattern then
|
|
353
|
+
// reads as an array.
|
|
354
|
+
const declaredType = context.types.typeAt(node);
|
|
355
|
+
const fallbackType = context.types.typeAt(node.initializer);
|
|
356
|
+
const bodyType = isUndefinedType(fallbackType, context.table) ? declaredType : withoutUndefinedMember(declaredType, context.table);
|
|
357
|
+
// The raw argument -- what the caller physically passed -- is the declared
|
|
358
|
+
// type with `undefined` present, and it is asked of the CHECKER rather than
|
|
359
|
+
// built here, because it has to be the same interned shape
|
|
360
|
+
// `SignatureParameter.slot` is (`normalize/parameter-slot.ts`): the ABI
|
|
361
|
+
// declares that slot and this operand reads it, and two spellings of one
|
|
362
|
+
// union are two different shapes. Interning `union(bodyType, undefined)`
|
|
363
|
+
// directly is the spelling that differs: where `bodyType` is itself a union
|
|
364
|
+
// -- `f(x: T | null = null)`, which JSDoc writes as `@param {?T} [x=null]`
|
|
365
|
+
// and three.js writes throughout -- that nests a union inside a union, and
|
|
366
|
+
// a nested one derives as "an optional payload that is itself optional",
|
|
367
|
+
// which is the carrier one flag cannot hold. `getNullableType` flattens, so
|
|
368
|
+
// the three-armed union reaches the deriver as three arms.
|
|
369
|
+
const rawType = context.table.intern({ kind: 'union', members: [declaredType, context.types.typeOf(context.checker.getUndefinedType())] });
|
|
370
|
+
const valueId = mintOperationId(context.ordinals, candidate.id, 'reference');
|
|
371
|
+
const valueResult = mintResult(valueId, 'value', rawType);
|
|
372
|
+
const valueOperation = {
|
|
373
|
+
id: valueId,
|
|
374
|
+
family: 'reference',
|
|
375
|
+
form: 'parameter-value',
|
|
376
|
+
strict: true,
|
|
377
|
+
unresolvableThrows: false,
|
|
378
|
+
hasNoCell: false,
|
|
379
|
+
caller: candidate.caller,
|
|
380
|
+
// Supplied by the frame the caller established, exactly as `this`'s own
|
|
381
|
+
// `{kind: 'receiver'}` operand is (`references.ts`'s `buildThisReference`):
|
|
382
|
+
// nothing here evaluates it, so it is recorded as provenance rather than
|
|
383
|
+
// as a runtime step this operation performs.
|
|
384
|
+
operands: [operand('argument', 0, { kind: 'parameter', ordinal: abiOrdinalOf(node) }, rawType, { kind: 'provenance' })],
|
|
385
|
+
results: [valueResult],
|
|
386
|
+
completion: normalCompletion,
|
|
387
|
+
effects: pureEffects,
|
|
388
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
389
|
+
};
|
|
390
|
+
const defaultId = mintOperationId(context.ordinals, candidate.id, 'destructuring');
|
|
391
|
+
const defaultResult = mintResult(defaultId, 'value', bodyType);
|
|
392
|
+
const defaultOperation = {
|
|
393
|
+
id: defaultId,
|
|
394
|
+
family: 'destructuring',
|
|
395
|
+
form: 'default-value',
|
|
396
|
+
caller: candidate.caller,
|
|
397
|
+
operands: [
|
|
398
|
+
operand('extracted', 0, { kind: 'result', result: valueResult.id }, rawType, { kind: 'provenance' }),
|
|
399
|
+
// The fallback is the initializer expression's own value. `bodyType`
|
|
400
|
+
// describes the merge result after either the supplied argument or the
|
|
401
|
+
// default wins; using it on this incoming edge erases the initializer's
|
|
402
|
+
// physical carrier before conversion planning. A static `null` property
|
|
403
|
+
// used as a default then masquerades as the parameter's broad Object
|
|
404
|
+
// annotation and asks the emitter to convert a constructor carrier into
|
|
405
|
+
// the call-site-derived image union. Keep the edge typed by the already
|
|
406
|
+
// computed initializer answer and let the merge perform the one real
|
|
407
|
+
// conversion, from that value into `bodyType`.
|
|
408
|
+
operand('fallback', 0, cited.source, fallbackType)
|
|
409
|
+
],
|
|
410
|
+
results: [defaultResult],
|
|
411
|
+
completion: normalCompletion,
|
|
412
|
+
effects: { readsMutableState: false, writesMutableState: false, allocates: false, callsUserCode: cited.source.kind === 'result' },
|
|
413
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
414
|
+
};
|
|
415
|
+
const defaultEdges = [{ kind: 'value', result: valueResult.id, to: defaultId, role: 'extracted', ordinal: 0 }];
|
|
416
|
+
const fallbackEdge = resultEdge(cited.source, defaultId, 'fallback', 0);
|
|
417
|
+
if (fallbackEdge)
|
|
418
|
+
defaultEdges.push(fallbackEdge);
|
|
419
|
+
const bindId = mintOperationId(context.ordinals, candidate.id, 'binding');
|
|
420
|
+
const bindOperation = {
|
|
421
|
+
id: bindId,
|
|
422
|
+
family: 'binding',
|
|
423
|
+
action: 'initialize',
|
|
424
|
+
declaration: context.identities.declarationIdOf(node),
|
|
425
|
+
mutable: true,
|
|
426
|
+
temporalDeadZone: false,
|
|
427
|
+
parameterInitialization: true,
|
|
428
|
+
caller: candidate.caller,
|
|
429
|
+
operands: [operand('initializer', 0, { kind: 'result', result: defaultResult.id }, bodyType)],
|
|
430
|
+
results: [mintResult(bindId, 'value', bodyType)],
|
|
431
|
+
completion: normalCompletion,
|
|
432
|
+
effects: { ...pureEffects, writesMutableState: true },
|
|
433
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
434
|
+
};
|
|
435
|
+
const bindEdge = { kind: 'value', result: defaultResult.id, to: bindId, role: 'initializer', ordinal: 0 };
|
|
436
|
+
return { kind: 'operations', operations: [valueOperation, defaultOperation, bindOperation], edges: [...defaultEdges, bindEdge] };
|
|
437
|
+
};
|
|
438
|
+
/**
|
|
439
|
+
* A formal parameter: one binding, initialized from the caller's frame.
|
|
440
|
+
*
|
|
441
|
+
* A rest parameter is an ordinary binding: the language binds it to one Array
|
|
442
|
+
* holding the trailing arguments, and that Array is a single frame slot like
|
|
443
|
+
* any other. What varies is the *argument* count, which is the caller's problem,
|
|
444
|
+
* not this binding's.
|
|
445
|
+
*
|
|
446
|
+
* A pattern-named parameter still binds one cell: `function f({a, b})` gives
|
|
447
|
+
* the frame slot no *user-visible* name, but the language does hold that value
|
|
448
|
+
* while the pattern destructures it, and the elements read it from there. So it
|
|
449
|
+
* publishes the same `initialize` every other parameter does -- the declaration
|
|
450
|
+
* it names is the parameter itself -- and the destructuring producer cites that
|
|
451
|
+
* result as the pattern's source. Contributing nothing here is what left every
|
|
452
|
+
* element of such a pattern with no value to read.
|
|
453
|
+
*
|
|
454
|
+
* A default initializer on a plain identifier mints three operations, not
|
|
455
|
+
* one, via `contributeDefaultedParameter` above: the raw argument as its own
|
|
456
|
+
* citable value, the guarded default itself, and the named binding this
|
|
457
|
+
* parameter introduces -- initialized from the default's result rather than
|
|
458
|
+
* the raw argument directly. A pattern reads that same initialized cell, so
|
|
459
|
+
* its extractions naturally follow the completed default operation.
|
|
460
|
+
*/
|
|
461
|
+
const contributeParameter = (candidate, node, context) => {
|
|
462
|
+
// `function f(this: T)` declares the receiver's type; it is erased and has no
|
|
463
|
+
// argument slot, so there is no binding here to introduce.
|
|
464
|
+
if (ts.isIdentifier(node.name) && node.name.text === 'this')
|
|
465
|
+
return { kind: 'operations', operations: [], edges: [] };
|
|
466
|
+
// A type-level or bodyless parameter list (an index signature, a method
|
|
467
|
+
// signature, a function type, an ambient declaration, an overload with no
|
|
468
|
+
// implementation) is never called, so there is no frame slot for this
|
|
469
|
+
// binding to read -- nothing is missing here, there is simply nothing to
|
|
470
|
+
// introduce, the same "not every candidate names a gap" answer a
|
|
471
|
+
// pattern-nested BindingElement gives above.
|
|
472
|
+
if (!hasArgumentFrame(node))
|
|
473
|
+
return { kind: 'operations', operations: [], edges: [] };
|
|
474
|
+
if (node.initializer) {
|
|
475
|
+
return contributeDefaultedParameter(candidate, node, context);
|
|
476
|
+
}
|
|
477
|
+
const type = context.types.typeAt(node);
|
|
478
|
+
const id = mintOperationId(context.ordinals, candidate.id, 'binding');
|
|
479
|
+
const operation = {
|
|
480
|
+
id,
|
|
481
|
+
family: 'binding',
|
|
482
|
+
action: 'initialize',
|
|
483
|
+
declaration: context.identities.declarationIdOf(node),
|
|
484
|
+
// A parameter is an ordinary mutable binding, and it is bound before the
|
|
485
|
+
// body runs, so there is no dead zone a read could fall into.
|
|
486
|
+
mutable: true,
|
|
487
|
+
temporalDeadZone: false,
|
|
488
|
+
parameterInitialization: true,
|
|
489
|
+
caller: candidate.caller,
|
|
490
|
+
operands: [operand('initializer', 0, { kind: 'parameter', ordinal: abiOrdinalOf(node) }, type)],
|
|
491
|
+
results: [mintResult(id, 'value', type)],
|
|
492
|
+
completion: normalCompletion,
|
|
493
|
+
effects: { ...pureEffects, writesMutableState: true },
|
|
494
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
495
|
+
};
|
|
496
|
+
return { kind: 'operations', operations: [operation], edges: [] };
|
|
497
|
+
};
|
|
498
|
+
/**
|
|
499
|
+
* Whether a declaration is ambient: `declare const x`, or anything inside a
|
|
500
|
+
* `declare module` / `.d.ts`.
|
|
501
|
+
*
|
|
502
|
+
* An ambient declaration states that something exists without defining it: the
|
|
503
|
+
* program never introduces the cell, a host does. That is not a reason to
|
|
504
|
+
* refuse it -- it is a different *kind* of introduction, one whose carrier
|
|
505
|
+
* still comes from the declared type like any other binding's, but whose
|
|
506
|
+
* storage is `external` rather than `local`/`region` (`BindingStorage`,
|
|
507
|
+
* projection/bindings.ts) and whose obligation is a host-boundary capability
|
|
508
|
+
* rather than a carrier-selection one (`buildExternalBindingObligation`,
|
|
509
|
+
* preflight/run.ts). Emitting a definition for it regardless -- as though the
|
|
510
|
+
* program itself owned the cell -- is what would be silently wrong: a null
|
|
511
|
+
* function pointer called through, or a zeroed record loaded from.
|
|
512
|
+
*/
|
|
513
|
+
const isAmbient = (node) => {
|
|
514
|
+
if ((ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Ambient) !== 0)
|
|
515
|
+
return true;
|
|
516
|
+
// `declare module "x" { const y: T }` marks only the module, so the walk is
|
|
517
|
+
// what catches a declaration nested inside one.
|
|
518
|
+
for (let current = node.parent; current; current = current.parent) {
|
|
519
|
+
if (ts.isModuleDeclaration(current) && (ts.getCombinedModifierFlags(current) & ts.ModifierFlags.Ambient) !== 0)
|
|
520
|
+
return true;
|
|
521
|
+
}
|
|
522
|
+
return false;
|
|
523
|
+
};
|
|
524
|
+
/**
|
|
525
|
+
* A `for`-`of`/`for`-`in` loop variable (`const value` in `for (const value of
|
|
526
|
+
* values)`) has no `=` initializer of its own -- ECMA-262 assigns it from the
|
|
527
|
+
* loop's own `IteratorStep`/enumerate step instead, at the head of every
|
|
528
|
+
* iteration. `mintIteratorSteps` (protocol.ts) reserves `next` at a fixed
|
|
529
|
+
* ordinal -- 2 -- specifically so a citation like this one can be built from
|
|
530
|
+
* the enclosing loop's identity alone, without knowing which loop variant (or
|
|
531
|
+
* which of its steps this compiler can actually lower) produced it: this
|
|
532
|
+
* returns the same `SemanticResultId` regardless of whether that `next` takes
|
|
533
|
+
* the array-native fast path or the general dynamic protocol.
|
|
534
|
+
*
|
|
535
|
+
* Returns `null` for anything that is not exactly this shape -- a plain `let x`
|
|
536
|
+
* with no initializer stays an ordinary uninitialized declaration.
|
|
537
|
+
*/
|
|
538
|
+
const forOfLoopVariableNextResult = (node, context) => {
|
|
539
|
+
if (node.initializer || !ts.isIdentifier(node.name))
|
|
540
|
+
return null;
|
|
541
|
+
const list = node.parent;
|
|
542
|
+
if (!ts.isVariableDeclarationList(list))
|
|
543
|
+
return null;
|
|
544
|
+
const loop = list.parent;
|
|
545
|
+
if (!(ts.isForOfStatement(loop) || ts.isForInStatement(loop)) || loop.initializer !== list)
|
|
546
|
+
return null;
|
|
547
|
+
return semanticResultId(operationId(context.identities.nodeIdOf(loop), 'protocol', 2), 'value');
|
|
548
|
+
};
|
|
549
|
+
/**
|
|
550
|
+
* The per-iteration WRITE a for-of/for-in loop performs into a bare
|
|
551
|
+
* identifier reused as its own head -- `var v; for (v of xs) { ... }`, where
|
|
552
|
+
* `v` carries no `var`/`let`/`const` of its own at the loop and so mints no
|
|
553
|
+
* `VariableDeclaration` candidate for `contributeVariableDeclaration` above to
|
|
554
|
+
* bind. `census.ts`'s `isForOfLoopHeadWriteTarget` is what routes this exact
|
|
555
|
+
* node shape to the `binding` family at all -- see its own header for why the
|
|
556
|
+
* write had no producer before this one.
|
|
557
|
+
*
|
|
558
|
+
* Modelled as a `write` (not `initialize`) `BindingOperation`, exactly the
|
|
559
|
+
* shape `computations.ts`'s `bindingWriteFor` builds for `x = expr`: the
|
|
560
|
+
* declaration is resolved from the identifier's own SYMBOL
|
|
561
|
+
* (`identities.symbolDeclarationId`), never minted fresh at this reference, so
|
|
562
|
+
* the store lands in the SAME cell `var v`'s own declaration owns. The value
|
|
563
|
+
* stored is the loop's own `next` result, cited by the identical fixed
|
|
564
|
+
* `protocol` ordinal `forOfLoopVariableNextResult` cites for the declared-in-
|
|
565
|
+
* loop case -- `mintIteratorSteps` reserves it regardless of which loop
|
|
566
|
+
* variant or protocol path produced it.
|
|
567
|
+
*/
|
|
568
|
+
const contributeForOfLoopHeadWrite = (candidate, node, context) => {
|
|
569
|
+
const loop = node.parent;
|
|
570
|
+
const symbol = context.checker.getSymbolAtLocation(node);
|
|
571
|
+
if (!symbol)
|
|
572
|
+
return { kind: 'blocked', blocker: blocked(candidate.id, 'binding', 'a for-of/for-in loop head names no resolvable symbol', null) };
|
|
573
|
+
const declaration = context.identities.symbolDeclarationId(symbol);
|
|
574
|
+
if (!declaration) {
|
|
575
|
+
return {
|
|
576
|
+
kind: 'blocked',
|
|
577
|
+
blocker: blocked(candidate.id, 'binding', 'a for-of/for-in loop head write names a symbol with no resolvable declaration', null)
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
const declarationNode = context.identities.declarationOfSymbol(symbol);
|
|
581
|
+
const { mutable, temporalDeadZone } = declarationNode ? bindingKindOf(declarationNode) : { mutable: true, temporalDeadZone: false };
|
|
582
|
+
const value = semanticResultId(operationId(context.identities.nodeIdOf(loop), 'protocol', 2), 'value');
|
|
583
|
+
const type = context.types.typeAt(node);
|
|
584
|
+
const id = mintOperationId(context.ordinals, candidate.id, 'binding');
|
|
585
|
+
const operation = {
|
|
586
|
+
id,
|
|
587
|
+
family: 'binding',
|
|
588
|
+
action: 'write',
|
|
589
|
+
declaration,
|
|
590
|
+
mutable,
|
|
591
|
+
temporalDeadZone,
|
|
592
|
+
...(context.commonJsBindings.has(declaration)
|
|
593
|
+
? {
|
|
594
|
+
commonJs: {
|
|
595
|
+
global: context.commonJsBindings.get(declaration),
|
|
596
|
+
owner: regionId(context.identities.nodeIdOf(node.getSourceFile()), 'module-body')
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
: {}),
|
|
600
|
+
caller: candidate.caller,
|
|
601
|
+
operands: [operand('value', 0, { kind: 'result', result: value }, type)],
|
|
602
|
+
results: [mintResult(id, 'value', type)],
|
|
603
|
+
completion: normalCompletion,
|
|
604
|
+
effects: { ...pureEffects, writesMutableState: true },
|
|
605
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
606
|
+
};
|
|
607
|
+
return { kind: 'operations', operations: [operation], edges: [{ kind: 'value', result: value, to: id, role: 'value', ordinal: 0 }] };
|
|
608
|
+
};
|
|
609
|
+
const contributeVariableDeclaration = (candidate, node, context) => {
|
|
610
|
+
const ambient = isAmbient(node);
|
|
611
|
+
const declaration = context.identities.declarationIdOf(node);
|
|
612
|
+
// The linkage name is read here and nowhere else in the compiler: an ambient
|
|
613
|
+
// declaration's spelling is the ABI contract with the host that defines it,
|
|
614
|
+
// exactly as a C++ `extern` declaration's spelling is the contract with
|
|
615
|
+
// whatever translation unit defines it elsewhere. Every downstream consumer
|
|
616
|
+
// (projection, preflight, emission) carries this string as opaque data; none
|
|
617
|
+
// of them may re-derive it from a name, a symbol, or source text of their
|
|
618
|
+
// own. The checker already rejects an ambient declaration with a
|
|
619
|
+
// destructured name (`declare const { a }: T` is not valid TypeScript), so a
|
|
620
|
+
// non-identifier name here means the census and the checker have drifted.
|
|
621
|
+
let external;
|
|
622
|
+
if (ambient) {
|
|
623
|
+
if (!ts.isIdentifier(node.name)) {
|
|
624
|
+
return {
|
|
625
|
+
kind: 'blocked',
|
|
626
|
+
blocker: blocked(candidate.id, 'binding', 'an ambient declaration with a destructured name has no single linkage symbol for a host to define', 'P6')
|
|
627
|
+
};
|
|
628
|
+
}
|
|
629
|
+
// Unless an installed host has said it does not provide this name. An
|
|
630
|
+
// ambient declaration is external BECAUSE some host defines it, and a host
|
|
631
|
+
// that denied it is precisely the case where that stops being true --
|
|
632
|
+
// `extern` for it names a symbol no object file defines. The same census
|
|
633
|
+
// answers the value's TYPE as `undefined` (structural-layout-type.ts), so
|
|
634
|
+
// the storage class and the carrier are one decision, not two.
|
|
635
|
+
if (context.absentGlobals.typeAt(node) === null)
|
|
636
|
+
external = { linkageName: node.name.text };
|
|
637
|
+
}
|
|
638
|
+
const { mutable, temporalDeadZone } = bindingKindOf(node);
|
|
639
|
+
const initializer = node.initializer;
|
|
640
|
+
const loopValueResult = initializer ? null : forOfLoopVariableNextResult(node, context);
|
|
641
|
+
const operands = [];
|
|
642
|
+
if (initializer) {
|
|
643
|
+
const cited = citeExpressionResult(initializer, context);
|
|
644
|
+
if (cited.kind === 'unmodelled')
|
|
645
|
+
return { kind: 'blocked', blocker: blocked(candidate.id, 'binding', cited.reason, null) };
|
|
646
|
+
operands.push(operand('initializer', 0, cited.source, context.types.typeAt(initializer)));
|
|
647
|
+
}
|
|
648
|
+
else if (loopValueResult) {
|
|
649
|
+
operands.push(operand('initializer', 0, { kind: 'result', result: loopValueResult }, context.types.typeAt(node)));
|
|
650
|
+
}
|
|
651
|
+
const id = mintOperationId(context.ordinals, candidate.id, 'binding');
|
|
652
|
+
const operation = {
|
|
653
|
+
id,
|
|
654
|
+
family: 'binding',
|
|
655
|
+
action: initializer || loopValueResult ? 'initialize' : 'declare',
|
|
656
|
+
declaration,
|
|
657
|
+
mutable,
|
|
658
|
+
temporalDeadZone,
|
|
659
|
+
...(context.commonJsBindings.has(declaration)
|
|
660
|
+
? {
|
|
661
|
+
commonJs: {
|
|
662
|
+
global: context.commonJsBindings.get(declaration),
|
|
663
|
+
owner: regionId(context.identities.nodeIdOf(node.getSourceFile()), 'module-body')
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
: {}),
|
|
667
|
+
caller: candidate.caller,
|
|
668
|
+
operands,
|
|
669
|
+
results: [mintResult(id, 'value', context.types.typeAt(node))],
|
|
670
|
+
completion: normalCompletion,
|
|
671
|
+
effects: { ...pureEffects, writesMutableState: true },
|
|
672
|
+
evaluationOrdinal: candidate.evaluationOrdinal,
|
|
673
|
+
...(external ? { external } : {})
|
|
674
|
+
};
|
|
675
|
+
return { kind: 'operations', operations: [operation], edges: [] };
|
|
676
|
+
};
|
|
677
|
+
export const createBindingProducer = (context) => ({
|
|
678
|
+
family: 'binding',
|
|
679
|
+
contribute: (candidate) => {
|
|
680
|
+
const node = candidate.node;
|
|
681
|
+
// A BindingElement exists only inside an ObjectBindingPattern or
|
|
682
|
+
// ArrayBindingPattern -- by construction it is always a destructuring
|
|
683
|
+
// introduction, whether or not its own name happens to be a plain
|
|
684
|
+
// identifier one level down.
|
|
685
|
+
if (ts.isBindingElement(node))
|
|
686
|
+
return contributeBindingElement(candidate, node, context);
|
|
687
|
+
if (ts.isParameter(node))
|
|
688
|
+
return contributeParameter(candidate, node, context);
|
|
689
|
+
if (ts.isVariableDeclaration(node)) {
|
|
690
|
+
// `const {a} = x` declares nothing at the declaration node itself: every
|
|
691
|
+
// name it introduces belongs to an element of the pattern, and each of
|
|
692
|
+
// those is its own candidate handled above.
|
|
693
|
+
if (ts.isObjectBindingPattern(node.name) || ts.isArrayBindingPattern(node.name)) {
|
|
694
|
+
return { kind: 'operations', operations: [], edges: [] };
|
|
695
|
+
}
|
|
696
|
+
return contributeVariableDeclaration(candidate, node, context);
|
|
697
|
+
}
|
|
698
|
+
// A bare identifier reused as a for-of/for-in loop's own head (`var v;
|
|
699
|
+
// for (v of xs)`) is the fourth and last shape `census.ts` routes to this
|
|
700
|
+
// family -- `isForOfLoopHeadWriteTarget` is the only thing that can have
|
|
701
|
+
// put an `Identifier` candidate here.
|
|
702
|
+
if (ts.isIdentifier(node))
|
|
703
|
+
return contributeForOfLoopHeadWrite(candidate, node, context);
|
|
704
|
+
// census.ts assigns the 'binding' family only to VariableDeclaration,
|
|
705
|
+
// BindingElement, Parameter, and for-of/for-in loop-head Identifier
|
|
706
|
+
// nodes; reaching here means the census and this producer have drifted
|
|
707
|
+
// out of sync.
|
|
708
|
+
throw new Error(`binding producer received a candidate of unexpected syntax kind ${ts.SyntaxKind[node.kind]}`);
|
|
709
|
+
}
|
|
710
|
+
});
|