@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,700 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { bagShapeTypeAt } from './object-bag-bindings.js';
|
|
3
|
+
/**
|
|
4
|
+
* `never[]` IS NOT A TYPE THE PROGRAM ASKED FOR.
|
|
5
|
+
*
|
|
6
|
+
* `this.children = []` and `state.probe = []` type as `never[]`, and TS's
|
|
7
|
+
* evolving-array widening does not cross a function boundary -- so the nine
|
|
8
|
+
* `Vector3`s `WebGLLights.js` pushes into `state.probe` one line later never
|
|
9
|
+
* reach the cell's type, and every read of it derives a carrier for a value
|
|
10
|
+
* that cannot exist. `collection-bindings.ts` already answers what the writes
|
|
11
|
+
* actually produce; this is the one place its answer enters the type system.
|
|
12
|
+
*
|
|
13
|
+
* Wired here rather than in `typeOf` because the answer is keyed by NODE:
|
|
14
|
+
* `typeOf` receives a `ts.Type`, and every `never[]` in the program is the
|
|
15
|
+
* SAME checker type object regardless of which cell it came from. Only the
|
|
16
|
+
* node says which array this is.
|
|
17
|
+
*
|
|
18
|
+
* `checker.createArrayType` is checker-internal, so there is no `T[]`
|
|
19
|
+
* `ts.Type` to hand back -- and none is needed. This compiler's own `array`
|
|
20
|
+
* shape is what the pipeline consumes, and interning it directly from the
|
|
21
|
+
* element's structural id is both shorter and free of a synthesized checker
|
|
22
|
+
* type nothing else would recognise.
|
|
23
|
+
*
|
|
24
|
+
* ⛔ This is NOT the reachability question. A `never` here is TypeScript's
|
|
25
|
+
* mis-inference, not a proof of anything -- `state.probe[ i ].set( 0, 0, 0 )`
|
|
26
|
+
* at `WebGLLights.js:216` is unconditional and runs every frame. Marking such
|
|
27
|
+
* an operand unreachable was tried and miscompiled live code. Correcting the
|
|
28
|
+
* ELEMENT TYPE is the opposite move: it gives that line the carrier it always
|
|
29
|
+
* needed instead of declaring it dead.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* An empty array literal whose element type nothing states -- `const r = []`
|
|
33
|
+
* with no annotation, no contextual type, and no write this census could
|
|
34
|
+
* resolve.
|
|
35
|
+
*
|
|
36
|
+
* The checker calls such a literal `never[]`, and `representation/primitives.ts`
|
|
37
|
+
* gives `never` the same physical nothing as `void`, which `storedCarrier`
|
|
38
|
+
* spells `undefined` in a stored position. So the literal's carrier came out
|
|
39
|
+
* `array-object(undefined)` -- a claim that the array can hold NOTHING -- while
|
|
40
|
+
* the cell it fills and every read of it carry the checker's own evolving
|
|
41
|
+
* `any[]`. Two authorities over one storage, and the compiler had picked the
|
|
42
|
+
* strictly less true one: three's `WebGLUniforms.seqWithValue` does `const r =
|
|
43
|
+
* []`, pushes into it, and returns it, and the conversion the return needed
|
|
44
|
+
* (`array-object(undefined) -> array-object(dynamic)`) can never exist, because
|
|
45
|
+
* a carrier that holds nothing is not a carrier the program's values fit.
|
|
46
|
+
*
|
|
47
|
+
* `never` is what the checker says when it has nothing to say here, not a
|
|
48
|
+
* statement that the array is uninhabited -- the program pushes into it. The
|
|
49
|
+
* honest element for "unstated" is the box, which is also exactly what the
|
|
50
|
+
* checker itself answers at every reference (`any[]`).
|
|
51
|
+
*
|
|
52
|
+
* Gated on `never` alone, and on the literal being genuinely EMPTY. A
|
|
53
|
+
* contextually typed `[]` already has a real element and never reaches here;
|
|
54
|
+
* `Array<undefined>` is a statement, shares the `undefined` element carrier,
|
|
55
|
+
* and must keep it -- an `undefined[]` really can hold `undefined`s, and this
|
|
56
|
+
* must not be the thing that decides it cannot.
|
|
57
|
+
*/
|
|
58
|
+
/**
|
|
59
|
+
* An array whose element type NOTHING states -- `const r = []` with no
|
|
60
|
+
* annotation, no contextual type, and no write this census could resolve --
|
|
61
|
+
* asked of the same three node shapes `inferredArrayElementAt` answers for.
|
|
62
|
+
*
|
|
63
|
+
* The checker calls such an array `never[]`, and `representation/primitives.ts`
|
|
64
|
+
* gives `never` the same physical nothing as `void`, which `storedCarrier`
|
|
65
|
+
* spells `undefined` in a stored position. So the carrier came out
|
|
66
|
+
* `array-object(undefined)` -- a claim that the array can hold NOTHING -- while
|
|
67
|
+
* the program pushes into it. three's `WebGLUniforms.seqWithValue` is the case:
|
|
68
|
+
* `const r = []`, `r.push( u )` in a loop, `return r`, and the conversion the
|
|
69
|
+
* return needs (`array-object(undefined) -> array-object(dynamic)`) can never
|
|
70
|
+
* exist, because a carrier that holds nothing is not one the program's values
|
|
71
|
+
* fit. The refusal was right and the carrier was wrong.
|
|
72
|
+
*
|
|
73
|
+
* `never` is what the checker says when it has nothing to say here, not a proof
|
|
74
|
+
* that the array is uninhabited. The honest element for "unstated" is the box --
|
|
75
|
+
* which is also what the checker itself answers at every reference once its own
|
|
76
|
+
* evolving-array widening gives up (`any[]`).
|
|
77
|
+
*
|
|
78
|
+
* Gated on `never` alone. `any` already reaches the box without this;
|
|
79
|
+
* `Array<undefined>` is a statement that shares the `undefined` element carrier
|
|
80
|
+
* and must keep it, since an `undefined[]` really can hold `undefined`s; and a
|
|
81
|
+
* contextually typed `[]` has a real element and never gets here. Asked only
|
|
82
|
+
* after the census has had its say, because an element the census bound is real
|
|
83
|
+
* evidence and outranks this.
|
|
84
|
+
*/
|
|
85
|
+
/**
|
|
86
|
+
* Whether an empty `[]` is an arm of a merge that STATES its element type.
|
|
87
|
+
*
|
|
88
|
+
* `r.tokens ? r.tokens : []` over `tokens?: SonioxToken[]` is the shape. TS
|
|
89
|
+
* gives the literal no contextual type here -- a conditional arm inherits the
|
|
90
|
+
* conditional's own, and `const tokens = ...` states none -- so the literal
|
|
91
|
+
* types `never[]` and reaches `unstatedNeverArray` looking exactly like the
|
|
92
|
+
* evidence-free `const r = []` that rule was written for. It is not one: the
|
|
93
|
+
* conditional's own type is `SonioxToken[]`, and that IS a statement of what
|
|
94
|
+
* this arm's elements are, made by the expression the arm belongs to rather
|
|
95
|
+
* than by a contextual type. Boxing it puts two authorities over one merge --
|
|
96
|
+
* `array-object(dynamic)` on the arm, `array-object(native-record-ref)` on the
|
|
97
|
+
* merge -- and no load converts between them, so the program certified and was
|
|
98
|
+
* then refused at emission (`examples/apps/voice-notes`, its whole file).
|
|
99
|
+
*
|
|
100
|
+
* Refusing to box is the entire fix: `ir/lower-narrow.ts`'s `mergeIncoming`
|
|
101
|
+
* already handles this idiom by name, materializing the empty array in the
|
|
102
|
+
* MERGE's own carrier rather than converting into it -- but it recognises the
|
|
103
|
+
* arm by its element deriving to the physical nothing, which is precisely what
|
|
104
|
+
* the box overwrites. The two rules were each right about a different `[]` and
|
|
105
|
+
* this is the one line that says which is which.
|
|
106
|
+
*
|
|
107
|
+
* Asked of the merge's OWN type, not of a contextual type, and only for a
|
|
108
|
+
* non-`never`/non-`any` element: a merge that is itself unstated (`xs ? xs :
|
|
109
|
+
* []` where `xs` is `any[]`) states nothing this arm could adopt, and falls
|
|
110
|
+
* through to the box exactly as before.
|
|
111
|
+
*/
|
|
112
|
+
const mergeStatesElement = (checker, layoutTypeAt, node) => {
|
|
113
|
+
let arm = node;
|
|
114
|
+
while (arm.parent && ts.isParenthesizedExpression(arm.parent))
|
|
115
|
+
arm = arm.parent;
|
|
116
|
+
const parent = arm.parent;
|
|
117
|
+
if (!parent)
|
|
118
|
+
return false;
|
|
119
|
+
const isMergeArm = (ts.isConditionalExpression(parent) && (parent.whenTrue === arm || parent.whenFalse === arm)) ||
|
|
120
|
+
(ts.isBinaryExpression(parent) &&
|
|
121
|
+
(parent.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken ||
|
|
122
|
+
parent.operatorToken.kind === ts.SyntaxKind.BarBarToken ||
|
|
123
|
+
parent.operatorToken.kind === ts.SyntaxKind.QuestionQuestionToken) &&
|
|
124
|
+
(parent.left === arm || parent.right === arm));
|
|
125
|
+
if (!isMergeArm)
|
|
126
|
+
return false;
|
|
127
|
+
// The off switch exists so both arms of the gate that landed this run
|
|
128
|
+
// against ONE dist -- see this repo's `GEA_BAG_OFF`/`GEA_FLOW_CENSUS_OFF`.
|
|
129
|
+
if (process.env['GEA_MERGE_ARRAY_ELEMENT_OFF'])
|
|
130
|
+
return false;
|
|
131
|
+
const merged = layoutTypeAt(parent);
|
|
132
|
+
if (!checker.isArrayType(merged))
|
|
133
|
+
return false;
|
|
134
|
+
const [element] = checker.getTypeArguments(merged);
|
|
135
|
+
return element !== undefined && (element.flags & (ts.TypeFlags.Never | ts.TypeFlags.Any)) === 0;
|
|
136
|
+
};
|
|
137
|
+
export const unstatedNeverArray = (checker, collections, layoutTypeAt, node) => {
|
|
138
|
+
const neverElement = (type) => {
|
|
139
|
+
if (!checker.isArrayType(type))
|
|
140
|
+
return false;
|
|
141
|
+
const [element] = checker.getTypeArguments(type);
|
|
142
|
+
return element !== undefined && (element.flags & ts.TypeFlags.Never) !== 0;
|
|
143
|
+
};
|
|
144
|
+
if (ts.isArrayLiteralExpression(node)) {
|
|
145
|
+
if (mergeStatesElement(checker, layoutTypeAt, node))
|
|
146
|
+
return false;
|
|
147
|
+
// `const empty: never[] = []`, `[] as never[]`: the literal's element IS
|
|
148
|
+
// stated, by the annotation or assertion that gives it its contextual
|
|
149
|
+
// type; only a literal with no context at all (`const r = []`) is the
|
|
150
|
+
// evidence-free case the box exists for.
|
|
151
|
+
const contextual = checker.getContextualType(node);
|
|
152
|
+
if (contextual && checker.isArrayType(contextual))
|
|
153
|
+
return false;
|
|
154
|
+
return node.elements.length === 0 && collections.arrayElementAt(node) === null && neverElement(layoutTypeAt(node));
|
|
155
|
+
}
|
|
156
|
+
if (ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node)) {
|
|
157
|
+
return !node.type && collections.arrayElementForOwner(node) === null && neverElement(layoutTypeAt(node));
|
|
158
|
+
}
|
|
159
|
+
// A PARAMETER the array reached through a `call-argument` edge is one more
|
|
160
|
+
// name for the caller's storage, and `collection-bindings.ts`'s alias
|
|
161
|
+
// closure already put its declaration in the refused component. It is not a
|
|
162
|
+
// `never[]` candidate -- this census never owned parameters -- so the only
|
|
163
|
+
// question asked of it is the refusal, and the only answer given is the box
|
|
164
|
+
// the caller's own cell already carries.
|
|
165
|
+
// A parameter that STATES its element (an annotation, or a JSDoc `@param`)
|
|
166
|
+
// is not unstated, and the caller's box is not permission to overrule it --
|
|
167
|
+
// that disagreement has no sound conversion and belongs at the refusal, not
|
|
168
|
+
// here. Both spellings are asked, the way `jsdoc-type-names.ts` asks them.
|
|
169
|
+
if (ts.isParameter(node))
|
|
170
|
+
return (node.type === undefined &&
|
|
171
|
+
ts.getJSDocType(node) === undefined &&
|
|
172
|
+
ts.getJSDocParameterTags(node).length === 0 &&
|
|
173
|
+
collections.arrayRefusalForOwner(node) !== null &&
|
|
174
|
+
checker.isArrayType(layoutTypeAt(node)));
|
|
175
|
+
if (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node)) {
|
|
176
|
+
if (statesItsOwnType(checker, node))
|
|
177
|
+
return false;
|
|
178
|
+
// A REFUSED component reads back boxed even where the checker's own
|
|
179
|
+
// flow-sensitive answer at this reference looks concrete. The census
|
|
180
|
+
// admitted this array -- it is an unannotated empty literal whose whole
|
|
181
|
+
// write set it tried and failed to join -- so the storage is the box;
|
|
182
|
+
// letting one read take TypeScript's narrower evolving-array answer gives
|
|
183
|
+
// one array two carriers, and the emitter's only bridge between two
|
|
184
|
+
// `array-object` carriers is a fresh array. For a mutable `ArrayObject`
|
|
185
|
+
// that silently drops everything a callee pushes (three's
|
|
186
|
+
// `getProgramCacheKey`: every program cache key came out identical).
|
|
187
|
+
// Gated on the checker STILL calling this reference an array: where its
|
|
188
|
+
// own answer is a bare `any` (three's `WebGLOutput`, whose `_effects` is
|
|
189
|
+
// assigned an unannotated parameter) the reference is not an array read at
|
|
190
|
+
// all, and boxing it as one gives `_effects.length` an `any` member type
|
|
191
|
+
// over an `ArrayObject` receiver -- two authorities again, the other way.
|
|
192
|
+
if (collections.arrayRefusalForRead(node) !== null && checker.isArrayType(layoutTypeAt(node)))
|
|
193
|
+
return true;
|
|
194
|
+
return collections.arrayElementForRead(node) === null && neverElement(layoutTypeAt(node));
|
|
195
|
+
}
|
|
196
|
+
return false;
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Whether the binding a read names DECLARES its type. `export const
|
|
200
|
+
* emptyArray: never[] = [] as never[]` (tsc's core.ts) is stated, not
|
|
201
|
+
* unstated: the empty array is the program's own sentinel -- `type.resolvedBaseTypes
|
|
202
|
+
* = emptyArray` marks a circular resolution in progress and `=== emptyArray`
|
|
203
|
+
* detects it -- and a read of it is `never[]` exactly as the declaration says.
|
|
204
|
+
* The box is the answer for the evidence-free `const r = []`, and the
|
|
205
|
+
* declaration branch above already exempts an annotated declaration; this is
|
|
206
|
+
* the same exemption at the read. Without it the cell carried `never[]` while
|
|
207
|
+
* every read of it carried `any[]` -- two authorities over one storage, 367
|
|
208
|
+
* unmet binding reads on the tsc self-compile, and a target no conversion
|
|
209
|
+
* could honestly serve. What a `never[]` converts INTO is
|
|
210
|
+
* `targets/cpp/conversions.ts`'s question (the one empty array of the target
|
|
211
|
+
* element, by identity); this only keeps the read honest about its source.
|
|
212
|
+
*/
|
|
213
|
+
const statesItsOwnType = (checker, node) => {
|
|
214
|
+
const symbol = checker.getSymbolAtLocation(ts.isPropertyAccessExpression(node) ? node.name : node);
|
|
215
|
+
const target = symbol && (symbol.flags & ts.SymbolFlags.Alias) !== 0 ? checker.getAliasedSymbol(symbol) : symbol;
|
|
216
|
+
return (target?.declarations ?? []).some((declaration) => (ts.isVariableDeclaration(declaration) ||
|
|
217
|
+
ts.isParameter(declaration) ||
|
|
218
|
+
ts.isPropertyDeclaration(declaration) ||
|
|
219
|
+
ts.isPropertySignature(declaration)) &&
|
|
220
|
+
declaration.type !== undefined);
|
|
221
|
+
};
|
|
222
|
+
export const inferredArrayElementAt = (checker, collections, layoutTypeAt, node) => {
|
|
223
|
+
if (ts.isArrayLiteralExpression(node))
|
|
224
|
+
return collections.arrayElementAt(node);
|
|
225
|
+
// THE CELL'S OWN DECLARATION -- neither the literal that filled it nor a
|
|
226
|
+
// read of it, and the node a cell's stored carrier is actually published
|
|
227
|
+
// from. `const uvBuffer = []` types as `never[]` at the
|
|
228
|
+
// `VariableDeclaration`, so the cell carried `array-object(undefined)`
|
|
229
|
+
// while every read of it carried the census's real element -- two
|
|
230
|
+
// authorities over one storage, surfacing as an unsatisfiable
|
|
231
|
+
// `binding-read-conversion:array-object(undefined)->array-object(X)` per
|
|
232
|
+
// read rather than as an error anywhere. `typeArgumentsForOwner`'s arm one
|
|
233
|
+
// collection family over exists for exactly this reason and this is its
|
|
234
|
+
// counterpart; see `collections.arrayElementForOwner`.
|
|
235
|
+
if (ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node)) {
|
|
236
|
+
if (node.type)
|
|
237
|
+
return null;
|
|
238
|
+
const declared = layoutTypeAt(node);
|
|
239
|
+
if (!checker.isArrayType(declared))
|
|
240
|
+
return null;
|
|
241
|
+
return collections.arrayElementForOwner(node);
|
|
242
|
+
}
|
|
243
|
+
if (!ts.isIdentifier(node) && !ts.isPropertyAccessExpression(node))
|
|
244
|
+
return null;
|
|
245
|
+
const own = layoutTypeAt(node);
|
|
246
|
+
if (!checker.isArrayType(own))
|
|
247
|
+
return null;
|
|
248
|
+
if (statesItsOwnType(checker, node))
|
|
249
|
+
return null;
|
|
250
|
+
// An evolving checker read can already say number[] before the array is
|
|
251
|
+
// published into an object and a later alias writes undefined. The census
|
|
252
|
+
// owns only unannotated empty-array allocations and joins those alias writes;
|
|
253
|
+
// its physical element must therefore survive every read of that same cell,
|
|
254
|
+
// including earlier reads whose local checker view looks concrete.
|
|
255
|
+
return collections.arrayElementForRead(node);
|
|
256
|
+
};
|
|
257
|
+
/**
|
|
258
|
+
* The array type a `new Array(n)` fills, read off the position it is written
|
|
259
|
+
* into -- `contextualCollectionTypeAt` below, one constructor over.
|
|
260
|
+
*
|
|
261
|
+
* `lib.es5.d.ts` declares `new (arrayLength: number): any[]`, and the
|
|
262
|
+
* non-generic overload is the one every `new Array(n)` selects, so the
|
|
263
|
+
* element reads back `any` whatever the program assigns it to. That `any` is
|
|
264
|
+
* not a statement about the elements; it is the absence of one, and there is
|
|
265
|
+
* nothing for a destination to contradict: ECMA-262 10.4.2.1 makes a fresh
|
|
266
|
+
* array of n HOLES, which has no elements at all. The position the
|
|
267
|
+
* allocation fills DOES state the element, and the checker already checked
|
|
268
|
+
* the allocation against it.
|
|
269
|
+
*
|
|
270
|
+
* It has to be answered here, in the type system, rather than only as the
|
|
271
|
+
* invocation's published result: `partOffsets = new Array(len)` (hono's trie
|
|
272
|
+
* router, over `let partOffsets: number[] | null = null`) puts the allocation
|
|
273
|
+
* behind an assignment whose own value the mapper reads from its right-hand
|
|
274
|
+
* side, and the merge that cell's later reads join would otherwise publish
|
|
275
|
+
* `array-object(dynamic)` against an allocation the invocation published as
|
|
276
|
+
* `array-object(scalar(number))`. Two authorities over one storage, and no
|
|
277
|
+
* conversion between two `array-object` carriers whose elements disagree is
|
|
278
|
+
* installed or ever may be (`targets/cpp/conversions.ts` says why).
|
|
279
|
+
*
|
|
280
|
+
* A union destination is admitted only through its SOLE array arm, which is
|
|
281
|
+
* what `T[] | null` is; two array arms state nothing this could pick between,
|
|
282
|
+
* and an element the destination itself leaves `any`/`unknown` states nothing
|
|
283
|
+
* either. Explicit type arguments (`new Array<T>(n)`) are a statement already
|
|
284
|
+
* and never reach here.
|
|
285
|
+
*/
|
|
286
|
+
export const contextualArrayConstructTypeAt = (checker, node) => {
|
|
287
|
+
if (!ts.isNewExpression(node) || node.typeArguments !== undefined)
|
|
288
|
+
return null;
|
|
289
|
+
if (!ts.isIdentifier(node.expression) || node.expression.text !== 'Array')
|
|
290
|
+
return null;
|
|
291
|
+
const receiver = checker.getSymbolAtLocation(node.expression);
|
|
292
|
+
const receiverDeclaration = receiver?.valueDeclaration;
|
|
293
|
+
if (!receiver || receiver.name !== 'Array' || !receiverDeclaration || !receiverDeclaration.getSourceFile().isDeclarationFile)
|
|
294
|
+
return null;
|
|
295
|
+
const own = checker.getTypeAtLocation(node);
|
|
296
|
+
if (!checker.isArrayType(own))
|
|
297
|
+
return null;
|
|
298
|
+
const [element] = checker.getTypeArguments(own);
|
|
299
|
+
if (!element || (element.flags & ts.TypeFlags.Any) === 0)
|
|
300
|
+
return null;
|
|
301
|
+
const context = statedContextOf(checker, node);
|
|
302
|
+
if (!context)
|
|
303
|
+
return null;
|
|
304
|
+
const arrays = (context.isUnion() ? context.types : [context]).filter((member) => checker.isArrayType(member));
|
|
305
|
+
const [filled] = arrays;
|
|
306
|
+
if (!filled || arrays.length !== 1)
|
|
307
|
+
return null;
|
|
308
|
+
const [filledElement] = checker.getTypeArguments(filled);
|
|
309
|
+
if (!filledElement || (filledElement.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
|
|
310
|
+
return null;
|
|
311
|
+
return filled;
|
|
312
|
+
};
|
|
313
|
+
/**
|
|
314
|
+
* The type a bare `new Map()`/`new Set()`/`new WeakMap()`/`new WeakSet()`
|
|
315
|
+
* fills, read off the position it is written into, when its own inference
|
|
316
|
+
* states nothing.
|
|
317
|
+
*
|
|
318
|
+
* The checker types every argument-less `new Map()` as `Map<any, any>`: the
|
|
319
|
+
* constructor overload it selects is the non-generic `new (): Map<any, any>`,
|
|
320
|
+
* and no contextual type changes that (`l.s ??= new Map()`, `l.t = new
|
|
321
|
+
* Map()`, `const m: Map<string, number> = new Map()`, `return new Map()`
|
|
322
|
+
* against `Map<string, number> | undefined` -- every one reads back
|
|
323
|
+
* `Map<any, any>`, measured). Those `any`s are not a statement about the
|
|
324
|
+
* keys and values; they are the absence of one. The position the allocation
|
|
325
|
+
* fills DOES state them, and the checker already checked the allocation
|
|
326
|
+
* against it, so the fill is the type.
|
|
327
|
+
*
|
|
328
|
+
* Asked after `inferredCollectionTypeArgumentsAt`: a census that watched the
|
|
329
|
+
* cell's own writes has looked at more than the position's annotation has.
|
|
330
|
+
* Asked only for exactly this shape -- no arguments, no explicit type
|
|
331
|
+
* arguments, every inferred type argument `any`, and a contextual type that
|
|
332
|
+
* is the same generic (or a union of it with absences alone) with stated
|
|
333
|
+
* arguments. `new Box()` on a generic class infers `unknown`, not `any`, and
|
|
334
|
+
* a contextual BASE class for a derived allocation is a different generic
|
|
335
|
+
* target, so neither reaches here. tsc's `classInfo.memberInfos ??= new
|
|
336
|
+
* Map()` and `links.serializedTypes ||= new Map()` are the shape: the merge
|
|
337
|
+
* published the allocation's `keyed-collection(map, dynamic, dynamic)`
|
|
338
|
+
* against a cell declared `Map<K, V>`, an unsatisfiable narrowing per site.
|
|
339
|
+
*/
|
|
340
|
+
export const contextualCollectionTypeAt = (checker, node) => {
|
|
341
|
+
if (!ts.isNewExpression(node) || node.typeArguments !== undefined || (node.arguments?.length ?? 0) > 0)
|
|
342
|
+
return null;
|
|
343
|
+
const own = checker.getTypeAtLocation(node);
|
|
344
|
+
const target = genericTargetOf(own);
|
|
345
|
+
if (!target)
|
|
346
|
+
return null;
|
|
347
|
+
const ownArguments = checker.getTypeArguments(own);
|
|
348
|
+
if (ownArguments.length === 0 || !ownArguments.every((argument) => (argument.flags & ts.TypeFlags.Any) !== 0))
|
|
349
|
+
return null;
|
|
350
|
+
const context = statedContextOf(checker, node);
|
|
351
|
+
if (!context)
|
|
352
|
+
return null;
|
|
353
|
+
const substantive = (context.isUnion() ? context.types : [context]).filter((member) => (member.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Void)) === 0);
|
|
354
|
+
const [filled] = substantive;
|
|
355
|
+
if (!filled || substantive.length !== 1 || genericTargetOf(filled) !== target)
|
|
356
|
+
return null;
|
|
357
|
+
const filledArguments = checker.getTypeArguments(filled);
|
|
358
|
+
if (filledArguments.some((argument) => (argument.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0))
|
|
359
|
+
return null;
|
|
360
|
+
return filled;
|
|
361
|
+
};
|
|
362
|
+
/**
|
|
363
|
+
* The stated type of an expression the checker types as a DYNAMIC collection
|
|
364
|
+
* only because the allocation feeding it stated nothing -- the contextual
|
|
365
|
+
* answer above, followed through the syntax that carries an allocation to
|
|
366
|
+
* its use without restating it.
|
|
367
|
+
*
|
|
368
|
+
* `(cache || (cache = new Map())).set(key, value)` is the shape (tsc's
|
|
369
|
+
* `createSymlinkCache`, `links.extendedContainersByFile`): the allocation is
|
|
370
|
+
* typed by its position (`Map<string, number>`, above), but the checker's
|
|
371
|
+
* type of the ASSIGNMENT is the allocation's own `Map<any, any>`, the `||`
|
|
372
|
+
* subtype-REDUCES `Map<string, number> | Map<any, any>` to `Map<any, any>`
|
|
373
|
+
* because the stated one is a subtype of the dynamic one (measured), and the
|
|
374
|
+
* `.set` call's result -- the receiver, per `Map.prototype.set` -- is then
|
|
375
|
+
* resolved off that reduced type. So a value the mapper laid out as
|
|
376
|
+
* `Map<string, number>` flows through three nodes each of which the checker
|
|
377
|
+
* reports as `Map<any, any>`, and the call's result was a
|
|
378
|
+
* `Ref<Map<Value, Value>>` clang refused to assign the receiver into.
|
|
379
|
+
*
|
|
380
|
+
* Followed through exactly the carriers a value passes unchanged: the
|
|
381
|
+
* parentheses, an assignment (whose value IS the RHS), the two merges that
|
|
382
|
+
* yield an operand as-is (`||`, `??` -- `&&` yields the LEFT, which the
|
|
383
|
+
* checker types on its own), and a member call resolved on a stated
|
|
384
|
+
* receiver, whose result is re-read from the stated receiver's own member.
|
|
385
|
+
* A merge whose stated arms differ is built through the checker's internal
|
|
386
|
+
* union (the same guarded reach `derived-expression-type.ts` makes); a
|
|
387
|
+
* checker without it, or a member with overloads this cannot pick between,
|
|
388
|
+
* answers `null` and the checker's own reading stands, exactly as before.
|
|
389
|
+
*/
|
|
390
|
+
export const statedCollectionTypeAt = (checker, node) => {
|
|
391
|
+
if (ts.isNewExpression(node))
|
|
392
|
+
return contextualCollectionTypeAt(checker, node);
|
|
393
|
+
if (ts.isParenthesizedExpression(node))
|
|
394
|
+
return statedCollectionTypeAt(checker, node.expression);
|
|
395
|
+
if (ts.isBinaryExpression(node)) {
|
|
396
|
+
const operator = node.operatorToken.kind;
|
|
397
|
+
if (operator === ts.SyntaxKind.EqualsToken)
|
|
398
|
+
return statedCollectionTypeAt(checker, node.right);
|
|
399
|
+
if (operator !== ts.SyntaxKind.BarBarToken && operator !== ts.SyntaxKind.QuestionQuestionToken)
|
|
400
|
+
return null;
|
|
401
|
+
const right = statedCollectionTypeAt(checker, node.right);
|
|
402
|
+
if (!right)
|
|
403
|
+
return null;
|
|
404
|
+
const left = checker.getNonNullableType(statedCollectionTypeAt(checker, node.left) ?? checker.getTypeAtLocation(node.left));
|
|
405
|
+
if (left === right)
|
|
406
|
+
return right;
|
|
407
|
+
const constructing = checker;
|
|
408
|
+
return typeof constructing.getUnionType === 'function' ? constructing.getUnionType([left, right]) : null;
|
|
409
|
+
}
|
|
410
|
+
if (!ts.isCallExpression(node) || node.questionDotToken || !ts.isPropertyAccessExpression(node.expression))
|
|
411
|
+
return null;
|
|
412
|
+
const receiver = statedCollectionTypeAt(checker, node.expression.expression);
|
|
413
|
+
if (!receiver)
|
|
414
|
+
return null;
|
|
415
|
+
const property = checker.getPropertyOfType(receiver, node.expression.name.text);
|
|
416
|
+
if (!property)
|
|
417
|
+
return null;
|
|
418
|
+
const supplied = node.arguments.length;
|
|
419
|
+
const signatures = checker
|
|
420
|
+
.getTypeOfSymbolAtLocation(property, node.expression)
|
|
421
|
+
.getCallSignatures()
|
|
422
|
+
.filter((signature) => signature.getTypeParameters() === undefined && signature.getParameters().length >= supplied);
|
|
423
|
+
const [signature] = signatures;
|
|
424
|
+
return signature && signatures.length === 1 ? signature.getReturnType() : null;
|
|
425
|
+
};
|
|
426
|
+
/**
|
|
427
|
+
* The type a position states for the value written into it -- the checker's
|
|
428
|
+
* contextual type, except inside a callback passed to a generic call, where
|
|
429
|
+
* the checker answers with the INFERENCE-TIME context: `getOrCreate(map,
|
|
430
|
+
* key, () => new Map())` reads `Map<any, any>` for the arrow's body (measured)
|
|
431
|
+
* because the arrow was contextually typed while `K`/`V` were still being
|
|
432
|
+
* inferred, whereas the call's RESOLVED signature says `() => Map<string,
|
|
433
|
+
* number>`. For a body expression or a direct `return` of an arrow that is an
|
|
434
|
+
* argument of a call, the resolved parameter's own call signature's return
|
|
435
|
+
* type is the statement; everything else is the contextual type as given.
|
|
436
|
+
*/
|
|
437
|
+
const statedContextOf = (checker, node) => {
|
|
438
|
+
const contextual = checker.getContextualType(node);
|
|
439
|
+
const returning = ts.isReturnStatement(node.parent) ? node.parent : node;
|
|
440
|
+
const callback = returning.parent;
|
|
441
|
+
const body = (ts.isArrowFunction(callback) || ts.isFunctionExpression(callback)) &&
|
|
442
|
+
(callback.body === node ||
|
|
443
|
+
(ts.isBlock(callback.body) && callback.body.statements.length > 0 && callback.body.statements.includes(returning)));
|
|
444
|
+
if (!body)
|
|
445
|
+
return contextual;
|
|
446
|
+
const call = callback.parent;
|
|
447
|
+
if (!ts.isCallExpression(call) && !ts.isNewExpression(call))
|
|
448
|
+
return contextual;
|
|
449
|
+
const index = call.arguments?.findIndex((argument) => argument === callback) ?? -1;
|
|
450
|
+
if (index < 0 || call.arguments?.slice(0, index).some(ts.isSpreadElement))
|
|
451
|
+
return contextual;
|
|
452
|
+
const parameter = checker.getResolvedSignature(call)?.getParameters()[index];
|
|
453
|
+
if (!parameter)
|
|
454
|
+
return contextual;
|
|
455
|
+
const [signature] = checker.getTypeOfSymbolAtLocation(parameter, call).getCallSignatures();
|
|
456
|
+
return signature ? signature.getReturnType() : contextual;
|
|
457
|
+
};
|
|
458
|
+
const genericTargetOf = (type) => {
|
|
459
|
+
if ((type.flags & ts.TypeFlags.Object) === 0)
|
|
460
|
+
return null;
|
|
461
|
+
if ((type.objectFlags & ts.ObjectFlags.Reference) === 0)
|
|
462
|
+
return null;
|
|
463
|
+
return type.target;
|
|
464
|
+
};
|
|
465
|
+
/**
|
|
466
|
+
* THE K/(V) A BARE `new Map()`/`new Set()`/`new WeakMap()`/`new WeakSet()`
|
|
467
|
+
* NEVER STATES, ENTERED INTO THE TYPE SYSTEM -- `inferredArrayElementAt`'s
|
|
468
|
+
* exact counterpart, one collection family over, kept in this module rather
|
|
469
|
+
* than a new sibling for the same reason as every other file at the
|
|
470
|
+
* directory's own 40-file architecture cap: it is the SAME question
|
|
471
|
+
* (`collection-bindings.ts`'s answer entering the type system at the one
|
|
472
|
+
* place a node-keyed override can reach it), asked of the census's OTHER
|
|
473
|
+
* half.
|
|
474
|
+
*
|
|
475
|
+
* `collection-bindings.ts` has answered this since it was written --
|
|
476
|
+
* `typeArgumentsAt` -- but until now nothing in the representation pipeline
|
|
477
|
+
* ever asked it: `grep -rn "typeArgumentsAt" src/` found only the census's
|
|
478
|
+
* own declaration, default and implementation. Unwired since its creation
|
|
479
|
+
* (`a0c56f8d2`: "Add an unwired collection type-argument census (0/56 bind
|
|
480
|
+
* today, by design)"). Every bare `new Map()` in the program is the SAME
|
|
481
|
+
* checker type object (K and V both default to whatever the constructor's
|
|
482
|
+
* own declared defaults are), so -- exactly as for `never[]` above -- only
|
|
483
|
+
* the NODE says which logical collection this is.
|
|
484
|
+
*
|
|
485
|
+
* Three node shapes reach a collection's stored type, and all three are
|
|
486
|
+
* answered from the accessor pair `collection-bindings.ts` already exposes
|
|
487
|
+
* for exactly this:
|
|
488
|
+
*
|
|
489
|
+
* - the allocation itself (`new Map()` -- `typeArgumentsAt`);
|
|
490
|
+
* - the owner's own declaration (`private store = new Map()` types the
|
|
491
|
+
* FIELD from the `PropertyDeclaration` node, a different node than the
|
|
492
|
+
* `new Map()` it holds, and a cell rebuilt in more than one place --
|
|
493
|
+
* `this.m = new Map()` again in a `reset()` method -- has no single
|
|
494
|
+
* allocation site to ask at all -- `typeArgumentsForOwner`);
|
|
495
|
+
* - a later READ of the cell (`this.store` at `this.store.set(key, value)`
|
|
496
|
+
* -- `typeArgumentsForRead`).
|
|
497
|
+
*
|
|
498
|
+
* A fourth shape -- the RESULT of a call that returns its own receiver
|
|
499
|
+
* (`Map.prototype.set` returns `this`, so `m.set(a,b).set(c,d)` chains) --
|
|
500
|
+
* is NOT handled here. Recognising it would mean asking, generically, "does
|
|
501
|
+
* this resolved callee return its own receiver" -- a host-protocol fact
|
|
502
|
+
* `host-protocols.ts` does not yet state for the keyed-collection family,
|
|
503
|
+
* and hardcoding the method name `'set'` to answer it is exactly the
|
|
504
|
+
* one-off-syntax shortcut this campaign is trying to stop making. Left
|
|
505
|
+
* unhandled rather than guessed at; see this session's `NOTES.md`.
|
|
506
|
+
*
|
|
507
|
+
* The generic (defaulted) shape this overrides is reused for everything but
|
|
508
|
+
* `typeArguments`: the family, ownership policy and body-independence are
|
|
509
|
+
* already correct -- `representation/collections.ts`'s
|
|
510
|
+
* `deriveKeyedCollection` reads `shape.typeArguments` alone and never
|
|
511
|
+
* `shape.body` at all (`Map`/`Set`'s ambient body is intentionally sealed
|
|
512
|
+
* off one case above it in `representation/derive.ts`'s `'declared'` case)
|
|
513
|
+
* -- so re-deriving the family/declaration here would be a second,
|
|
514
|
+
* competing opinion instead of a strictly narrower one. `body: null` is
|
|
515
|
+
* therefore correct, not a placeholder: nothing downstream of a
|
|
516
|
+
* keyed-collection carrier ever reads it.
|
|
517
|
+
*/
|
|
518
|
+
export const inferredCollectionTypeArgumentsAt = (collections, table, typeOf, bags, own, node) => {
|
|
519
|
+
const bound = ts.isNewExpression(node)
|
|
520
|
+
? collections.typeArgumentsAt(node)
|
|
521
|
+
: ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node)
|
|
522
|
+
? collections.typeArgumentsForOwner(node)
|
|
523
|
+
: ts.isIdentifier(node) || ts.isPropertyAccessExpression(node)
|
|
524
|
+
? collections.typeArgumentsForRead(node)
|
|
525
|
+
: null;
|
|
526
|
+
if (!bound)
|
|
527
|
+
return null;
|
|
528
|
+
const generic = table.get(typeOf(own)).shape;
|
|
529
|
+
const direct = overriddenCollectionShape(table, typeOf, bags, bound, generic);
|
|
530
|
+
if (direct !== null)
|
|
531
|
+
return direct;
|
|
532
|
+
// A cell the program lets go ABSENT holds the collection inside a union,
|
|
533
|
+
// and refusing there put the census's answer on the reads and the
|
|
534
|
+
// checker's on the declaration -- the exact two-authorities failure the
|
|
535
|
+
// owner-keyed accessor exists to prevent, one level down.
|
|
536
|
+
//
|
|
537
|
+
// `WebGLRenderer.js`'s `let programs = materialProperties.programs` is the
|
|
538
|
+
// shape: the initializer is `Map<any, any> | undefined`, so this refused
|
|
539
|
+
// and the cell kept `optional(keyed-collection(map, dynamic, dynamic))`,
|
|
540
|
+
// while every read past the `if ( programs === undefined )` guard is a
|
|
541
|
+
// bare `Map` this census answers `keyed-collection(map, string, dynamic)`
|
|
542
|
+
// for -- an unsatisfiable `binding-read-conversion:optional(keyed-
|
|
543
|
+
// collection@...)->keyed-collection(map,string,...)` per read. The
|
|
544
|
+
// narrowing `optional(T) -> T` the reads need is installed and licensed;
|
|
545
|
+
// it simply never applied, because the two `T`s were not the same `T`.
|
|
546
|
+
//
|
|
547
|
+
// Admitted only for a union whose every OTHER member is an absence
|
|
548
|
+
// keyword: `Map<K,V> | undefined` and `Map<K,V> | null` are one storage
|
|
549
|
+
// the program sometimes leaves empty, and the override belongs to the
|
|
550
|
+
// payload. A union with a second substantive member is a genuinely
|
|
551
|
+
// different value in each arm and is refused, exactly as before -- there
|
|
552
|
+
// is no single collection for the census's answer to be about.
|
|
553
|
+
if (generic.kind !== 'union')
|
|
554
|
+
return null;
|
|
555
|
+
const members = generic.members.map((member) => ({ id: member, shape: table.get(member).shape }));
|
|
556
|
+
const payloads = members.filter((member) => member.shape.kind !== 'primitive' || !isAbsenceKeyword(member.shape.primitive));
|
|
557
|
+
const payload = payloads.length === 1 ? payloads[0] : null;
|
|
558
|
+
if (payload === null)
|
|
559
|
+
return null;
|
|
560
|
+
const overridden = overriddenCollectionShape(table, typeOf, bags, bound, payload.shape);
|
|
561
|
+
if (overridden === null)
|
|
562
|
+
return null;
|
|
563
|
+
return table.intern({
|
|
564
|
+
kind: 'union',
|
|
565
|
+
members: generic.members.map((member) => (member === payload.id ? overridden : member))
|
|
566
|
+
});
|
|
567
|
+
};
|
|
568
|
+
const isAbsenceKeyword = (primitive) => primitive === 'undefined' || primitive === 'null';
|
|
569
|
+
/**
|
|
570
|
+
* The census's K/(V) written back over one `'declared'` collection shape, or
|
|
571
|
+
* `null` when this shape was never that collection to begin with (a refusal
|
|
572
|
+
* elsewhere already fired, or the node's type genuinely is not one) --
|
|
573
|
+
* refuse by silence, the same as every other node the caller is asked about
|
|
574
|
+
* and has nothing to say for.
|
|
575
|
+
*/
|
|
576
|
+
const overriddenCollectionShape = (table, typeOf, bags, bound, generic) => {
|
|
577
|
+
if (generic.kind !== 'declared')
|
|
578
|
+
return null;
|
|
579
|
+
// The checker's own key argument stays wherever this census bound none:
|
|
580
|
+
// `key` is `null` for a collection whose K it could not resolve but whose V
|
|
581
|
+
// it could -- a statement about K alone, never a refusal of the collection
|
|
582
|
+
// (`CollectionTypeArguments.key`).
|
|
583
|
+
const keyId = bound.key ? typeOf(bound.key) : generic.typeArguments[0];
|
|
584
|
+
if (keyId === undefined)
|
|
585
|
+
return null;
|
|
586
|
+
// The FAMILY, not `bound.value`, decides the arity: `bound.value` is `null`
|
|
587
|
+
// both for a `Set`/`WeakSet` (which the shape asks nothing about, by
|
|
588
|
+
// `CollectionTypeArguments`'s own doc) AND for a `Map`/`WeakMap` this
|
|
589
|
+
// census bound a key for but never observed a `.set` call on (`new Map()`
|
|
590
|
+
// read only through `.has`/`.get`). Those are NOT the same shape: the first
|
|
591
|
+
// is a genuine 1-argument family, and `deriveKeyedCollection` refuses a
|
|
592
|
+
// 1-argument `map`/`weak-map` outright ("needs exactly 2"). The checker's
|
|
593
|
+
// OWN generic-defaulted instantiation already carries the right arity for
|
|
594
|
+
// whichever family this is -- `MapConstructor`'s bare `new Map()` checks as
|
|
595
|
+
// `Map<unknown, unknown>`, never `Map<unknown>` -- so `generic.typeArguments
|
|
596
|
+
// .length` is what this reads, not the census's own value slot. A `map`/
|
|
597
|
+
// `weak-map` with no bound value keeps the checker's OWN (uninformative)
|
|
598
|
+
// value argument rather than inventing one: only the KEY improved, exactly
|
|
599
|
+
// as much as the evidence supports.
|
|
600
|
+
// `boundValueTypeId`, not `bound.value`: a value slot this census left open
|
|
601
|
+
// as `value-unresolved` can still be answered here, and the cell's carrier
|
|
602
|
+
// and every `.get` off it must read the SAME answer.
|
|
603
|
+
const valueId = boundValueTypeId(table, typeOf, bags, bound);
|
|
604
|
+
const typeArguments = generic.typeArguments.length >= 2 ? [keyId, valueId ?? generic.typeArguments[1]] : [keyId];
|
|
605
|
+
return table.intern({ kind: 'declared', declaration: generic.declaration, typeArguments, body: null });
|
|
606
|
+
};
|
|
607
|
+
/**
|
|
608
|
+
* The VALUE slot of a bound collection, finishing the one question
|
|
609
|
+
* `collection-bindings.ts` had to leave open.
|
|
610
|
+
*
|
|
611
|
+
* That census types a `.set` value argument through the checker and the
|
|
612
|
+
* parameter census, and neither can answer `properties.set( object, map )`
|
|
613
|
+
* where `map` is an object bag: the checker says `any`, and the bag census --
|
|
614
|
+
* the one authority that knows -- does not exist yet when it runs
|
|
615
|
+
* (`frontend.ts` places `bags` after `compose()`, because a bag's answer is an
|
|
616
|
+
* `ObjectBagShape` and only `table.intern` turns one into a type). So the
|
|
617
|
+
* unresolved arguments travel here as `valueEvidence`, where the table and
|
|
618
|
+
* both censuses are in scope.
|
|
619
|
+
*
|
|
620
|
+
* ALL-OR-NOTHING, and identical across every argument. A value slot derived
|
|
621
|
+
* half from this census and half from the checker's `any` would be a second
|
|
622
|
+
* authority over one storage -- the defect this whole path exists to close --
|
|
623
|
+
* and two bags that disagree are a real disagreement no later layer resolves,
|
|
624
|
+
* so both answer nothing and the checker's own (uninformative) argument
|
|
625
|
+
* stands, exactly as before.
|
|
626
|
+
*/
|
|
627
|
+
const boundValueTypeId = (table, typeOf, bags, bound) => {
|
|
628
|
+
if (bound.value)
|
|
629
|
+
return typeOf(bound.value);
|
|
630
|
+
if (bound.valueEvidence.length === 0)
|
|
631
|
+
return null;
|
|
632
|
+
let agreed = null;
|
|
633
|
+
for (const evidence of bound.valueEvidence) {
|
|
634
|
+
const resolved = bagShapeTypeAt(table, typeOf, bags, evidence);
|
|
635
|
+
if (resolved === null || (agreed !== null && resolved !== agreed))
|
|
636
|
+
return null;
|
|
637
|
+
agreed = resolved;
|
|
638
|
+
}
|
|
639
|
+
return agreed;
|
|
640
|
+
};
|
|
641
|
+
/**
|
|
642
|
+
* What `collection.get( k )` publishes, when the census -- not the checker --
|
|
643
|
+
* is the one that knows what this collection holds.
|
|
644
|
+
*
|
|
645
|
+
* `inferredCollectionTypeArgumentsAt` above fixes the RECEIVER's own type, and
|
|
646
|
+
* that is not enough: a prototype call's result comes from the CALLEE'S
|
|
647
|
+
* SIGNATURE, which the checker instantiates from the receiver EXPRESSION's
|
|
648
|
+
* type, never from whatever this compiler later selected for it. So
|
|
649
|
+
* `properties.get( renderTarget )` over a `WeakMap` the census bound stays
|
|
650
|
+
* `any`, and every `renderTargetProperties = properties.get( ... )` in three's
|
|
651
|
+
* renderer is a `dynamic -> record` conversion nothing installs -- while the
|
|
652
|
+
* cell the value came OUT of is laid out natively. One storage, two
|
|
653
|
+
* authorities, exactly one operation apart.
|
|
654
|
+
*
|
|
655
|
+
* `V | undefined`, because that is what `Map`/`WeakMap`'s own `get` returns
|
|
656
|
+
* and the census changes only which `V`. The union is built structurally
|
|
657
|
+
* rather than as a `ts.Type`: `ts.TypeChecker.getUnionType` is not public, and
|
|
658
|
+
* this file already interns shapes directly for the same reason.
|
|
659
|
+
*
|
|
660
|
+
* Answers ONLY where a value was actually bound. A `Set`/`WeakSet` has no
|
|
661
|
+
* value (`CollectionTypeArguments`'s own doc), and a `Map` the program only
|
|
662
|
+
* ever reads leaves `value` null rather than inventing one -- both keep the
|
|
663
|
+
* checker's answer, unchanged. The census itself admits only a bare `new
|
|
664
|
+
* Map()` with no type arguments and no constructor argument, so an annotated
|
|
665
|
+
* `Map<string, Foo | null>` never reaches here and the author's own statement
|
|
666
|
+
* stays authoritative.
|
|
667
|
+
*/
|
|
668
|
+
export const collectionMemberResultTypeAt = (collections, table, typeOf, bags, layoutTypeAt, node) => {
|
|
669
|
+
if (!ts.isCallExpression(node))
|
|
670
|
+
return null;
|
|
671
|
+
const callee = node.expression;
|
|
672
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
673
|
+
return null;
|
|
674
|
+
const member = callee.name.text;
|
|
675
|
+
if (member !== 'get' && member !== 'set' && member !== 'add')
|
|
676
|
+
return null;
|
|
677
|
+
const receiver = callee.expression;
|
|
678
|
+
// `typeArgumentsForRead` resolves the receiver to the DECLARATION that owns
|
|
679
|
+
// the collection and answers only for one this census actually bound, so a
|
|
680
|
+
// `.get`/`.set`/`.add` on anything else -- a host object, a class of the
|
|
681
|
+
// program's own with a method of that name -- resolves to no owner and falls
|
|
682
|
+
// through untouched.
|
|
683
|
+
const bound = collections.typeArgumentsForRead(receiver);
|
|
684
|
+
if (!bound)
|
|
685
|
+
return null;
|
|
686
|
+
// `Map.prototype.set` and `Set.prototype.add` return the RECEIVER, so their
|
|
687
|
+
// result is whatever the receiver's own narrowed shape is -- asked through
|
|
688
|
+
// the same function that narrows the receiver itself rather than rebuilt
|
|
689
|
+
// here, so the two cannot state different type arguments for one call. This
|
|
690
|
+
// is not a nicety: `slots.set( 'a', new Slot( 4 ) )` on a bare `new Map()`
|
|
691
|
+
// emitted `Ref<Map<Value, Value>> = Ref<Map<string, Ref<Slot>>>` and clang
|
|
692
|
+
// rejected it outright -- the receiver had the census's answer and the call
|
|
693
|
+
// that returns that same receiver had the checker's.
|
|
694
|
+
if (member !== 'get')
|
|
695
|
+
return inferredCollectionTypeArgumentsAt(collections, table, typeOf, bags, layoutTypeAt(receiver), receiver);
|
|
696
|
+
const value = boundValueTypeId(table, typeOf, bags, bound);
|
|
697
|
+
if (value === null)
|
|
698
|
+
return null;
|
|
699
|
+
return table.intern({ kind: 'union', members: [value, table.intern({ kind: 'primitive', primitive: 'undefined' })] });
|
|
700
|
+
};
|