@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,444 @@
|
|
|
1
|
+
import { narrowedOperandView } from '../conversion/operand-view.js';
|
|
2
|
+
import { abiKey } from '../representation/model.js';
|
|
3
|
+
import { hostMemberOf } from '../targets/cpp/host/host-members.js';
|
|
4
|
+
import { classMemberOf, classMethodOverrideOf, classStaticMemberOf } from './fields.js';
|
|
5
|
+
import { callableBuiltinIsUnshadowed, callableMutationFactsOf } from '../semantics/callable-origins.js';
|
|
6
|
+
import { operandOf, resultOf } from '../semantics/model/operands.js';
|
|
7
|
+
/**
|
|
8
|
+
* What a callee carrier says about the frame a call fills.
|
|
9
|
+
*
|
|
10
|
+
* These queries are asked twice in the pipeline -- once when a call lowers
|
|
11
|
+
* (`ir/lower-invocation.ts`) and once when the slot census states which
|
|
12
|
+
* carrier each argument must arrive in (`projection/slots.ts`). They live
|
|
13
|
+
* here, below both, so the two cannot drift: a lowering that packed
|
|
14
|
+
* arguments against one reading of a callee and a census that checked them
|
|
15
|
+
* against another would be two authorities over one convention.
|
|
16
|
+
*/
|
|
17
|
+
/** The convention a callable carrier states, or `null` for a carrier that states none. */
|
|
18
|
+
export const abiOfCallee = (representation) => {
|
|
19
|
+
switch (representation.kind) {
|
|
20
|
+
case 'function':
|
|
21
|
+
case 'function-family':
|
|
22
|
+
case 'function-value-family':
|
|
23
|
+
case 'function-value-dispatch':
|
|
24
|
+
case 'constructor-family':
|
|
25
|
+
case 'constructor-value-dispatch':
|
|
26
|
+
return representation.abi;
|
|
27
|
+
case 'function-and-constructor':
|
|
28
|
+
return representation.call;
|
|
29
|
+
default:
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* The `[[Construct]]` convention a callee carries, which is the frame
|
|
35
|
+
* `super(...)` and `new` fill.
|
|
36
|
+
*
|
|
37
|
+
* Distinct from `abiOfCallee` for exactly one carrier: a value that is both
|
|
38
|
+
* callable and constructible states two conventions, and a construction fills
|
|
39
|
+
* the constructing one. Reusing `abiOfCallee` there would pack the arguments
|
|
40
|
+
* against a `[[Call]]` signature the base's initialization never reads.
|
|
41
|
+
*/
|
|
42
|
+
export const constructAbiOfCallee = (representation) => {
|
|
43
|
+
if (representation.kind === 'function-and-constructor')
|
|
44
|
+
return representation.construct;
|
|
45
|
+
return abiOfCallee(representation);
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* The convention a method VALUE carries when a receiver-less slot takes it:
|
|
49
|
+
* the source states a receiver and the slot states the identical convention
|
|
50
|
+
* without one. Such a value is bound to the object it was read from before it
|
|
51
|
+
* enters the slot (`ir/lower-operands.ts`'s `enter`, minting a detached
|
|
52
|
+
* `bind-callable`); `null` for any other pair.
|
|
53
|
+
*/
|
|
54
|
+
export const detachedMethodAbiOf = (source, target) => {
|
|
55
|
+
const from = abiOfCallee(source);
|
|
56
|
+
const to = abiOfCallee(target);
|
|
57
|
+
if (from === null || to === null || from.receiver === null || to.receiver !== null)
|
|
58
|
+
return null;
|
|
59
|
+
return abiKey({ ...from, receiver: null }) === abiKey(to) ? from : null;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Whether a rest slot's carrier is a fixed-arity tuple: a record whose keys
|
|
63
|
+
* are exactly `0..n-1` in order. Such a rest slot is filled field by field,
|
|
64
|
+
* never by a runtime-sized array.
|
|
65
|
+
*/
|
|
66
|
+
export const isClosedContiguousTupleRecord = (representation) => representation.kind === 'record' &&
|
|
67
|
+
representation.accessors.length === 0 &&
|
|
68
|
+
representation.fields.length > 0 &&
|
|
69
|
+
representation.fields.every((field, index) => field.key === String(index));
|
|
70
|
+
/**
|
|
71
|
+
* The value a body's `return` hands back, given the convention's own result:
|
|
72
|
+
* the payload of an async function's promise, the completion of a generator's
|
|
73
|
+
* cursor, and otherwise the result itself.
|
|
74
|
+
*/
|
|
75
|
+
export const returnPayloadOf = (result) => result.kind === 'promise' ? result.value : result.kind === 'iterator' ? result.completion : result;
|
|
76
|
+
/**
|
|
77
|
+
* The source function a method read as a VALUE names: `host.readFile` read
|
|
78
|
+
* off a class instance, or `Host.create` off its constructor, is the member
|
|
79
|
+
* declaration's own body -- provenance `callableOriginsOf` cannot carry,
|
|
80
|
+
* since it follows allocations and the cells that alias them, and a method
|
|
81
|
+
* is never allocated. `null` for a read that is not that: a computed key, a
|
|
82
|
+
* receiver that is no class, a member that is a field or an accessor, or a
|
|
83
|
+
* value whose convention states no receiver (a bound callable, an arrow
|
|
84
|
+
* field), which the read cannot have produced from a method body.
|
|
85
|
+
*
|
|
86
|
+
* Asked by the property lowering, which records the receiver a method value
|
|
87
|
+
* must be bound to (`LoweringProgram.methodValueReceivers`), and by the
|
|
88
|
+
* `Function.prototype.bind` rewrite below, which binds the same body.
|
|
89
|
+
*/
|
|
90
|
+
export const methodValueOriginOf = (classes, receiver, key, representation) => {
|
|
91
|
+
if (abiOfCallee(representation)?.receiver === null)
|
|
92
|
+
return null;
|
|
93
|
+
const isStatic = receiver.kind === 'constructor-family';
|
|
94
|
+
const declarations = receiver.kind === 'class-ref' ? [receiver.declaration] : isStatic ? receiver.members : [];
|
|
95
|
+
for (const declaration of declarations) {
|
|
96
|
+
if (!isStatic && classMethodOverrideOf(classes, declaration, key))
|
|
97
|
+
return null;
|
|
98
|
+
const site = isStatic ? classStaticMemberOf(classes, declaration, key) : classMemberOf(classes, declaration, key);
|
|
99
|
+
if (site?.kind === 'method' && site.method.callable)
|
|
100
|
+
return site.method.callable;
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
};
|
|
104
|
+
/** `methodValueOriginOf` for a property read operation, from the carriers the plan selected. */
|
|
105
|
+
const methodValueOriginOfRead = (input, producer) => {
|
|
106
|
+
if (producer.family !== 'property' || producer.internalMethod !== 'get' || producer.keyIsComputed)
|
|
107
|
+
return null;
|
|
108
|
+
const key = operandOf(producer, 'key');
|
|
109
|
+
const receiver = operandOf(producer, 'receiver');
|
|
110
|
+
const value = resultOf(producer, 'value');
|
|
111
|
+
if (!key || key.source.kind !== 'constant' || !receiver || receiver.source.kind !== 'result' || !value)
|
|
112
|
+
return null;
|
|
113
|
+
const held = input.plan.selected.get(receiver.source.result);
|
|
114
|
+
const read = input.plan.selected.get(value.id);
|
|
115
|
+
return held && read ? methodValueOriginOf(input.classes, held, key.source.text, read) : null;
|
|
116
|
+
};
|
|
117
|
+
const callAbiOfCallableReceiver = (representation) => {
|
|
118
|
+
switch (representation.kind) {
|
|
119
|
+
case 'function':
|
|
120
|
+
case 'function-family':
|
|
121
|
+
case 'function-value-family':
|
|
122
|
+
case 'function-value-dispatch':
|
|
123
|
+
return representation.abi;
|
|
124
|
+
case 'function-and-constructor':
|
|
125
|
+
return representation.call;
|
|
126
|
+
default:
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const bindAbiOfCallableReceiver = (representation) => {
|
|
131
|
+
switch (representation.kind) {
|
|
132
|
+
case 'function':
|
|
133
|
+
case 'function-family':
|
|
134
|
+
case 'function-value-family':
|
|
135
|
+
case 'function-value-dispatch':
|
|
136
|
+
return representation.abi;
|
|
137
|
+
default:
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
const memberNames = ['call', 'apply', 'bind'];
|
|
142
|
+
export const deferredCalleeOf = (input, operation) => {
|
|
143
|
+
if (operation.internalMethod !== 'call' || operation.optionalChain)
|
|
144
|
+
return null;
|
|
145
|
+
const callee = operandOf(operation, 'callee');
|
|
146
|
+
if (!callee || callee.source.kind !== 'result')
|
|
147
|
+
return null;
|
|
148
|
+
const producerId = input.graph.results.get(callee.source.result);
|
|
149
|
+
const producer = producerId === undefined ? undefined : input.graph.operations.get(producerId);
|
|
150
|
+
if (!producer || producer.family !== 'property' || producer.internalMethod !== 'get' || producer.keyIsComputed)
|
|
151
|
+
return null;
|
|
152
|
+
const key = operandOf(producer, 'key');
|
|
153
|
+
if (!key || key.source.kind !== 'constant')
|
|
154
|
+
return null;
|
|
155
|
+
const keyText = key.source.text;
|
|
156
|
+
const member = memberNames.find((name) => name === keyText);
|
|
157
|
+
if (!member)
|
|
158
|
+
return null;
|
|
159
|
+
const receiver = operandOf(producer, 'receiver');
|
|
160
|
+
if (!receiver || receiver.source.kind !== 'result')
|
|
161
|
+
return null;
|
|
162
|
+
const representation = input.plan.selected.get(receiver.source.result);
|
|
163
|
+
if (!representation)
|
|
164
|
+
return null;
|
|
165
|
+
const receiverProducerId = input.graph.results.get(receiver.source.result);
|
|
166
|
+
const receiverProducer = receiverProducerId === undefined ? undefined : input.graph.operations.get(receiverProducerId);
|
|
167
|
+
const functionId = input.callableOrigins.get(receiver.source.result) ?? (receiverProducer ? methodValueOriginOfRead(input, receiverProducer) : null);
|
|
168
|
+
const facts = callableMutationFactsOf(input.graph, input.plan, input.callableOrigins);
|
|
169
|
+
if (!callableBuiltinIsUnshadowed(facts, functionId, member))
|
|
170
|
+
return null;
|
|
171
|
+
// Read off the receiver's own carrier, which is what decides how the call
|
|
172
|
+
// renders -- see `DeferredCallee.frame`.
|
|
173
|
+
const frame = representation.kind === 'dynamic' ? 'boxed' : 'native';
|
|
174
|
+
if (member === 'bind') {
|
|
175
|
+
// `functionId` names the checker-authenticated DECLARATION a `dynamic`
|
|
176
|
+
// receiver's own-property facts are read off -- needed only to recover a
|
|
177
|
+
// boxed Function's native ABI (`emit-callable.ts`'s `bindCallable`, the
|
|
178
|
+
// `operation.source.representation.kind === 'dynamic'` branch). A
|
|
179
|
+
// `function-value-dispatch` receiver already carries its own physical
|
|
180
|
+
// ABI on the representation itself and needs no such lookup: a bind
|
|
181
|
+
// chained off ANOTHER bind's result (`bound.bind(...)`) has no known
|
|
182
|
+
// origin -- `callableOriginsOf` traces identity through ordinary
|
|
183
|
+
// allocations and bindings, never through a prior `.bind()` -- and
|
|
184
|
+
// unconditionally refusing for `functionId === null` bailed out of the
|
|
185
|
+
// native fast path for exactly that non-dynamic, well-typed case, onto
|
|
186
|
+
// an ordinary property-read whose STATIC checker type (`.bind`'s own
|
|
187
|
+
// generic signature, `thisArg: T` inferred from the call's actual
|
|
188
|
+
// argument) is a completely different, wrong convention for calling the
|
|
189
|
+
// already-typed receiver directly.
|
|
190
|
+
const abi = representation.kind === 'dynamic'
|
|
191
|
+
? functionId !== null && !input.constructs.has(functionId)
|
|
192
|
+
? (input.abis.get(functionId) ?? null)
|
|
193
|
+
: null
|
|
194
|
+
: bindAbiOfCallableReceiver(representation);
|
|
195
|
+
return abi ? { member, receiver, abi, functionId, frame, receiverCarrier: representation } : null;
|
|
196
|
+
}
|
|
197
|
+
if (functionId === null && representation.kind !== 'function-value-dispatch')
|
|
198
|
+
return null;
|
|
199
|
+
const abi = representation.kind === 'dynamic' && functionId !== null
|
|
200
|
+
? (input.abis.get(functionId) ?? null)
|
|
201
|
+
: callAbiOfCallableReceiver(representation);
|
|
202
|
+
return abi ? { member, receiver, abi, functionId, frame, receiverCarrier: representation } : null;
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* `hasOwnProperty`/`propertyIsEnumerable` reached as instance methods off a
|
|
206
|
+
* known-shape receiver (`record`/`class-ref`/a `native-record-ref` naming no
|
|
207
|
+
* native type) -- the two ambient `Object.prototype` members the C++
|
|
208
|
+
* backend's object-shape protocol (`targets/cpp/host/object-protocol.ts`'s
|
|
209
|
+
* `objectShapePrototypeMemberRead`) claims regardless of the receiver's own
|
|
210
|
+
* layout: the GET renders nothing and the CALL fuses receiver, key and field
|
|
211
|
+
* list into one expression, never going through `Object.prototype`'s
|
|
212
|
+
* declared `(v: PropertyKey) => boolean` convention. `calleeRenderingOf`
|
|
213
|
+
* below is the ONE authority for whether a call renders from a template or a
|
|
214
|
+
* convention, so it states this claim too, rather than leaving the printer
|
|
215
|
+
* as a second, silent authority the census cannot see: a census that let
|
|
216
|
+
* this call's ABI apply would convert a literal string key into the
|
|
217
|
+
* `PropertyKey` tagged union, which `objectShapeCallText` explicitly refuses.
|
|
218
|
+
*/
|
|
219
|
+
export const objectShapePrototypeMethods = new Set(['hasOwnProperty', 'propertyIsEnumerable']);
|
|
220
|
+
/** A direct read of a host callable whose numeric rest frame need not escape to an array. */
|
|
221
|
+
export const numericRestHostCallOf = (input, operation) => {
|
|
222
|
+
if (operation.internalMethod !== 'call' || operation.optionalChain || !input.hostMembers)
|
|
223
|
+
return null;
|
|
224
|
+
const callee = operandOf(operation, 'callee');
|
|
225
|
+
if (callee?.source.kind !== 'result')
|
|
226
|
+
return null;
|
|
227
|
+
const producerId = input.graph.results.get(callee.source.result);
|
|
228
|
+
const producer = producerId === undefined ? undefined : input.graph.operations.get(producerId);
|
|
229
|
+
if (producer?.family !== 'property' || producer.internalMethod !== 'get' || producer.keyIsComputed)
|
|
230
|
+
return null;
|
|
231
|
+
const receiver = operandOf(producer, 'receiver');
|
|
232
|
+
const key = operandOf(producer, 'key');
|
|
233
|
+
if (receiver?.source.kind !== 'result' || key?.source.kind !== 'constant')
|
|
234
|
+
return null;
|
|
235
|
+
const held = input.plan.selected.get(receiver.source.result);
|
|
236
|
+
if (held?.kind !== 'native-handle')
|
|
237
|
+
return null;
|
|
238
|
+
const protocol = held.native ?? held.protocol;
|
|
239
|
+
const member = key.source.text;
|
|
240
|
+
const host = hostMemberOf(input.hostMembers, protocol, member);
|
|
241
|
+
return host?.kind === 'property' && host.numericRestCall !== undefined ? { protocol, member } : null;
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Declarations written exactly once, from a direct read of a host METHOD --
|
|
245
|
+
* `var __isArray = Array.isArray`, the shape test262's propertyHelper and any
|
|
246
|
+
* program guarding a later monkey-patch names a builtin through.
|
|
247
|
+
*
|
|
248
|
+
* `targets/cpp/host/host-method-aliases.ts` proves the identical fact, but
|
|
249
|
+
* over the LOWERED ir, for the printer to fold a read of the cell back into a
|
|
250
|
+
* bare host-member name. `calleeRenderingOf` needs the same fact one stage
|
|
251
|
+
* earlier, over the semantic graph and its sealed plan -- before lowering
|
|
252
|
+
* builds a call's argument `convert`s -- because a call through such a cell
|
|
253
|
+
* renders as a host call-site template exactly like `Array.isArray(v)`
|
|
254
|
+
* itself, and a template's arguments enter their OWN carrier
|
|
255
|
+
* (`invocationSlot`'s `host-overload`), never the `dynamic` an ordinary
|
|
256
|
+
* callable's declared-`any` formal would otherwise ask the census for. Both
|
|
257
|
+
* live on the sealed plan, which is why this can answer without waiting for
|
|
258
|
+
* a lowered body: a `native-handle` receiver and a host member table are
|
|
259
|
+
* exactly what the plan and `hosts.members` already state.
|
|
260
|
+
*/
|
|
261
|
+
export const hostMethodAliasDeclarations = (graph, plan, deriver, hostMembers) => {
|
|
262
|
+
const methodReads = new Set();
|
|
263
|
+
for (const operation of graph.operations.values()) {
|
|
264
|
+
if (operation.family !== 'property' || operation.internalMethod !== 'get' || operation.keyIsComputed)
|
|
265
|
+
continue;
|
|
266
|
+
const key = operandOf(operation, 'key');
|
|
267
|
+
if (!key || key.source.kind !== 'constant')
|
|
268
|
+
continue;
|
|
269
|
+
const receiver = operandOf(operation, 'receiver');
|
|
270
|
+
if (!receiver)
|
|
271
|
+
continue;
|
|
272
|
+
const held = receiver.source.kind === 'result'
|
|
273
|
+
? (plan.selected.get(receiver.source.result) ?? null)
|
|
274
|
+
: receiver.source.kind === 'constant'
|
|
275
|
+
? deriver.derive(receiver.type)
|
|
276
|
+
: null;
|
|
277
|
+
if (held === null)
|
|
278
|
+
continue;
|
|
279
|
+
const view = narrowedOperandView(held, receiver, deriver);
|
|
280
|
+
const carrier = view.kind === 'borrowed-ref' ? view.referent : view;
|
|
281
|
+
if (carrier.kind !== 'native-handle')
|
|
282
|
+
continue;
|
|
283
|
+
const protocol = carrier.native ?? carrier.protocol;
|
|
284
|
+
if (hostMemberOf(hostMembers, protocol, key.source.text)?.kind !== 'method')
|
|
285
|
+
continue;
|
|
286
|
+
const result = resultOf(operation, 'value');
|
|
287
|
+
if (result)
|
|
288
|
+
methodReads.add(result.id);
|
|
289
|
+
}
|
|
290
|
+
const writeCounts = new Map();
|
|
291
|
+
const written = new Set();
|
|
292
|
+
for (const operation of graph.operations.values()) {
|
|
293
|
+
if (operation.family !== 'binding' || (operation.action !== 'write' && operation.action !== 'initialize'))
|
|
294
|
+
continue;
|
|
295
|
+
writeCounts.set(operation.declaration, (writeCounts.get(operation.declaration) ?? 0) + 1);
|
|
296
|
+
// `var x = Array.isArray` publishes an `initialize` whose operand is the
|
|
297
|
+
// `initializer`; a later `x = ...` is a `write` of a `value`.
|
|
298
|
+
const value = operandOf(operation, 'initializer') ?? operandOf(operation, 'value');
|
|
299
|
+
if (value?.source.kind === 'result' && methodReads.has(value.source.result))
|
|
300
|
+
written.add(operation.declaration);
|
|
301
|
+
}
|
|
302
|
+
const aliases = new Set();
|
|
303
|
+
for (const declaration of written)
|
|
304
|
+
if (writeCounts.get(declaration) === 1)
|
|
305
|
+
aliases.add(declaration);
|
|
306
|
+
return aliases;
|
|
307
|
+
};
|
|
308
|
+
const templateReceiverKinds = new Set([
|
|
309
|
+
'native-handle',
|
|
310
|
+
'string',
|
|
311
|
+
'scalar',
|
|
312
|
+
'array-object',
|
|
313
|
+
'typed-array',
|
|
314
|
+
'keyed-collection',
|
|
315
|
+
'promise',
|
|
316
|
+
'iterator',
|
|
317
|
+
'dictionary',
|
|
318
|
+
'array-buffer',
|
|
319
|
+
'shared-array-buffer',
|
|
320
|
+
'data-view',
|
|
321
|
+
'dense-buffer',
|
|
322
|
+
'native-sequence',
|
|
323
|
+
'proxy-object',
|
|
324
|
+
'dynamic',
|
|
325
|
+
'optional',
|
|
326
|
+
'tagged-union',
|
|
327
|
+
'symbol'
|
|
328
|
+
]);
|
|
329
|
+
export const calleeRenderingOf = (input, operation) => {
|
|
330
|
+
// `Object.keys`/`getOwnPropertyNames`/`getOwnPropertySymbols`/`Reflect.ownKeys`
|
|
331
|
+
// are already checker-authenticated above this call
|
|
332
|
+
// (`intrinsic-property-call.ts`'s `intrinsicPropertyCallOf`, gated on
|
|
333
|
+
// standard-library provenance for both the owner and the member, with no
|
|
334
|
+
// global host-mutation taint) -- `operation.intrinsicOwnKeys` IS that
|
|
335
|
+
// authentication, not a guess about this callee's shape. Without this, the
|
|
336
|
+
// generic receiver-kind walk below has to answer for the OWNER of the
|
|
337
|
+
// property read (`Object`/`Reflect` itself) rather than the call's real
|
|
338
|
+
// subject, and neither read as a `template` receiver: the ambient
|
|
339
|
+
// `ObjectConstructor`/`Reflect` singleton is never given a `native-handle`
|
|
340
|
+
// tag the way `Math`/`Date`/`JSON` are (`host-protocols.ts` binds those by a
|
|
341
|
+
// plugin-supplied native-protocol table; `Object`'s own statics are answered
|
|
342
|
+
// by this backend's dedicated `[[OwnPropertyKeys]]` primitives in
|
|
343
|
+
// `targets/cpp/host/object-protocol.ts` instead, which never registers a
|
|
344
|
+
// handle tag for the receiver `Object` itself). Falling through to
|
|
345
|
+
// `'callable'` published the intrinsic's *declared* `(o: object) => string[]`
|
|
346
|
+
// ABI as the call's convention, whose vacuous `object` parameter this
|
|
347
|
+
// program models soundly on its own (an empty `record`, per
|
|
348
|
+
// `representation/derive.ts`'s `deriveObject`) but which the generic
|
|
349
|
+
// argument-conversion path cannot honor without erasing the real argument's
|
|
350
|
+
// type to match it -- exactly the "intrinsic accepts any object, so the
|
|
351
|
+
// argument becomes dynamic" defect this authentication exists to prevent.
|
|
352
|
+
// `lower-invocation.ts` already licenses `intrinsicOwnKeys` through to the
|
|
353
|
+
// IR ONLY when this function answers `'template'`
|
|
354
|
+
// (`operation.intrinsicOwnKeys && calleeRenderingOf(...) === 'template'`) --
|
|
355
|
+
// so answering it here, directly from the same authenticated fact, closes
|
|
356
|
+
// the license this function was always supposed to grant instead of gating
|
|
357
|
+
// it behind a receiver classification that was never going to recognize it.
|
|
358
|
+
if (operation.intrinsicOwnKeys)
|
|
359
|
+
return 'template';
|
|
360
|
+
// `Object.defineProperty` on a closed data descriptor is the same shape of
|
|
361
|
+
// authenticated fact, one call later: `intrinsic-data-definition.ts`'s
|
|
362
|
+
// `intrinsicDataDefinitionTargetOf` (consumed by `producers/invocations.ts`
|
|
363
|
+
// as `operation.intrinsicDataDefinition`, alongside the host-mutation
|
|
364
|
+
// census's own `operation.intrinsicMutation === 'object-define-property'`)
|
|
365
|
+
// has ALREADY proven the receiver is not published by this call and the
|
|
366
|
+
// descriptor names only `value`/`writable`/`enumerable`/`configurable`.
|
|
367
|
+
// `lower-invocation.ts`'s `fixedDataDefinition` is written to consume
|
|
368
|
+
// exactly that pair through `fixedDataDefinitionRecipeOf`, gated on this
|
|
369
|
+
// function answering `'template'` -- but nothing here ever did, so every
|
|
370
|
+
// authenticated call still fell through to the generic receiver-kind walk
|
|
371
|
+
// below. `Object` itself is not a `native-handle` (same reason
|
|
372
|
+
// `intrinsicOwnKeys` names above), so it answered `'callable'`, publishing
|
|
373
|
+
// `defineProperty`'s OWN ambient `(o, p, attributes: PropertyDescriptor &
|
|
374
|
+
// ThisType<any>) => any` signature as the call's ABI -- `PropertyDescriptor`
|
|
375
|
+
// types `value` as `any`, so THAT declared signature, not the literal
|
|
376
|
+
// descriptor each call site actually writes, became the carrier: three's
|
|
377
|
+
// `Object3D` constructor defines `position`/`rotation`/`quaternion`/`scale`
|
|
378
|
+
// this way, and every one of those `Object.defineProperty` call sites
|
|
379
|
+
// selected a `dynamic` `.value` field for a descriptor whose own literal
|
|
380
|
+
// states a concrete `Vector3`/`Euler`/`Quaternion`. Answering `'template'`
|
|
381
|
+
// here closes the same license `intrinsicOwnKeys` closes above, from the
|
|
382
|
+
// same authenticated fact, instead of a receiver classification that was
|
|
383
|
+
// never going to recognize `Object` as one either.
|
|
384
|
+
if (operation.intrinsicMutation === 'object-define-property' && operation.intrinsicDataDefinition === true)
|
|
385
|
+
return 'template';
|
|
386
|
+
const callee = operandOf(operation, 'callee');
|
|
387
|
+
if (!callee)
|
|
388
|
+
return 'callable';
|
|
389
|
+
if (callee.source.kind === 'parameter' || callee.source.kind === 'constant')
|
|
390
|
+
return 'callable';
|
|
391
|
+
if (callee.source.kind !== 'result')
|
|
392
|
+
return 'callable';
|
|
393
|
+
const producerId = input.graph.results.get(callee.source.result);
|
|
394
|
+
const producer = producerId === undefined ? undefined : input.graph.operations.get(producerId);
|
|
395
|
+
if (!producer)
|
|
396
|
+
return 'callable';
|
|
397
|
+
if (producer.family === 'binding' && producer.action === 'read') {
|
|
398
|
+
// A host FUNCTION is called through the convention its declaration
|
|
399
|
+
// states -- the printer's host-function path fills that frame with
|
|
400
|
+
// `argumentText` like any callable -- so its arguments have slots. A
|
|
401
|
+
// host class, singleton or namespace read is a member path the printer
|
|
402
|
+
// spells from a template.
|
|
403
|
+
const storage = input.placements.get(producer.declaration)?.storage.kind;
|
|
404
|
+
if (storage === 'host-class' || storage === 'host-singleton' || storage === 'host-namespace')
|
|
405
|
+
return 'template';
|
|
406
|
+
// A cell that holds one host METHOD forever (`var __isArray =
|
|
407
|
+
// Array.isArray`) is the same template shape one indirection later --
|
|
408
|
+
// see `hostMethodAliasDeclarations`.
|
|
409
|
+
return input.hostMethodAliasDeclarations.has(producer.declaration) ? 'template' : 'callable';
|
|
410
|
+
}
|
|
411
|
+
if (producer.family !== 'property' || producer.internalMethod !== 'get')
|
|
412
|
+
return 'callable';
|
|
413
|
+
if (producer.hostMethod !== undefined)
|
|
414
|
+
return 'template';
|
|
415
|
+
const receiver = operandOf(producer, 'receiver');
|
|
416
|
+
if (!receiver)
|
|
417
|
+
return 'callable';
|
|
418
|
+
const held = receiver.source.kind === 'result'
|
|
419
|
+
? (input.plan.selected.get(receiver.source.result) ?? null)
|
|
420
|
+
: receiver.source.kind === 'constant'
|
|
421
|
+
? input.deriver.derive(receiver.type)
|
|
422
|
+
: null;
|
|
423
|
+
if (held === null)
|
|
424
|
+
return 'template';
|
|
425
|
+
const view = narrowedOperandView(held, receiver, input.deriver);
|
|
426
|
+
// A receiver with no storage (`undefined`/`null`, the carrier of a branch
|
|
427
|
+
// flow analysis proved dead) registers no template read at all, so the
|
|
428
|
+
// printer falls through to the callable path and the ABI's slots apply.
|
|
429
|
+
const carrier = view.kind === 'borrowed-ref' ? view.referent : view;
|
|
430
|
+
// `hasOwnProperty`/`propertyIsEnumerable` off a shape the object-shape
|
|
431
|
+
// protocol claims (see `objectShapePrototypeMethods`'s own comment) render
|
|
432
|
+
// from a template no matter which of those shapes the receiver is, ahead
|
|
433
|
+
// of the general per-kind answer below -- a `record`/`class-ref` is not in
|
|
434
|
+
// `templateReceiverKinds` at all (its OTHER members are real ABI calls),
|
|
435
|
+
// and a `native-record-ref` naming no native type answers 'callable' next.
|
|
436
|
+
const key = operandOf(producer, 'key');
|
|
437
|
+
const staticKey = key?.source.kind === 'constant' ? key.source.text : null;
|
|
438
|
+
const knownObjectShape = carrier.kind === 'record' || carrier.kind === 'class-ref' || (carrier.kind === 'native-record-ref' && carrier.native === null);
|
|
439
|
+
if (staticKey !== null && knownObjectShape && objectShapePrototypeMethods.has(staticKey))
|
|
440
|
+
return 'template';
|
|
441
|
+
if (carrier.kind === 'native-record-ref')
|
|
442
|
+
return carrier.native === null ? 'callable' : 'template';
|
|
443
|
+
return templateReceiverKinds.has(carrier.kind) ? 'template' : 'callable';
|
|
444
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DeclarationId } from '../identity/ids.js';
|
|
2
|
+
import type { ClassLayout } from './classes.js';
|
|
3
|
+
/** A member installed on the native class prototype or an inherited prototype.
|
|
4
|
+
* This proves presence only. Missing names still require runtime lookup.
|
|
5
|
+
*/
|
|
6
|
+
export declare const classPrototypeMemberIsPresent: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Whether a SYMBOL key could name a member this carrier's own layout declares
|
|
9
|
+
* -- a symbol-keyed field, accessor or prototype method, on the shape itself or
|
|
10
|
+
* anywhere up a class's base chain.
|
|
11
|
+
*
|
|
12
|
+
* It exists so `k in o` can be answered for a key that is a symbol VALUE rather
|
|
13
|
+
* than a name the program spelled. A compiler-owned object with shared identity
|
|
14
|
+
* carries a dynamic-property sidecar that answers own-key membership for any
|
|
15
|
+
* runtime key, symbols included, and a symbol cannot reach an inherited
|
|
16
|
+
* STRING-named member the way an arbitrary string can -- the two key spaces are
|
|
17
|
+
* physically disjoint here (`types.ts`'s `sym(<declaration>)` marker). So when
|
|
18
|
+
* this answers `false`, the sidecar is not merely one source of the answer: it
|
|
19
|
+
* is the WHOLE answer, and `in` over that receiver is exactly its verdict.
|
|
20
|
+
*
|
|
21
|
+
* When it answers `true`, the layout owns a symbol-keyed slot with its own
|
|
22
|
+
* presence bit that the sidecar knows nothing about, and which of the two holds
|
|
23
|
+
* the key is undecidable without knowing WHICH symbol -- so the site refuses by
|
|
24
|
+
* name instead, rather than consulting one half and calling it the answer.
|
|
25
|
+
*/
|
|
26
|
+
export declare const symbolKeyedMemberIsDeclared: (classes: ReadonlyMap<DeclarationId, ClassLayout>, fields: readonly {
|
|
27
|
+
readonly key: string;
|
|
28
|
+
}[] | null, declaration: DeclarationId | null) => boolean;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { symbolPropertyKeyDeclarationOf } from '../semantics/model/structural-types.js';
|
|
2
|
+
/** A member installed on the native class prototype or an inherited prototype.
|
|
3
|
+
* This proves presence only. Missing names still require runtime lookup.
|
|
4
|
+
*/
|
|
5
|
+
export const classPrototypeMemberIsPresent = (classes, declaration, key) => {
|
|
6
|
+
const seen = new Set();
|
|
7
|
+
let current = declaration;
|
|
8
|
+
while (current && !seen.has(current)) {
|
|
9
|
+
seen.add(current);
|
|
10
|
+
const layout = classes.get(current);
|
|
11
|
+
if (!layout)
|
|
12
|
+
return false;
|
|
13
|
+
if (layout.methods.some((method) => method.key === key && method.callable !== null) ||
|
|
14
|
+
layout.accessors.some((accessor) => accessor.key === key && (accessor.getter !== null || accessor.setter !== null)))
|
|
15
|
+
return true;
|
|
16
|
+
current = layout.base;
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Whether a SYMBOL key could name a member this carrier's own layout declares
|
|
22
|
+
* -- a symbol-keyed field, accessor or prototype method, on the shape itself or
|
|
23
|
+
* anywhere up a class's base chain.
|
|
24
|
+
*
|
|
25
|
+
* It exists so `k in o` can be answered for a key that is a symbol VALUE rather
|
|
26
|
+
* than a name the program spelled. A compiler-owned object with shared identity
|
|
27
|
+
* carries a dynamic-property sidecar that answers own-key membership for any
|
|
28
|
+
* runtime key, symbols included, and a symbol cannot reach an inherited
|
|
29
|
+
* STRING-named member the way an arbitrary string can -- the two key spaces are
|
|
30
|
+
* physically disjoint here (`types.ts`'s `sym(<declaration>)` marker). So when
|
|
31
|
+
* this answers `false`, the sidecar is not merely one source of the answer: it
|
|
32
|
+
* is the WHOLE answer, and `in` over that receiver is exactly its verdict.
|
|
33
|
+
*
|
|
34
|
+
* When it answers `true`, the layout owns a symbol-keyed slot with its own
|
|
35
|
+
* presence bit that the sidecar knows nothing about, and which of the two holds
|
|
36
|
+
* the key is undecidable without knowing WHICH symbol -- so the site refuses by
|
|
37
|
+
* name instead, rather than consulting one half and calling it the answer.
|
|
38
|
+
*/
|
|
39
|
+
export const symbolKeyedMemberIsDeclared = (classes, fields, declaration) => {
|
|
40
|
+
const isSymbolKey = (entry) => symbolPropertyKeyDeclarationOf(entry.key) !== null;
|
|
41
|
+
if (fields !== null && fields.some(isSymbolKey))
|
|
42
|
+
return true;
|
|
43
|
+
const seen = new Set();
|
|
44
|
+
let current = declaration;
|
|
45
|
+
while (current && !seen.has(current)) {
|
|
46
|
+
seen.add(current);
|
|
47
|
+
const layout = classes.get(current);
|
|
48
|
+
if (!layout)
|
|
49
|
+
return true;
|
|
50
|
+
if (layout.fields.some(isSymbolKey) ||
|
|
51
|
+
layout.methods.some(isSymbolKey) ||
|
|
52
|
+
layout.accessors.some(isSymbolKey) ||
|
|
53
|
+
(layout.methodOverrides ?? []).some(isSymbolKey))
|
|
54
|
+
return true;
|
|
55
|
+
current = layout.base;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DeclarationId } from '../identity/ids.js';
|
|
2
|
+
import { type Representation } from '../representation/model.js';
|
|
3
|
+
import type { ClassLayout } from './classes.js';
|
|
4
|
+
/** Native, method-only prototype identity reads do not expose instance fields. */
|
|
5
|
+
export declare const classPrototypeReadOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, receiver: Representation, key: string, value: Representation) => ClassLayout | null;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
/** Native, method-only prototype identity reads do not expose instance fields. */
|
|
3
|
+
export const classPrototypeReadOf = (classes, receiver, key, value) => {
|
|
4
|
+
if (key !== 'prototype' || receiver.kind !== 'constructor-family' || receiver.members.length !== 1 || value.kind !== 'class-ref')
|
|
5
|
+
return null;
|
|
6
|
+
const layout = classes.get(receiver.members[0]);
|
|
7
|
+
if (!layout ||
|
|
8
|
+
layout.instance?.kind !== 'class-ref' ||
|
|
9
|
+
layout.prototypeUnsupportedUses?.length ||
|
|
10
|
+
representationKey(layout.instance) !== representationKey(value))
|
|
11
|
+
return null;
|
|
12
|
+
const seen = new Set();
|
|
13
|
+
for (let declaration = layout.declaration; declaration !== null;) {
|
|
14
|
+
if (seen.has(declaration))
|
|
15
|
+
return null;
|
|
16
|
+
seen.add(declaration);
|
|
17
|
+
const ancestor = classes.get(declaration);
|
|
18
|
+
if (!ancestor || ancestor.nativeBase !== null)
|
|
19
|
+
return null;
|
|
20
|
+
declaration = ancestor.base;
|
|
21
|
+
}
|
|
22
|
+
return layout;
|
|
23
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DeclarationId, OperationId } from '../identity/ids.js';
|
|
2
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
3
|
+
import { type RecordField } from '../representation/model.js';
|
|
4
|
+
import type { SealedRepresentationPlan } from '../representation/plan.js';
|
|
5
|
+
import type { SemanticGraph } from '../semantics/model/graph.js';
|
|
6
|
+
import type { ClassLayout } from './classes.js';
|
|
7
|
+
import type { SlotCensus } from './slots.js';
|
|
8
|
+
/** Physical slots are separate from the flattened checker view and overlay evidence. */
|
|
9
|
+
export interface NativeClassStorage {
|
|
10
|
+
readonly fields: readonly RecordField[];
|
|
11
|
+
readonly omittedOverlays: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Keep an overlay until every native access through that ancestor has a
|
|
15
|
+
* descendant-storage dispatch path. An unused overlay needs no such bridge.
|
|
16
|
+
* Runtime-key accesses use the object's own-property protocol. That protocol
|
|
17
|
+
* dispatches on the concrete instance and needs its real fields, not a copy
|
|
18
|
+
* of every possible descendant field in an ancestor.
|
|
19
|
+
*/
|
|
20
|
+
export declare const nativeClassFieldUsesOf: (graph: SemanticGraph, plan: SealedRepresentationPlan, deriver: RepresentationDeriver, classes: ReadonlyMap<DeclarationId, ClassLayout>, slots: SlotCensus, ownerDispatchedReads?: ReadonlySet<OperationId>) => ReadonlyMap<DeclarationId, ReadonlySet<string>>;
|
|
21
|
+
/**
|
|
22
|
+
* Real inherited properties keep one slot. Synthetic fields without a native
|
|
23
|
+
* ancestor access are removed; real descendant declarations then own their
|
|
24
|
+
* own storage. Unclassified shape members retain the existing layout.
|
|
25
|
+
*/
|
|
26
|
+
export declare const projectNativeClassStorage: (classes: ReadonlyMap<DeclarationId, ClassLayout>, deriver: RepresentationDeriver, uses: ReadonlyMap<DeclarationId, ReadonlySet<string>>) => ReadonlyMap<DeclarationId, NativeClassStorage>;
|