@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,317 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { isGlobalObjectConstructor, isStandardInterfaceType } from './normalize/derived-expression-type.js';
|
|
3
|
+
/** `C.prototype`, with `C` returned. */
|
|
4
|
+
const prototypeOwnerOf = (expression) => ts.isPropertyAccessExpression(expression) && expression.name.text === 'prototype' ? expression.expression : null;
|
|
5
|
+
/** The program class a constructor-typed value denotes -- the static side only, whose type is the class symbol's own value type. */
|
|
6
|
+
const classOfConstructorValue = (checker, expression) => {
|
|
7
|
+
const type = checker.getTypeAtLocation(expression);
|
|
8
|
+
const symbol = type.getSymbol();
|
|
9
|
+
if (!symbol || (symbol.flags & ts.SymbolFlags.Class) === 0 || checker.getTypeOfSymbol(symbol) !== type)
|
|
10
|
+
return null;
|
|
11
|
+
const declarations = (symbol.declarations ?? []).filter((declaration) => ts.isClassLike(declaration));
|
|
12
|
+
if (declarations.length !== 1)
|
|
13
|
+
return null;
|
|
14
|
+
const declaration = declarations[0];
|
|
15
|
+
return declaration.getSourceFile().isDeclarationFile ? null : declaration;
|
|
16
|
+
};
|
|
17
|
+
/** `B` and every class it extends, nearest first, or `null` when one of them is not a class this program compiles. */
|
|
18
|
+
const programClassChainOf = (checker, base) => {
|
|
19
|
+
const chain = [];
|
|
20
|
+
let current = base;
|
|
21
|
+
while (current) {
|
|
22
|
+
if (chain.includes(current) || current.getSourceFile().isDeclarationFile)
|
|
23
|
+
return null;
|
|
24
|
+
chain.push(current);
|
|
25
|
+
const symbol = checker.getSymbolAtLocation(current.name ?? current);
|
|
26
|
+
const declared = symbol ? checker.getDeclaredTypeOfSymbol(symbol) : undefined;
|
|
27
|
+
const bases = declared?.isClassOrInterface() ? checker.getBaseTypes(declared) : [];
|
|
28
|
+
if (bases.length === 0)
|
|
29
|
+
return chain;
|
|
30
|
+
if (bases.length !== 1)
|
|
31
|
+
return null;
|
|
32
|
+
const next = bases[0].getSymbol()?.declarations?.find((candidate) => ts.isClassLike(candidate));
|
|
33
|
+
if (!next || !ts.isClassLike(next))
|
|
34
|
+
return null;
|
|
35
|
+
current = next;
|
|
36
|
+
}
|
|
37
|
+
return chain;
|
|
38
|
+
};
|
|
39
|
+
const memberNameOf = (member) => member.name && (ts.isIdentifier(member.name) || ts.isStringLiteral(member.name) || ts.isPrivateIdentifier(member.name))
|
|
40
|
+
? member.name.text
|
|
41
|
+
: null;
|
|
42
|
+
const isStatic = (member) => (ts.getCombinedModifierFlags(member) & ts.ModifierFlags.Static) !== 0;
|
|
43
|
+
/**
|
|
44
|
+
* Whether a `C` instance behaves as a `B` instance would through every member
|
|
45
|
+
* `C` does not answer itself.
|
|
46
|
+
*
|
|
47
|
+
* `C`'s construction never runs `B`'s constructor, so in the language the
|
|
48
|
+
* instance has none of `B`'s own state: a `B` field read on it is
|
|
49
|
+
* `undefined`, a `#private` read throws. The compiled instance carries `B`'s
|
|
50
|
+
* layout as its base subobject, default-initialized. The two agree exactly
|
|
51
|
+
* when nothing reads that state through a `C` instance: `B` (and each class
|
|
52
|
+
* it extends) declares no public instance field, and every prototype member
|
|
53
|
+
* `C` does not override reaches `this` only to look up a method or accessor
|
|
54
|
+
* -- which dispatch resolves to `C`'s own when `C` declares it, and to one
|
|
55
|
+
* this same rule checked otherwise. `super` in such a member names a
|
|
56
|
+
* specific ancestor's member regardless of what `C` overrides, so it is
|
|
57
|
+
* refused rather than followed.
|
|
58
|
+
*/
|
|
59
|
+
const reparentingIsSound = (derived, chain) => {
|
|
60
|
+
const overridden = new Set(derived.members.flatMap((member) => (isStatic(member) ? [] : [memberNameOf(member)])));
|
|
61
|
+
const behaviours = new Set();
|
|
62
|
+
for (const owner of chain) {
|
|
63
|
+
for (const member of owner.members) {
|
|
64
|
+
if (isStatic(member))
|
|
65
|
+
continue;
|
|
66
|
+
if (ts.isConstructorDeclaration(member)) {
|
|
67
|
+
const exposed = member.parameters.some((parameter) => ts.isParameterPropertyDeclaration(parameter, member) &&
|
|
68
|
+
(ts.getCombinedModifierFlags(parameter) & (ts.ModifierFlags.Private | ts.ModifierFlags.Protected)) === 0);
|
|
69
|
+
if (exposed)
|
|
70
|
+
return false;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (ts.isPropertyDeclaration(member)) {
|
|
74
|
+
const hidden = ts.isPrivateIdentifier(member.name) ||
|
|
75
|
+
(ts.getCombinedModifierFlags(member) & (ts.ModifierFlags.Private | ts.ModifierFlags.Protected)) !== 0;
|
|
76
|
+
if (!hidden)
|
|
77
|
+
return false;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const name = memberNameOf(member);
|
|
81
|
+
if (name !== null && (ts.isMethodDeclaration(member) || ts.isAccessor(member)) && !ts.isPrivateIdentifier(member.name))
|
|
82
|
+
behaviours.add(name);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const readsOnlyBehaviour = (body) => {
|
|
86
|
+
let sound = true;
|
|
87
|
+
const visit = (node) => {
|
|
88
|
+
if (!sound)
|
|
89
|
+
return;
|
|
90
|
+
// A non-arrow function binds its own `this`.
|
|
91
|
+
if (ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) || ts.isClassLike(node))
|
|
92
|
+
return;
|
|
93
|
+
if (node.kind === ts.SyntaxKind.SuperKeyword) {
|
|
94
|
+
sound = false;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (node.kind === ts.SyntaxKind.ThisKeyword) {
|
|
98
|
+
const access = node.parent;
|
|
99
|
+
sound =
|
|
100
|
+
ts.isPropertyAccessExpression(access) &&
|
|
101
|
+
access.expression === node &&
|
|
102
|
+
ts.isIdentifier(access.name) &&
|
|
103
|
+
behaviours.has(access.name.text) &&
|
|
104
|
+
// A write replaces the member on the instance, which the compiled
|
|
105
|
+
// layout has no slot for.
|
|
106
|
+
!(ts.isBinaryExpression(access.parent) && access.parent.left === access);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
ts.forEachChild(node, visit);
|
|
110
|
+
};
|
|
111
|
+
visit(body);
|
|
112
|
+
return sound;
|
|
113
|
+
};
|
|
114
|
+
for (const owner of chain) {
|
|
115
|
+
for (const member of owner.members) {
|
|
116
|
+
if (isStatic(member) || !(ts.isMethodDeclaration(member) || ts.isAccessor(member)))
|
|
117
|
+
continue;
|
|
118
|
+
const name = memberNameOf(member);
|
|
119
|
+
if (name !== null && overridden.has(name))
|
|
120
|
+
continue;
|
|
121
|
+
if (member.body && !readsOnlyBehaviour(member.body))
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return true;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Whether the module statements between `C`'s declaration and its
|
|
129
|
+
* re-parenting can run nothing that reaches a `C` instance -- the compiled
|
|
130
|
+
* dispatch holds `B` as the parent from the start, so a lookup before the call
|
|
131
|
+
* would already see `B`'s members.
|
|
132
|
+
*
|
|
133
|
+
* Declarations run nothing. An expression statement may call only the
|
|
134
|
+
* standard `Object`'s reflection functions, `Symbol.for`, or `forEach` on an array literal
|
|
135
|
+
* with those calls inside, which is how a module installs prototype members
|
|
136
|
+
* from a key list; a function stored in an object literal (a descriptor's
|
|
137
|
+
* `get` or `value`) is not run by storing it. Anything else -- a `new`, a call
|
|
138
|
+
* to the program's own functions -- is refused.
|
|
139
|
+
*/
|
|
140
|
+
const nothingRunsBetween = (checker, derived, statement) => {
|
|
141
|
+
const statements = derived.getSourceFile().statements;
|
|
142
|
+
const from = statements.indexOf(derived);
|
|
143
|
+
const to = statements.indexOf(statement);
|
|
144
|
+
if (from < 0 || to <= from)
|
|
145
|
+
return false;
|
|
146
|
+
let quiet = true;
|
|
147
|
+
const visit = (node) => {
|
|
148
|
+
if (!quiet)
|
|
149
|
+
return;
|
|
150
|
+
if (ts.isFunctionLike(node) && ts.isObjectLiteralElementLike(node.parent))
|
|
151
|
+
return;
|
|
152
|
+
if (ts.isMethodDeclaration(node) && ts.isObjectLiteralExpression(node.parent))
|
|
153
|
+
return;
|
|
154
|
+
if (ts.isNewExpression(node) || ts.isTaggedTemplateExpression(node) || ts.isDecorator(node)) {
|
|
155
|
+
quiet = false;
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (ts.isCallExpression(node)) {
|
|
159
|
+
const callee = node.expression;
|
|
160
|
+
const receiver = ts.isPropertyAccessExpression(callee) ? callee.expression : null;
|
|
161
|
+
const standard = (name) => receiver !== null &&
|
|
162
|
+
ts.isIdentifier(receiver) &&
|
|
163
|
+
isStandardInterfaceType(checker, receiver, name, checker.getTypeAtLocation(receiver));
|
|
164
|
+
// `Symbol.for` only reads the global symbol registry, which is how a
|
|
165
|
+
// module names a well-known inspection hook it installs.
|
|
166
|
+
const reflective = ts.isPropertyAccessExpression(callee) &&
|
|
167
|
+
(standard('ObjectConstructor') ||
|
|
168
|
+
(callee.name.text === 'for' && standard('SymbolConstructor')) ||
|
|
169
|
+
(callee.name.text === 'forEach' && ts.isArrayLiteralExpression(callee.expression) && node.arguments.every(ts.isArrowFunction)));
|
|
170
|
+
if (!reflective) {
|
|
171
|
+
quiet = false;
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
ts.forEachChild(node, visit);
|
|
176
|
+
};
|
|
177
|
+
for (const between of statements.slice(from + 1, to)) {
|
|
178
|
+
if (ts.isVariableStatement(between)) {
|
|
179
|
+
for (const declaration of between.declarationList.declarations)
|
|
180
|
+
if (declaration.initializer)
|
|
181
|
+
visit(declaration.initializer);
|
|
182
|
+
}
|
|
183
|
+
else if (ts.isExpressionStatement(between) || ts.isEmptyStatement(between))
|
|
184
|
+
visit(between);
|
|
185
|
+
else if (!ts.isFunctionDeclaration(between) &&
|
|
186
|
+
!ts.isInterfaceDeclaration(between) &&
|
|
187
|
+
!ts.isTypeAliasDeclaration(between) &&
|
|
188
|
+
!ts.isImportDeclaration(between))
|
|
189
|
+
return false;
|
|
190
|
+
if (!quiet)
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
return true;
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* `Object.setPrototypeOf(C.prototype, B.prototype)` run once, at the top level
|
|
197
|
+
* of the module that declares the class `C`, where `C` has no `extends` and
|
|
198
|
+
* `B` is a class this program compiles.
|
|
199
|
+
*
|
|
200
|
+
* `@hono/node-server`'s `RequestHeaders` is the shape: it answers the
|
|
201
|
+
* `Headers` surface itself and re-parents its prototype so its instances are
|
|
202
|
+
* `instanceof Headers`. After the call `C.prototype`'s [[Prototype]] is
|
|
203
|
+
* `B.prototype`, so for member lookup a `C` instance is exactly what an
|
|
204
|
+
* instance of `class C extends B` would be, except that `B`'s constructor
|
|
205
|
+
* never ran on it. That is what this compiler models: `B` becomes `C`'s base
|
|
206
|
+
* for layout, dispatch and upcasts, and the call itself checks at run time
|
|
207
|
+
* that the value really is `B` and links the two class evaluations
|
|
208
|
+
* (`gea::reparentNativeClass`). `reparentingIsSound` is what makes the
|
|
209
|
+
* missing constructor run unobservable.
|
|
210
|
+
*
|
|
211
|
+
* The class and the call must be statements of the same module body with the
|
|
212
|
+
* call unconditional, so the re-parenting happens before any function the
|
|
213
|
+
* module exports can run. A class with `extends` already has a prototype
|
|
214
|
+
* parent that its constructor's `super()` initializes, which this does not
|
|
215
|
+
* model.
|
|
216
|
+
*
|
|
217
|
+
* `Object` is authenticated by the caller, each with its own authority.
|
|
218
|
+
*/
|
|
219
|
+
export const prototypeReparentingOf = (checker, call) => {
|
|
220
|
+
const statement = call.parent;
|
|
221
|
+
if (!ts.isExpressionStatement(statement) || !ts.isSourceFile(statement.parent) || call.arguments.length !== 2)
|
|
222
|
+
return null;
|
|
223
|
+
const callee = call.expression;
|
|
224
|
+
if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== 'setPrototypeOf')
|
|
225
|
+
return null;
|
|
226
|
+
const [target, parent] = call.arguments;
|
|
227
|
+
const derivedName = prototypeOwnerOf(target);
|
|
228
|
+
const baseValue = prototypeOwnerOf(parent);
|
|
229
|
+
if (!derivedName || !baseValue || !ts.isIdentifier(derivedName))
|
|
230
|
+
return null;
|
|
231
|
+
if (!ts.isIdentifier(baseValue) && !ts.isPropertyAccessExpression(baseValue))
|
|
232
|
+
return null;
|
|
233
|
+
const symbol = checker.getSymbolAtLocation(derivedName);
|
|
234
|
+
const declarations = symbol?.declarations ?? [];
|
|
235
|
+
const derived = declarations.length === 1 ? declarations[0] : undefined;
|
|
236
|
+
if (!derived || !ts.isClassDeclaration(derived) || derived.parent !== statement.parent)
|
|
237
|
+
return null;
|
|
238
|
+
if (derived.heritageClauses?.some((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword))
|
|
239
|
+
return null;
|
|
240
|
+
if (derived.typeParameters?.length)
|
|
241
|
+
return null;
|
|
242
|
+
const base = classOfConstructorValue(checker, baseValue);
|
|
243
|
+
if (!base || base === derived || base.typeParameters?.length)
|
|
244
|
+
return null;
|
|
245
|
+
const chain = programClassChainOf(checker, base);
|
|
246
|
+
if (!chain || chain.includes(derived) || !reparentingIsSound(derived, chain))
|
|
247
|
+
return null;
|
|
248
|
+
if (!nothingRunsBetween(checker, derived, statement))
|
|
249
|
+
return null;
|
|
250
|
+
return { derived, baseValue, base };
|
|
251
|
+
};
|
|
252
|
+
/** Whether `call` is `Object.setPrototypeOf` on the standard `Object`. */
|
|
253
|
+
export const isObjectSetPrototypeOf = (checker, call) => {
|
|
254
|
+
const callee = call.expression;
|
|
255
|
+
if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== 'setPrototypeOf')
|
|
256
|
+
return false;
|
|
257
|
+
return isGlobalObjectConstructor(checker, callee.expression, checker.getTypeAtLocation(callee.expression));
|
|
258
|
+
};
|
|
259
|
+
/**
|
|
260
|
+
* Every class this program re-parents. A class re-parented twice has no single
|
|
261
|
+
* base and is left out, so both of its calls stay with the mutation census.
|
|
262
|
+
*/
|
|
263
|
+
export const prototypeReparentingsOf = (checker, identities, files) => {
|
|
264
|
+
const byClass = new Map();
|
|
265
|
+
const calls = new Map();
|
|
266
|
+
const constructorCalls = [];
|
|
267
|
+
for (const file of files) {
|
|
268
|
+
if (file.isDeclarationFile)
|
|
269
|
+
continue;
|
|
270
|
+
for (const statement of file.statements) {
|
|
271
|
+
if (!ts.isExpressionStatement(statement) || !ts.isCallExpression(statement.expression))
|
|
272
|
+
continue;
|
|
273
|
+
const call = statement.expression;
|
|
274
|
+
if (!isObjectSetPrototypeOf(checker, call))
|
|
275
|
+
continue;
|
|
276
|
+
const reparenting = prototypeReparentingOf(checker, call);
|
|
277
|
+
if (!reparenting) {
|
|
278
|
+
constructorCalls.push(call);
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
byClass.set(reparenting.derived, byClass.has(reparenting.derived) ? null : reparenting);
|
|
282
|
+
calls.set(call, reparenting);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// `Object.setPrototypeOf(C, B)` beside `Object.setPrototypeOf(C.prototype,
|
|
286
|
+
// B.prototype)` is the other half of the same `class C extends B`: the
|
|
287
|
+
// constructor's own [[Prototype]], through which `C` inherits `B`'s static
|
|
288
|
+
// members. The model already gives `C` that base for both halves, so the
|
|
289
|
+
// call is the same event -- it checks the value is `B` and links the two
|
|
290
|
+
// class evaluations, which a second link to the same parent leaves as it is.
|
|
291
|
+
// Alone, it is not modelled: `C.prototype` would still inherit from
|
|
292
|
+
// `Object.prototype`.
|
|
293
|
+
for (const call of constructorCalls) {
|
|
294
|
+
const [target, parent] = call.arguments;
|
|
295
|
+
if (call.arguments.length !== 2 || !ts.isIdentifier(target))
|
|
296
|
+
continue;
|
|
297
|
+
const derived = checker.getSymbolAtLocation(target)?.declarations?.find(ts.isClassDeclaration);
|
|
298
|
+
const reparenting = derived ? byClass.get(derived) : undefined;
|
|
299
|
+
if (!reparenting || parent.getText() !== reparenting.baseValue.getText())
|
|
300
|
+
continue;
|
|
301
|
+
if (classOfConstructorValue(checker, parent) !== reparenting.base)
|
|
302
|
+
continue;
|
|
303
|
+
calls.set(call, reparenting);
|
|
304
|
+
}
|
|
305
|
+
const bases = new Map();
|
|
306
|
+
for (const [derived, reparenting] of byClass)
|
|
307
|
+
if (reparenting)
|
|
308
|
+
bases.set(identities.declarationIdOf(derived), identities.declarationIdOf(reparenting.base));
|
|
309
|
+
return {
|
|
310
|
+
of: (call) => {
|
|
311
|
+
const reparenting = calls.get(call);
|
|
312
|
+
return reparenting && byClass.get(reparenting.derived) === reparenting ? reparenting : null;
|
|
313
|
+
},
|
|
314
|
+
baseOf: (derived) => byClass.get(derived)?.base ?? null,
|
|
315
|
+
bases
|
|
316
|
+
};
|
|
317
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* The program and checker are immutable inputs to census inference. TypeScript
|
|
4
|
+
* nevertheless allocates fresh object-literal types on repeated public
|
|
5
|
+
* getTypeAtLocation calls (its internal expression cache is flow-dependent).
|
|
6
|
+
* Memoize that query at the program boundary so every census shares its exact
|
|
7
|
+
* answer, including nested property identities. Improved census facts remain
|
|
8
|
+
* separate: a new receiver or a different narrowed read site is not this query.
|
|
9
|
+
*/
|
|
10
|
+
export declare const withStableTypeQueries: (checker: ts.TypeChecker) => ts.TypeChecker;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The program and checker are immutable inputs to census inference. TypeScript
|
|
3
|
+
* nevertheless allocates fresh object-literal types on repeated public
|
|
4
|
+
* getTypeAtLocation calls (its internal expression cache is flow-dependent).
|
|
5
|
+
* Memoize that query at the program boundary so every census shares its exact
|
|
6
|
+
* answer, including nested property identities. Improved census facts remain
|
|
7
|
+
* separate: a new receiver or a different narrowed read site is not this query.
|
|
8
|
+
*/
|
|
9
|
+
export const withStableTypeQueries = (checker) => {
|
|
10
|
+
const types = new WeakMap();
|
|
11
|
+
const getTypeAtLocation = (node) => {
|
|
12
|
+
const cached = types.get(node);
|
|
13
|
+
if (cached)
|
|
14
|
+
return cached;
|
|
15
|
+
const type = checker.getTypeAtLocation(node);
|
|
16
|
+
types.set(node, type);
|
|
17
|
+
return type;
|
|
18
|
+
};
|
|
19
|
+
// `getSymbolAtLocation` is memoized for a different reason than the query
|
|
20
|
+
// above, and a stronger one. It is not flow-dependent -- it resolves the name
|
|
21
|
+
// standing at a syntactic position, which a fixed program answers the same
|
|
22
|
+
// way every time -- so caching it cannot hide a narrowing the way an
|
|
23
|
+
// unmemoized type query could. It is simply the most expensive question this
|
|
24
|
+
// compiler asks TypeScript, and several censuses ask it of the same node.
|
|
25
|
+
//
|
|
26
|
+
// MISSES are cached too, and they are the ones that matter: an identifier
|
|
27
|
+
// that resolves to nothing sends the checker down its diagnostic path
|
|
28
|
+
// (`getCannotFindNameDiagnosticForName`, and for JSDoc the link-parsing
|
|
29
|
+
// beside it), which is far more work than a hit. A three.js-scale program is
|
|
30
|
+
// full of them. `undefined` cannot be told from absent in a WeakMap, so the
|
|
31
|
+
// misses are remembered in a set of their own.
|
|
32
|
+
const symbols = new WeakMap();
|
|
33
|
+
const symbolMisses = new WeakSet();
|
|
34
|
+
const getSymbolAtLocation = (node) => {
|
|
35
|
+
const cached = symbols.get(node);
|
|
36
|
+
if (cached)
|
|
37
|
+
return cached;
|
|
38
|
+
if (symbolMisses.has(node))
|
|
39
|
+
return undefined;
|
|
40
|
+
const symbol = checker.getSymbolAtLocation(node);
|
|
41
|
+
if (symbol)
|
|
42
|
+
symbols.set(node, symbol);
|
|
43
|
+
else
|
|
44
|
+
symbolMisses.add(node);
|
|
45
|
+
return symbol;
|
|
46
|
+
};
|
|
47
|
+
// The six queries below are memoized on a STRICTLY STRONGER argument than
|
|
48
|
+
// either of the two above: they are functions of a type's identity and
|
|
49
|
+
// nothing else. No node, no flow position, no narrowing site takes part, so
|
|
50
|
+
// there is no narrowed reading for a cache to freeze -- narrowing is decided
|
|
51
|
+
// at `getTypeAtLocation`, which is memoized separately and per node. Whatever
|
|
52
|
+
// type reaches here has already been chosen; these answer fixed structural
|
|
53
|
+
// questions about it, and a fixed program answers them the same way forever.
|
|
54
|
+
//
|
|
55
|
+
// They are memoized because the escape proof asks them in the innermost loop
|
|
56
|
+
// of a coinductive walk that revisits the same family on every member of
|
|
57
|
+
// every class, and because each is expensive in its own right: apparent-type
|
|
58
|
+
// and property resolution force lazy member tables, and `getPropertiesOfType`
|
|
59
|
+
// materializes the whole inherited member list of a three.js class on every
|
|
60
|
+
// call.
|
|
61
|
+
//
|
|
62
|
+
// The array-returning three hand back the checker's own array, shared by
|
|
63
|
+
// every caller of the same type -- sound only while no consumer mutates a
|
|
64
|
+
// result. None does today (every call site spreads, iterates, `find`s or
|
|
65
|
+
// `flatMap`s), and a consumer that wants to sort or push must copy first.
|
|
66
|
+
const apparentTypes = new WeakMap();
|
|
67
|
+
const getApparentType = (type) => {
|
|
68
|
+
const cached = apparentTypes.get(type);
|
|
69
|
+
if (cached)
|
|
70
|
+
return cached;
|
|
71
|
+
const apparent = checker.getApparentType(type);
|
|
72
|
+
apparentTypes.set(type, apparent);
|
|
73
|
+
return apparent;
|
|
74
|
+
};
|
|
75
|
+
const nonNullableTypes = new WeakMap();
|
|
76
|
+
const getNonNullableType = (type) => {
|
|
77
|
+
const cached = nonNullableTypes.get(type);
|
|
78
|
+
if (cached)
|
|
79
|
+
return cached;
|
|
80
|
+
const bare = checker.getNonNullableType(type);
|
|
81
|
+
nonNullableTypes.set(type, bare);
|
|
82
|
+
return bare;
|
|
83
|
+
};
|
|
84
|
+
const propertyLists = new WeakMap();
|
|
85
|
+
const getPropertiesOfType = (type) => {
|
|
86
|
+
const cached = propertyLists.get(type);
|
|
87
|
+
if (cached)
|
|
88
|
+
return cached;
|
|
89
|
+
const properties = checker.getPropertiesOfType(type);
|
|
90
|
+
propertyLists.set(type, properties);
|
|
91
|
+
return properties;
|
|
92
|
+
};
|
|
93
|
+
const baseTypeLists = new WeakMap();
|
|
94
|
+
const getBaseTypes = (type) => {
|
|
95
|
+
const cached = baseTypeLists.get(type);
|
|
96
|
+
if (cached)
|
|
97
|
+
return cached;
|
|
98
|
+
const bases = checker.getBaseTypes(type);
|
|
99
|
+
baseTypeLists.set(type, bases);
|
|
100
|
+
return bases;
|
|
101
|
+
};
|
|
102
|
+
// A miss is as worth remembering as a hit here: an absent property sends the
|
|
103
|
+
// checker through the full apparent-type/index-signature resolution before it
|
|
104
|
+
// can say no, and the escape proof asks for names most types do not have. A
|
|
105
|
+
// `Map` per type keeps absence distinguishable from "not asked yet".
|
|
106
|
+
const propertiesByName = new WeakMap();
|
|
107
|
+
const getPropertyOfType = (type, name) => {
|
|
108
|
+
let byName = propertiesByName.get(type);
|
|
109
|
+
if (!byName)
|
|
110
|
+
propertiesByName.set(type, (byName = new Map()));
|
|
111
|
+
if (byName.has(name))
|
|
112
|
+
return byName.get(name);
|
|
113
|
+
const property = checker.getPropertyOfType(type, name);
|
|
114
|
+
byName.set(name, property);
|
|
115
|
+
return property;
|
|
116
|
+
};
|
|
117
|
+
const signaturesByKind = new WeakMap();
|
|
118
|
+
const getSignaturesOfType = (type, kind) => {
|
|
119
|
+
let byKind = signaturesByKind.get(type);
|
|
120
|
+
if (!byKind)
|
|
121
|
+
signaturesByKind.set(type, (byKind = new Map()));
|
|
122
|
+
const cached = byKind.get(kind);
|
|
123
|
+
if (cached)
|
|
124
|
+
return cached;
|
|
125
|
+
const signatures = checker.getSignaturesOfType(type, kind);
|
|
126
|
+
byKind.set(kind, signatures);
|
|
127
|
+
return signatures;
|
|
128
|
+
};
|
|
129
|
+
// Preserve the checker's full surface, including capability-checked internal
|
|
130
|
+
// constructors used by existing inference producers, without copying it.
|
|
131
|
+
const stable = {
|
|
132
|
+
getTypeAtLocation,
|
|
133
|
+
getSymbolAtLocation,
|
|
134
|
+
getApparentType,
|
|
135
|
+
getNonNullableType,
|
|
136
|
+
getPropertiesOfType,
|
|
137
|
+
getBaseTypes,
|
|
138
|
+
getPropertyOfType,
|
|
139
|
+
getSignaturesOfType
|
|
140
|
+
};
|
|
141
|
+
return new Proxy(checker, {
|
|
142
|
+
get: (target, key, receiver) => {
|
|
143
|
+
if (typeof key === 'string' && key in stable)
|
|
144
|
+
return stable[key];
|
|
145
|
+
return Reflect.get(target, key, receiver);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a declarer's text is read: as the checker will see it, not as it sits
|
|
3
|
+
* on disk.
|
|
4
|
+
*
|
|
5
|
+
* The index below scans every file of the package to learn what each subclass
|
|
6
|
+
* assigns and with what stated type. It used to read those files with
|
|
7
|
+
* `readFileSync`, while the program itself reads them through the transform
|
|
8
|
+
* chain -- and a plugin's `transformSource` runs in that chain AFTER this
|
|
9
|
+
* overlay. So a type a package's plugin states for a subclass field (three's
|
|
10
|
+
* `ShaderMaterial.defaultAttributeValues`, restated from `@type {Object}` to
|
|
11
|
+
* a `Record<string, number[]|undefined>`) reached the checker for that
|
|
12
|
+
* subclass and never reached this index, which still read `{Object}` off the
|
|
13
|
+
* disk and refused the declarer. The base-typed read then stayed `any`: a
|
|
14
|
+
* box, and an exact-payload unbox at the reader, for a value both ends had
|
|
15
|
+
* already typed.
|
|
16
|
+
*
|
|
17
|
+
* Two readers of one declarer text are two authorities; this makes the index
|
|
18
|
+
* read what the checker reads. Only the PLUGIN transforms are applied here
|
|
19
|
+
* (`compiler.ts` hands them in): the generic transforms ahead of this one in
|
|
20
|
+
* the chain rewrite shapes this scan already recognises raw (`Object.
|
|
21
|
+
* defineProperty(this, ...)`, JSDoc namepaths), and a scan of their output
|
|
22
|
+
* would be a second copy of their rules. A file a plugin refuses -- an anchor
|
|
23
|
+
* it never compiled against -- reads as it sits on disk: the plugin states
|
|
24
|
+
* nothing about it.
|
|
25
|
+
*/
|
|
26
|
+
export type DeclarerReader = (filePath: string) => string;
|
|
27
|
+
/**
|
|
28
|
+
* The overlay, reading declarers through `read` -- see `DeclarerReader`.
|
|
29
|
+
* `compiler.ts` builds one per compilation with that compilation's plugin
|
|
30
|
+
* transforms; a caller with no plugins may pass `readFileSync` itself.
|
|
31
|
+
*/
|
|
32
|
+
export declare const createSubclassMemberOverlayTransform: (read: DeclarerReader) => (input: {
|
|
33
|
+
readonly fileName: string;
|
|
34
|
+
readonly text: string;
|
|
35
|
+
}) => string | null;
|