@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,597 @@
|
|
|
1
|
+
import { disjointNativeRecordIndexOf } from '../native-record-index.js';
|
|
2
|
+
import { recordIndexForKeyCarrier, representationKey } from '../../representation/model.js';
|
|
3
|
+
import { hasNativeNumericIndexArms } from '../../representation/numeric-index.js';
|
|
4
|
+
import { objectPrototypeMemberNames } from '../../representation/record-fields.js';
|
|
5
|
+
import { classPrototypeMemberIsPresent, symbolKeyedMemberIsDeclared } from '../../projection/class-property-presence.js';
|
|
6
|
+
import { objectShapePrototypeMethods } from '../../projection/callee.js';
|
|
7
|
+
import { callableOwnPrototypeAt } from '../../semantics/callable-origins.js';
|
|
8
|
+
import { isDirectFunctionSourceRead } from './function-source.js';
|
|
9
|
+
import { callableBuiltinRecipeKey, classDeclarationsWithLifecycleEvents, functionValueOwnPropertyWrite, nativeRecordRefHasIndexSidecar, nonExpandoFunctionMemberNames, receiverIsUnreachable, recordIndexesOf, taggedUnionArmsAreAllArrayObjects, taggedUnionArmsAreAllDictionaries, taggedUnionArmsAreAllTypedArrays, taggedUnionArmsHaveNativeSidecar } from './property-access-keys.js';
|
|
10
|
+
import { generatedObjectCarrier, generatedSharedObjectCarrier, generatedSharedRecordCarrier, layoutAnswerSuffix, recordAnswerFor, resolvedLayoutOf } from './has-property-key.js';
|
|
11
|
+
import { definitelyPrimitive, mapTestable } from './instanceof-key.js';
|
|
12
|
+
import { atomicsCallSupport } from '../../targets/cpp/host/atomics.js';
|
|
13
|
+
import { regexpRoleOf } from '../../targets/cpp/prototype/emit-prototype-regexp.js';
|
|
14
|
+
import { nativeRecordIndexHasPropertyOf } from '../native-record-index-transport.js';
|
|
15
|
+
/**
|
|
16
|
+
* The `property-access`, `host-member-call` and (for `has-property`/
|
|
17
|
+
* `instanceof`) `runtime-helper` families of `ir/certify.ts`, ported from
|
|
18
|
+
* `preflight/property-access.ts`, `preflight/has-property-key.ts`,
|
|
19
|
+
* `preflight/instanceof-key.ts` and `preflight/invocation-arguments.ts`'s
|
|
20
|
+
* Atomics builder.
|
|
21
|
+
*
|
|
22
|
+
* The manifest's tables (`targets/cpp/manifest/capabilities.ts`) spell a
|
|
23
|
+
* receiver's recipe with the SAME refinements the old builders computed from
|
|
24
|
+
* the semantic graph and plan -- `record-with-index(unmatched-key)`,
|
|
25
|
+
* `iterator(next)`, `function-value-dispatch(bind-direct)`, and the rest.
|
|
26
|
+
* Dropping any one of those parenthetical refinements here would certify a
|
|
27
|
+
* program the printer still refuses, because the manifest never claims the
|
|
28
|
+
* unrefined, flatter key. So this module re-derives every refinement the old
|
|
29
|
+
* builders derived, using the IR's own already-resolved fields wherever one
|
|
30
|
+
* is available (`IrOperand.representation` needs no plan lookup: lowering
|
|
31
|
+
* already narrowed a receiver's view and left a key's carrier raw, exactly
|
|
32
|
+
* the two facts the old builders read off the plan) and falling back to the
|
|
33
|
+
* semantic operation via `ctx.semanticOperationOf(operation.lineage)` only
|
|
34
|
+
* for the handful of genuinely whole-program facts the IR does not carry
|
|
35
|
+
* (a callable's `.call`/`.apply`/`.bind` mutation census, a class's
|
|
36
|
+
* lifecycle census) -- exactly the two `CertifyContext`'s own doc comment
|
|
37
|
+
* names as still graph-derived pending Phase 3.
|
|
38
|
+
*
|
|
39
|
+
* `property-value.ts` and `array-literal-elements.ts` need no port: both
|
|
40
|
+
* obligations existed only to check that a `dynamic`-sourced value converts
|
|
41
|
+
* into its receiver's declared field/element type, and on the IR that
|
|
42
|
+
* conversion is an explicit `convert` op lowering already emits before the
|
|
43
|
+
* store (`ir/lower-property.ts`'s `enterRequiredOperand` on both `set` and
|
|
44
|
+
* `define-own-property`'s value operand, `ir/lower-allocation.ts`'s
|
|
45
|
+
* `enterRequiredOperand` in both the array-object and tuple-record branches)
|
|
46
|
+
* -- the spine's own conversion census in `ir/certify.ts` already certifies
|
|
47
|
+
* it, so restating it here would be a second, redundant obligation.
|
|
48
|
+
*/
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Shared IR-level key helpers
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
/** The constant text a property-access key operand states, or `null` for a genuinely computed one. A key is a raw role: its representation is never converted, so this is the whole of what the old builders' `keyIsComputed`/`source.kind === 'constant'` pair asked. */
|
|
53
|
+
const constantKeyTextOf = (ctx, key) => {
|
|
54
|
+
const definition = ctx.definitionOf(key.value);
|
|
55
|
+
return definition?.kind === 'constant' ? definition.text : null;
|
|
56
|
+
};
|
|
57
|
+
/** Property-access keys are always constant-folded to a `literal: 'string'` text at normalize time (`producers/properties.ts`'s `keyOf`), so "computed" is exactly "not a constant". */
|
|
58
|
+
const isComputedKey = (ctx, key) => ctx.definitionOf(key.value)?.kind !== 'constant';
|
|
59
|
+
/** The six object internal methods' own key/receiver shape, uniform across the five that carry a key. `own-property-keys` has none, and is never actually reached (see below) but is handled the same trivial way. */
|
|
60
|
+
const receiverAndKeyOf = (operation) => {
|
|
61
|
+
if (operation.kind === 'own-property-keys')
|
|
62
|
+
return { receiver: operation.receiver, key: null };
|
|
63
|
+
return { receiver: operation.receiver, key: operation.key };
|
|
64
|
+
};
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Per-site refinements the old builders derived from a semantic operand;
|
|
67
|
+
// restated here against the IR's own key text/representation instead of an
|
|
68
|
+
// `operandOf(operation, 'key')` lookup, since the operand model itself
|
|
69
|
+
// differs (no `SemanticOperand.source` tri-state to switch on).
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
const constructorFamilyIsCensused = (representation, censusedClasses) => representation.kind === 'constructor-family' && representation.members.some((member) => censusedClasses.has(member));
|
|
72
|
+
const recordWithIndexKeyNamesAField = (representation, keyText) => {
|
|
73
|
+
if (representation.kind !== 'record-with-index' || keyText === null)
|
|
74
|
+
return false;
|
|
75
|
+
return representation.fields.some((field) => field.key === keyText);
|
|
76
|
+
};
|
|
77
|
+
/** The declared fields of a generated record layout, or `null` for a carrier that has none. */
|
|
78
|
+
const generatedFieldsOf = (representation, deriver) => {
|
|
79
|
+
if (representation.kind === 'record' || representation.kind === 'record-with-index')
|
|
80
|
+
return representation.fields;
|
|
81
|
+
if (representation.kind === 'class-ref' || (representation.kind === 'native-record-ref' && representation.native === null)) {
|
|
82
|
+
const layout = deriver.layoutOf(representation.shapeId);
|
|
83
|
+
return layout.kind === 'record' || layout.kind === 'record-with-index' ? layout.fields : null;
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
};
|
|
87
|
+
const deleteNamesOptionalGeneratedField = (representation, keyText, deriver) => {
|
|
88
|
+
if (keyText === null)
|
|
89
|
+
return false;
|
|
90
|
+
return generatedFieldsOf(representation, deriver)?.some((field) => field.key === keyText && !field.required) === true;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* A constant delete key naming NO declared field of a plain record: the key
|
|
94
|
+
* lives in the record's expando sidecar (one `Object.defineProperty` added
|
|
95
|
+
* after the fact), the one table `emitNativeSidecarDelete` can actually erase
|
|
96
|
+
* from. Refined by name so that the plain `record:delete:false` -- a constant
|
|
97
|
+
* key naming a REQUIRED field -- stays unclaimed: a required field has no
|
|
98
|
+
* presence its typed reads consult, so its deletion cannot be honoured, and
|
|
99
|
+
* the manifest must not say otherwise.
|
|
100
|
+
*/
|
|
101
|
+
const deleteNamesRecordExpandoKey = (representation, keyText, deriver) => {
|
|
102
|
+
if (keyText === null || representation.kind !== 'record')
|
|
103
|
+
return false;
|
|
104
|
+
const fields = generatedFieldsOf(representation, deriver);
|
|
105
|
+
return fields !== null && !fields.some((field) => field.key === keyText);
|
|
106
|
+
};
|
|
107
|
+
const deleteNamesNativeIndexEntry = (representation, keyText, deriver) => {
|
|
108
|
+
if (!nativeRecordRefHasIndexSidecar(representation, deriver) || keyText === null)
|
|
109
|
+
return false;
|
|
110
|
+
const layout = deriver.layoutOf(representation.shapeId);
|
|
111
|
+
if (layout.kind !== 'record-with-index')
|
|
112
|
+
return false;
|
|
113
|
+
return !layout.fields.some((field) => field.key === keyText);
|
|
114
|
+
};
|
|
115
|
+
const callableMemberIs = (keyText, member) => keyText === member;
|
|
116
|
+
const iteratorMemberNameOf = (keyText) => keyText ?? 'non-constant-key';
|
|
117
|
+
const callableComputedOwnSymbolRead = (access, keyRepresentation) => access.method === 'get' && access.computed && keyRepresentation?.kind === 'symbol';
|
|
118
|
+
const callableComputedOwnSymbolWrite = (access, keyRepresentation) => access.method === 'set' && access.computed && keyRepresentation?.kind === 'symbol';
|
|
119
|
+
const callableOwnPropertyRead = (receiver, access, keyText) => {
|
|
120
|
+
if (access.method !== 'get' || access.computed || keyText === null)
|
|
121
|
+
return false;
|
|
122
|
+
if (keyText === 'name' || keyText === 'length')
|
|
123
|
+
return true;
|
|
124
|
+
if (receiver === 'function-and-constructor' && keyText === 'prototype')
|
|
125
|
+
return true;
|
|
126
|
+
return !nonExpandoFunctionMemberNames.has(keyText) && keyText !== 'prototype';
|
|
127
|
+
};
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
// The callable `.call`/`.apply`/`.bind` builtin ladder needs a whole-program
|
|
130
|
+
// own-property-mutation census (`semantics/callable-origins.ts`), which is
|
|
131
|
+
// keyed by a `SealedRepresentationPlan` -- a fact `CertifyContext` does not
|
|
132
|
+
// carry (its own doc comment names this as one of two facts still read off
|
|
133
|
+
// the graph pending Phase 3). `canCarryCallableObject`, the plan's only use
|
|
134
|
+
// inside that census, asks nothing the plan narrows: it distinguishes a
|
|
135
|
+
// callable-shaped result from everything else by KIND, which a value's own
|
|
136
|
+
// declared type already settles before any per-site narrowing runs. So a
|
|
137
|
+
// plan built once here, from each published result's own raw derivation
|
|
138
|
+
// (`deriver.derive`, never the census's per-use narrowing), answers the
|
|
139
|
+
// identical question the real plan would -- and lets `callableBuiltinRecipeKey`
|
|
140
|
+
// run completely unmodified.
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
const syntheticPlans = new WeakMap();
|
|
143
|
+
const syntheticPlanFor = (graph, deriver) => {
|
|
144
|
+
const cached = syntheticPlans.get(graph);
|
|
145
|
+
if (cached)
|
|
146
|
+
return cached;
|
|
147
|
+
const selected = new Map();
|
|
148
|
+
for (const producer of graph.operations.values()) {
|
|
149
|
+
for (const result of producer.results) {
|
|
150
|
+
if (!selected.has(result.id))
|
|
151
|
+
selected.set(result.id, deriver.derive(result.type));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const plan = {
|
|
155
|
+
selected,
|
|
156
|
+
evidence: new Map(),
|
|
157
|
+
conflicts: []
|
|
158
|
+
};
|
|
159
|
+
syntheticPlans.set(graph, plan);
|
|
160
|
+
return plan;
|
|
161
|
+
};
|
|
162
|
+
const censusedClassesByGraph = new WeakMap();
|
|
163
|
+
const censusedClassesFor = (graph) => {
|
|
164
|
+
const cached = censusedClassesByGraph.get(graph);
|
|
165
|
+
if (cached)
|
|
166
|
+
return cached;
|
|
167
|
+
const censused = classDeclarationsWithLifecycleEvents(graph);
|
|
168
|
+
censusedClassesByGraph.set(graph, censused);
|
|
169
|
+
return censused;
|
|
170
|
+
};
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// `get`/`set`/`delete`/`own-property-keys`/`define-own-property`
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
/**
|
|
175
|
+
* The receiver key the manifest's `propertyRecipes` set claims, exactly
|
|
176
|
+
* mirroring `preflight/property-access.ts`'s `buildPropertyAccessObligation`
|
|
177
|
+
* ternary ladder in the same precedence order -- first match wins, so the
|
|
178
|
+
* order below is load-bearing and copied line for line.
|
|
179
|
+
*/
|
|
180
|
+
const receiverKeyOf = (ctx, access, representation, key, keyText, semanticOp) => {
|
|
181
|
+
const recordIndexes = recordIndexesOf(representation, ctx.deriver);
|
|
182
|
+
const indexCarrier = key ? key.representation : null;
|
|
183
|
+
const indexDomainMatches = indexCarrier !== null && recordIndexForKeyCarrier(recordIndexes, indexCarrier, keyText ?? undefined) !== null;
|
|
184
|
+
if (access.computed &&
|
|
185
|
+
recordIndexes.length > 0 &&
|
|
186
|
+
(access.method === 'get' || access.method === 'set' || access.method === 'define-own-property') &&
|
|
187
|
+
!indexDomainMatches) {
|
|
188
|
+
return `${access.receiver}(no-index-domain)`;
|
|
189
|
+
}
|
|
190
|
+
if (access.method === 'delete' &&
|
|
191
|
+
key &&
|
|
192
|
+
disjointNativeRecordIndexOf(ctx.deriver, representation, key.representation, keyText ?? undefined))
|
|
193
|
+
return 'record(disjoint-index)';
|
|
194
|
+
if (access.method === 'delete' && deleteNamesOptionalGeneratedField(representation, keyText, ctx.deriver))
|
|
195
|
+
return 'record(optional-field)';
|
|
196
|
+
if (access.method === 'delete' && deleteNamesRecordExpandoKey(representation, keyText, ctx.deriver))
|
|
197
|
+
return 'record(expando-key)';
|
|
198
|
+
if (access.method === 'delete' && deleteNamesNativeIndexEntry(representation, keyText, ctx.deriver))
|
|
199
|
+
return 'native-record-ref(index-sidecar)';
|
|
200
|
+
const nativeNumericUnion = indexCarrier?.kind === 'scalar' && indexCarrier.domain === 'number' && hasNativeNumericIndexArms(representation, ctx.deriver.derive);
|
|
201
|
+
if (access.receiver === 'tagged-union' && access.computed && nativeNumericUnion && (access.method === 'get' || access.method === 'set')) {
|
|
202
|
+
return 'tagged-union(numeric-index-arms)';
|
|
203
|
+
}
|
|
204
|
+
if (access.receiver === 'constructor-family' && !constructorFamilyIsCensused(representation, censusedClassesFor(ctx.graph))) {
|
|
205
|
+
return 'constructor-family(uncensused)';
|
|
206
|
+
}
|
|
207
|
+
if (access.receiver === 'native-record-ref' &&
|
|
208
|
+
access.method === 'get' &&
|
|
209
|
+
access.computed &&
|
|
210
|
+
!nativeRecordRefHasIndexSidecar(representation, ctx.deriver)) {
|
|
211
|
+
return 'native-record-ref(no-index-sidecar)';
|
|
212
|
+
}
|
|
213
|
+
if (access.receiver === 'record-with-index' &&
|
|
214
|
+
access.method === 'get' &&
|
|
215
|
+
!access.computed &&
|
|
216
|
+
!recordWithIndexKeyNamesAField(representation, keyText)) {
|
|
217
|
+
return 'record-with-index(unmatched-key)';
|
|
218
|
+
}
|
|
219
|
+
if (access.receiver === 'tagged-union' && access.computed && taggedUnionArmsAreAllTypedArrays(representation))
|
|
220
|
+
return 'tagged-union(typed-array-arms)';
|
|
221
|
+
if (access.receiver === 'tagged-union' &&
|
|
222
|
+
access.method === 'get' &&
|
|
223
|
+
access.computed &&
|
|
224
|
+
taggedUnionArmsAreAllDictionaries(representation)) {
|
|
225
|
+
return 'tagged-union(dictionary-arms)';
|
|
226
|
+
}
|
|
227
|
+
if (access.receiver === 'tagged-union' &&
|
|
228
|
+
access.method === 'get' &&
|
|
229
|
+
access.computed &&
|
|
230
|
+
taggedUnionArmsAreAllArrayObjects(representation)) {
|
|
231
|
+
return 'tagged-union(array-arms)';
|
|
232
|
+
}
|
|
233
|
+
if (access.receiver === 'tagged-union' &&
|
|
234
|
+
(access.method === 'get' || access.method === 'set') &&
|
|
235
|
+
access.computed &&
|
|
236
|
+
taggedUnionArmsHaveNativeSidecar(representation)) {
|
|
237
|
+
return 'tagged-union(native-sidecar-arms)';
|
|
238
|
+
}
|
|
239
|
+
if (access.receiver === 'iterator' && access.method === 'get' && !access.computed)
|
|
240
|
+
return `iterator(${iteratorMemberNameOf(keyText)})`;
|
|
241
|
+
const callableBuiltinRecipe = semanticOp
|
|
242
|
+
? callableBuiltinRecipeKey(ctx.graph, syntheticPlanFor(ctx.graph, ctx.deriver), semanticOp, access)
|
|
243
|
+
: null;
|
|
244
|
+
if (callableBuiltinRecipe !== null)
|
|
245
|
+
return callableBuiltinRecipe;
|
|
246
|
+
const directFunctionSourceRead = semanticOp !== null && isDirectFunctionSourceRead(ctx.graph, semanticOp);
|
|
247
|
+
if (access.receiver === 'function-value-dispatch' && directFunctionSourceRead)
|
|
248
|
+
return 'function-value-dispatch(toString-direct)';
|
|
249
|
+
// The same two facts off a callable that has NO calling convention. A
|
|
250
|
+
// `callable-identity` is the whole answer for `Array.from`, whose four
|
|
251
|
+
// overloads disagree at parameter 0 (`representation/derive.ts`): the
|
|
252
|
+
// program reads its `name` and `length` and never calls it, and the facts
|
|
253
|
+
// live in the identity's own property table exactly as a dispatching
|
|
254
|
+
// callable's do. Refined per-site by the same `callableMemberIs`, so every
|
|
255
|
+
// other member off this carrier stays correctly unclaimed -- there is no
|
|
256
|
+
// `.call`, `.bind` or expando arm for it, and a call is refused by name.
|
|
257
|
+
if (access.receiver === 'callable-identity' && access.method === 'get' && !access.computed && callableMemberIs(keyText, 'name')) {
|
|
258
|
+
return 'callable-identity(name)';
|
|
259
|
+
}
|
|
260
|
+
if (access.receiver === 'callable-identity' && access.method === 'get' && !access.computed && callableMemberIs(keyText, 'length')) {
|
|
261
|
+
return 'callable-identity(length)';
|
|
262
|
+
}
|
|
263
|
+
if (access.receiver === 'function-value-dispatch' && access.method === 'get' && !access.computed && callableMemberIs(keyText, 'name')) {
|
|
264
|
+
return 'function-value-dispatch(name)';
|
|
265
|
+
}
|
|
266
|
+
if (access.receiver === 'function-value-dispatch' && access.method === 'get' && !access.computed && callableMemberIs(keyText, 'length')) {
|
|
267
|
+
return 'function-value-dispatch(length)';
|
|
268
|
+
}
|
|
269
|
+
// A `prototype` read through a call-only carrier. One recipe for both of the
|
|
270
|
+
// census's answers, because both are the SAME read: a function that ran
|
|
271
|
+
// `MakeConstructor` finds an own `prototype`, and an arrow, a method or an
|
|
272
|
+
// `async function` misses and walks `Function.prototype`, which has none --
|
|
273
|
+
// `undefined`, which is what Node prints. What is refused is the third
|
|
274
|
+
// answer: a generator states nothing and a value with no proven origin
|
|
275
|
+
// proves nothing, and both fall through to the bare receiver key, which the
|
|
276
|
+
// manifest registers nowhere.
|
|
277
|
+
if (access.receiver === 'function-value-dispatch' &&
|
|
278
|
+
access.method === 'get' &&
|
|
279
|
+
!access.computed &&
|
|
280
|
+
callableMemberIs(keyText, 'prototype') &&
|
|
281
|
+
semanticOp !== null &&
|
|
282
|
+
callableOwnPrototypeAt(ctx.graph, semanticOp) !== null) {
|
|
283
|
+
return 'function-value-dispatch(prototype)';
|
|
284
|
+
}
|
|
285
|
+
const keyRepresentation = key ? key.representation : null;
|
|
286
|
+
if (access.receiver === 'function-value-dispatch' && callableComputedOwnSymbolWrite(access, keyRepresentation))
|
|
287
|
+
return 'function-value-dispatch(own-symbol)';
|
|
288
|
+
if (access.receiver === 'function-value-dispatch' && functionValueOwnPropertyWrite(access))
|
|
289
|
+
return 'function-value-dispatch';
|
|
290
|
+
if (access.receiver === 'function-and-constructor' && callableComputedOwnSymbolWrite(access, keyRepresentation))
|
|
291
|
+
return 'function-and-constructor(own-symbol)';
|
|
292
|
+
if (access.receiver === 'function-and-constructor' && functionValueOwnPropertyWrite(access))
|
|
293
|
+
return 'function-and-constructor';
|
|
294
|
+
if (access.receiver === 'function-value-dispatch' && callableOwnPropertyRead(access.receiver, access, keyText))
|
|
295
|
+
return 'function-value-dispatch(expando)';
|
|
296
|
+
if (access.receiver === 'function-value-dispatch' && callableComputedOwnSymbolRead(access, keyRepresentation))
|
|
297
|
+
return 'function-value-dispatch(own-symbol)';
|
|
298
|
+
if (access.receiver === 'function-and-constructor' && directFunctionSourceRead)
|
|
299
|
+
return 'function-and-constructor(toString-direct)';
|
|
300
|
+
if (access.receiver === 'function-and-constructor' && access.method === 'get' && !access.computed && callableMemberIs(keyText, 'name')) {
|
|
301
|
+
return 'function-and-constructor(name)';
|
|
302
|
+
}
|
|
303
|
+
if (access.receiver === 'function-and-constructor' &&
|
|
304
|
+
access.method === 'get' &&
|
|
305
|
+
!access.computed &&
|
|
306
|
+
callableMemberIs(keyText, 'length')) {
|
|
307
|
+
return 'function-and-constructor(length)';
|
|
308
|
+
}
|
|
309
|
+
if (access.receiver === 'function-and-constructor' &&
|
|
310
|
+
access.method === 'get' &&
|
|
311
|
+
!access.computed &&
|
|
312
|
+
callableMemberIs(keyText, 'prototype')) {
|
|
313
|
+
return 'function-and-constructor(prototype)';
|
|
314
|
+
}
|
|
315
|
+
if (access.receiver === 'function-and-constructor' && callableOwnPropertyRead(access.receiver, access, keyText))
|
|
316
|
+
return 'function-and-constructor(expando)';
|
|
317
|
+
if (access.receiver === 'function-and-constructor' && callableComputedOwnSymbolRead(access, keyRepresentation))
|
|
318
|
+
return 'function-and-constructor(own-symbol)';
|
|
319
|
+
return access.receiver;
|
|
320
|
+
};
|
|
321
|
+
const accessDemandOf = (operation, ctx) => {
|
|
322
|
+
// A receiver inside a proven-dead `typeof` guard's consequent, or one whose
|
|
323
|
+
// semantic type is `never`, is never actually accessed on this host --
|
|
324
|
+
// `preflight/property-access.ts`'s own two skip conditions, restated
|
|
325
|
+
// against the IR's `lineage` citation instead of the semantic operation id.
|
|
326
|
+
if (ctx.isDead(operation.lineage))
|
|
327
|
+
return [];
|
|
328
|
+
const semanticOp = ctx.semanticOperationOf(operation.lineage);
|
|
329
|
+
if (semanticOp && receiverIsUnreachable(ctx.graph, semanticOp, ctx.deriver))
|
|
330
|
+
return [];
|
|
331
|
+
const { receiver, key } = receiverAndKeyOf(operation);
|
|
332
|
+
const representation = receiver.representation;
|
|
333
|
+
const computed = key !== null && isComputedKey(ctx, key);
|
|
334
|
+
const keyText = key !== null ? constantKeyTextOf(ctx, key) : null;
|
|
335
|
+
const access = { receiver: representation.kind, method: operation.kind, computed };
|
|
336
|
+
const receiverKey = receiverKeyOf(ctx, access, representation, key, keyText, semanticOp);
|
|
337
|
+
return [
|
|
338
|
+
{ key: `property-access:${receiverKey}:${access.method}:${access.computed}` },
|
|
339
|
+
...(operation.kind === 'get' && !computed && keyText !== null ? hostMemberReadDemandOf(representation, keyText) : [])
|
|
340
|
+
];
|
|
341
|
+
};
|
|
342
|
+
/**
|
|
343
|
+
* A constant-keyed read off a `native-handle` receiver names one host member,
|
|
344
|
+
* and the printer (`host/emit-host-properties.ts`'s `nativeHostMemberText`)
|
|
345
|
+
* renders it only when a host member table claims `${protocol}.${member}` --
|
|
346
|
+
* every other such read is refused there by name. The manifest publishes
|
|
347
|
+
* exactly those keys (`hostMembers`), so the demand is the same lookup made
|
|
348
|
+
* before a certificate is minted rather than after.
|
|
349
|
+
*
|
|
350
|
+
* Two reads the printer answers without a table row are left undemanded, on
|
|
351
|
+
* purpose: `hasOwnProperty`/`propertyIsEnumerable` off a classified intrinsic
|
|
352
|
+
* (`Math.hasOwnProperty(...)`) are `Object.prototype`'s own and answered from
|
|
353
|
+
* the intrinsic's reflection sidecar, and a `<X>.prototype` protocol's method
|
|
354
|
+
* read as a value is spelled from the checker's own member list. Both are
|
|
355
|
+
* decided by facts (`intrinsicMembers`) this walk does not carry, and a
|
|
356
|
+
* demand that cannot be decided here would refuse programs the printer
|
|
357
|
+
* renders -- the opposite drift from the one this demand closes.
|
|
358
|
+
*/
|
|
359
|
+
const hostMemberReadDemandOf = (receiver, member) => {
|
|
360
|
+
if (receiver.kind !== 'native-handle')
|
|
361
|
+
return [];
|
|
362
|
+
const protocol = receiver.native ?? receiver.protocol;
|
|
363
|
+
if (protocol.endsWith('.prototype') || objectShapePrototypeMethods.has(member))
|
|
364
|
+
return [];
|
|
365
|
+
return [{ key: `host-invocation:${protocol}.${member}` }];
|
|
366
|
+
};
|
|
367
|
+
// ---------------------------------------------------------------------------
|
|
368
|
+
// `has-property` (`k in o`) -- `preflight/has-property-key.ts`'s
|
|
369
|
+
// `hasPropertyHelperKey`, restated against the IR's own key/receiver
|
|
370
|
+
// representations. Unlike the five methods above, `has-property` never
|
|
371
|
+
// raises a `property-access` demand: `family: 'property', internalMethod:
|
|
372
|
+
// 'has-property'` is declared in the semantic model but no producer ever
|
|
373
|
+
// builds one (only the `in` computation reaches this IR op), so the old
|
|
374
|
+
// `buildPropertyAccessObligation` -- gated on `operation.family ===
|
|
375
|
+
// 'property'` -- never actually saw one either.
|
|
376
|
+
// ---------------------------------------------------------------------------
|
|
377
|
+
/** A property key's constant is always `literal: 'string'`; the `in` operator's left operand is an ordinary expression, so it keeps whichever literal kind it was written with. */
|
|
378
|
+
const staticInKeyOf = (ctx, key) => {
|
|
379
|
+
const definition = ctx.definitionOf(key.value);
|
|
380
|
+
if (definition?.kind !== 'constant')
|
|
381
|
+
return null;
|
|
382
|
+
if (definition.literal === 'string')
|
|
383
|
+
return { text: definition.text, form: 'static-string' };
|
|
384
|
+
return definition.literal === 'number' ? { text: definition.text, form: 'static-number' } : null;
|
|
385
|
+
};
|
|
386
|
+
const dynamicInKeyFormOf = (key) => {
|
|
387
|
+
const representation = key.representation;
|
|
388
|
+
if (representation.kind !== 'scalar')
|
|
389
|
+
return representation.kind;
|
|
390
|
+
return representation.domain === 'boolean' || representation.domain === 'bigint' ? `scalar(${representation.domain})` : 'number';
|
|
391
|
+
};
|
|
392
|
+
const hasPropertyRuntimeHelperKey = (operation, ctx) => {
|
|
393
|
+
const key = staticInKeyOf(ctx, operation.key);
|
|
394
|
+
const keyForm = key?.form ?? dynamicInKeyFormOf(operation.key);
|
|
395
|
+
const carrier = operation.receiver.representation;
|
|
396
|
+
const payload = carrier.kind === 'optional' ? carrier.payload : carrier;
|
|
397
|
+
const optionalPrefix = (suffix) => (carrier.kind === 'optional' ? `optional(${suffix})` : suffix);
|
|
398
|
+
// Pattern is a `native-record-ref` whose own name is not `null`
|
|
399
|
+
// (`generatedSharedObjectCarrier`/`generatedSharedRecordCarrier` both
|
|
400
|
+
// exclude that on purpose: an arbitrary host struct's C++ members are not
|
|
401
|
+
// thereby its own JS keys), so neither of the two carrier checks below ever
|
|
402
|
+
// answers for it -- every key, static or dynamic, fell through to the
|
|
403
|
+
// generic layout suffix, which named the unclaimed `record(unproven)` this
|
|
404
|
+
// file's own manifest (`emit-in.ts`'s `hasPropertyHelperClaims`) has no row
|
|
405
|
+
// for. `emit-in.ts`'s `layoutAnswerFor` already renders `in` over Pattern
|
|
406
|
+
// unconditionally through its native dynamic-property sidecar
|
|
407
|
+
// (`gea::runtime::regex::dynamicHas`, checked ahead of every other rule
|
|
408
|
+
// there for exactly this reason) -- this claim states the identical answer
|
|
409
|
+
// for the identical receiver, checked at the identical priority, so the
|
|
410
|
+
// two authorities cannot drift back apart.
|
|
411
|
+
if (regexpRoleOf(payload) === 'pattern')
|
|
412
|
+
return `computation:in:${keyForm}:${optionalPrefix('record(pattern)')}`;
|
|
413
|
+
if (key === null && nativeRecordIndexHasPropertyOf(ctx.deriver, payload, operation.key.representation))
|
|
414
|
+
return `computation:in:${keyForm}:${optionalPrefix('record(disjoint-index)')}`;
|
|
415
|
+
if (key && payload.kind === 'class-ref' && classPrototypeMemberIsPresent(ctx.classes, payload.declaration, key.text)) {
|
|
416
|
+
return `computation:in:${keyForm}:${optionalPrefix('class(prototype-member)')}`;
|
|
417
|
+
}
|
|
418
|
+
if (key && generatedObjectCarrier(payload) && objectPrototypeMemberNames.has(key.text)) {
|
|
419
|
+
return `computation:in:${keyForm}:${optionalPrefix('record(object-prototype-member)')}`;
|
|
420
|
+
}
|
|
421
|
+
if (key && generatedSharedObjectCarrier(payload)) {
|
|
422
|
+
const layout = resolvedLayoutOf(payload, ctx.deriver).layout;
|
|
423
|
+
if (recordAnswerFor(layout, key.text) === 'record(unproven)')
|
|
424
|
+
return `computation:in:${keyForm}:${optionalPrefix('record(sidecar)')}`;
|
|
425
|
+
}
|
|
426
|
+
if (key === null && keyForm === 'string' && generatedSharedRecordCarrier(payload)) {
|
|
427
|
+
return `computation:in:${keyForm}:${optionalPrefix('record(sidecar)')}`;
|
|
428
|
+
}
|
|
429
|
+
// A SYMBOL key, which is never a name the program spelled -- `staticInKeyOf`
|
|
430
|
+
// recognizes string and number literals only, because a symbol has no
|
|
431
|
+
// literal form at all; `cacheKey in res` reads a `unique symbol` binding.
|
|
432
|
+
// The receiver's own dynamic-property sidecar answers a runtime key of any
|
|
433
|
+
// kind, and for a symbol it answers COMPLETELY whenever the layout declares
|
|
434
|
+
// no symbol-keyed slot of its own -- see `symbolKeyedMemberIsDeclared` for
|
|
435
|
+
// why the two key spaces make that a proof rather than a guess. Without this
|
|
436
|
+
// row `@hono/node-server`'s three symbol `in` tests fell through to
|
|
437
|
+
// `record(unproven)`, whose whole meaning is "absence is not provable", even
|
|
438
|
+
// though presence AND absence are both provable here.
|
|
439
|
+
if (key === null && keyForm === 'symbol' && generatedSharedObjectCarrier(payload)) {
|
|
440
|
+
const layout = resolvedLayoutOf(payload, ctx.deriver).layout;
|
|
441
|
+
const fields = layout.kind === 'record' || layout.kind === 'record-with-index' ? layout.fields : null;
|
|
442
|
+
const declaration = payload.kind === 'class-ref' ? payload.declaration : null;
|
|
443
|
+
if (!symbolKeyedMemberIsDeclared(ctx.classes, fields, declaration)) {
|
|
444
|
+
return `computation:in:${keyForm}:${optionalPrefix('record(symbol-sidecar)')}`;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
const layout = resolvedLayoutOf(carrier, ctx.deriver).layout;
|
|
448
|
+
return `computation:in:${keyForm}:${layoutAnswerSuffix(layout, key?.text ?? null, ctx.deriver)}`;
|
|
449
|
+
};
|
|
450
|
+
// ---------------------------------------------------------------------------
|
|
451
|
+
// `instanceof` -- `preflight/instanceof-key.ts`'s `instanceofHelperKey`,
|
|
452
|
+
// restated against the two compute operands' own representations.
|
|
453
|
+
// ---------------------------------------------------------------------------
|
|
454
|
+
const instanceofSideKey = (ctx, role, operand, mapTestableAgainst) => {
|
|
455
|
+
if (!operand)
|
|
456
|
+
return 'absent';
|
|
457
|
+
if (ctx.definitionOf(operand.value)?.kind === 'constant')
|
|
458
|
+
return 'constant';
|
|
459
|
+
const representation = operand.representation;
|
|
460
|
+
if (representation.kind === 'tagged-union' && representation.arms.every((arm) => definitelyPrimitive(arm.value))) {
|
|
461
|
+
return 'tagged-union(primitive-only)';
|
|
462
|
+
}
|
|
463
|
+
// Only the LEFT side is refined against the RIGHT: `instanceofHelperKey`'s
|
|
464
|
+
// `mapTestable` special case is keyed on `role === 'left'`, so the right
|
|
465
|
+
// operand's own call passes no counterpart to test against.
|
|
466
|
+
const right = mapTestableAgainst?.representation;
|
|
467
|
+
if (representation.kind === 'tagged-union' &&
|
|
468
|
+
right?.kind === 'native-handle' &&
|
|
469
|
+
right.protocol === 'MapConstructor' &&
|
|
470
|
+
mapTestable(representation)) {
|
|
471
|
+
return 'tagged-union(map-testable)';
|
|
472
|
+
}
|
|
473
|
+
if (representation.kind === 'native-handle')
|
|
474
|
+
return `native-handle(${representation.protocol})`;
|
|
475
|
+
// A RIGHT-hand `native-record-ref` names WHICH host layout, for the same
|
|
476
|
+
// reason the native-handle row above names which protocol: a host's own
|
|
477
|
+
// `[[HasInstance]]` is declared per layout
|
|
478
|
+
// (`PluginCapabilities.hostInstanceTests`), so one flat `native-record-ref`
|
|
479
|
+
// claim would certify `instanceof` against every host struct in the program
|
|
480
|
+
// on the strength of a row written for one of them. Right side only: the LEFT
|
|
481
|
+
// spelling is already claimed bare (`computation:instanceof:native-record-ref:
|
|
482
|
+
// native-handle(ErrorConstructor)`), and there it says how the OPERAND is
|
|
483
|
+
// carried rather than which `[[HasInstance]]` is being asked for.
|
|
484
|
+
if (role === 'right' && representation.kind === 'native-record-ref' && representation.native !== null) {
|
|
485
|
+
return `native-record-ref(${representation.native})`;
|
|
486
|
+
}
|
|
487
|
+
return representation.kind;
|
|
488
|
+
};
|
|
489
|
+
const instanceofRuntimeHelperKey = (operands, ctx) => {
|
|
490
|
+
const left = operands[0];
|
|
491
|
+
const right = operands[1];
|
|
492
|
+
return `computation:instanceof:${instanceofSideKey(ctx, 'left', left, right)}:${instanceofSideKey(ctx, 'right', right, undefined)}`;
|
|
493
|
+
};
|
|
494
|
+
// ---------------------------------------------------------------------------
|
|
495
|
+
// Atomics -- `preflight/invocation-arguments.ts`'s `buildAtomicsInvocationObligation`.
|
|
496
|
+
// `host-member-call` states its own verdict (`ir/certify.ts`'s own doc: an
|
|
497
|
+
// `Atomics` member's admissible argument shapes are a target RULE, not a
|
|
498
|
+
// finite manifest set), so this is the one property-access-module demand
|
|
499
|
+
// that never goes through `verdictOf`'s manifest lookup.
|
|
500
|
+
// ---------------------------------------------------------------------------
|
|
501
|
+
/**
|
|
502
|
+
* The `${protocol}.${member}` a call's callee reads, when that callee is a
|
|
503
|
+
* `get` off a host-bound receiver. Preferring the `get` operation's own
|
|
504
|
+
* `hostMethod` binding (set only when a plugin's `HostMethodBindingTable`
|
|
505
|
+
* explicitly claimed the member) and falling back to reconstructing it from
|
|
506
|
+
* the `get`'s own already-narrowed receiver and its key's defining constant
|
|
507
|
+
* -- the same two facts `preflight/invocation-arguments.ts`'s
|
|
508
|
+
* `hostMemberOfCallee` read off the plan, available here directly off the
|
|
509
|
+
* IR with no plan lookup at all, since `Atomics.*` is a namespace member
|
|
510
|
+
* read this compiler has never routed through a `HostMethodBinding`.
|
|
511
|
+
*/
|
|
512
|
+
const hostMemberOfCall = (ctx, operation) => {
|
|
513
|
+
const calleeDefinition = ctx.definitionOf(operation.callee.value);
|
|
514
|
+
if (calleeDefinition?.kind !== 'get')
|
|
515
|
+
return null;
|
|
516
|
+
if (calleeDefinition.hostMethod)
|
|
517
|
+
return `${calleeDefinition.hostMethod.protocol}.${calleeDefinition.hostMethod.member}`;
|
|
518
|
+
const receiver = calleeDefinition.receiver.representation;
|
|
519
|
+
const host = receiver.kind === 'native-handle'
|
|
520
|
+
? (receiver.native ?? receiver.protocol)
|
|
521
|
+
: receiver.kind === 'native-record-ref'
|
|
522
|
+
? receiver.native
|
|
523
|
+
: null;
|
|
524
|
+
if (host === null)
|
|
525
|
+
return null;
|
|
526
|
+
const keyText = constantKeyTextOf(ctx, calleeDefinition.key);
|
|
527
|
+
return keyText === null ? null : `${host}.${keyText}`;
|
|
528
|
+
};
|
|
529
|
+
const atomicsDemandOf = (operation, ctx) => {
|
|
530
|
+
const member = hostMemberOfCall(ctx, operation);
|
|
531
|
+
if (!member?.startsWith('Atomics.'))
|
|
532
|
+
return [];
|
|
533
|
+
const name = member.slice('Atomics.'.length);
|
|
534
|
+
const support = atomicsCallSupport(name, operation.arguments.map((argument) => argument.representation));
|
|
535
|
+
return [
|
|
536
|
+
support.supported
|
|
537
|
+
? { key: `host-member-call:${member}`, verdict: 'installed' }
|
|
538
|
+
: { key: `host-member-call:${member}`, verdict: 'unsupported', detail: support.reason }
|
|
539
|
+
];
|
|
540
|
+
};
|
|
541
|
+
/**
|
|
542
|
+
* The one intercepted host argument whose declared type is broader than its
|
|
543
|
+
* renderer: `Object.defineProperty`'s descriptor. The declaration says
|
|
544
|
+
* `PropertyDescriptor & ThisType<any>`, so a `dynamic` operand reaches the
|
|
545
|
+
* call's slot unconverted -- there is no conversion to demand -- but the
|
|
546
|
+
* printer materializes a descriptor only from a carrier that states which
|
|
547
|
+
* fields and attributes are present (an object literal record, or the record
|
|
548
|
+
* `getOwnPropertyDescriptor` hands back), and refuses a box by name. The old
|
|
549
|
+
* `preflight/invocation-arguments.ts` stated this rule for the plan; it is
|
|
550
|
+
* restated here for the IR so the refusal is a certification verdict rather
|
|
551
|
+
* than a print-time surprise on a certified program.
|
|
552
|
+
*
|
|
553
|
+
* `dynamicArgumentHostParameters` is the waiver: a member/position listed
|
|
554
|
+
* there takes the box through unconditionally (`defineProperty`'s KEY is
|
|
555
|
+
* listed, its descriptor deliberately is not -- `host/dynamic-argument-
|
|
556
|
+
* members.ts` states why per row), so a waived position is never refused.
|
|
557
|
+
*/
|
|
558
|
+
const hostArgumentDemandOf = (operation, ctx) => {
|
|
559
|
+
const member = hostMemberOfCall(ctx, operation);
|
|
560
|
+
if (member !== 'ObjectConstructor.defineProperty')
|
|
561
|
+
return [];
|
|
562
|
+
const waivers = ctx.manifest.dynamicArgumentHostParameters;
|
|
563
|
+
return operation.arguments.flatMap((argument, ordinal) => {
|
|
564
|
+
if (argument.representation.kind !== 'dynamic' || ordinal !== 2)
|
|
565
|
+
return [];
|
|
566
|
+
if (waivers?.has(`${member}:argument:${ordinal}`) || waivers?.has(`${member}:argument:*`))
|
|
567
|
+
return [];
|
|
568
|
+
return [
|
|
569
|
+
{
|
|
570
|
+
key: `host-member-call:${member}`,
|
|
571
|
+
verdict: 'unsupported',
|
|
572
|
+
detail: `"${member}" was passed a "${representationKey(argument.representation)}" descriptor; a descriptor is either one this ` +
|
|
573
|
+
'program received from Object.getOwnPropertyDescriptor or an object literal whose fields the checker knows, and a box ' +
|
|
574
|
+
'states neither which attributes it means to set nor with what'
|
|
575
|
+
}
|
|
576
|
+
];
|
|
577
|
+
});
|
|
578
|
+
};
|
|
579
|
+
// ---------------------------------------------------------------------------
|
|
580
|
+
export const propertyAccessKeysOf = (operation, ctx) => {
|
|
581
|
+
switch (operation.kind) {
|
|
582
|
+
case 'get':
|
|
583
|
+
case 'set':
|
|
584
|
+
case 'delete':
|
|
585
|
+
case 'define-own-property':
|
|
586
|
+
case 'own-property-keys':
|
|
587
|
+
return accessDemandOf(operation, ctx);
|
|
588
|
+
case 'has-property':
|
|
589
|
+
return [{ key: `runtime-helper:${hasPropertyRuntimeHelperKey(operation, ctx)}` }];
|
|
590
|
+
case 'compute':
|
|
591
|
+
return operation.form === 'instanceof' ? [{ key: `runtime-helper:${instanceofRuntimeHelperKey(operation.operands, ctx)}` }] : [];
|
|
592
|
+
case 'call':
|
|
593
|
+
return [...atomicsDemandOf(operation, ctx), ...hostArgumentDemandOf(operation, ctx)];
|
|
594
|
+
default:
|
|
595
|
+
return [];
|
|
596
|
+
}
|
|
597
|
+
};
|