@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,399 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { physicalOverloadTypeAt } from './structural-declarations.js';
|
|
3
|
+
/** A census that knows nothing, for a caller that has not run the walk. */
|
|
4
|
+
export const emptyInstantiationCensus = { bindingOf: () => null };
|
|
5
|
+
/**
|
|
6
|
+
* Whether this type is itself a hole.
|
|
7
|
+
*
|
|
8
|
+
* Binding one parameter to another -- `class ReactiveComponent<E> extends
|
|
9
|
+
* Component<E>` binds `Component`'s parameter to `ReactiveComponent`'s -- says
|
|
10
|
+
* nothing about what either one finally is, and recording it would let a
|
|
11
|
+
* substitution resolve to a second hole. The chain is worth following one day;
|
|
12
|
+
* recording it as an answer today would be a wrong one.
|
|
13
|
+
*/
|
|
14
|
+
const isHole = (type) => (type.flags & ts.TypeFlags.TypeParameter) !== 0;
|
|
15
|
+
/**
|
|
16
|
+
* Pair a generic type with the instantiated one the checker produced from it,
|
|
17
|
+
* recording what each parameter was filled with.
|
|
18
|
+
*
|
|
19
|
+
* This walks the two types in lockstep rather than reading the checker's
|
|
20
|
+
* internal type mapper, which is not public API. The shapes are congruent by
|
|
21
|
+
* construction -- one *is* the other with holes filled -- so the walk is a
|
|
22
|
+
* structural comparison with no inference in it: at every position where the
|
|
23
|
+
* generic side is a hole, the concrete side is that hole's filling.
|
|
24
|
+
*
|
|
25
|
+
* Unions and intersections are deliberately not walked. `T | string` against
|
|
26
|
+
* `number | string` has no unique alignment -- the arms are a set, not a
|
|
27
|
+
* sequence -- and picking one would record a binding the language never made.
|
|
28
|
+
*
|
|
29
|
+
* ABSENCE is the exception, and it is not an exception to that argument: it is
|
|
30
|
+
* outside it. `status?: U` has type `U | undefined`, but that `undefined` is
|
|
31
|
+
* the OPTIONAL MODIFIER, not a declared alternative -- the program wrote one
|
|
32
|
+
* type and a `?`. So `status?: U` against `status?: ContentfulStatusCode` is
|
|
33
|
+
* `U | undefined` against `ContentfulStatusCode | undefined`, and refusing it
|
|
34
|
+
* as an ambiguous union bound nothing for `U` at all, which is what left
|
|
35
|
+
* hono's `c.json` generic uninstantiated. `withoutAbsence` strips exactly that
|
|
36
|
+
* modifier and requires ONE type to remain on each side, so nothing is
|
|
37
|
+
* aligned by position and no set is guessed; a union with two real arms still
|
|
38
|
+
* declines. It is also the rule the checker itself used: TypeScript infers an
|
|
39
|
+
* optional parameter from its non-`undefined` part.
|
|
40
|
+
*/
|
|
41
|
+
/**
|
|
42
|
+
* A type with the absence its OPTIONALITY contributes removed -- or `null` when
|
|
43
|
+
* what remains is not a single type.
|
|
44
|
+
*
|
|
45
|
+
* `undefined`, `null` and `void` are what a `?` modifier and a
|
|
46
|
+
* `strictNullChecks` widening add; they are not arms the program chose between.
|
|
47
|
+
* A type that is not a union, or one whose non-absent arms are more than one,
|
|
48
|
+
* is returned unchanged / `null` respectively, so the caller can tell "nothing
|
|
49
|
+
* to strip" from "stripped, and ambiguous".
|
|
50
|
+
*/
|
|
51
|
+
const absenceFlags = ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Void;
|
|
52
|
+
const withoutAbsence = (type) => {
|
|
53
|
+
if (!type.isUnion())
|
|
54
|
+
return type;
|
|
55
|
+
const present = type.types.filter((arm) => (arm.flags & absenceFlags) === 0);
|
|
56
|
+
if (present.length === type.types.length)
|
|
57
|
+
return type;
|
|
58
|
+
return present.length === 1 ? (present[0] ?? null) : null;
|
|
59
|
+
};
|
|
60
|
+
const unify = (checker, generic, concrete, depth, record) => {
|
|
61
|
+
if (depth > 8)
|
|
62
|
+
return;
|
|
63
|
+
if (generic === concrete)
|
|
64
|
+
return;
|
|
65
|
+
if (isHole(generic)) {
|
|
66
|
+
record(generic, concrete);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const genericPresent = withoutAbsence(generic);
|
|
70
|
+
const concretePresent = withoutAbsence(concrete);
|
|
71
|
+
if (genericPresent !== generic || concretePresent !== concrete) {
|
|
72
|
+
if (genericPresent !== null && concretePresent !== null) {
|
|
73
|
+
unify(checker, genericPresent, concretePresent, depth + 1, record);
|
|
74
|
+
}
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const genericReference = generic;
|
|
78
|
+
const concreteReference = concrete;
|
|
79
|
+
if ((generic.flags & ts.TypeFlags.Object) !== 0 &&
|
|
80
|
+
(concrete.flags & ts.TypeFlags.Object) !== 0 &&
|
|
81
|
+
genericReference.target !== undefined &&
|
|
82
|
+
genericReference.target === concreteReference.target) {
|
|
83
|
+
const generics = genericReference.typeArguments ?? [];
|
|
84
|
+
const concretes = concreteReference.typeArguments ?? [];
|
|
85
|
+
for (let index = 0; index < Math.min(generics.length, concretes.length); index += 1) {
|
|
86
|
+
const left = generics[index];
|
|
87
|
+
const right = concretes[index];
|
|
88
|
+
if (left && right)
|
|
89
|
+
unify(checker, left, right, depth + 1, record);
|
|
90
|
+
}
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
unifySignatures(checker, generic.getCallSignatures(), concrete.getCallSignatures(), depth, record);
|
|
94
|
+
unifySignatures(checker, generic.getConstructSignatures(), concrete.getConstructSignatures(), depth, record);
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* One signature list against another.
|
|
98
|
+
*
|
|
99
|
+
* Only a single-signature pair is walked. An overloaded type's signatures are
|
|
100
|
+
* not ordered by anything the instantiation preserves, so aligning the nth with
|
|
101
|
+
* the nth would pair a generic's second overload with a concrete's second for
|
|
102
|
+
* no reason beyond position.
|
|
103
|
+
*/
|
|
104
|
+
const unifySignatures = (checker, generics, concretes, depth, record) => {
|
|
105
|
+
const generic = generics[0];
|
|
106
|
+
const concrete = concretes[0];
|
|
107
|
+
if (generics.length !== 1 || concretes.length !== 1 || !generic || !concrete)
|
|
108
|
+
return;
|
|
109
|
+
unify(checker, generic.getReturnType(), concrete.getReturnType(), depth + 1, record);
|
|
110
|
+
// `this` IS a parameter, and the only one `Signature.parameters` leaves out.
|
|
111
|
+
// See `specialization.ts`'s twin of this walk for the generic that needs it;
|
|
112
|
+
// the two must bind the same holes or the census and the type table disagree
|
|
113
|
+
// about which copies exist.
|
|
114
|
+
const genericThis = generic.thisParameter;
|
|
115
|
+
const concreteThis = concrete.thisParameter;
|
|
116
|
+
if (genericThis && concreteThis) {
|
|
117
|
+
const genericThisType = typeOfParameter(checker, genericThis);
|
|
118
|
+
const concreteThisType = typeOfParameter(checker, concreteThis);
|
|
119
|
+
if (genericThisType && concreteThisType)
|
|
120
|
+
unify(checker, genericThisType, concreteThisType, depth + 1, record);
|
|
121
|
+
}
|
|
122
|
+
for (let index = 0; index < Math.min(generic.parameters.length, concrete.parameters.length); index += 1) {
|
|
123
|
+
const left = generic.parameters[index];
|
|
124
|
+
const right = concrete.parameters[index];
|
|
125
|
+
if (!left || !right)
|
|
126
|
+
continue;
|
|
127
|
+
const leftType = typeOfParameter(checker, left);
|
|
128
|
+
const rightType = typeOfParameter(checker, right);
|
|
129
|
+
if (leftType && rightType)
|
|
130
|
+
unify(checker, leftType, rightType, depth + 1, record);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
/** A parameter symbol's declared type, or `null` when the symbol has no declaration to read it at. */
|
|
134
|
+
const typeOfParameter = (checker, parameter) => {
|
|
135
|
+
const at = parameter.valueDeclaration ?? parameter.declarations?.[0];
|
|
136
|
+
return at ? checker.getTypeOfSymbolAtLocation(parameter, at) : null;
|
|
137
|
+
};
|
|
138
|
+
/** A declaration's own `typeParameters`, or none when it declares none. */
|
|
139
|
+
const typeParametersOf = (declaration) => {
|
|
140
|
+
const withParameters = declaration;
|
|
141
|
+
return withParameters.typeParameters ?? [];
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Every instantiation the program makes, collected before anything is
|
|
145
|
+
* normalized.
|
|
146
|
+
*
|
|
147
|
+
* Two sources, and they are different questions. A *call* instantiates a
|
|
148
|
+
* generic signature, and the checker has already inferred its arguments -- so
|
|
149
|
+
* the resolved signature paired against the generic one it came from is the
|
|
150
|
+
* whole answer. A *type reference* instantiates a generic declaration directly,
|
|
151
|
+
* including through a default (`class Home extends Component` is
|
|
152
|
+
* `Component<unknown>`), and there the type's own arguments are the answer with
|
|
153
|
+
* nothing to unify.
|
|
154
|
+
*
|
|
155
|
+
* The walk covers the program's own files, not its declaration files: an
|
|
156
|
+
* instantiation is something a program does, and a `.d.ts` states types without
|
|
157
|
+
* ever performing one.
|
|
158
|
+
*/
|
|
159
|
+
// Every `checker.getTypeAtLocation` / `Signature.getReturnType()` /
|
|
160
|
+
// `checker.getTypeOfSymbolAtLocation` call below (in `unify`, `unifySignatures`,
|
|
161
|
+
// `typeOfParameter`, `genericSignatureOf`, `fromOverloadedPhysicalCallee`,
|
|
162
|
+
// `fromTypeReference`, and the `visit` walk) is answering "what did the
|
|
163
|
+
// LANGUAGE resolve this generic/call/heritage site to", not "what does this
|
|
164
|
+
// node hold" -- there is no `censusedTypeAt` question to ask here. This runs
|
|
165
|
+
// BEFORE the parameter/return/local/field binding census exists at all
|
|
166
|
+
// (`frontend.ts`'s `runFrontend` computes `instantiations` and
|
|
167
|
+
// `specializations` first, specifically because the fixpoint below needs the
|
|
168
|
+
// generic/specialization answers as an input, not the other way round -- see
|
|
169
|
+
// this file's own header and `specialization.ts`'s: "answers it before
|
|
170
|
+
// anything is normalized, because the census has to know how many copies of
|
|
171
|
+
// each body to emit before it emits any"). So converting a site here is not
|
|
172
|
+
// merely risky, as the mission brief warns for generic-instantiation code --
|
|
173
|
+
// there is no census instance in scope to convert it TO. Left as direct
|
|
174
|
+
// checker calls, verified by reading `frontend.ts`'s call order.
|
|
175
|
+
export const censusInstantiations = (checker, sourceFiles, reachable) => {
|
|
176
|
+
/**
|
|
177
|
+
* Two buckets per parameter, not one. `genuine` is a real instantiation --
|
|
178
|
+
* a call, `new`, or type reference the program actually writes. `defaults`
|
|
179
|
+
* is what a type parameter's OWN constraint resolves to when nothing else
|
|
180
|
+
* fills it in -- `mount<RootComponent extends Component>` binds
|
|
181
|
+
* `Component`'s parameter to `GeaElement` this way for every program, since
|
|
182
|
+
* every program calls `mount`.
|
|
183
|
+
*
|
|
184
|
+
* That default is not a rival answer to a genuine binding; it is the
|
|
185
|
+
* fallback for when there is no genuine one. A program with one genuine
|
|
186
|
+
* instantiation (`class App extends Component<GeaCanvasElement>`) plus the
|
|
187
|
+
* ever-present default must resolve to the genuine one, not be refused as
|
|
188
|
+
* "bound to two types" -- and a program with NO genuine instantiation
|
|
189
|
+
* anywhere (most apps reach `Component` only through `ReactiveComponent`,
|
|
190
|
+
* itself parameterized, so the chain never binds `Component`'s own
|
|
191
|
+
* parameter to a concrete type) must still resolve, to the default, rather
|
|
192
|
+
* than come up empty just because the default is no longer being
|
|
193
|
+
* miscounted as a second genuine site.
|
|
194
|
+
*/
|
|
195
|
+
const bindings = new Map();
|
|
196
|
+
/** The symbol-keyed half of `recordInto`, reusable by a caller that already has a `ts.Symbol` rather than the hole `ts.Type` `unify` produces one. */
|
|
197
|
+
const recordSymbolInto = (bucket, symbol, bound) => {
|
|
198
|
+
if (isHole(bound))
|
|
199
|
+
return;
|
|
200
|
+
const entry = bindings.get(symbol) ?? { genuine: [], defaults: [] };
|
|
201
|
+
const list = entry[bucket];
|
|
202
|
+
if (!list.includes(bound))
|
|
203
|
+
list.push(bound);
|
|
204
|
+
bindings.set(symbol, entry);
|
|
205
|
+
};
|
|
206
|
+
const recordInto = (bucket) => (parameter, bound) => {
|
|
207
|
+
const symbol = parameter.getSymbol();
|
|
208
|
+
if (symbol)
|
|
209
|
+
recordSymbolInto(bucket, symbol, bound);
|
|
210
|
+
};
|
|
211
|
+
const record = recordInto('genuine');
|
|
212
|
+
const recordDefault = recordInto('defaults');
|
|
213
|
+
/**
|
|
214
|
+
* The uninstantiated signature a call was resolved from.
|
|
215
|
+
*
|
|
216
|
+
* `Signature.target` is where the checker keeps this, and it is not public
|
|
217
|
+
* API, so the generic is recovered the way a reader would: from the callee's
|
|
218
|
+
* own type. A callee whose type carries exactly one signature and that
|
|
219
|
+
* signature declares type parameters is the generic this call instantiated.
|
|
220
|
+
* More than one signature is an overload set, where which one was selected is
|
|
221
|
+
* precisely what is not recoverable from position, so those are skipped.
|
|
222
|
+
*/
|
|
223
|
+
const genericSignatureOf = (node) => {
|
|
224
|
+
const callee = ts.isTaggedTemplateExpression(node)
|
|
225
|
+
? node.tag
|
|
226
|
+
: ts.isJsxOpeningLikeElement(node)
|
|
227
|
+
? node.tagName
|
|
228
|
+
: ts.isCallOrNewExpression(node)
|
|
229
|
+
? node.expression
|
|
230
|
+
: null;
|
|
231
|
+
if (!callee)
|
|
232
|
+
return null;
|
|
233
|
+
const type = checker.getTypeAtLocation(callee);
|
|
234
|
+
const signatures = ts.isNewExpression(node) ? type.getConstructSignatures() : type.getCallSignatures();
|
|
235
|
+
const only = signatures[0];
|
|
236
|
+
if (signatures.length !== 1 || !only)
|
|
237
|
+
return null;
|
|
238
|
+
return only.getTypeParameters()?.length ? only : null;
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* A call through a callee whose DECLARED type is an overload set but whose
|
|
242
|
+
* physical value is one generic function literal -- the shape
|
|
243
|
+
* `genericSignatureOf` above correctly refuses (`signatures.length !== 1`),
|
|
244
|
+
* because which overload a call selected is not recoverable from the
|
|
245
|
+
* callee's declared type alone.
|
|
246
|
+
*
|
|
247
|
+
* `c.json(...)` (hono's `context.ts`) is exactly this: `json` is annotated
|
|
248
|
+
* `JSONRespond`, an interface with two overloaded generic call signatures,
|
|
249
|
+
* so the callee's type never carries one signature. But the type parameter
|
|
250
|
+
* that actually needs a binding belongs to neither overload -- it belongs
|
|
251
|
+
* to the one arrow function literal `json` was initialized with.
|
|
252
|
+
* `structural-declarations.ts`'s `physicalOverloadTypeAt` already reads
|
|
253
|
+
* that narrower truth for the property's own STORAGE type; this asks it of
|
|
254
|
+
* the callee's declaration to find the same literal.
|
|
255
|
+
*
|
|
256
|
+
* The checker's resolved signature for the call is still one of the
|
|
257
|
+
* interface's two overloads (`resolved.getDeclaration()` names a
|
|
258
|
+
* `CallSignatureDeclaration` inside `JSONRespond`, not the arrow), so the
|
|
259
|
+
* fillings are read off THAT overload's own uninstantiated form --
|
|
260
|
+
* `checker.getSignatureFromDeclaration` recovers it -- and then re-keyed
|
|
261
|
+
* onto the arrow's OWN type parameters by position. Sound because the
|
|
262
|
+
* interface overload and the literal satisfying it declare the same number
|
|
263
|
+
* of type parameters in the same order: TypeScript already proved the
|
|
264
|
+
* literal assignable to the overload it was assigned under, which is what
|
|
265
|
+
* let the program typecheck at all. Recorded as a GENUINE binding, exactly
|
|
266
|
+
* as an ordinary call would be -- this is one, just read through an extra
|
|
267
|
+
* layer of indirection the declared type hides.
|
|
268
|
+
*/
|
|
269
|
+
const fromOverloadedPhysicalCallee = (node, resolved) => {
|
|
270
|
+
if (!ts.isCallOrNewExpression(node) || !ts.isPropertyAccessExpression(node.expression))
|
|
271
|
+
return;
|
|
272
|
+
const callee = node.expression;
|
|
273
|
+
const symbol = checker.getSymbolAtLocation(callee);
|
|
274
|
+
const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];
|
|
275
|
+
if (!declaration)
|
|
276
|
+
return;
|
|
277
|
+
const physical = physicalOverloadTypeAt(checker, declaration);
|
|
278
|
+
if (!physical)
|
|
279
|
+
return;
|
|
280
|
+
const physicalSignatures = physical.getCallSignatures();
|
|
281
|
+
const physicalSignature = physicalSignatures[0];
|
|
282
|
+
if (physicalSignatures.length !== 1 || !physicalSignature)
|
|
283
|
+
return;
|
|
284
|
+
const owner = physicalSignature.getDeclaration();
|
|
285
|
+
const ownerParameters = owner ? typeParametersOf(owner) : [];
|
|
286
|
+
if (!owner || ownerParameters.length === 0)
|
|
287
|
+
return;
|
|
288
|
+
const resolvedDeclaration = resolved.getDeclaration();
|
|
289
|
+
const uninstantiated = resolvedDeclaration ? checker.getSignatureFromDeclaration(resolvedDeclaration) : undefined;
|
|
290
|
+
if (!uninstantiated || uninstantiated === resolved)
|
|
291
|
+
return;
|
|
292
|
+
const interfaceParameters = uninstantiated.getTypeParameters() ?? [];
|
|
293
|
+
if (interfaceParameters.length !== ownerParameters.length)
|
|
294
|
+
return;
|
|
295
|
+
const bound = new Map();
|
|
296
|
+
unifySignatures(checker, [uninstantiated], [resolved], 0, (parameter, filling) => {
|
|
297
|
+
const parameterSymbol = parameter.getSymbol();
|
|
298
|
+
if (parameterSymbol && !bound.has(parameterSymbol) && !isHole(filling))
|
|
299
|
+
bound.set(parameterSymbol, filling);
|
|
300
|
+
});
|
|
301
|
+
for (let index = 0; index < interfaceParameters.length; index += 1) {
|
|
302
|
+
const interfaceSymbol = interfaceParameters[index]?.getSymbol();
|
|
303
|
+
const ownSymbol = checker.getSymbolAtLocation(ownerParameters[index].name);
|
|
304
|
+
const filling = interfaceSymbol && bound.get(interfaceSymbol);
|
|
305
|
+
if (filling && ownSymbol)
|
|
306
|
+
recordSymbolInto('genuine', ownSymbol, filling);
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
const fromCall = (node) => {
|
|
310
|
+
const resolved = checker.getResolvedSignature(node);
|
|
311
|
+
if (!resolved)
|
|
312
|
+
return;
|
|
313
|
+
const generic = genericSignatureOf(node);
|
|
314
|
+
if (generic && generic !== resolved) {
|
|
315
|
+
unifySignatures(checker, [generic], [resolved], 0, record);
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
fromOverloadedPhysicalCallee(node, resolved);
|
|
319
|
+
};
|
|
320
|
+
const fromTypeReference = (type, into = record) => {
|
|
321
|
+
const reference = type;
|
|
322
|
+
const parameters = reference.target?.typeParameters;
|
|
323
|
+
const args = reference.typeArguments;
|
|
324
|
+
if (!parameters || !args)
|
|
325
|
+
return;
|
|
326
|
+
for (let index = 0; index < Math.min(parameters.length, args.length); index += 1) {
|
|
327
|
+
const parameter = parameters[index];
|
|
328
|
+
const bound = args[index];
|
|
329
|
+
if (parameter && bound)
|
|
330
|
+
into(parameter, bound);
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
const visit = (node) => {
|
|
334
|
+
// A PRUNED member is not reached either, and the statement-level rule
|
|
335
|
+
// below cannot say so -- a dead method lives inside a live class
|
|
336
|
+
// declaration, so `forEachChild` walks into it. The same guard the
|
|
337
|
+
// specialization census carries, for the same reason it states.
|
|
338
|
+
if (reachable.memberIsPruned(node))
|
|
339
|
+
return;
|
|
340
|
+
// A type parameter's own bound is not a USE of the generic it names in
|
|
341
|
+
// the way a call or a class heritage clause is: `<R extends Component>`
|
|
342
|
+
// states what `R` may be substituted with, and `mount`'s own body only
|
|
343
|
+
// ever touches `R`, never `Component` directly -- so this is never a
|
|
344
|
+
// second genuine instantiation site standing beside a real one. But it
|
|
345
|
+
// IS the fallback every caller who never overrides `R` resolves to, and
|
|
346
|
+
// most apps never do (they reach `Component` only through
|
|
347
|
+
// `ReactiveComponent<E> extends Component<E>`, where `E` is itself a
|
|
348
|
+
// hole this census correctly never chases). Recorded as a DEFAULT
|
|
349
|
+
// (`recordDefault`, a separate bucket from genuine bindings below) so it
|
|
350
|
+
// settles a parameter with no genuine instantiation anywhere, without
|
|
351
|
+
// ever manufacturing a false second binding beside a real one -- which is
|
|
352
|
+
// what recording it as a genuine site used to do.
|
|
353
|
+
if (ts.isTypeParameterDeclaration(node)) {
|
|
354
|
+
if (node.constraint)
|
|
355
|
+
fromTypeReference(checker.getTypeAtLocation(node.constraint), recordDefault);
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
if (ts.isCallOrNewExpression(node) || ts.isTaggedTemplateExpression(node) || ts.isJsxOpeningLikeElement(node))
|
|
359
|
+
fromCall(node);
|
|
360
|
+
if (ts.isExpressionWithTypeArguments(node) || ts.isTypeReferenceNode(node) || ts.isNewExpression(node)) {
|
|
361
|
+
fromTypeReference(checker.getTypeAtLocation(node));
|
|
362
|
+
}
|
|
363
|
+
ts.forEachChild(node, visit);
|
|
364
|
+
};
|
|
365
|
+
// Whole-program still means whole *program*: a call site this compilation
|
|
366
|
+
// does not reach is not a call site, so counting one would let dead code
|
|
367
|
+
// decide that a live generic has two bindings and must be refused.
|
|
368
|
+
for (const file of sourceFiles)
|
|
369
|
+
for (const statement of reachable.statementsOf(file))
|
|
370
|
+
visit(statement);
|
|
371
|
+
const unique = new Map();
|
|
372
|
+
for (const [symbol, entry] of bindings) {
|
|
373
|
+
const declaration = symbol.declarations?.[0];
|
|
374
|
+
if (!declaration)
|
|
375
|
+
continue;
|
|
376
|
+
// More than one GENUINE binding means the body really does have more
|
|
377
|
+
// than one meaning, and substituting either would compile one call's
|
|
378
|
+
// program for the other call. That is the case body duplication exists
|
|
379
|
+
// for, and until it exists the honest answer is the refusal
|
|
380
|
+
// representation already gives -- unchanged from before defaults existed
|
|
381
|
+
// as a separate bucket.
|
|
382
|
+
if (entry.genuine.length > 1)
|
|
383
|
+
continue;
|
|
384
|
+
if (entry.genuine.length === 1) {
|
|
385
|
+
unique.set(declaration, entry.genuine[0]);
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
// Zero genuine instantiations anywhere reachable: the default a type
|
|
389
|
+
// parameter's own constraint resolves to is not a competing second
|
|
390
|
+
// answer here, it is the ONLY answer on offer, exactly as if the
|
|
391
|
+
// language itself had filled the hole. More than one distinct default
|
|
392
|
+
// (two differently-constrained generics disagreeing on this parameter)
|
|
393
|
+
// is exactly as ambiguous as two genuine sites, so it is refused the
|
|
394
|
+
// same way.
|
|
395
|
+
if (entry.defaults.length === 1)
|
|
396
|
+
unique.set(declaration, entry.defaults[0]);
|
|
397
|
+
}
|
|
398
|
+
return { bindingOf: (declaration) => unique.get(declaration) ?? null };
|
|
399
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ProducerContext } from './producer-context.js';
|
|
3
|
+
import type { InvocationOperation } from '../model/operations.js';
|
|
4
|
+
/** Declaration identity only; consumers must discharge the static-member
|
|
5
|
+
* mutation obligation before using the operation's effects. Own-key queries
|
|
6
|
+
* return keys (or, for `hasOwn`, a presence fact derived from the key set)
|
|
7
|
+
* -- never the queried object's stored VALUES or its receiver. `hasOwn` also
|
|
8
|
+
* takes a second argument, the queried key itself; a consumer that treats
|
|
9
|
+
* this query as publishing nothing must still account for that key's own
|
|
10
|
+
* ToPropertyKey coercion (`ir/native-key-query.ts`'s `nativeKeyQueryOf`
|
|
11
|
+
* does). */
|
|
12
|
+
export declare const intrinsicOwnKeyQueryOf: (checker: ts.TypeChecker, callee: ts.Node) => {
|
|
13
|
+
readonly owner: "Object" | "Reflect";
|
|
14
|
+
readonly member: string;
|
|
15
|
+
} | null;
|
|
16
|
+
export type IntrinsicPropertyCallContext = Pick<ProducerContext, 'checker' | 'identities' | 'isStandardLibraryDeclaration' | 'globalHostMutationTaint'>;
|
|
17
|
+
/** Authenticate intrinsic property operations before checker identities and host mutation facts are sealed away. */
|
|
18
|
+
export declare const intrinsicPropertyCallOf: (context: IntrinsicPropertyCallContext, node: ts.CallExpression | ts.NewExpression, callee: ts.Node) => "own-keys" | "define-property" | "carrier-predicate" | NonNullable<InvocationOperation["intrinsicReflection"]> | null;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { intrinsicStaticMemberIsIntact } from './intrinsic-static-member.js';
|
|
3
|
+
import { intrinsicObjectKeysIntact } from './host-mutation-keys.js';
|
|
4
|
+
import { isGlobalArrayConstructor, isGlobalObjectConstructor, isStandardGlobalValue } from './derived-expression-type.js';
|
|
5
|
+
/** Declaration identity only; consumers must discharge the static-member
|
|
6
|
+
* mutation obligation before using the operation's effects. Own-key queries
|
|
7
|
+
* return keys (or, for `hasOwn`, a presence fact derived from the key set)
|
|
8
|
+
* -- never the queried object's stored VALUES or its receiver. `hasOwn` also
|
|
9
|
+
* takes a second argument, the queried key itself; a consumer that treats
|
|
10
|
+
* this query as publishing nothing must still account for that key's own
|
|
11
|
+
* ToPropertyKey coercion (`ir/native-key-query.ts`'s `nativeKeyQueryOf`
|
|
12
|
+
* does). */
|
|
13
|
+
export const intrinsicOwnKeyQueryOf = (checker, callee) => {
|
|
14
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
15
|
+
return null;
|
|
16
|
+
const owner = checker.getSymbolAtLocation(callee.expression);
|
|
17
|
+
const member = checker.getSymbolAtLocation(callee.name);
|
|
18
|
+
if (!owner?.valueDeclaration || !member?.declarations?.length)
|
|
19
|
+
return null;
|
|
20
|
+
if (![owner.valueDeclaration, ...member.declarations].every((declaration) => declaration.getSourceFile().hasNoDefaultLib))
|
|
21
|
+
return null;
|
|
22
|
+
const key = callee.name.text;
|
|
23
|
+
if (isStandardGlobalValue(checker, callee.expression, 'Object') &&
|
|
24
|
+
isGlobalObjectConstructor(checker, callee.expression, checker.getTypeAtLocation(callee.expression)) &&
|
|
25
|
+
(key === 'keys' || key === 'getOwnPropertyNames' || key === 'getOwnPropertySymbols' || key === 'hasOwn'))
|
|
26
|
+
return { owner: 'Object', member: key };
|
|
27
|
+
return key === 'ownKeys' && isStandardGlobalValue(checker, callee.expression, 'Reflect') ? { owner: 'Reflect', member: key } : null;
|
|
28
|
+
};
|
|
29
|
+
/** Authenticate intrinsic property operations before checker identities and host mutation facts are sealed away. */
|
|
30
|
+
export const intrinsicPropertyCallOf = (context, node, callee) => {
|
|
31
|
+
if (!ts.isCallExpression(node) || !ts.isPropertyAccessExpression(callee))
|
|
32
|
+
return null;
|
|
33
|
+
const member = callee.name.text;
|
|
34
|
+
const owner = callee.expression;
|
|
35
|
+
const symbol = context.checker.getSymbolAtLocation(owner);
|
|
36
|
+
const memberSymbol = context.checker.getSymbolAtLocation(callee.name);
|
|
37
|
+
if (!intrinsicStaticMemberIsIntact(context, symbol, memberSymbol, owner))
|
|
38
|
+
return null;
|
|
39
|
+
if (intrinsicOwnKeyQueryOf(context.checker, callee) !== null)
|
|
40
|
+
return 'own-keys';
|
|
41
|
+
if (isGlobalObjectConstructor(context.checker, owner, context.checker.getTypeAtLocation(owner))) {
|
|
42
|
+
if (member === 'getOwnPropertyDescriptor')
|
|
43
|
+
return 'getOwnPropertyDescriptor';
|
|
44
|
+
if (member === 'defineProperty') {
|
|
45
|
+
const prototype = context.checker.getTypeAtLocation(owner).getProperty('prototype');
|
|
46
|
+
const prototypeId = prototype ? context.identities.symbolDeclarationId(prototype) : null;
|
|
47
|
+
// ToPropertyDescriptor reads these six keys with HasProperty, so an
|
|
48
|
+
// inherited one on Object.prototype would change the descriptor.
|
|
49
|
+
return prototypeId !== null &&
|
|
50
|
+
intrinsicObjectKeysIntact(context.globalHostMutationTaint, prototypeId, {
|
|
51
|
+
names: ['enumerable', 'configurable', 'value', 'writable', 'get', 'set']
|
|
52
|
+
})
|
|
53
|
+
? 'define-property'
|
|
54
|
+
: null;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
// `Array.isArray(v)` -- 23.1.2.2. It is authenticated for the same reason
|
|
59
|
+
// `Object.keys` is and by the same guards above: what it publishes is a fact
|
|
60
|
+
// about the value's own kind, so a shadowed or host-mutated `Array` must not
|
|
61
|
+
// be able to acquire the claim.
|
|
62
|
+
if (member === 'isArray' && isGlobalArrayConstructor(context.checker, owner, context.checker.getTypeAtLocation(owner)))
|
|
63
|
+
return 'carrier-predicate';
|
|
64
|
+
if (!isStandardGlobalValue(context.checker, owner, 'Reflect'))
|
|
65
|
+
return null;
|
|
66
|
+
return member === 'get' || member === 'set' || member === 'has' || member === 'deleteProperty' || member === 'getOwnPropertyDescriptor'
|
|
67
|
+
? member
|
|
68
|
+
: null;
|
|
69
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ProducerContext } from './producer-context.js';
|
|
3
|
+
import { type PrototypeKeyQuery } from './host-mutation-keys.js';
|
|
4
|
+
type IntrinsicContext = Pick<ProducerContext, 'checker' | 'identities' | 'globalHostMutationTaint' | 'isStandardLibraryDeclaration'>;
|
|
5
|
+
export type { PrototypeKeyQuery } from './host-mutation-keys.js';
|
|
6
|
+
/**
|
|
7
|
+
* The WHOLE-object question: nothing at all was recorded against the
|
|
8
|
+
* intrinsic's constructor binding or its prototype, and no key was written
|
|
9
|
+
* through a receiver that might be any intrinsic. Prototype mutation is
|
|
10
|
+
* recorded on its identity, including writes through aliases. Prefer
|
|
11
|
+
* `intactIntrinsicPrototypeKeysType`: this answer fails under any single
|
|
12
|
+
* key write anywhere the census could not attribute.
|
|
13
|
+
*/
|
|
14
|
+
export declare const intactIntrinsicPrototypeType: (context: IntrinsicContext, intrinsic: string, location: ts.Node) => ts.Type | null;
|
|
15
|
+
/**
|
|
16
|
+
* The PER-KEY question: the intrinsic's prototype is still the one the
|
|
17
|
+
* standard library declares for every key in `keys` -- none of them was
|
|
18
|
+
* added, replaced or deleted on it, directly, through an alias, or through a
|
|
19
|
+
* receiver that might be any intrinsic -- and the constructor binding that
|
|
20
|
+
* names it was neither replaced nor had its `prototype` key written.
|
|
21
|
+
*
|
|
22
|
+
* `keys` must list every key the caller's proof reads from the prototype:
|
|
23
|
+
* a key it proves ABSENT (`{ names: ['glslVersion'] }` for "Object.prototype
|
|
24
|
+
* lacks `glslVersion`"), every method a plan calls, `arrayIndices` when a
|
|
25
|
+
* hole read falls through to the prototype. A key left out is a key the
|
|
26
|
+
* answer says nothing about.
|
|
27
|
+
*/
|
|
28
|
+
export declare const intactIntrinsicPrototypeKeysType: (context: IntrinsicContext, intrinsic: string, keys: PrototypeKeyQuery, location: ts.Node) => ts.Type | null;
|
|
29
|
+
/**
|
|
30
|
+
* `GEA_LEDGER_DEBUG=1` text only, never consulted for the compiler's own
|
|
31
|
+
* answer: WHICH of the census's taint sources is the reason a whole-prototype
|
|
32
|
+
* or per-key obligation fails -- `*` (some receiver the census could not
|
|
33
|
+
* attribute to any object at all), a SURFACE write (a receiver that might be
|
|
34
|
+
* this intrinsic but was not proved to be exactly it), or an OBJECT write
|
|
35
|
+
* (recorded against this intrinsic's own constructor or prototype identity).
|
|
36
|
+
* `intactIntrinsicPrototypeType`/`intactIntrinsicPrototypeKeysType` answer
|
|
37
|
+
* only pass/fail; this re-walks the same resolution to name which of the
|
|
38
|
+
* three the failure came from, so `[LEDGER]`'s publish-time line (WHERE a
|
|
39
|
+
* requirement was raised) can be paired with WHY the final census refused it.
|
|
40
|
+
*/
|
|
41
|
+
export declare const explainIntrinsicProtocolFailure: (context: IntrinsicContext, intrinsic: string, location: ts.Node, keys: PrototypeKeyQuery | "all") => string;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { intrinsicObjectKeysIntact, keySetTouches, prototypeKeyQuerySignature } from './host-mutation-keys.js';
|
|
3
|
+
const prototypeTypeOf = (context, intrinsic, location, intact) => {
|
|
4
|
+
const { checker, identities, globalHostMutationTaint: mutations, isStandardLibraryDeclaration } = context;
|
|
5
|
+
if (mutations.has('*') || !isStandardLibraryDeclaration)
|
|
6
|
+
return null;
|
|
7
|
+
const symbol = checker.resolveName(intrinsic, location, ts.SymbolFlags.Value, false);
|
|
8
|
+
if (!symbol?.valueDeclaration || !isStandardLibraryDeclaration(symbol.valueDeclaration))
|
|
9
|
+
return null;
|
|
10
|
+
const declaration = identities.symbolValueDeclarationId(symbol, location);
|
|
11
|
+
const constructor = checker.getTypeOfSymbolAtLocation(symbol, location);
|
|
12
|
+
const prototype = constructor.getProperty('prototype');
|
|
13
|
+
if (!prototype?.declarations?.length || !prototype.declarations.every(isStandardLibraryDeclaration))
|
|
14
|
+
return null;
|
|
15
|
+
const prototypeId = identities.symbolDeclarationId(prototype);
|
|
16
|
+
return declaration !== null && prototypeId !== null && intact(declaration, prototypeId)
|
|
17
|
+
? checker.getTypeOfSymbolAtLocation(prototype, location)
|
|
18
|
+
: null;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The WHOLE-object question: nothing at all was recorded against the
|
|
22
|
+
* intrinsic's constructor binding or its prototype, and no key was written
|
|
23
|
+
* through a receiver that might be any intrinsic. Prototype mutation is
|
|
24
|
+
* recorded on its identity, including writes through aliases. Prefer
|
|
25
|
+
* `intactIntrinsicPrototypeKeysType`: this answer fails under any single
|
|
26
|
+
* key write anywhere the census could not attribute.
|
|
27
|
+
*/
|
|
28
|
+
export const intactIntrinsicPrototypeType = (context, intrinsic, location) => prototypeTypeOf(context, intrinsic, location, (constructor, prototype) => !context.globalHostMutationTaint.has(constructor) && intrinsicObjectKeysIntact(context.globalHostMutationTaint, prototype, 'all'));
|
|
29
|
+
/**
|
|
30
|
+
* The PER-KEY question: the intrinsic's prototype is still the one the
|
|
31
|
+
* standard library declares for every key in `keys` -- none of them was
|
|
32
|
+
* added, replaced or deleted on it, directly, through an alias, or through a
|
|
33
|
+
* receiver that might be any intrinsic -- and the constructor binding that
|
|
34
|
+
* names it was neither replaced nor had its `prototype` key written.
|
|
35
|
+
*
|
|
36
|
+
* `keys` must list every key the caller's proof reads from the prototype:
|
|
37
|
+
* a key it proves ABSENT (`{ names: ['glslVersion'] }` for "Object.prototype
|
|
38
|
+
* lacks `glslVersion`"), every method a plan calls, `arrayIndices` when a
|
|
39
|
+
* hole read falls through to the prototype. A key left out is a key the
|
|
40
|
+
* answer says nothing about.
|
|
41
|
+
*/
|
|
42
|
+
export const intactIntrinsicPrototypeKeysType = (context, intrinsic, keys, location) => prototypeTypeOf(context, intrinsic, location, (constructor, prototype) => intrinsicObjectKeysIntact(context.globalHostMutationTaint, constructor, { names: ['prototype'] }) &&
|
|
43
|
+
intrinsicObjectKeysIntact(context.globalHostMutationTaint, prototype, keys));
|
|
44
|
+
/**
|
|
45
|
+
* `GEA_LEDGER_DEBUG=1` text only, never consulted for the compiler's own
|
|
46
|
+
* answer: WHICH of the census's taint sources is the reason a whole-prototype
|
|
47
|
+
* or per-key obligation fails -- `*` (some receiver the census could not
|
|
48
|
+
* attribute to any object at all), a SURFACE write (a receiver that might be
|
|
49
|
+
* this intrinsic but was not proved to be exactly it), or an OBJECT write
|
|
50
|
+
* (recorded against this intrinsic's own constructor or prototype identity).
|
|
51
|
+
* `intactIntrinsicPrototypeType`/`intactIntrinsicPrototypeKeysType` answer
|
|
52
|
+
* only pass/fail; this re-walks the same resolution to name which of the
|
|
53
|
+
* three the failure came from, so `[LEDGER]`'s publish-time line (WHERE a
|
|
54
|
+
* requirement was raised) can be paired with WHY the final census refused it.
|
|
55
|
+
*/
|
|
56
|
+
export const explainIntrinsicProtocolFailure = (context, intrinsic, location, keys) => {
|
|
57
|
+
const { checker, identities, globalHostMutationTaint: taint, isStandardLibraryDeclaration } = context;
|
|
58
|
+
if (taint.has('*'))
|
|
59
|
+
return '*';
|
|
60
|
+
if (!isStandardLibraryDeclaration)
|
|
61
|
+
return 'no-standard-library-check';
|
|
62
|
+
const symbol = checker.resolveName(intrinsic, location, ts.SymbolFlags.Value, false);
|
|
63
|
+
if (!symbol?.valueDeclaration || !isStandardLibraryDeclaration(symbol.valueDeclaration))
|
|
64
|
+
return 'unresolved-intrinsic';
|
|
65
|
+
const declaration = identities.symbolValueDeclarationId(symbol, location);
|
|
66
|
+
const constructor = checker.getTypeOfSymbolAtLocation(symbol, location);
|
|
67
|
+
const prototypeSymbol = constructor.getProperty('prototype');
|
|
68
|
+
if (!prototypeSymbol?.declarations?.length || !prototypeSymbol.declarations.every(isStandardLibraryDeclaration))
|
|
69
|
+
return 'unresolved-prototype';
|
|
70
|
+
const prototypeId = identities.symbolDeclarationId(prototypeSymbol);
|
|
71
|
+
if (declaration === null || prototypeId === null)
|
|
72
|
+
return 'unresolved-identity';
|
|
73
|
+
if (keySetTouches(taint.surfaceKeys, keys))
|
|
74
|
+
return `surface:${keys === 'all' ? 'whole' : prototypeKeyQuerySignature(keys)}`;
|
|
75
|
+
if (keySetTouches(taint.keysOf(prototypeId), keys))
|
|
76
|
+
return `object:prototype:${keys === 'all' ? 'whole' : prototypeKeyQuerySignature(keys)}`;
|
|
77
|
+
if (keys !== 'all' && keySetTouches(taint.surfaceKeys, { names: ['prototype'] }))
|
|
78
|
+
return 'surface:prototype-replaced';
|
|
79
|
+
if (keys !== 'all' && keySetTouches(taint.keysOf(declaration), { names: ['prototype'] }))
|
|
80
|
+
return 'object:constructor:prototype-replaced';
|
|
81
|
+
// The legacy whole-object question (`intactIntrinsicPrototypeType`) also
|
|
82
|
+
// fails when ANYTHING was ever recorded against the constructor's own
|
|
83
|
+
// identity, independent of key -- coarser than the per-key checks above.
|
|
84
|
+
if (taint.has(declaration) || taint.has(prototypeId))
|
|
85
|
+
return 'object:legacy-whole';
|
|
86
|
+
return 'intact';
|
|
87
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
import type { ProducerContext } from './producer-context.js';
|
|
3
|
+
type IntrinsicContext = Pick<ProducerContext, 'checker' | 'identities' | 'globalHostMutationTaint' | 'isStandardLibraryDeclaration'>;
|
|
4
|
+
/** Shared static-member identity and sealed mutation authority. Constructor
|
|
5
|
+
* value declarations and static member declarations have distinct identities;
|
|
6
|
+
* instance-interface augmentation does not replace a constructor static.
|
|
7
|
+
*
|
|
8
|
+
* Per key: the owner must not have had THIS member's key written (directly,
|
|
9
|
+
* or through a receiver that might be any intrinsic) nor its binding
|
|
10
|
+
* replaced, and the member declaration itself must not have been replaced.
|
|
11
|
+
* A write of some other key on the owner says nothing about this member.
|
|
12
|
+
*/
|
|
13
|
+
export declare const intrinsicStaticMemberIsIntact: (context: IntrinsicContext, owner: ts.Symbol | undefined, member: ts.Symbol | undefined, location: ts.Node) => boolean;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { intrinsicObjectKeysIntact } from './host-mutation-keys.js';
|
|
2
|
+
/** Shared static-member identity and sealed mutation authority. Constructor
|
|
3
|
+
* value declarations and static member declarations have distinct identities;
|
|
4
|
+
* instance-interface augmentation does not replace a constructor static.
|
|
5
|
+
*
|
|
6
|
+
* Per key: the owner must not have had THIS member's key written (directly,
|
|
7
|
+
* or through a receiver that might be any intrinsic) nor its binding
|
|
8
|
+
* replaced, and the member declaration itself must not have been replaced.
|
|
9
|
+
* A write of some other key on the owner says nothing about this member.
|
|
10
|
+
*/
|
|
11
|
+
export const intrinsicStaticMemberIsIntact = (context, owner, member, location) => {
|
|
12
|
+
if (!owner?.valueDeclaration || !member?.declarations?.length)
|
|
13
|
+
return false;
|
|
14
|
+
if (![owner.valueDeclaration, ...member.declarations].every((declaration) => context.isStandardLibraryDeclaration?.(declaration) === true))
|
|
15
|
+
return false;
|
|
16
|
+
const ownerId = context.identities.symbolValueDeclarationId(owner, location);
|
|
17
|
+
const memberId = context.identities.symbolDeclarationId(member);
|
|
18
|
+
const taint = context.globalHostMutationTaint;
|
|
19
|
+
return (ownerId !== null &&
|
|
20
|
+
memberId !== null &&
|
|
21
|
+
!taint.has(memberId) &&
|
|
22
|
+
intrinsicObjectKeysIntact(taint, ownerId, { names: [member.getName()] }));
|
|
23
|
+
};
|