@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,279 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { semanticResultId } from '../../../identity/ids.js';
|
|
3
|
+
import { normalCompletion, pureEffects } from '../../model/operands.js';
|
|
4
|
+
import { declaredClosedTupleRestElementsOf } from '../parameter-slot.js';
|
|
5
|
+
import { resolveExpressionOperand } from './boundary.js';
|
|
6
|
+
import { mintOperationId, mintResult, operand } from './mint.js';
|
|
7
|
+
import { resultEdge } from './shared.js';
|
|
8
|
+
/**
|
|
9
|
+
* The per-position types of a tuple whose arity is closed, or `null` for
|
|
10
|
+
* anything else.
|
|
11
|
+
*
|
|
12
|
+
* `optional`/`rest`/`variadic` elements are each a reason the arity is NOT
|
|
13
|
+
* settled -- `[number, ...string[]]` has no compile-time length, and
|
|
14
|
+
* `[number, string?]` has two possible ones -- so a tuple carrying any of them
|
|
15
|
+
* is not admitted here and falls through to whatever its caller's general path
|
|
16
|
+
* is. This is the same closed-arity requirement `lowerTupleLiteral`'s own
|
|
17
|
+
* `layout.length !== operands.length` check enforces one layer down, asked
|
|
18
|
+
* before the operands are built rather than after.
|
|
19
|
+
*/
|
|
20
|
+
export const closedTupleElementTypesOf = (context, type) => {
|
|
21
|
+
const shape = context.table.get(type).shape;
|
|
22
|
+
if (shape.kind !== 'tuple')
|
|
23
|
+
return null;
|
|
24
|
+
if (shape.elements.some((element) => element.optional || element.rest || element.variadic))
|
|
25
|
+
return null;
|
|
26
|
+
return shape.elements.map((element) => element.type);
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* An OPEN-ENDED tuple a spread can still settle positionally: `k` required
|
|
30
|
+
* positions followed by exactly one `rest` element and nothing after it --
|
|
31
|
+
* `[DiagnosticMessage, ...DiagnosticArguments]`. The fixed positions expand
|
|
32
|
+
* to `[[Get]]`s like a closed tuple's (`mintPositionalSpreadReads`), and the
|
|
33
|
+
* tail is a range copy from `fixed.length` into the callee's rest array,
|
|
34
|
+
* which is exactly what the language's own iteration would hand it. An
|
|
35
|
+
* optional position before the rest, or a variadic position, has no such
|
|
36
|
+
* split and stays `null`.
|
|
37
|
+
*/
|
|
38
|
+
export const openTupleSpreadShapeOf = (context, type) => {
|
|
39
|
+
const shape = context.table.get(type).shape;
|
|
40
|
+
if (shape.kind !== 'tuple')
|
|
41
|
+
return null;
|
|
42
|
+
const rest = shape.elements.findIndex((element) => element.rest);
|
|
43
|
+
if (rest < 0 || rest !== shape.elements.length - 1)
|
|
44
|
+
return null;
|
|
45
|
+
const fixed = shape.elements.slice(0, rest);
|
|
46
|
+
if (fixed.some((element) => element.optional || element.rest || element.variadic))
|
|
47
|
+
return null;
|
|
48
|
+
const tail = shape.elements[rest];
|
|
49
|
+
if (!tail || tail.variadic)
|
|
50
|
+
return null;
|
|
51
|
+
return { fixed: fixed.map((element) => element.type), tail: tail.type };
|
|
52
|
+
};
|
|
53
|
+
/** Whether `...expression`'s own source is a closed tuple, asked without minting anything. */
|
|
54
|
+
export const isClosedTupleSpread = (context, expression) => closedTupleElementTypesOf(context, context.types.typeAt(expression)) !== null;
|
|
55
|
+
/**
|
|
56
|
+
* The arity a REST PARAMETER spread expands to when the parameter's own
|
|
57
|
+
* declared type is a CLOSED tuple, or `null` for anything else.
|
|
58
|
+
*
|
|
59
|
+
* `/** @param {[number, number, number, number, number]} args *\/ function
|
|
60
|
+
* texStorage2D( ...args ) { gl.texStorage2D( ...args ) }` -- three's
|
|
61
|
+
* `WebGLState.js` as the native-webgl-angle plugin rewrites its
|
|
62
|
+
* `...arguments` forwarders. The parameter's CELL is typed by
|
|
63
|
+
* `structural.ts`'s `rest-parameter-array-element` form from call-site
|
|
64
|
+
* evidence, an array of the joined argument types, so `isClosedTupleSpread`
|
|
65
|
+
* above never sees a tuple and the spread fell through to the range-copy
|
|
66
|
+
* refusal ("can only be range-copied into a rest parameter") against a host
|
|
67
|
+
* function with five named formals. The cell's type is right -- the rest slot
|
|
68
|
+
* materializes an array -- but the DECLARATION states its length: every
|
|
69
|
+
* position required, no optional, rest or variadic element, and the checker
|
|
70
|
+
* refuses any call site that passes a different count. That is exactly the
|
|
71
|
+
* fact a closed tuple LOCAL supplies, asked of the declaration instead of the
|
|
72
|
+
* cell; the reads it admits are ordinary constant-index `[[Get]]`s off the
|
|
73
|
+
* array the cell holds (`declaredTupleRestSpreadReads`).
|
|
74
|
+
*
|
|
75
|
+
* Only an ARRAY-shaped cell qualifies: a parameter this compiler settled to
|
|
76
|
+
* anything else has a different carrier, and a constant-index read against it
|
|
77
|
+
* would be a claim this producer cannot check.
|
|
78
|
+
*/
|
|
79
|
+
const declaredTupleRestElementsOf = (context, expression) => {
|
|
80
|
+
if (!ts.isIdentifier(expression))
|
|
81
|
+
return null;
|
|
82
|
+
const symbol = context.checker.getSymbolAtLocation(expression);
|
|
83
|
+
const declaration = symbol ? context.identities.declarationOfSymbol(symbol) : null;
|
|
84
|
+
if (!declaration || !ts.isParameter(declaration))
|
|
85
|
+
return null;
|
|
86
|
+
const elements = declaredClosedTupleRestElementsOf(context.checker, declaration);
|
|
87
|
+
if (elements === null)
|
|
88
|
+
return null;
|
|
89
|
+
return context.table.get(context.types.typeAt(expression)).shape.kind === 'array' ? elements : null;
|
|
90
|
+
};
|
|
91
|
+
export const declaredTupleRestArityOf = (context, expression) => declaredTupleRestElementsOf(context, expression)?.length ?? null;
|
|
92
|
+
/**
|
|
93
|
+
* The positional reads a declared-tuple rest parameter spread expands to
|
|
94
|
+
* (`declaredTupleRestArityOf`), each typed as the DECLARED tuple's own
|
|
95
|
+
* position -- not as the array cell's element. The cell holds the join of
|
|
96
|
+
* every position (`[string, number, number]` is an array of `string | number`),
|
|
97
|
+
* and a read typed by that join handed `describe( name, x, y )` a
|
|
98
|
+
* `string | number` for `x`, which made `x * y` a dynamic multiplication with
|
|
99
|
+
* no C++ spelling. The declaration is what fixes the value at each position,
|
|
100
|
+
* and a closed tuple LOCAL's reads are typed the same way off the same
|
|
101
|
+
* tagged-union carrier.
|
|
102
|
+
*/
|
|
103
|
+
export const declaredTupleRestSpreadReads = (context, candidate, expression) => {
|
|
104
|
+
const elements = declaredTupleRestElementsOf(context, expression);
|
|
105
|
+
if (elements === null)
|
|
106
|
+
return null;
|
|
107
|
+
const receiver = spreadReceiverOf(context, expression);
|
|
108
|
+
if (!receiver)
|
|
109
|
+
return null;
|
|
110
|
+
return mintPositionalSpreadReads(context, candidate, receiver, elements.map((element) => context.types.typeOf(element)));
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* The receiver both expansions below read positions off: `resolveExpressionOperand`'s
|
|
114
|
+
* own VALUE identity (which family published this expression's result --
|
|
115
|
+
* correctly resolved past an `as`/`satisfies`/`<T>` wrapper, since none of
|
|
116
|
+
* those own a runtime operation of their own), paired with the TYPE asked
|
|
117
|
+
* directly at `expression`, exactly as `isClosedTupleSpread`/
|
|
118
|
+
* `admitsMaxArityTupleSpread` (`spread-arguments.ts`) already ask it -- not
|
|
119
|
+
* `resolveExpressionOperand`'s own bundled `.type`, which asks past the same
|
|
120
|
+
* wrapper for the type too and disagrees with both admission gates the
|
|
121
|
+
* moment one is present. `args as Parameters<NewResponse>` (hono's
|
|
122
|
+
* `Context.newResponse`) is the concrete case: the CAST states a real closed
|
|
123
|
+
* shape the underlying `args` binding does not have on its own (an ordinary,
|
|
124
|
+
* open-arity array, once the rest-parameter census has done its job) -- an
|
|
125
|
+
* admission gate that reads the cast agrees to expand it, and an expansion
|
|
126
|
+
* that then reads past the cast right back to the array finds no tuple
|
|
127
|
+
* there and refuses, silently, for an admission that already said yes.
|
|
128
|
+
* `local-bindings.ts`'s `knownOrResolve` draws this identical line for a
|
|
129
|
+
* cast ("the checker's own answer there is taken as-is and never read
|
|
130
|
+
* past"); this is that same rule, asked with the SAME node the two
|
|
131
|
+
* admission gates already use, so the three can only ever agree.
|
|
132
|
+
*/
|
|
133
|
+
export const spreadReceiverOf = (context, expression) => {
|
|
134
|
+
const resolved = resolveExpressionOperand(context, expression);
|
|
135
|
+
return resolved ? { source: resolved.source, type: context.types.typeAt(expression) } : null;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* The `[[Get]]`s a tuple's positions expand to, shared by every admission
|
|
139
|
+
* shape below -- each differs only in WHICH element types it is sound to ask
|
|
140
|
+
* for, never in how a position, once admitted, is read.
|
|
141
|
+
*
|
|
142
|
+
* The receiver is cited ONCE and read N times, which is what the language
|
|
143
|
+
* does: `f(...sideEffect())` evaluates `sideEffect()` a single time and then
|
|
144
|
+
* indexes the result. Citing the expression per position instead would name
|
|
145
|
+
* the same published result N times, which is harmless, but building the
|
|
146
|
+
* operand once makes that single evaluation explicit rather than incidental.
|
|
147
|
+
*/
|
|
148
|
+
export const mintPositionalSpreadReads = (context, candidate, receiver, elements, firstIndex = 0) => {
|
|
149
|
+
// A tuple position's key is a String, the same way every other static key in
|
|
150
|
+
// this compiler is: `properties.ts`'s `keyOf` interns exactly this type for
|
|
151
|
+
// `o[0]`, on the grounds that ToPropertyKey turns a numeric index into a
|
|
152
|
+
// String and two spellings of one key must not look like two keys.
|
|
153
|
+
const keyType = context.table.intern({ kind: 'primitive', primitive: 'string' });
|
|
154
|
+
const operations = [];
|
|
155
|
+
const edges = [];
|
|
156
|
+
const positions = [];
|
|
157
|
+
for (const [offset, elementType] of elements.entries()) {
|
|
158
|
+
const index = firstIndex + offset;
|
|
159
|
+
const id = mintOperationId(context.ordinals, candidate.id, 'property');
|
|
160
|
+
operations.push({
|
|
161
|
+
id,
|
|
162
|
+
family: 'property',
|
|
163
|
+
internalMethod: 'get',
|
|
164
|
+
strict: true,
|
|
165
|
+
keyIsComputed: false,
|
|
166
|
+
// A read consults whatever descriptor is installed; it states none.
|
|
167
|
+
descriptor: null,
|
|
168
|
+
caller: candidate.caller,
|
|
169
|
+
operands: [
|
|
170
|
+
operand('receiver', 0, receiver.source, receiver.type),
|
|
171
|
+
operand('key', 0, { kind: 'constant', text: String(index), literal: 'string' }, keyType)
|
|
172
|
+
],
|
|
173
|
+
results: [mintResult(id, 'value', elementType)],
|
|
174
|
+
// A tuple type excludes `null`/`undefined` by construction, so the read
|
|
175
|
+
// cannot be the nullish-receiver TypeError an ordinary `[[Get]]` guards
|
|
176
|
+
// against, and a tuple position is native storage rather than an
|
|
177
|
+
// accessor, so nothing user-written runs here either.
|
|
178
|
+
completion: normalCompletion,
|
|
179
|
+
effects: { ...pureEffects, readsMutableState: true },
|
|
180
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
181
|
+
});
|
|
182
|
+
const edge = resultEdge(receiver.source, id, 'receiver', 0);
|
|
183
|
+
if (edge)
|
|
184
|
+
edges.push(edge);
|
|
185
|
+
positions.push({ source: { kind: 'result', result: semanticResultId(id, 'value') }, type: elementType });
|
|
186
|
+
}
|
|
187
|
+
return { operations, edges, positions };
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* The positional reads `...expression` expands to, or `null` when the source
|
|
191
|
+
* is not a closed tuple or when no operation publishes its value.
|
|
192
|
+
*/
|
|
193
|
+
export const tupleSpreadReads = (context, candidate, expression) => {
|
|
194
|
+
const receiver = spreadReceiverOf(context, expression);
|
|
195
|
+
if (!receiver)
|
|
196
|
+
return null;
|
|
197
|
+
const elements = closedTupleElementTypesOf(context, receiver.type);
|
|
198
|
+
if (!elements)
|
|
199
|
+
return null;
|
|
200
|
+
return mintPositionalSpreadReads(context, candidate, receiver, elements);
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* The per-position types of a tuple whose only "unsettled" elements are a
|
|
204
|
+
* trailing OPTIONAL run, or `null` for anything else -- including a `rest`/
|
|
205
|
+
* `variadic` element, which still has no settled arity at all.
|
|
206
|
+
*
|
|
207
|
+
* `closedTupleElementTypesOf` above is right to refuse an optional-tailed
|
|
208
|
+
* tuple for its own callers: a spread's DESTINATION cares about the source's
|
|
209
|
+
* true runtime LENGTH (`[...t]` with `t.length === 1` must allocate a
|
|
210
|
+
* one-element array, not `[t[0], undefined]`), and expanding to the tuple's
|
|
211
|
+
* full declared arity would silently manufacture a longer collection than the
|
|
212
|
+
* source ever had. `maxArityTupleSpreadReads` is the one context where a
|
|
213
|
+
* fixed-at-declared-arity expansion is still exact rather than approximate --
|
|
214
|
+
* see it for why.
|
|
215
|
+
*
|
|
216
|
+
* The type widening happens HERE, at the element, rather than being layered
|
|
217
|
+
* onto every read: `t[i]` for an absent optional position `i` already reads
|
|
218
|
+
* `undefined` by ordinary out-of-bounds `[[Get]]`, so the element's own type
|
|
219
|
+
* has to say so, exactly the way `parameter-slot.ts`'s `parameterSlotTypeOf`
|
|
220
|
+
* widens an optional PARAMETER's slot with `undefined` for the same reason.
|
|
221
|
+
* The union is flattened rather than nested -- a member that is already a
|
|
222
|
+
* union has its own members spliced in -- because only a flat union derives
|
|
223
|
+
* to this compiler's three-armed optional carrier (`parameter-slot.ts`'s own
|
|
224
|
+
* comment states why a nested one would not).
|
|
225
|
+
*/
|
|
226
|
+
export const maxArityTupleElementTypesOf = (context, type) => {
|
|
227
|
+
const shape = context.table.get(type).shape;
|
|
228
|
+
if (shape.kind !== 'tuple')
|
|
229
|
+
return null;
|
|
230
|
+
if (shape.elements.some((element) => element.rest || element.variadic))
|
|
231
|
+
return null;
|
|
232
|
+
return shape.elements.map((element) => (element.optional ? widenedWithUndefined(context, element.type) : element.type));
|
|
233
|
+
};
|
|
234
|
+
const widenedWithUndefined = (context, type) => {
|
|
235
|
+
const undefinedType = context.table.intern({ kind: 'primitive', primitive: 'undefined' });
|
|
236
|
+
if (type === undefinedType)
|
|
237
|
+
return type;
|
|
238
|
+
const shape = context.table.get(type).shape;
|
|
239
|
+
if (shape.kind === 'union') {
|
|
240
|
+
return shape.members.includes(undefinedType)
|
|
241
|
+
? type
|
|
242
|
+
: context.table.intern({ kind: 'union', members: [...shape.members, undefinedType] });
|
|
243
|
+
}
|
|
244
|
+
return context.table.intern({ kind: 'union', members: [type, undefinedType] });
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* `...expression`'s positional reads, over an OPTIONAL-tailed tuple, for the
|
|
248
|
+
* one context where that is still sound: a CALL ARGUMENT, where an omitted
|
|
249
|
+
* argument and an explicitly `undefined` one read identically at the callee.
|
|
250
|
+
*
|
|
251
|
+
* Ordinary JS parameter binding makes that true unconditionally: an omitted
|
|
252
|
+
* argument binds `undefined` (ECMA-262 `FunctionDeclarationInstantiation` /
|
|
253
|
+
* `IteratorBindingInitialization` over a shorter argument list), and a
|
|
254
|
+
* defaulted parameter's initializer triggers on `undefined` however it
|
|
255
|
+
* arrived -- there is no third state a NAMED, non-rest parameter can
|
|
256
|
+
* observe. So `f(...t)` with `t: [A, B?]` reads IDENTICALLY at the callee
|
|
257
|
+
* whether `t`'s true runtime length is 1 or 2, PROVIDED:
|
|
258
|
+
*
|
|
259
|
+
* - the callee has no REST formal anywhere the tuple's positions could
|
|
260
|
+
* land -- a rest parameter's own `.length` DOES observe the caller's true
|
|
261
|
+
* argument count, which this fixed-at-declared-arity expansion cannot
|
|
262
|
+
* track;
|
|
263
|
+
* - nothing else follows this spread in the argument list -- a written
|
|
264
|
+
* argument after it would land at a position that shifts with the
|
|
265
|
+
* tuple's TRUE length, which only the real spread ever knows.
|
|
266
|
+
*
|
|
267
|
+
* Both conditions are the CALLER's to check (`spread-arguments.ts`'s
|
|
268
|
+
* `restFrom` and its own last-argument scan) -- this function only expands
|
|
269
|
+
* the positions, exactly as `tupleSpreadReads` does for a closed tuple.
|
|
270
|
+
*/
|
|
271
|
+
export const maxArityTupleSpreadReads = (context, candidate, expression) => {
|
|
272
|
+
const receiver = spreadReceiverOf(context, expression);
|
|
273
|
+
if (!receiver)
|
|
274
|
+
return null;
|
|
275
|
+
const elements = maxArityTupleElementTypesOf(context, receiver.type);
|
|
276
|
+
if (!elements)
|
|
277
|
+
return null;
|
|
278
|
+
return mintPositionalSpreadReads(context, candidate, receiver, elements);
|
|
279
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './flow/model.js';
|
|
3
|
+
/** An over-approximation of ToPropertyKey's string results; unknown never excludes a name. */
|
|
4
|
+
export type PropertyKeyDomain = {
|
|
5
|
+
readonly kind: 'unknown';
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: 'literal';
|
|
8
|
+
readonly value: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'number';
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: 'union';
|
|
13
|
+
readonly members: readonly PropertyKeyDomain[];
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: 'concat';
|
|
16
|
+
readonly left: PropertyKeyDomain;
|
|
17
|
+
readonly right: PropertyKeyDomain;
|
|
18
|
+
};
|
|
19
|
+
export declare const createPropertyKeyDomains: (checker: ts.TypeChecker, flow: ValueFlowIndex, reachable: (node: ts.Node) => boolean, parameterTypeAt?: (parameter: ts.Expression) => ts.Type) => {
|
|
20
|
+
readonly of: (expression: ts.Expression) => PropertyKeyDomain;
|
|
21
|
+
readonly mayName: (domain: PropertyKeyDomain, name: string) => boolean;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Whether ANY canonical numeric string lies in `domain` -- `mayName` asked of
|
|
25
|
+
* every such name at once. Each starts with `-`, a digit, `I` (Infinity) or `N`
|
|
26
|
+
* (NaN) and ends with a digit, `y` or `N`, and every spelled piece between
|
|
27
|
+
* must be a substring of such a name; an unknown domain may name anything.
|
|
28
|
+
*
|
|
29
|
+
* The interior rule is what three's `WebGLUniformsGroups.js` needs: its cache
|
|
30
|
+
* is keyed `index + '_' + indexArray`, two numbers around an underscore. The
|
|
31
|
+
* edges are unspelled, so the edge rule alone kept this write as a possible
|
|
32
|
+
* numeric key on the WebGL context, refused the context's numeric-absence
|
|
33
|
+
* proof, and left `WebGLUtils.convert`'s `gl[ p ]` fallback -- and every
|
|
34
|
+
* `glFormat`/`glType` downstream of it -- dynamic.
|
|
35
|
+
*/
|
|
36
|
+
export declare const domainMayNameNumeric: (domain: PropertyKeyDomain) => boolean;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { unwrapErasedExpression } from './producers/erasure.js';
|
|
3
|
+
import { isCanonicalNumericKey } from './host-mutation-keys.js';
|
|
4
|
+
const unknown = { kind: 'unknown' };
|
|
5
|
+
const numeric = { kind: 'number' };
|
|
6
|
+
const literal = (value) => ({ kind: 'literal', value });
|
|
7
|
+
const concat = (left, right) => ({ kind: 'concat', left, right });
|
|
8
|
+
const isStringDomain = (domain) => domain.kind === 'literal' || domain.kind === 'concat' || (domain.kind === 'union' && domain.members.every(isStringDomain));
|
|
9
|
+
export const createPropertyKeyDomains = (checker, flow, reachable, parameterTypeAt = (parameter) => checker.getTypeAtLocation(parameter)) => {
|
|
10
|
+
const domains = new Map();
|
|
11
|
+
const typeDomain = (type) => {
|
|
12
|
+
if (type.isUnion())
|
|
13
|
+
return { kind: 'union', members: type.types.map(typeDomain) };
|
|
14
|
+
if (type.isStringLiteral())
|
|
15
|
+
return literal(type.value);
|
|
16
|
+
if ((type.flags & ts.TypeFlags.NumberLike) !== 0 && (type.flags & ~ts.TypeFlags.NumberLike) === 0)
|
|
17
|
+
return numeric;
|
|
18
|
+
return unknown;
|
|
19
|
+
};
|
|
20
|
+
const domainOf = (expression) => {
|
|
21
|
+
const current = unwrapErasedExpression(expression);
|
|
22
|
+
const known = domains.get(current);
|
|
23
|
+
if (known)
|
|
24
|
+
return known;
|
|
25
|
+
// Cyclic aliases provide no restriction. This placeholder also bounds
|
|
26
|
+
// recursive initializers without mistaking an empty cycle for evidence.
|
|
27
|
+
domains.set(current, unknown);
|
|
28
|
+
let result = unknown;
|
|
29
|
+
if (ts.isStringLiteralLike(current))
|
|
30
|
+
result = literal(current.text);
|
|
31
|
+
else if (ts.isNumericLiteral(current))
|
|
32
|
+
result = numeric;
|
|
33
|
+
else if (ts.isTemplateExpression(current)) {
|
|
34
|
+
result = literal(current.head.text);
|
|
35
|
+
for (const span of current.templateSpans)
|
|
36
|
+
result = concat(concat(result, domainOf(span.expression)), literal(span.literal.text));
|
|
37
|
+
}
|
|
38
|
+
else if (ts.isConditionalExpression(current)) {
|
|
39
|
+
result = { kind: 'union', members: [domainOf(current.whenTrue), domainOf(current.whenFalse)] };
|
|
40
|
+
}
|
|
41
|
+
else if (ts.isBinaryExpression(current) && current.operatorToken.kind === ts.SyntaxKind.PlusToken) {
|
|
42
|
+
const left = domainOf(current.left);
|
|
43
|
+
const right = domainOf(current.right);
|
|
44
|
+
// A string assertion does not change numeric addition into concatenation.
|
|
45
|
+
if (isStringDomain(left) || isStringDomain(right))
|
|
46
|
+
result = concat(left, right);
|
|
47
|
+
else if (left.kind === 'number' && right.kind === 'number')
|
|
48
|
+
result = numeric;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const declaration = ts.isIdentifier(current) ? flow.targetOf(current)?.declaration : null;
|
|
52
|
+
if (declaration && ts.isVariableDeclaration(declaration)) {
|
|
53
|
+
const writes = flow.writesToDeclaration(declaration).filter((write) => reachable(write.site) && write.slot === 'whole');
|
|
54
|
+
result =
|
|
55
|
+
writes.length > 0
|
|
56
|
+
? { kind: 'union', members: writes.map((write) => (write.value === null ? unknown : domainOf(write.value))) }
|
|
57
|
+
: unknown;
|
|
58
|
+
}
|
|
59
|
+
else if (ts.isIdentifier(current) && declaration && ts.isParameter(declaration)) {
|
|
60
|
+
result = typeDomain(parameterTypeAt(current));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
domains.set(current, result);
|
|
64
|
+
return result;
|
|
65
|
+
};
|
|
66
|
+
const matches = new Map();
|
|
67
|
+
const mayName = (domain, name) => {
|
|
68
|
+
let names = matches.get(domain);
|
|
69
|
+
if (!names) {
|
|
70
|
+
names = new Map();
|
|
71
|
+
matches.set(domain, names);
|
|
72
|
+
}
|
|
73
|
+
const known = names.get(name);
|
|
74
|
+
if (known !== undefined)
|
|
75
|
+
return known;
|
|
76
|
+
let result;
|
|
77
|
+
switch (domain.kind) {
|
|
78
|
+
case 'unknown':
|
|
79
|
+
result = true;
|
|
80
|
+
break;
|
|
81
|
+
case 'literal':
|
|
82
|
+
result = domain.value === name;
|
|
83
|
+
break;
|
|
84
|
+
case 'number':
|
|
85
|
+
result = String(Number(name)) === name;
|
|
86
|
+
break;
|
|
87
|
+
case 'union':
|
|
88
|
+
result = domain.members.some((member) => mayName(member, name));
|
|
89
|
+
break;
|
|
90
|
+
case 'concat': {
|
|
91
|
+
result = false;
|
|
92
|
+
for (let split = 0; split <= name.length; split++) {
|
|
93
|
+
if (mayName(domain.left, name.slice(0, split)) && mayName(domain.right, name.slice(split))) {
|
|
94
|
+
result = true;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
names.set(name, result);
|
|
102
|
+
return result;
|
|
103
|
+
};
|
|
104
|
+
return { of: domainOf, mayName };
|
|
105
|
+
};
|
|
106
|
+
const domainEdgeLiteral = (domain, side) => domain.kind === 'literal' ? domain.value : domain.kind === 'concat' ? domainEdgeLiteral(domain[side], side) : null;
|
|
107
|
+
/**
|
|
108
|
+
* Every character a canonical numeric string can contain: the decimal and
|
|
109
|
+
* exponent forms (`-1.5e+21`), `Infinity`, `-Infinity` and `NaN`. A spelled
|
|
110
|
+
* fragment holding any other character cannot be a substring of one, wherever
|
|
111
|
+
* it sits in the concatenation.
|
|
112
|
+
*/
|
|
113
|
+
const CANONICAL_NUMERIC_ALPHABET = /^[-+.\deINafinty]*$/;
|
|
114
|
+
const domainLiteralPieces = (domain) => domain.kind === 'literal'
|
|
115
|
+
? [domain.value]
|
|
116
|
+
: domain.kind === 'concat'
|
|
117
|
+
? [...domainLiteralPieces(domain.left), ...domainLiteralPieces(domain.right)]
|
|
118
|
+
: [];
|
|
119
|
+
/**
|
|
120
|
+
* Whether ANY canonical numeric string lies in `domain` -- `mayName` asked of
|
|
121
|
+
* every such name at once. Each starts with `-`, a digit, `I` (Infinity) or `N`
|
|
122
|
+
* (NaN) and ends with a digit, `y` or `N`, and every spelled piece between
|
|
123
|
+
* must be a substring of such a name; an unknown domain may name anything.
|
|
124
|
+
*
|
|
125
|
+
* The interior rule is what three's `WebGLUniformsGroups.js` needs: its cache
|
|
126
|
+
* is keyed `index + '_' + indexArray`, two numbers around an underscore. The
|
|
127
|
+
* edges are unspelled, so the edge rule alone kept this write as a possible
|
|
128
|
+
* numeric key on the WebGL context, refused the context's numeric-absence
|
|
129
|
+
* proof, and left `WebGLUtils.convert`'s `gl[ p ]` fallback -- and every
|
|
130
|
+
* `glFormat`/`glType` downstream of it -- dynamic.
|
|
131
|
+
*/
|
|
132
|
+
export const domainMayNameNumeric = (domain) => {
|
|
133
|
+
switch (domain.kind) {
|
|
134
|
+
case 'literal':
|
|
135
|
+
return isCanonicalNumericKey(domain.value);
|
|
136
|
+
case 'union':
|
|
137
|
+
return domain.members.some(domainMayNameNumeric);
|
|
138
|
+
case 'concat': {
|
|
139
|
+
const lead = domainEdgeLiteral(domain, 'left');
|
|
140
|
+
const trail = domainEdgeLiteral(domain, 'right');
|
|
141
|
+
if (lead && !/^[-\dIN]/.test(lead))
|
|
142
|
+
return false;
|
|
143
|
+
if (trail && !/[\dyN]$/.test(trail))
|
|
144
|
+
return false;
|
|
145
|
+
return domainLiteralPieces(domain).every((piece) => CANONICAL_NUMERIC_ALPHABET.test(piece));
|
|
146
|
+
}
|
|
147
|
+
default:
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* What a program reaches from the files it was asked to compile.
|
|
4
|
+
*
|
|
5
|
+
* A project's file set is not its module graph. `include` names every file a
|
|
6
|
+
* *typechecker* should see; what an application does is what its entry points
|
|
7
|
+
* import, and nothing else runs. Compiling the first as though it were the
|
|
8
|
+
* second is how an app that imports `Display` and `mount` acquires the
|
|
9
|
+
* obligations of a camera it never opens: `runtime/host.ts` is one file, so
|
|
10
|
+
* the whole of it -- `Camera`'s four `Promise.resolve` calls, `imageHost`'s
|
|
11
|
+
* `GeaEmbeddedImage` boundary -- arrives alongside the two bindings the app
|
|
12
|
+
* actually asked for.
|
|
13
|
+
*
|
|
14
|
+
* This is the one place that difference is decided. Every census downstream
|
|
15
|
+
* walks the statements this hands it rather than the file it hands them for,
|
|
16
|
+
* so there is one answer to "is this code in the program" instead of four that
|
|
17
|
+
* can drift apart.
|
|
18
|
+
*
|
|
19
|
+
* Nothing here changes what anything *means*. The checker still sees the whole
|
|
20
|
+
* project, so every type resolves exactly as it did and every layout is still
|
|
21
|
+
* expanded from the checker's own answer -- a declaration this drops is
|
|
22
|
+
* dropped from the *census*, not from the type system. That is what makes the
|
|
23
|
+
* pruning safe to state at one seam: the stages after normalize cannot tell
|
|
24
|
+
* that it happened, because the program they are handed simply does not
|
|
25
|
+
* contain the code, and obligations, certification, lowering and emission all
|
|
26
|
+
* read that one graph.
|
|
27
|
+
*
|
|
28
|
+
* ## What it refuses to prune
|
|
29
|
+
*
|
|
30
|
+
* The rule is not "unreferenced code is dead". A module's top level *runs* on
|
|
31
|
+
* import, so a statement that performs an action -- a call, an assignment, an
|
|
32
|
+
* `if`, an `export default` expression, a bare expression statement -- stays
|
|
33
|
+
* whether or not anything reads what it produced. Exactly three declaration
|
|
34
|
+
* forms are ever dropped, each because its own evaluation is provably not an
|
|
35
|
+
* action:
|
|
36
|
+
*
|
|
37
|
+
* - A **function declaration**. Its evaluation is `InstantiateFunctionObject`:
|
|
38
|
+
* a closure is created and bound. Nothing observable happens, and the body
|
|
39
|
+
* does not run.
|
|
40
|
+
* - A **class declaration** with no decorators, no `extends` clause, no static
|
|
41
|
+
* block, no static field initializer and no computed member name.
|
|
42
|
+
* `ClassDefinitionEvaluation` for such a class evaluates nothing at all, and
|
|
43
|
+
* this compiler lowers class evaluation to *no runtime step at all*
|
|
44
|
+
* (`ir/lower.ts`, `case 'class-lifecycle'`): the struct and the construct
|
|
45
|
+
* function it emits already are the layout the definition events record. A
|
|
46
|
+
* static block or a static initializer is the opposite -- each is a real
|
|
47
|
+
* region with a body -- so a class carrying one is kept; so is a class with
|
|
48
|
+
* a heritage clause, whose one definition-time step (the heritage read) is
|
|
49
|
+
* the event the projection takes the struct's base from (see
|
|
50
|
+
* `classDefinitionIsInert`).
|
|
51
|
+
* - A **variable statement** whose every declarator binds a plain name and has
|
|
52
|
+
* either no initializer or an initializer drawn from `initializerIsInert`'s
|
|
53
|
+
* whitelist: literals, function/arrow/class expressions, and object/array
|
|
54
|
+
* literals built from those. Anything that could call something -- a call, a
|
|
55
|
+
* `new`, a property read (which can be a getter), a template substitution
|
|
56
|
+
* (which can be a `toString`), a spread, an assignment, even a bare
|
|
57
|
+
* identifier read (which can be a temporal-dead-zone throw) -- is outside the
|
|
58
|
+
* whitelist, and the statement is kept.
|
|
59
|
+
*
|
|
60
|
+
* Everything else is kept unconditionally: imports, exports, `export default`,
|
|
61
|
+
* expression statements, control flow, enums, namespaces, and every type-only
|
|
62
|
+
* declaration. Type declarations cost nothing to keep -- `familyOf`
|
|
63
|
+
* (`census.ts`) assigns no family to an interface or a type alias, so they
|
|
64
|
+
* contribute no candidates either way -- and keeping them removes the whole
|
|
65
|
+
* question of whether a record layout was pruned out from under a live value.
|
|
66
|
+
*
|
|
67
|
+
* ## The second granularity: a class member
|
|
68
|
+
*
|
|
69
|
+
* A live class is live whole as a DEFINITION -- its layout, its fields, its
|
|
70
|
+
* constructor -- but a method body runs only when a dispatch names it, and a
|
|
71
|
+
* dispatch has to name it. `C.m` resolves to one declaration, so a static
|
|
72
|
+
* member is opened by symbol. An instance member cannot be: a structurally
|
|
73
|
+
* typed parameter, a base-class reference and an interface-typed call all land
|
|
74
|
+
* on a member the receiver's static type does not identify, and an override is
|
|
75
|
+
* reached through the base's name. So an instance member is opened by KEY --
|
|
76
|
+
* any spelling of its name in live code, on any receiver, opens every member
|
|
77
|
+
* that answers that name on every class.
|
|
78
|
+
*
|
|
79
|
+
* This is the same cut `ir/shake.ts` makes over the lowered IR, and its own
|
|
80
|
+
* header states the fact that makes the key comparison sound for this backend:
|
|
81
|
+
* a class method or accessor is addressable only through a key spelled at
|
|
82
|
+
* compile time, because `emit-properties.ts` refuses a dynamic key by name and
|
|
83
|
+
* the two dynamic paths that do exist address record fields and a box's
|
|
84
|
+
* expando, neither of which can answer a method key. What that pass could not
|
|
85
|
+
* do from the IR is stop a refusal inside a dead body from denying the whole
|
|
86
|
+
* program its certificate -- obligations are censused before lowering, so a
|
|
87
|
+
* method nothing calls still had to be representable. That is the reason this
|
|
88
|
+
* half of the cut lives here.
|
|
89
|
+
*
|
|
90
|
+
* A member reached through no spelling at all -- the gea plugin lowers
|
|
91
|
+
* `instance.render(root, depth)` into a call to the class's own `template`
|
|
92
|
+
* (`plugins/gea/render-bridge.ts`) -- is not something this walk can see, so
|
|
93
|
+
* the host states its own such names instead: see `hostReachedMemberKeys`.
|
|
94
|
+
*
|
|
95
|
+
* ## Fail-closed everywhere it cannot see
|
|
96
|
+
*
|
|
97
|
+
* - No entry file resolves: nothing is pruned at all (`wholeProgram`).
|
|
98
|
+
* - A reference resolves into a file this walk has not reached: that file is
|
|
99
|
+
* *promoted* to reachable rather than the reference dropped. A missed import
|
|
100
|
+
* edge, a global script file that nothing imports, a `declare global`
|
|
101
|
+
* augmentation -- each resurrects its file the moment anything names
|
|
102
|
+
* something in it.
|
|
103
|
+
* - A reference is followed for **every** identifier in live code, in type
|
|
104
|
+
* position as well as value position, and through property names too. A
|
|
105
|
+
* property name resolves to the member of the type it was read off, so a
|
|
106
|
+
* structural read of a class member keeps that class. Over-marking costs
|
|
107
|
+
* dead code left in; under-marking is the only direction that could be
|
|
108
|
+
* wrong, so the walk is deliberately blunt.
|
|
109
|
+
* - Only an import or a re-export is *not* traversed for references, because
|
|
110
|
+
* neither uses what it names: `export { mount } from './primitives'`
|
|
111
|
+
* re-exports a binding without reading it, and traversing one would make
|
|
112
|
+
* every barrel file mark its whole surface live -- which is precisely the
|
|
113
|
+
* state being removed. An importer that really does use the name resolves
|
|
114
|
+
* the alias chain to the same declaration and marks it here.
|
|
115
|
+
*/
|
|
116
|
+
export interface ProgramReachability {
|
|
117
|
+
/** The top-level statements of `file` this program reaches, in source order. */
|
|
118
|
+
readonly statementsOf: (file: ts.SourceFile) => readonly ts.Statement[];
|
|
119
|
+
/**
|
|
120
|
+
* Whether this node is an unused class member, or a constructor/initializer
|
|
121
|
+
* whose class is retained only for its instance layout.
|
|
122
|
+
*
|
|
123
|
+
* The second granularity this module answers at, and the only one below a
|
|
124
|
+
* statement. A class is opened whole because its DEFINITION is what a live
|
|
125
|
+
* reference reaches -- but a method's body is not part of that definition: it
|
|
126
|
+
* runs when a dispatch names it. So a method is exactly as prunable as a
|
|
127
|
+
* top-level function declaration, and for the same reason.
|
|
128
|
+
*
|
|
129
|
+
* A static is named by symbol (`C.m` resolves to one declaration) and an
|
|
130
|
+
* instance member by key (a dispatch's receiver does not say which class's
|
|
131
|
+
* member it lands on). See this module's header.
|
|
132
|
+
*/
|
|
133
|
+
readonly memberIsPruned: (node: ts.Node) => boolean;
|
|
134
|
+
readonly classIsLayoutOnly: (node: ts.ClassDeclaration) => boolean;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Every statement of every file: the answer when nothing may be pruned.
|
|
138
|
+
*
|
|
139
|
+
* This is the fail-closed value, and it is what a compilation whose entry
|
|
140
|
+
* points could not be resolved gets. It is deliberately not the default of any
|
|
141
|
+
* parameter -- a census that silently walked the whole program because someone
|
|
142
|
+
* forgot to thread the reachability through would be the second authority this
|
|
143
|
+
* module exists to prevent.
|
|
144
|
+
*/
|
|
145
|
+
export declare const wholeProgram: ProgramReachability;
|
|
146
|
+
/**
|
|
147
|
+
* `ts.forEachChild(file, visit)` restricted to what the program reaches.
|
|
148
|
+
*
|
|
149
|
+
* Every census in the parameter-binding family walks a file this way, and a
|
|
150
|
+
* walk that still visited a pruned statement counted references in code the
|
|
151
|
+
* program never runs: test262's propertyHelper ends with the inert, unreached
|
|
152
|
+
* `var verifyPrimordialProperty = verifyProperty`, and that one alias made
|
|
153
|
+
* the parameter census refuse `verifyProperty` as "escaping" -- so its `obj`
|
|
154
|
+
* never learned it is only ever called with `Math`, and every helper under it
|
|
155
|
+
* went dynamic. A declaration file has no statements the program evaluates,
|
|
156
|
+
* the same exclusion the walks made for themselves before.
|
|
157
|
+
*/
|
|
158
|
+
export declare const forEachReachableStatement: (reachable: ProgramReachability, file: ts.SourceFile, visit: (node: ts.Node) => void) => void;
|
|
159
|
+
/**
|
|
160
|
+
* Whether `node` is code the program runs: inside a top-level statement this
|
|
161
|
+
* program reaches, and under no member it pruned -- the boundary
|
|
162
|
+
* `forEachReachableStatement` draws for a walk, asked of one node a walk did
|
|
163
|
+
* not produce. A module the checker loaded but the program never evaluates
|
|
164
|
+
* (three's `ColorSpaceNode.js`, pulled in beside the node materials) answers
|
|
165
|
+
* false everywhere.
|
|
166
|
+
*/
|
|
167
|
+
export declare const nodeIsReachable: (reachable: ProgramReachability, node: ts.Node) => boolean;
|
|
168
|
+
export interface ReachabilityInput {
|
|
169
|
+
readonly checker: ts.TypeChecker;
|
|
170
|
+
/** The files this compiler is responsible for -- `CompiledProgram.sourceFiles`. */
|
|
171
|
+
readonly files: readonly ts.SourceFile[];
|
|
172
|
+
/** The files the caller named. Empty means the entry points are unknown, and nothing is pruned. */
|
|
173
|
+
readonly entries: readonly ts.SourceFile[];
|
|
174
|
+
/**
|
|
175
|
+
* Member names a HOST reaches without the program spelling them.
|
|
176
|
+
*
|
|
177
|
+
* The gea plugin lowers `instance.render(root, depth)` into a call to the
|
|
178
|
+
* class's own `template` member (`plugins/gea/render-bridge.ts`), which no
|
|
179
|
+
* TypeScript source names -- so nothing in this walk could ever see it
|
|
180
|
+
* spelled, and the member-key rule below would drop the one body the bridge
|
|
181
|
+
* calls. A plugin states its own such names (`PluginCapabilities`'
|
|
182
|
+
* `reachedMemberKeys`) rather than this file knowing any of them: which
|
|
183
|
+
* members a host reaches is the host's fact, and a name hard-coded here
|
|
184
|
+
* would be gea behaviour living in the generic compiler.
|
|
185
|
+
*/
|
|
186
|
+
readonly hostReachedMemberKeys?: ReadonlySet<string>;
|
|
187
|
+
}
|
|
188
|
+
export declare const moduleEvaluationOrder: (input: ReachabilityInput) => readonly ts.SourceFile[];
|
|
189
|
+
export declare const censusReachability: (input: ReachabilityInput) => ProgramReachability;
|