@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,626 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { unwrapErasedExpression } from '../producers/erasure.js';
|
|
3
|
+
import { nodePathToken } from './node-path-token.js';
|
|
4
|
+
import { arrayStoredValuesOf } from './array-element-continuation.js';
|
|
5
|
+
import { collectionStoredValuesOf } from './collection-value-continuation.js';
|
|
6
|
+
import { isVacuousOrigin, seededOriginSolver } from './seeded-origins.js';
|
|
7
|
+
import { isStandardInterfaceType } from '../derived-expression-type.js';
|
|
8
|
+
import { objectLiteralEntryKeyOf, recordAllocationAliasesClosed } from './record-alias-closure.js';
|
|
9
|
+
import { callableCompletionValuesOf, constructionYieldsCompletionOf } from './callable-completions.js';
|
|
10
|
+
import { resolveFlowSymbolAlias } from './targets.js';
|
|
11
|
+
import { originAuthorityIdentity } from './origin-authority.js';
|
|
12
|
+
import { enterHypothesisGuard, exitHypothesisGuard, noteHypothesis } from './proof-hypotheses.js';
|
|
13
|
+
import { deferredIntrinsicProtocolLedgerOf } from '../deferred-intrinsic-protocols.js';
|
|
14
|
+
export { callableCompletionValuesOf };
|
|
15
|
+
// `GEA_INVOCATION_REFUSALS` names why `recordMethodCallTargetsOf` and the
|
|
16
|
+
// write-plan it depends on returned null -- the same env var and message
|
|
17
|
+
// shape as `invocationRefusal` in `callable-reach.ts`, so a single run names
|
|
18
|
+
// both the member-dispatch refusal and the record-authority refusal behind
|
|
19
|
+
// it instead of only the outer one. Read once at load for the same reason
|
|
20
|
+
// `callable-reach.ts` reads its own flags once: this runs per uncached query,
|
|
21
|
+
// potentially millions of times on a whole-program run.
|
|
22
|
+
const recordRefusalDebug = process.env['GEA_INVOCATION_REFUSALS'] !== undefined;
|
|
23
|
+
const describeNode = (node) => {
|
|
24
|
+
const file = node.getSourceFile();
|
|
25
|
+
const { line } = file.getLineAndCharacterOfPosition(node.getStart(file));
|
|
26
|
+
return `${file.fileName.split('/').pop()}:${line + 1} ${node.getText(file).replace(/\s+/g, ' ').slice(0, 80)}`;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* `reason` is a THUNK because the guard below only reads it when the env var
|
|
30
|
+
* is set, while JavaScript evaluates a plain argument eagerly: every template
|
|
31
|
+
* literal at a call site was being built and thrown away on every refusal.
|
|
32
|
+
* This path refuses on the large majority of asks and runs millions of times
|
|
33
|
+
* in a whole-program compile, so those were millions of discarded strings --
|
|
34
|
+
* a live three.js profile charged `sourceRecordDataWritePlanOf` 28.2% of self
|
|
35
|
+
* time with garbage collection at 16% right behind it.
|
|
36
|
+
*/
|
|
37
|
+
const recordRefusal = (node, reason) => {
|
|
38
|
+
if (recordRefusalDebug)
|
|
39
|
+
console.error(`[INVOCATION-REFUSAL] ${reason()} :: ${describeNode(node)}`);
|
|
40
|
+
return null;
|
|
41
|
+
};
|
|
42
|
+
// `GEA_ORIGINS_DEBUG=<text>|'*'` names which arm of the record write-plan's
|
|
43
|
+
// origin walk refuses -- the same flag and shape `member-call-forwarding.ts`
|
|
44
|
+
// and `callable-reach.ts`'s `parameterValuesOf` already read, extended to a
|
|
45
|
+
// third walk over the same question ("what can this cell hold") so a single
|
|
46
|
+
// run explains a refusal that crosses all three rather than stopping at
|
|
47
|
+
// whichever one happened to be instrumented already.
|
|
48
|
+
const watchedRecordOrigins = process.env['GEA_ORIGINS_DEBUG'];
|
|
49
|
+
const refuseWritePlanOrigin = (node, reason) => {
|
|
50
|
+
if (watchedRecordOrigins === undefined)
|
|
51
|
+
return;
|
|
52
|
+
const text = node.getText().slice(0, 60).replace(/\s+/g, ' ');
|
|
53
|
+
if (watchedRecordOrigins !== '*' && !text.includes(watchedRecordOrigins))
|
|
54
|
+
return;
|
|
55
|
+
const file = node.getSourceFile();
|
|
56
|
+
console.error(`[RECORD-PLAN-ORIGINS] ${reason} ${file.fileName.split('/').pop()}:${file.getLineAndCharacterOfPosition(node.getStart()).line + 1} [${text}]`);
|
|
57
|
+
};
|
|
58
|
+
const NATIVE_MAP_INTERFACES = ['Map', 'WeakMap', 'ReadonlyMap'];
|
|
59
|
+
/** A receiver the checker can type as a native map is not only a record,
|
|
60
|
+
* whatever its origins -- asked of the expression and of what it erases to,
|
|
61
|
+
* so `(lists as any).get` still sees a declared `Map` union behind the cast.
|
|
62
|
+
*
|
|
63
|
+
* Memoized on the receiver because it is a pure checker fact, and because it
|
|
64
|
+
* is the FIRST thing every record method-call question asks -- ahead of any
|
|
65
|
+
* cache the walk has. Unmemoized it re-typed the expression and its erasure,
|
|
66
|
+
* took both apparent types, and ran three standard-interface identity checks
|
|
67
|
+
* per union member, once per ask, for questions the three.js app asks millions of
|
|
68
|
+
* times each. */
|
|
69
|
+
const nativeMapReceivers = new WeakMap();
|
|
70
|
+
const mayBeNativeMap = (checker, receiver) => {
|
|
71
|
+
let byReceiver = nativeMapReceivers.get(checker);
|
|
72
|
+
if (!byReceiver)
|
|
73
|
+
nativeMapReceivers.set(checker, (byReceiver = new WeakMap()));
|
|
74
|
+
const known = byReceiver.get(receiver);
|
|
75
|
+
if (known !== undefined)
|
|
76
|
+
return known;
|
|
77
|
+
const check = (type) => type.isUnion() || type.isIntersection()
|
|
78
|
+
? type.types.some(check)
|
|
79
|
+
: NATIVE_MAP_INTERFACES.some((name) => isStandardInterfaceType(checker, receiver, name, type));
|
|
80
|
+
const answer = [receiver, unwrapErasedExpression(receiver)].some((expression) => {
|
|
81
|
+
const type = checker.getTypeAtLocation(expression);
|
|
82
|
+
return check(type) || check(checker.getApparentType(type));
|
|
83
|
+
});
|
|
84
|
+
byReceiver.set(receiver, answer);
|
|
85
|
+
return answer;
|
|
86
|
+
};
|
|
87
|
+
/** The stable source callable a record entry holds, or null. */
|
|
88
|
+
const slotCallableOf = (checker, flow, entry) => {
|
|
89
|
+
const value = ts.isPropertyAssignment(entry) ? unwrapErasedExpression(entry.initializer) : null;
|
|
90
|
+
let found;
|
|
91
|
+
if (value && (ts.isFunctionExpression(value) || ts.isArrowFunction(value)))
|
|
92
|
+
found = value;
|
|
93
|
+
else {
|
|
94
|
+
const symbol = ts.isShorthandPropertyAssignment(entry)
|
|
95
|
+
? checker.getShorthandAssignmentValueSymbol(entry)
|
|
96
|
+
: value && ts.isIdentifier(value)
|
|
97
|
+
? checker.getSymbolAtLocation(value)
|
|
98
|
+
: undefined;
|
|
99
|
+
found = resolveFlowSymbolAlias(checker, symbol)?.valueDeclaration;
|
|
100
|
+
// The literal copies the binding's value when it runs; a reassigned
|
|
101
|
+
// binding can have held another function by then.
|
|
102
|
+
if (!found || !ts.isFunctionDeclaration(found) || calleeBindingIsWritten(flow, found))
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
if (!ts.isFunctionDeclaration(found) && !ts.isFunctionExpression(found) && !ts.isArrowFunction(found))
|
|
106
|
+
return null;
|
|
107
|
+
return found.body ? found : null;
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Any write the flow index files against the entry's own cell, other than the
|
|
111
|
+
* literal publishing it.
|
|
112
|
+
*
|
|
113
|
+
* Memoized because it is a pure source fact and both of its callers sit on the
|
|
114
|
+
* hottest record path: it asks the checker for the root's type and materializes
|
|
115
|
+
* the union of two write sets into a fresh array on EVERY ask, and a live
|
|
116
|
+
* three.js profile charged it 27.2% of self time with the collector behind it.
|
|
117
|
+
* `entry` is one of `root`'s own properties, so the entry alone names the root;
|
|
118
|
+
* nothing but the key is left to vary.
|
|
119
|
+
*/
|
|
120
|
+
const slotRewrites = new WeakMap();
|
|
121
|
+
const slotRewritten = (checker, flow, root, entry, key) => {
|
|
122
|
+
let byEntry = slotRewrites.get(flow);
|
|
123
|
+
if (!byEntry)
|
|
124
|
+
slotRewrites.set(flow, (byEntry = new WeakMap()));
|
|
125
|
+
let byKey = byEntry.get(entry);
|
|
126
|
+
if (!byKey)
|
|
127
|
+
byEntry.set(entry, (byKey = new Map()));
|
|
128
|
+
const known = byKey.get(key);
|
|
129
|
+
if (known !== undefined)
|
|
130
|
+
return known;
|
|
131
|
+
const property = checker.getTypeAtLocation(root).getProperty(key);
|
|
132
|
+
const writes = [...flow.writesToDeclaration(entry), ...(property ? flow.writesToSymbol(property) : [])];
|
|
133
|
+
// Mutating a member of the stored object does not replace this slot.
|
|
134
|
+
const answer = writes.some((write) => write.slot === 'whole' && write.site !== entry);
|
|
135
|
+
byKey.set(key, answer);
|
|
136
|
+
return answer;
|
|
137
|
+
};
|
|
138
|
+
const activeMethodCalls = new Set();
|
|
139
|
+
/**
|
|
140
|
+
* Targets this call has already been PROVEN to enter, while its slot-closure
|
|
141
|
+
* question is still open.
|
|
142
|
+
*
|
|
143
|
+
* Target selection and slot closure are two facts, and only the second is
|
|
144
|
+
* pending during the escape proof: the bodies come from the record's own write
|
|
145
|
+
* plan and the `slotRewritten` check, both settled before `recordSlotClosed` is
|
|
146
|
+
* ever asked. The escape proof reaches this same call again (a receiver read in
|
|
147
|
+
* callee position is now classified by `invocationTargetsOf`), and answering
|
|
148
|
+
* that re-entry with `null` published "no target is provable" for a target set
|
|
149
|
+
* this frame had already decided -- so the proof refused, closure failed, and a
|
|
150
|
+
* call's own resolution depended on itself.
|
|
151
|
+
*
|
|
152
|
+
* Publishing the decided half is not an assumption used to prove itself: the
|
|
153
|
+
* escape proof consumes these bodies to ask whether THEY leak the receiver, and
|
|
154
|
+
* a leak still fails closure and still makes this call refuse. Delete this
|
|
155
|
+
* buffer when the record/receiver-escape domain moves into the shared solver
|
|
156
|
+
* and the pair becomes one strongly-connected component.
|
|
157
|
+
*/
|
|
158
|
+
const decidedMethodCallTargets = new Map();
|
|
159
|
+
/** Slot reads whose holder plan is being built; a re-entry (`node = node.next`) refuses. */
|
|
160
|
+
const activeSlotReads = new Set();
|
|
161
|
+
/**
|
|
162
|
+
* The closed callables `record.key( ... )` can enter, or null.
|
|
163
|
+
*
|
|
164
|
+
* Three's `WebGLRenderLists` is a factory returning `{ get: get, dispose:
|
|
165
|
+
* dispose }`, and `renderLists.get( scene, depth )` looks a list up in a
|
|
166
|
+
* `WeakMap` inside that `get`. Read as a native `Map.get`, the call named no
|
|
167
|
+
* storage at all and refused; it is a call of the one function the record's
|
|
168
|
+
* `get` slot was created holding.
|
|
169
|
+
*
|
|
170
|
+
* Non-null only when all of these hold:
|
|
171
|
+
* - the checker is present and cannot type the receiver as a native
|
|
172
|
+
* `Map`/`WeakMap`/`ReadonlyMap` (a receiver that may be a real map is not
|
|
173
|
+
* classified as a record, whatever its origins);
|
|
174
|
+
* - the receiver's own record plan (`sourceRecordDataWritePlanOf` for `key`,
|
|
175
|
+
* under the same authority) is complete, and every allocation carries
|
|
176
|
+
* `key` as exactly one own data entry -- no default-prototype lookup;
|
|
177
|
+
* - each entry holds a source function with a body written in place, or names
|
|
178
|
+
* a function declaration whose binding is never reassigned;
|
|
179
|
+
* - no write the flow index names replaces the entry (`r.get = ...`) --
|
|
180
|
+
* regardless of any caller proof;
|
|
181
|
+
* - every allocation's aliases are closed: `recordAllocationAliasesClosed`,
|
|
182
|
+
* or failing that the authority's `recordSlotClosed`.
|
|
183
|
+
*
|
|
184
|
+
* Parameter-position mapping (rest parameters, `arguments`, spreads at the
|
|
185
|
+
* call) is NOT checked here; a caller walking arguments into the target's
|
|
186
|
+
* parameters owns that.
|
|
187
|
+
*
|
|
188
|
+
* A re-entrant query for the same call is answered with the targets this frame
|
|
189
|
+
* has already decided, and refuses only before that point -- see
|
|
190
|
+
* `decidedMethodCallTargets`. The slot-closure half is still pending for such a
|
|
191
|
+
* query, so a re-entrant answer means "these bodies, if this slot closes", and
|
|
192
|
+
* the enclosing frame still returns null when it does not.
|
|
193
|
+
*/
|
|
194
|
+
/**
|
|
195
|
+
* Array reads that REMOVE and return an element the array already held. Both
|
|
196
|
+
* are answered by the array's own stored-value inventory; neither can yield a
|
|
197
|
+
* value the array never stored. `at`/`[i]` are the non-removing spelling and
|
|
198
|
+
* are already handled by the element-access branch.
|
|
199
|
+
*/
|
|
200
|
+
const arrayRemovingReadNames = new Set(['pop', 'shift']);
|
|
201
|
+
export const recordMethodCallTargetsOf = (flow, call, authority) => {
|
|
202
|
+
const checker = authority.checker;
|
|
203
|
+
const callee = unwrapErasedExpression(call.expression);
|
|
204
|
+
const key = ts.isPropertyAccessExpression(callee)
|
|
205
|
+
? callee.name.text
|
|
206
|
+
: ts.isElementAccessExpression(callee)
|
|
207
|
+
? (() => {
|
|
208
|
+
const argument = unwrapErasedExpression(callee.argumentExpression);
|
|
209
|
+
return ts.isStringLiteralLike(argument) || ts.isNumericLiteral(argument) ? argument.text : null;
|
|
210
|
+
})()
|
|
211
|
+
: null;
|
|
212
|
+
if (key === null || key === '__proto__' || key === 'constructor')
|
|
213
|
+
return recordRefusal(call, () => 'record:no-key');
|
|
214
|
+
if (!ts.isPropertyAccessExpression(callee) && !ts.isElementAccessExpression(callee))
|
|
215
|
+
return recordRefusal(call, () => 'record:callee-not-member');
|
|
216
|
+
const receiver = callee.expression;
|
|
217
|
+
if (mayBeNativeMap(checker, receiver))
|
|
218
|
+
return recordRefusal(call, () => 'record:receiver-may-be-map');
|
|
219
|
+
if (activeMethodCalls.has(call)) {
|
|
220
|
+
// Both halves of this re-entry are hypotheses: the decided targets are a
|
|
221
|
+
// partial answer ("these bodies, IF this slot closes") and the refusal is
|
|
222
|
+
// "unknown while I am answering". An enclosing memo may keep either only
|
|
223
|
+
// while this same call is still open.
|
|
224
|
+
noteHypothesis(call);
|
|
225
|
+
const decided = decidedMethodCallTargets.get(call);
|
|
226
|
+
return decided ?? recordRefusal(call, () => 'record:reentrant-no-decision');
|
|
227
|
+
}
|
|
228
|
+
activeMethodCalls.add(call);
|
|
229
|
+
enterHypothesisGuard(call);
|
|
230
|
+
let answered = null;
|
|
231
|
+
let completed = false;
|
|
232
|
+
try {
|
|
233
|
+
answered = (() => {
|
|
234
|
+
const plan = sourceRecordDataWritePlanOf(flow, receiver, key, authority);
|
|
235
|
+
if (plan === null)
|
|
236
|
+
return recordRefusal(call, () => `record:plan-null key=${key}`);
|
|
237
|
+
if (plan.needsDefaultPrototype)
|
|
238
|
+
return recordRefusal(call, () => `record:plan-needs-default-prototype key=${key}`);
|
|
239
|
+
const targets = new Set();
|
|
240
|
+
for (const root of plan.roots) {
|
|
241
|
+
const entries = root.properties.filter((property) => property.name !== undefined && objectLiteralEntryKeyOf(property.name) === key);
|
|
242
|
+
const entry = entries.length === 1 ? entries[0] : undefined;
|
|
243
|
+
if (!entry || (!ts.isPropertyAssignment(entry) && !ts.isShorthandPropertyAssignment(entry)))
|
|
244
|
+
return recordRefusal(root, () => `record:no-single-entry key=${key}`);
|
|
245
|
+
const target = slotCallableOf(checker, flow, entry);
|
|
246
|
+
if (target === null)
|
|
247
|
+
return recordRefusal(entry, () => `record:slot-callable-null key=${key}`);
|
|
248
|
+
if (slotRewritten(checker, flow, root, entry, key))
|
|
249
|
+
return recordRefusal(entry, () => `record:slot-rewritten key=${key}`);
|
|
250
|
+
targets.add(target);
|
|
251
|
+
}
|
|
252
|
+
const decided = [...targets];
|
|
253
|
+
decidedMethodCallTargets.set(call, decided);
|
|
254
|
+
const closed = plan.roots.every((root) => recordAllocationAliasesClosed(checker, flow, root)) ||
|
|
255
|
+
authority.recordSlotClosed(receiver, key, plan.roots);
|
|
256
|
+
return closed ? decided : recordRefusal(call, () => `record:slot-not-closed key=${key}`);
|
|
257
|
+
})();
|
|
258
|
+
completed = true;
|
|
259
|
+
return answered;
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
// What every re-entry was handed while this ran: a refusal, unless a
|
|
263
|
+
// decision had already been published. So when this call also ends in a
|
|
264
|
+
// refusal and no decision was ever published, every re-entry was handed
|
|
265
|
+
// exactly the answer the question turned out to have -- the hypothesis was
|
|
266
|
+
// the truth, and the answers that leaned on it lost nothing by leaning
|
|
267
|
+
// (`proof-hypotheses.ts`). That is the `settled` argument, and it is what
|
|
268
|
+
// lets an enclosing memo KEEP a refusal instead of re-deriving it.
|
|
269
|
+
//
|
|
270
|
+
// The three ways it is not claimed are each a case where a re-entry was
|
|
271
|
+
// handed something the question did not turn out to have: a decision
|
|
272
|
+
// published partway means early and late re-entries disagree; a non-null
|
|
273
|
+
// answer means the re-entries' refusal was weaker than the truth; and a
|
|
274
|
+
// throw means there is no truth to compare against yet. `confirmed` stays
|
|
275
|
+
// unconditionally true because a pessimistic guard never makes an answer
|
|
276
|
+
// UNSOUND -- that is a different and weaker claim, deliberately kept apart.
|
|
277
|
+
const published = decidedMethodCallTargets.get(call) !== undefined;
|
|
278
|
+
exitHypothesisGuard(call, true, completed && !published && answered === null);
|
|
279
|
+
activeMethodCalls.delete(call);
|
|
280
|
+
decidedMethodCallTargets.delete(call);
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
/** Every value `record.key( ... )` can return: the completions of every
|
|
284
|
+
* callable `recordMethodCallTargetsOf` names, or null when any target's
|
|
285
|
+
* normal completion is unsupported. Target admission remains useful when
|
|
286
|
+
* this separate result query refuses. */
|
|
287
|
+
export const recordMethodCallResultsOf = (flow, call, authority) => {
|
|
288
|
+
const targets = recordMethodCallTargetsOf(flow, call, authority);
|
|
289
|
+
if (targets === null)
|
|
290
|
+
return null;
|
|
291
|
+
const results = [];
|
|
292
|
+
for (const target of targets) {
|
|
293
|
+
const values = callableCompletionValuesOf(flow, target);
|
|
294
|
+
if (values === null)
|
|
295
|
+
return null;
|
|
296
|
+
results.push(...values);
|
|
297
|
+
}
|
|
298
|
+
return results;
|
|
299
|
+
};
|
|
300
|
+
/** The origin-graph key standing for a callable's completions: a function
|
|
301
|
+
* declaration or block body is never itself a value origin. */
|
|
302
|
+
const completionKeyOf = (target) => ts.isFunctionDeclaration(target) ? target : ts.isBlock(target.body) ? target.body : unwrapErasedExpression(target.body);
|
|
303
|
+
/** A callee whose binding is reassigned names a different function at each
|
|
304
|
+
* call, so its result is not evidence of any one allocation. */
|
|
305
|
+
const calleeBindingIsWritten = (flow, declaration) => flow
|
|
306
|
+
.writesToDeclaration(declaration)
|
|
307
|
+
.some((write) => write.slot === 'whole' &&
|
|
308
|
+
(write.edge === 'identifier-assignment' || write.edge === 'compound-assignment' || write.edge === 'logical-assignment'));
|
|
309
|
+
const numericType = (checker, expression) => {
|
|
310
|
+
const check = (type) => (type.isUnion() ? type.types.every(check) : (type.flags & ts.TypeFlags.NumberLike) !== 0);
|
|
311
|
+
return check(checker.getTypeAtLocation(expression));
|
|
312
|
+
};
|
|
313
|
+
const REFUSED = { seed: false, admitted: false, dependencies: [] };
|
|
314
|
+
const VACUOUS = { seed: false, admitted: true, dependencies: [] };
|
|
315
|
+
const SEED = { seed: true, admitted: true, dependencies: [] };
|
|
316
|
+
const through = (dependencies) => ({ seed: false, admitted: true, dependencies });
|
|
317
|
+
/** Source allocation evidence for a record write, not descriptor authority.
|
|
318
|
+
* The caller must close all uses of these roots (including deletion and
|
|
319
|
+
* reflective mutation), and discharge the prototype obligation for absent
|
|
320
|
+
* slots. A structural property signature alone establishes neither fact.
|
|
321
|
+
*
|
|
322
|
+
* Origins are solved by strongly connected components (`seeded-origins.ts`)
|
|
323
|
+
* because record storage is reused. Three's `getNextRenderItem`:
|
|
324
|
+
*
|
|
325
|
+
* let renderItem = renderItems[ renderItemsIndex ];
|
|
326
|
+
* if ( renderItem === undefined ) {
|
|
327
|
+
* renderItem = { id: object.id, object: object, ... };
|
|
328
|
+
* renderItems[ renderItemsIndex ] = renderItem;
|
|
329
|
+
* } else { renderItem.object = object; ... }
|
|
330
|
+
*
|
|
331
|
+
* `renderItem`'s origins are the element read and the literal; the element
|
|
332
|
+
* read's origins are everything `renderItems` ever stored, which is
|
|
333
|
+
* `renderItem` again. That cycle is seeded by the literal, so the roots are
|
|
334
|
+
* exactly `[ literal ]`. A cycle no allocation feeds stays refused, and a
|
|
335
|
+
* `null`/`undefined` origin (`let currentRenderList = null`) adds no root
|
|
336
|
+
* while refusing nothing -- nothing can be written through it.
|
|
337
|
+
*
|
|
338
|
+
* The caller supplies one complete origin authority. Storage reads refuse
|
|
339
|
+
* when its protocol, numeric-key, or frame evidence cannot close them.
|
|
340
|
+
*/
|
|
341
|
+
/**
|
|
342
|
+
* `sourceRecordDataWritePlanOf` solves a fresh strongly-connected-component
|
|
343
|
+
* origin graph (`seededOriginSolver`) from zero on EVERY call -- and
|
|
344
|
+
* `callable-reach.ts` alone asks it from nine different call sites inside one
|
|
345
|
+
* member proof, several of them (`fieldDeclarationsOf`, `siblingDeclarationsOf`,
|
|
346
|
+
* `constructionDataMemberOf`, shared invocation targets) about the very same
|
|
347
|
+
* (receiver, key) pair reached through different questions. Measured with
|
|
348
|
+
* `expand` alone at ~2 s self time per profile window, repeated across a
|
|
349
|
+
* whole compile's worth of proofs.
|
|
350
|
+
*
|
|
351
|
+
* Keyed on the caller's `authority` object identity, not its content: every
|
|
352
|
+
* caller constructs one `SourceRecordOriginAuthority` per proof (`callable-
|
|
353
|
+
* reach.ts`'s `recordAuthority`, built once per `closedMemberCallableUses`
|
|
354
|
+
* call) and passes the same object to every one of its own call sites, so
|
|
355
|
+
* sharing a cache bucket per authority object shares exactly the calls that
|
|
356
|
+
* are safe to share -- calls from the SAME proof, which close over the SAME
|
|
357
|
+
* `recordSlotClosed` -- and never a different proof's, since that always gets
|
|
358
|
+
* a new object and therefore a new WeakMap bucket. `flow` is keyed too, purely
|
|
359
|
+
* for extra safety: nothing currently reuses one authority object across two
|
|
360
|
+
* flows, but nothing has to promise it either.
|
|
361
|
+
*/
|
|
362
|
+
const writePlansByFlow = new WeakMap();
|
|
363
|
+
export const sourceRecordDataWritePlanOf = (flow, receiver, key, authority) => {
|
|
364
|
+
const authorityIdentity = originAuthorityIdentity(authority);
|
|
365
|
+
let byAuthority = writePlansByFlow.get(flow);
|
|
366
|
+
if (!byAuthority)
|
|
367
|
+
writePlansByFlow.set(flow, (byAuthority = new WeakMap()));
|
|
368
|
+
let byReceiver = byAuthority.get(authorityIdentity);
|
|
369
|
+
if (!byReceiver)
|
|
370
|
+
byAuthority.set(authorityIdentity, (byReceiver = new WeakMap()));
|
|
371
|
+
let byKey = byReceiver.get(receiver);
|
|
372
|
+
if (!byKey)
|
|
373
|
+
byReceiver.set(receiver, (byKey = new Map()));
|
|
374
|
+
const ledger = deferredIntrinsicProtocolLedgerOf(flow);
|
|
375
|
+
if (byKey.has(key)) {
|
|
376
|
+
const cached = byKey.get(key);
|
|
377
|
+
if (cached && cached.requirements.length > 0 && ledger?.include(cached.requirements) !== true)
|
|
378
|
+
return recordRefusal(receiver, () => `record-plan:cached-ledger-include-fail key=${key}`);
|
|
379
|
+
return cached;
|
|
380
|
+
}
|
|
381
|
+
const compute = () => sourceRecordDataWritePlanUncached(flow, receiver, key, authority);
|
|
382
|
+
// Shared across proofs where the authority can (see `sharedAnswerOf`); the
|
|
383
|
+
// per-authority bucket above still answers this proof's repeats.
|
|
384
|
+
const captured = authority.sharedAnswerOf
|
|
385
|
+
? authority.sharedAnswerOf(`record-plan:${key}:${nodePathToken(receiver)}`, compute)
|
|
386
|
+
: ledger
|
|
387
|
+
? ledger.capture(compute)
|
|
388
|
+
: { value: compute(), requirements: [] };
|
|
389
|
+
const answer = captured.value ? { ...captured.value, requirements: captured.requirements } : null;
|
|
390
|
+
if (!answer)
|
|
391
|
+
return recordRefusal(receiver, () => `record-plan:compute-null key=${key}`);
|
|
392
|
+
if (answer.requirements.length > 0 && ledger?.include(answer.requirements) !== true)
|
|
393
|
+
return recordRefusal(receiver, () => `record-plan:ledger-include-fail key=${key}`);
|
|
394
|
+
const planCache = byKey;
|
|
395
|
+
authority.whenSettled(() => planCache.set(key, answer));
|
|
396
|
+
return answer;
|
|
397
|
+
};
|
|
398
|
+
const sourceRecordDataWritePlanUncached = (flow, receiver, key, authority) => {
|
|
399
|
+
if (key === '__proto__' || key === 'constructor')
|
|
400
|
+
return null;
|
|
401
|
+
const frames = authority;
|
|
402
|
+
const { checker, protocolClosed } = frames;
|
|
403
|
+
const original = unwrapErasedExpression;
|
|
404
|
+
const roots = new Set();
|
|
405
|
+
let needsDefaultPrototype = false;
|
|
406
|
+
const literal = (value) => {
|
|
407
|
+
let ownData = false;
|
|
408
|
+
let nullPrototype = false;
|
|
409
|
+
for (const property of value.properties) {
|
|
410
|
+
if (ts.isSpreadAssignment(property))
|
|
411
|
+
return REFUSED;
|
|
412
|
+
const name = ts.isComputedPropertyName(property.name) ? original(property.name.expression) : property.name;
|
|
413
|
+
const named = ts.isStringLiteralLike(name) || ts.isNumericLiteral(name) || (!ts.isComputedPropertyName(property.name) && ts.isIdentifier(name))
|
|
414
|
+
? name.text
|
|
415
|
+
: null;
|
|
416
|
+
if (named === null)
|
|
417
|
+
return REFUSED;
|
|
418
|
+
if (named === '__proto__' && ts.isPropertyAssignment(property) && !ts.isComputedPropertyName(property.name)) {
|
|
419
|
+
if (original(property.initializer).kind !== ts.SyntaxKind.NullKeyword)
|
|
420
|
+
return REFUSED;
|
|
421
|
+
nullPrototype = true;
|
|
422
|
+
}
|
|
423
|
+
if (named !== key)
|
|
424
|
+
continue;
|
|
425
|
+
if (!ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property))
|
|
426
|
+
return REFUSED;
|
|
427
|
+
ownData = true;
|
|
428
|
+
}
|
|
429
|
+
roots.add(value);
|
|
430
|
+
needsDefaultPrototype ||= !ownData && !nullPrototype;
|
|
431
|
+
return SEED;
|
|
432
|
+
};
|
|
433
|
+
// A factory's result IS its allocation. Three writes nearly every one of
|
|
434
|
+
// its records that way -- `new ColorBuffer()`, `WebGLState( gl, extensions
|
|
435
|
+
// )`, `WebGLRenderList()` all return an object literal written in place --
|
|
436
|
+
// and reading only the identifier chain stopped at the call, leaving the
|
|
437
|
+
// record with no source allocation at all.
|
|
438
|
+
//
|
|
439
|
+
// Every completion of the callee must yield an origin: each `return`
|
|
440
|
+
// carries one, and the body's last statement is a `return` so control
|
|
441
|
+
// cannot fall off the end into `undefined` (or, under `new`, into `this`).
|
|
442
|
+
// The literals stay the roots, so the caller closes the factory's own uses
|
|
443
|
+
// of them and -- through the return -- the uses at every call site, which
|
|
444
|
+
// is where a record handed to unknown code is caught.
|
|
445
|
+
const factory = (target) => {
|
|
446
|
+
const results = callableCompletionValuesOf(flow, target);
|
|
447
|
+
return results ? through(results) : refuse(target, 'factory:completion-values-refused');
|
|
448
|
+
};
|
|
449
|
+
/** Logs, under `GEA_ORIGINS_DEBUG`, then returns the shared `REFUSED` node --
|
|
450
|
+
* so every arm below stays a one-line early return while still naming itself. */
|
|
451
|
+
const refuse = (node, reason) => {
|
|
452
|
+
refuseWritePlanOrigin(node, reason);
|
|
453
|
+
return REFUSED;
|
|
454
|
+
};
|
|
455
|
+
const expand = (node) => {
|
|
456
|
+
if (ts.isParameter(node)) {
|
|
457
|
+
const values = frames.parameterValuesOf(node);
|
|
458
|
+
return values !== null && values.length > 0 ? through(values.map(original)) : refuse(node, 'parameter:values-refused');
|
|
459
|
+
}
|
|
460
|
+
if (ts.isVariableDeclaration(node)) {
|
|
461
|
+
const writes = flow.writesToDeclaration(node).filter((write) => write.slot === 'whole');
|
|
462
|
+
const closed = writes.length > 0 &&
|
|
463
|
+
writes.every((write) => (write.edge === 'declaration-initializer' || write.edge === 'identifier-assignment') && write.value !== null);
|
|
464
|
+
return closed ? through(writes.map((write) => original(write.value))) : refuse(node, 'variable:writes-not-closed');
|
|
465
|
+
}
|
|
466
|
+
if (ts.isFunctionDeclaration(node))
|
|
467
|
+
return factory(node);
|
|
468
|
+
// A function expression's block body stands for its completions (`completionKeyOf`).
|
|
469
|
+
if (ts.isBlock(node))
|
|
470
|
+
return ts.isFunctionExpression(node.parent) || ts.isArrowFunction(node.parent)
|
|
471
|
+
? factory(node.parent)
|
|
472
|
+
: refuse(node, 'block:not-a-factory-body');
|
|
473
|
+
const value = node;
|
|
474
|
+
if (isVacuousOrigin(flow, value))
|
|
475
|
+
return VACUOUS;
|
|
476
|
+
if (ts.isConditionalExpression(value))
|
|
477
|
+
return through([original(value.whenTrue), original(value.whenFalse)]);
|
|
478
|
+
if (ts.isObjectLiteralExpression(value))
|
|
479
|
+
return literal(value);
|
|
480
|
+
// `renderItems[ renderItemsIndex ]`: whatever that array ever stored.
|
|
481
|
+
if (ts.isElementAccessExpression(value)) {
|
|
482
|
+
const index = value.argumentExpression;
|
|
483
|
+
if (!numericType(checker, index) && !frames.numericKey(index))
|
|
484
|
+
return refuse(value, 'element-access:non-numeric-key');
|
|
485
|
+
const stored = arrayStoredValuesOf(checker, flow, value.expression, frames);
|
|
486
|
+
return stored ? through(stored.map(original)) : refuse(value, 'element-access:array-stored-values-refused');
|
|
487
|
+
}
|
|
488
|
+
if (ts.isCallExpression(value) || ts.isNewExpression(value)) {
|
|
489
|
+
const callee = original(value.expression);
|
|
490
|
+
if (ts.isCallExpression(value) && (ts.isPropertyAccessExpression(callee) || ts.isElementAccessExpression(callee))) {
|
|
491
|
+
// A record method: whatever the callable its slot holds returns
|
|
492
|
+
// (`recordMethodCallTargetsOf`). Asked first: a receiver whose origins
|
|
493
|
+
// are all record literals, and whose type admits no map, is no map.
|
|
494
|
+
const methods = recordMethodCallTargetsOf(flow, value, frames);
|
|
495
|
+
if (methods)
|
|
496
|
+
return through(methods.map(completionKeyOf));
|
|
497
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
498
|
+
return refuse(value, 'call:record-method-targets-refused');
|
|
499
|
+
// An array's own removing READ -- `pop`/`shift` -- yields a value that
|
|
500
|
+
// array once stored, exactly as `renderItems[ i ]` does a few lines
|
|
501
|
+
// above. Three keeps its render states on an explicit stack
|
|
502
|
+
// (`renderStateStack.push( currentRenderState )` then
|
|
503
|
+
// `currentRenderState = renderStateStack.pop()`), so refusing this one
|
|
504
|
+
// shape left every `currentRenderState.*` call open even though the
|
|
505
|
+
// record's allocation is right here. `arrayStoredValuesOf` is the same
|
|
506
|
+
// authority the element-access branch already trusts: it returns null
|
|
507
|
+
// unless the array's whole stored set is closed AND every plan it
|
|
508
|
+
// passes through is `protocolClosed`, so the method NAME alone grants
|
|
509
|
+
// nothing -- the receiver still has to prove out as an array this
|
|
510
|
+
// program owns. A miss yields `undefined`, which is the reader's case
|
|
511
|
+
// here just as it is for an element read.
|
|
512
|
+
if (arrayRemovingReadNames.has(callee.name.text)) {
|
|
513
|
+
const elements = arrayStoredValuesOf(checker, flow, callee.expression, frames);
|
|
514
|
+
return elements ? through(elements.map(original)) : refuse(value, 'call:array-stored-values-refused');
|
|
515
|
+
}
|
|
516
|
+
// A native map's `get`: whatever that map ever stored, under any key.
|
|
517
|
+
if (callee.name.text !== 'get')
|
|
518
|
+
return refuse(value, 'call:record-method-targets-refused');
|
|
519
|
+
const stored = collectionStoredValuesOf(checker, flow, value, protocolClosed);
|
|
520
|
+
return stored ? through(stored.map(original)) : refuse(value, 'call:map-get-stored-values-refused');
|
|
521
|
+
}
|
|
522
|
+
if (!ts.isIdentifier(callee))
|
|
523
|
+
return refuse(value, 'call:callee-not-identifier');
|
|
524
|
+
// An imported factory is the function its module declares: the import
|
|
525
|
+
// binding's own cell is the specifier, and it is never reassigned.
|
|
526
|
+
const named = flow.targetOf(callee);
|
|
527
|
+
const target = checker && named?.symbol && (named.symbol.flags & ts.SymbolFlags.Alias) !== 0
|
|
528
|
+
? resolveFlowSymbolAlias(checker, named.symbol)?.valueDeclaration
|
|
529
|
+
: named?.declaration;
|
|
530
|
+
if (!target || !ts.isFunctionDeclaration(target) || !target.body)
|
|
531
|
+
return refuse(value, 'call:callee-not-function-declaration');
|
|
532
|
+
if (target.asteriskToken || target.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword))
|
|
533
|
+
return refuse(value, 'call:callee-generator-or-async');
|
|
534
|
+
if (calleeBindingIsWritten(flow, target))
|
|
535
|
+
return refuse(value, 'call:callee-binding-written');
|
|
536
|
+
// Under `new`, a non-object completion (or any `this` use) means the
|
|
537
|
+
// result can be the fresh `this`, which no plan enumerates.
|
|
538
|
+
if (ts.isNewExpression(value) && !constructionYieldsCompletionOf(flow, target))
|
|
539
|
+
return refuse(value, 'new:not-a-concrete-object-completion');
|
|
540
|
+
return through([target]);
|
|
541
|
+
}
|
|
542
|
+
if (ts.isPropertyAccessExpression(value) || ts.isElementAccessExpression(value))
|
|
543
|
+
return slotRead(value);
|
|
544
|
+
if (!ts.isIdentifier(value))
|
|
545
|
+
return refuse(value, `identifier:not-an-identifier:${ts.SyntaxKind[value.kind]}`);
|
|
546
|
+
const declaration = importedCellOf(flow.targetOf(value)?.declaration ?? null);
|
|
547
|
+
if (!declaration || (!ts.isVariableDeclaration(declaration) && !ts.isParameter(declaration)))
|
|
548
|
+
return refuse(value, `identifier:${declaration ? ts.SyntaxKind[declaration.kind] : 'no-declaration'}`);
|
|
549
|
+
return through([declaration]);
|
|
550
|
+
};
|
|
551
|
+
// An import binding is the exported cell read from another module: its
|
|
552
|
+
// writes are the declaring module's, which the flow index files against
|
|
553
|
+
// that declaration. Three imports `ColorManagement` into every renderer
|
|
554
|
+
// module.
|
|
555
|
+
const importedCellOf = (declaration) => {
|
|
556
|
+
if (!declaration || !checker || (!ts.isImportSpecifier(declaration) && !ts.isImportClause(declaration)) || !declaration.name)
|
|
557
|
+
return declaration;
|
|
558
|
+
const resolved = resolveFlowSymbolAlias(checker, checker.getSymbolAtLocation(declaration.name))?.valueDeclaration;
|
|
559
|
+
return resolved && ts.isVariableDeclaration(resolved) && !resolved.getSourceFile().isDeclarationFile ? resolved : null;
|
|
560
|
+
};
|
|
561
|
+
// `state.buffers` in three's `WebGLRenderer`: whatever the holder's slot
|
|
562
|
+
// holds. The holder's own plan names its allocations; each carries the key
|
|
563
|
+
// as one data entry, whose initializer is the slot's first value. Any other
|
|
564
|
+
// value needs a store, so no write the flow index files against the entry
|
|
565
|
+
// may exist, and every alias of the holder must be closed against slot
|
|
566
|
+
// replacement -- this module's own proof, or failing that the authority's
|
|
567
|
+
// whole-program one, exactly as a record method call asks.
|
|
568
|
+
const slotRead = (access) => {
|
|
569
|
+
const values = frames.slotValuesOf?.(access) ?? sourceRecordSlotValuesOf(flow, access, frames);
|
|
570
|
+
return values === null ? refuse(access, 'slot-read:values-refused') : through(values);
|
|
571
|
+
};
|
|
572
|
+
const verdict = seededOriginSolver(expand)(original(receiver));
|
|
573
|
+
return verdict === 'allocated' && roots.size > 0 ? { roots: [...roots], needsDefaultPrototype, requirements: [] } : null;
|
|
574
|
+
};
|
|
575
|
+
/** The stored values of a closed own record slot. The allocation, descriptor,
|
|
576
|
+
* alias and replacement checks are shared with nested record-origin reads;
|
|
577
|
+
* a consumer must still establish the provenance of each returned value. */
|
|
578
|
+
export const sourceRecordSlotValuesOf = (flow, access, authority) => {
|
|
579
|
+
const { checker } = authority;
|
|
580
|
+
if (activeSlotReads.has(access)) {
|
|
581
|
+
// A slot read still being answered refuses; anything that leaned on that
|
|
582
|
+
// refusal is reusable only while this same read is open.
|
|
583
|
+
noteHypothesis(access);
|
|
584
|
+
return null;
|
|
585
|
+
}
|
|
586
|
+
const original = unwrapErasedExpression;
|
|
587
|
+
const argument = ts.isElementAccessExpression(access) ? original(access.argumentExpression) : null;
|
|
588
|
+
const key = ts.isPropertyAccessExpression(access)
|
|
589
|
+
? access.name.text
|
|
590
|
+
: argument && (ts.isStringLiteralLike(argument) || ts.isNumericLiteral(argument))
|
|
591
|
+
? argument.text
|
|
592
|
+
: null;
|
|
593
|
+
if (key === null || key === '__proto__' || key === 'constructor')
|
|
594
|
+
return null;
|
|
595
|
+
const holder = access.expression;
|
|
596
|
+
activeSlotReads.add(access);
|
|
597
|
+
enterHypothesisGuard(access);
|
|
598
|
+
let answered = null;
|
|
599
|
+
try {
|
|
600
|
+
answered = (() => {
|
|
601
|
+
const plan = sourceRecordDataWritePlanOf(flow, holder, key, authority);
|
|
602
|
+
if (plan === null || plan.needsDefaultPrototype)
|
|
603
|
+
return null;
|
|
604
|
+
const values = [];
|
|
605
|
+
for (const root of plan.roots) {
|
|
606
|
+
const entries = root.properties.filter((property) => property.name !== undefined && objectLiteralEntryKeyOf(property.name) === key);
|
|
607
|
+
const entry = entries.length === 1 ? entries[0] : undefined;
|
|
608
|
+
if (!entry || (!ts.isPropertyAssignment(entry) && !ts.isShorthandPropertyAssignment(entry)))
|
|
609
|
+
return null;
|
|
610
|
+
if (slotRewritten(checker, flow, root, entry, key))
|
|
611
|
+
return null;
|
|
612
|
+
values.push(original(ts.isPropertyAssignment(entry) ? entry.initializer : entry.name));
|
|
613
|
+
}
|
|
614
|
+
const closed = plan.roots.every((root) => recordAllocationAliasesClosed(checker, flow, root)) ||
|
|
615
|
+
authority.recordSlotClosed(holder, key, plan.roots);
|
|
616
|
+
return closed ? values : null;
|
|
617
|
+
})();
|
|
618
|
+
return answered;
|
|
619
|
+
}
|
|
620
|
+
finally {
|
|
621
|
+
// The re-entry above hands out exactly one thing -- a refusal -- so a
|
|
622
|
+
// refusal here confirms it outright.
|
|
623
|
+
exitHypothesisGuard(access, true);
|
|
624
|
+
activeSlotReads.delete(access);
|
|
625
|
+
}
|
|
626
|
+
};
|