@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,69 @@
|
|
|
1
|
+
import type { DefineOwnPropertyOperation, GetOperation, IrBody, IrOperand, IrResult, SetOperation } from '../../../ir/model.js';
|
|
2
|
+
import type { DeclarationId, IrValueId } from '../../../identity/ids.js';
|
|
3
|
+
import { type EmitContext, type HostMemberRead, type PrototypeMethodRead } from '../emit-context.js';
|
|
4
|
+
import { type HostSpellings } from './host-members.js';
|
|
5
|
+
import type { HostMethodAlias } from './host-method-aliases.js';
|
|
6
|
+
/** A declaration-bound host method can share a native carrier with ordinary language objects. */
|
|
7
|
+
export declare const declaredHostMethodRead: (ctx: EmitContext, operation: GetOperation) => boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Whether a native-handle member read is a host intrinsic's own REFLECTION
|
|
10
|
+
* method (`Math.hasOwnProperty`) rather than a member of its protocol.
|
|
11
|
+
*
|
|
12
|
+
* Stated once; `nativeHostMemberText` and the prototype-read walk both ask it.
|
|
13
|
+
* Gated on the protocol actually being classified, so an unclassified
|
|
14
|
+
* native-handle protocol still falls through to the ordinary "claimed by no
|
|
15
|
+
* host member table" refusal rather than silently answering here.
|
|
16
|
+
*/
|
|
17
|
+
export declare const deferredIntrinsicReflectionClaim: (hosts: HostSpellings, staticKeyTexts: ReadonlyMap<IrValueId, string>, receiver: IrOperand, key: IrOperand) => PrototypeMethodRead | null;
|
|
18
|
+
export declare const nativeHostMemberText: (ctx: EmitContext, receiver: IrOperand, key: IrOperand, result: IrResult | null) => string | null;
|
|
19
|
+
/**
|
|
20
|
+
* A write to a data property of a host object.
|
|
21
|
+
*
|
|
22
|
+
* The mirror of `nativeHandleMemberText`'s read, and keyed the same way: by the
|
|
23
|
+
* carrier the host stated, falling back to the declared protocol name for a
|
|
24
|
+
* singleton that has no type of its own. A host object is not a struct this
|
|
25
|
+
* compiler lays out, so a write is the host's own spelling with `{value}`
|
|
26
|
+
* filled in -- never a `->` member assignment into a layout that does not
|
|
27
|
+
* exist.
|
|
28
|
+
*
|
|
29
|
+
* Every failure is refused by name, and none of them is answered by inventing
|
|
30
|
+
* a spelling. A member no table claims, a member claimed read-only, a
|
|
31
|
+
* non-constant key: each is a boundary this compiler was told nothing about,
|
|
32
|
+
* and a guess there writes to a symbol the host never declared.
|
|
33
|
+
*/
|
|
34
|
+
export declare const emitNativeHostStore: (ctx: EmitContext, lines: string[], operation: SetOperation | DefineOwnPropertyOperation, label: string) => boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Every deferred host member read of one body, decided from settled facts
|
|
37
|
+
* alone -- the census half of `nativeHostMemberText` and `declaredHostMethodRead`.
|
|
38
|
+
*
|
|
39
|
+
* This is the same question those two answer while they render, asked of the
|
|
40
|
+
* IR before anything renders: which `get` publishes a value that is a host
|
|
41
|
+
* METHOD reached but not materialised. Every input is settled -- the receiver's
|
|
42
|
+
* carrier, the key's constant text, the unioned `HostSpellings`, and
|
|
43
|
+
* `hostClassReads` -- so nothing here waits on a line being printed.
|
|
44
|
+
*
|
|
45
|
+
* This is the ONLY place the question is answered. `nativeHostMemberText` and
|
|
46
|
+
* `declaredHostMethodRead` do not re-test it -- they ask this map and then
|
|
47
|
+
* spell whichever answer it gave, which is what keeps one fact to one
|
|
48
|
+
* authority rather than two implementations that happen to agree. The
|
|
49
|
+
* call-site-arity carve-out is stated here for the same reason: it is part of
|
|
50
|
+
* "is this read deferred", not part of how either answer is printed.
|
|
51
|
+
*
|
|
52
|
+
* What this does NOT reproduce is `emitGet`'s branch LADDER -- whether some
|
|
53
|
+
* resolver AHEAD of `nativeHostMemberText` claims the same `get` first. That
|
|
54
|
+
* was checked rather than assumed, once, during the move: the walk ran beside
|
|
55
|
+
* the render-time map it replaced across both emitted sets (154 corpus + 281
|
|
56
|
+
* runtime), and no read the printer recorded was missing or different, with
|
|
57
|
+
* every one of the 1027 extras the `<value>:present` twin below. That was
|
|
58
|
+
* migration evidence, not a standing guarantee -- the guarantee is that
|
|
59
|
+
* nothing else decides any more.
|
|
60
|
+
*
|
|
61
|
+
* The one place the census must anticipate the ladder is the optional
|
|
62
|
+
* receiver: `emitGet` unwraps `a?.b` and re-enters with the proven-present
|
|
63
|
+
* view, so a read off an `optional` carrier records the `<value>:present`
|
|
64
|
+
* operand `unwrapPresentValue` mints, not the optional itself. The twin is
|
|
65
|
+
* stated unconditionally for the same reason `hostClassReadsOf` states its
|
|
66
|
+
* own: if a value IS a deferred host member then so is the value proven
|
|
67
|
+
* present, and the twin is not an SSA value any walk could otherwise observe.
|
|
68
|
+
*/
|
|
69
|
+
export declare const hostMemberReadsOf: (body: IrBody, hosts: HostSpellings, staticKeyTexts: ReadonlyMap<IrValueId, string>, hostClassReads: ReadonlyMap<IrValueId, unknown>, hostMethodAliases: ReadonlyMap<DeclarationId, HostMethodAlias>) => ReadonlyMap<IrValueId, HostMemberRead>;
|
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
import { allOperationsOf } from '../../../ir/model.js';
|
|
2
|
+
import { operandsOfIrOperation } from '../../../ir/queries.js';
|
|
3
|
+
import { callSiteHostReadIsDeferred, hostReceiverProtocolOf } from '../../../representation/host-templates.js';
|
|
4
|
+
import { createCppEmitBlockedError, defineValue, operandText } from '../emit-context.js';
|
|
5
|
+
import { fillHostTemplate, hostIntrinsicLengthOf, hostMemberOf } from './host-members.js';
|
|
6
|
+
import { staticKeyTextOf } from '../emit-properties.js';
|
|
7
|
+
import { objectShapePrototypeMethods } from '../../../projection/callee.js';
|
|
8
|
+
import { cppStringLiteral } from '../types.js';
|
|
9
|
+
import { boxedValueText, propertyKeyText, unboxedReadText } from '../emit-dynamic-properties.js';
|
|
10
|
+
import { intrinsicMemberValueOf } from './emit-host-object.js';
|
|
11
|
+
import { hostPrototypeMethodSignatureText, hostPrototypeMethodValueText } from './emit-host-value.js';
|
|
12
|
+
import { alignedValueText } from '../emit-narrowing.js';
|
|
13
|
+
/** A declaration-bound host method can share a native carrier with ordinary language objects. */
|
|
14
|
+
export const declaredHostMethodRead = (ctx, operation) => {
|
|
15
|
+
const binding = operation.hostMethod;
|
|
16
|
+
if (!binding)
|
|
17
|
+
return false;
|
|
18
|
+
// Asked, not re-derived: `hostMemberReadsOf` claims exactly the bindings
|
|
19
|
+
// whose row is a method, so a binding it declined is one the host table
|
|
20
|
+
// states no implementation for -- which is worth saying by name here, where
|
|
21
|
+
// the protocol and member the program wrote are in hand.
|
|
22
|
+
if (ctx.hostMemberReads.has(operation.result.id))
|
|
23
|
+
return true;
|
|
24
|
+
throw createCppEmitBlockedError(`host-invocation:${binding.protocol}.${binding.member}`, `the resolved host method "${binding.protocol}.${binding.member}" has no implementation`);
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* A host object's data properties, in both directions.
|
|
28
|
+
*
|
|
29
|
+
* A host object is not a struct this compiler lays out: its members are the
|
|
30
|
+
* host's own implementation, reached by a spelling the host defines and states
|
|
31
|
+
* in a `HostMemberTable`. Both directions live here together, because they are
|
|
32
|
+
* one question asked twice -- which table claims this member, under which key --
|
|
33
|
+
* and answering it in two files is how a read and a write come to disagree
|
|
34
|
+
* about what a protocol is called.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* A host method with no fixed ABI (`arity: 'call-site'` -- `Array.from`,
|
|
38
|
+
* `Array.isArray`), read as a bare VALUE rather than called: `describe(Array.from,
|
|
39
|
+
* 'name')` (`test/runtime/static-intrinsic-reflection.runtime.js`) passes it as
|
|
40
|
+
* an ordinary argument.
|
|
41
|
+
*
|
|
42
|
+
* ECMA-262 gives `Array.from` a real function object with its own `name`/`length`
|
|
43
|
+
* data properties (10.2.4 `SetFunctionName`/`SetFunctionLength`) -- but its
|
|
44
|
+
* overload set has no single physical parameter frame for THIS backend's native
|
|
45
|
+
* callable convention to capture (the same "unjoinable overload set" reason
|
|
46
|
+
* `emit-callable.ts`'s `emitConstruct` already names for `Date`/`RegExp`/typed
|
|
47
|
+
* arrays), so it cannot be a native `CallableObject` value. This is one of the
|
|
48
|
+
* four sanctioned dynamic boundaries: a genuinely dynamic JS boundary
|
|
49
|
+
* (`docs/ARCHITECTURE.md`) with no native representation, not a typed value
|
|
50
|
+
* boxed to dodge a native answer.
|
|
51
|
+
*
|
|
52
|
+
* The box is real, not a stub that happens to answer two properties: it IS a
|
|
53
|
+
* `gea::Value::Tag::Function`, and `Value::ownDescriptor` (`gea_dynamic_proxy.h`)
|
|
54
|
+
* already reads a Function box's reflection from `functionProperties_` -- so
|
|
55
|
+
* setting `name`/`length` there, with ECMA-262's own attributes for a builtin's
|
|
56
|
+
* own name/length (10.2.4: non-writable, non-enumerable, configurable), makes
|
|
57
|
+
* `Object.getOwnPropertyDescriptor(Array.from, 'name'|'length')` answer through
|
|
58
|
+
* the SAME runtime path an ordinary dynamic function does, with no runtime
|
|
59
|
+
* change needed. The underlying callable is never invoked by anything this
|
|
60
|
+
* probe's own reflection questions reach -- `describe` never calls its `obj`
|
|
61
|
+
* argument -- so a captureless no-op stub is what it wraps; a program that DID
|
|
62
|
+
* call it back would need a real per-member ABI this table does not have.
|
|
63
|
+
*/
|
|
64
|
+
const dynamicHostFunctionValueText = (protocol, member, arity) => {
|
|
65
|
+
const nameProperty = `gea::PropertyDescriptor{.hasValue = true, .hasWritable = true, .hasEnumerable = true, .hasConfigurable = true, ` +
|
|
66
|
+
`.value = gea::Value::box(gea::Value::Tag::String, std::string(${cppStringLiteral(member)})), ` +
|
|
67
|
+
'.writable = false, .enumerable = false, .configurable = true}';
|
|
68
|
+
const lengthProperty = `gea::PropertyDescriptor{.hasValue = true, .hasWritable = true, .hasEnumerable = true, .hasConfigurable = true, ` +
|
|
69
|
+
`.value = gea::Value::box(gea::Value::Tag::Number, static_cast<double>(${arity ?? 0})), ` +
|
|
70
|
+
'.writable = false, .enumerable = false, .configurable = true}';
|
|
71
|
+
return ('([&]() -> gea::Value { ' +
|
|
72
|
+
'auto __gea_fn = gea::Value::box(gea::Value::Tag::Function, gea::CallableObject<void()>(+[](void*) {}, nullptr)); ' +
|
|
73
|
+
`__gea_fn.functionProperties()->defineOwnProperty(gea::PropertyKey::string("name"), ${nameProperty}); ` +
|
|
74
|
+
`__gea_fn.functionProperties()->defineOwnProperty(gea::PropertyKey::string("length"), ${lengthProperty}); ` +
|
|
75
|
+
`return __gea_fn; })() /* "${protocol}.${member}" -- see dynamicHostFunctionValueText */`);
|
|
76
|
+
};
|
|
77
|
+
/** Asked of `representation/host-templates.ts`, which the IR's host-template routing asks too. */
|
|
78
|
+
const nativeHostProtocol = (receiver) => hostReceiverProtocolOf(receiver.representation);
|
|
79
|
+
/**
|
|
80
|
+
* Whether a native-handle member read is a host intrinsic's own REFLECTION
|
|
81
|
+
* method (`Math.hasOwnProperty`) rather than a member of its protocol.
|
|
82
|
+
*
|
|
83
|
+
* Stated once; `nativeHostMemberText` and the prototype-read walk both ask it.
|
|
84
|
+
* Gated on the protocol actually being classified, so an unclassified
|
|
85
|
+
* native-handle protocol still falls through to the ordinary "claimed by no
|
|
86
|
+
* host member table" refusal rather than silently answering here.
|
|
87
|
+
*/
|
|
88
|
+
export const deferredIntrinsicReflectionClaim = (hosts, staticKeyTexts, receiver, key) => {
|
|
89
|
+
const hostProtocol = nativeHostProtocol(receiver);
|
|
90
|
+
if (hostProtocol === null)
|
|
91
|
+
return null;
|
|
92
|
+
const staticKey = staticKeyTexts.get(key.value);
|
|
93
|
+
if (staticKey === undefined || !objectShapePrototypeMethods.has(staticKey))
|
|
94
|
+
return null;
|
|
95
|
+
if (!hosts.intrinsicMembers.has(hostProtocol.protocol))
|
|
96
|
+
return null;
|
|
97
|
+
return {
|
|
98
|
+
receiverKind: 'native-handle-shape',
|
|
99
|
+
member: staticKey,
|
|
100
|
+
receiver: { kind: 'none' },
|
|
101
|
+
receiverElement: null,
|
|
102
|
+
intrinsicProtocol: hostProtocol.protocol
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
export const nativeHostMemberText = (ctx, receiver, key, result) => {
|
|
106
|
+
const hostProtocol = nativeHostProtocol(receiver);
|
|
107
|
+
if (hostProtocol === null)
|
|
108
|
+
return null;
|
|
109
|
+
const representation = receiver.representation;
|
|
110
|
+
const protocol = representation.kind === 'native-handle' ? representation.protocol : hostProtocol.protocol;
|
|
111
|
+
// Members are keyed by the carrier when the host stated one, and by the
|
|
112
|
+
// declared name when it did not (`Console`, `Storage`, `JSON` -- singletons
|
|
113
|
+
// with no type of their own). This is what removes the inheritance miss this
|
|
114
|
+
// function's own comment below records: `HTMLElement.getAttribute` and
|
|
115
|
+
// `Element.getAttribute` are one key once both carry `NodeHandle`, so there
|
|
116
|
+
// is no step for a flat lookup to fail to walk. Diagnostics below keep
|
|
117
|
+
// naming `protocol`, because that is the name the program wrote.
|
|
118
|
+
const memberProtocol = hostProtocol.protocol;
|
|
119
|
+
// A claim, not a fold: this decides whether the access is a STATIC member at
|
|
120
|
+
// all (falls through to the computed-key path below when it is not), so it
|
|
121
|
+
// must not see a key text `constantTexts` only holds because the render
|
|
122
|
+
// minted it (e.g. a folded `typeof` result reaching here via a computed key).
|
|
123
|
+
const staticKey = ctx.staticKeyTexts.get(key.value);
|
|
124
|
+
if (staticKey === undefined) {
|
|
125
|
+
const computed = representation.kind === 'native-handle' ? computedNativeHandleGetText(ctx, receiver, key, result, protocol, memberProtocol) : null;
|
|
126
|
+
if (computed !== null)
|
|
127
|
+
return computed;
|
|
128
|
+
if (!hostProtocol.strict)
|
|
129
|
+
return null;
|
|
130
|
+
// No specific member name survives past this point -- the key is
|
|
131
|
+
// genuinely computed -- so the subject is the receiver's own computed-get
|
|
132
|
+
// capability, exactly `ir/certify.ts`'s own `property-access` spelling.
|
|
133
|
+
throw createCppEmitBlockedError('property-access:native-handle:get:true', `a "${protocol}" host handle has no runtime member table; a property access keyed by a non-constant key has no rendering`);
|
|
134
|
+
}
|
|
135
|
+
// Deferred, and NOT decided here: `hostMemberReadsOf` settled which reads
|
|
136
|
+
// are deferred host members before this body rendered a line, and this asks
|
|
137
|
+
// it. The tests that used to stand in this function -- is the row a method,
|
|
138
|
+
// is this the call-site-arity carve-out -- moved there whole rather than
|
|
139
|
+
// being repeated at both ends; what is left in this file is the two
|
|
140
|
+
// SPELLINGS and the refusals that name a host table.
|
|
141
|
+
if (result !== null && ctx.hostMemberReads.has(result.id))
|
|
142
|
+
return '';
|
|
143
|
+
// `hasOwnProperty`/`propertyIsEnumerable` reached off a native-handle
|
|
144
|
+
// receiver (`Math.hasOwnProperty(...)`, or `Object.prototype.hasOwnProperty
|
|
145
|
+
// .call(Math, ...)` after the borrowed-call rewrite retargets its receiver
|
|
146
|
+
// to `Math`) -- the identical deferred GET-then-CALL split
|
|
147
|
+
// `objectShapePrototypeMemberRead` makes for a record/class-ref receiver,
|
|
148
|
+
// for the identical reason: neither name is a row `hostMemberOf` could ever
|
|
149
|
+
// claim (they are `Object.prototype`'s own, not `Math`'s), and answering
|
|
150
|
+
// them from `Math`'s static reflection table is this file's own subject.
|
|
151
|
+
// Gated on the protocol actually being classified (`intrinsicMembers.has`)
|
|
152
|
+
// so an unclassified native-handle protocol still falls through to this
|
|
153
|
+
// function's ordinary "claimed by no host member table" refusal below,
|
|
154
|
+
// rather than this arm silently answering `false` for one whose own
|
|
155
|
+
// members were never read at all.
|
|
156
|
+
if (deferredIntrinsicReflectionClaim(ctx.hosts, ctx.staticKeyTexts, receiver, key) !== null) {
|
|
157
|
+
if (result === null) {
|
|
158
|
+
throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is a host intrinsic's reflection method, and this access publishes no value for its call to consume`);
|
|
159
|
+
}
|
|
160
|
+
return '';
|
|
161
|
+
}
|
|
162
|
+
// A member the host states a spelling for. A data property is a value and
|
|
163
|
+
// renders here; a method is not a value at all -- only its call names a host
|
|
164
|
+
// symbol -- so the access records what was reached and `emitCall` renders it.
|
|
165
|
+
const host = hostMemberOf(ctx.hosts.members, memberProtocol, staticKey);
|
|
166
|
+
// Native records may also be compiler-owned runtime types (Date, RegExp,
|
|
167
|
+
// String objects). Their dedicated emitters and sidecars remain the owner
|
|
168
|
+
// when no authenticated host row claims this key. Native handles, by
|
|
169
|
+
// contrast, have no other storage and retain their fail-closed behavior.
|
|
170
|
+
if (host === undefined && !hostProtocol.strict)
|
|
171
|
+
return null;
|
|
172
|
+
if (host === undefined && memberProtocol.endsWith('.prototype')) {
|
|
173
|
+
const member = ctx.hosts.intrinsicMembers.get(memberProtocol)?.find((candidate) => candidate.name === staticKey);
|
|
174
|
+
const signature = result === null ? null : hostPrototypeMethodSignatureText(result.representation);
|
|
175
|
+
if (member?.kind !== 'method' || signature === null) {
|
|
176
|
+
throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is a prototype member this backend renders only as a reflectable method value; this read is ` +
|
|
177
|
+
(member === undefined ? 'of no such member' : member.kind === 'value' ? 'of a data member' : 'not typed as a callable value'));
|
|
178
|
+
}
|
|
179
|
+
return hostPrototypeMethodValueText(signature, memberProtocol, staticKey, hostIntrinsicLengthOf(memberProtocol, staticKey, member.arity));
|
|
180
|
+
}
|
|
181
|
+
if (host?.kind === 'property') {
|
|
182
|
+
// A member the host states only a write for is refused here rather than
|
|
183
|
+
// read through its store template: `(...).frame = {value}` is not an
|
|
184
|
+
// expression that answers what `view.frame` is, and rendering it as one
|
|
185
|
+
// would emit a write where the program asked for a read.
|
|
186
|
+
if (host.emit === null) {
|
|
187
|
+
throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is claimed as a host property with no read spelling, so this access has nothing to render`);
|
|
188
|
+
}
|
|
189
|
+
// A class member has no receiver to render, the same fact and the same
|
|
190
|
+
// reason the 'method' branch below already states: the host names the
|
|
191
|
+
// class outright (`gea::host::StringConstructor::fromCharCode`, a
|
|
192
|
+
// qualified static symbol with no `{receiver}` slot to fill), and a
|
|
193
|
+
// template that does not name one is filled fine with `null`. Asking
|
|
194
|
+
// `operandText` for the class's own value unconditionally -- this used
|
|
195
|
+
// to -- refused every such property by name (`host-class-value`) even
|
|
196
|
+
// though nothing here reads the receiver's text: `String.fromCharCode`
|
|
197
|
+
// is a property access on the `String` class object, not on an instance.
|
|
198
|
+
const receiverText = ctx.hostClassReads.has(receiver.value) ? null : operandText(ctx, receiver);
|
|
199
|
+
const filled = fillHostTemplate(host.emit, receiverText, []);
|
|
200
|
+
if (filled === null) {
|
|
201
|
+
throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `the "${protocol}.${staticKey}" host template names a slot this access cannot fill`);
|
|
202
|
+
}
|
|
203
|
+
// The template owns its native result carrier. Inferring it from the
|
|
204
|
+
// property name claimed Array.prototype's ArrayObject was a NativeHandle
|
|
205
|
+
// and refused a read whose source and destination actually agree.
|
|
206
|
+
if (host.resultRepresentation !== undefined && result !== null) {
|
|
207
|
+
const converted = alignedValueText(ctx, 'host/emit-host-properties.ts:239', host.resultRepresentation, result.representation, filled);
|
|
208
|
+
if (converted !== null)
|
|
209
|
+
return converted;
|
|
210
|
+
}
|
|
211
|
+
// A builtin function read as a VALUE (`const alias = Math.imul`) is a copy
|
|
212
|
+
// of the host's one static `CallableObject`, and a copy mints no identity
|
|
213
|
+
// (`gea_runtime.h`). Two such reads compared unequal to each other and to
|
|
214
|
+
// the builtin itself. `identified()` mints on the static first, so every
|
|
215
|
+
// copy shares it. A read that is only ever CALLED (`Math.pow(x)`, the
|
|
216
|
+
// ordinary spelling of every builtin call) is left alone: identity is
|
|
217
|
+
// observable only where the value goes somewhere other than a call, and
|
|
218
|
+
// the minted identity is a `Ref` every copy would otherwise count in and
|
|
219
|
+
// out of on the hot call path.
|
|
220
|
+
const kind = result?.representation.kind;
|
|
221
|
+
const callable = kind === 'function-value-dispatch' ||
|
|
222
|
+
kind === 'function' ||
|
|
223
|
+
kind === 'function-and-constructor' ||
|
|
224
|
+
kind === 'constructor-value-dispatch';
|
|
225
|
+
if (callable && result !== null && !ctx.calleeOnlyValues.has(result.id))
|
|
226
|
+
return `${filled}.identified()`;
|
|
227
|
+
return filled;
|
|
228
|
+
}
|
|
229
|
+
if (host?.kind === 'method') {
|
|
230
|
+
if (result === null) {
|
|
231
|
+
throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is a host method, and this access publishes no value for its call to consume`);
|
|
232
|
+
}
|
|
233
|
+
// Reaching here means `hostMemberReadsOf` did NOT claim the read, and for
|
|
234
|
+
// a host method row that leaves exactly one answer: a call-site-arity row
|
|
235
|
+
// (`arity: 'call-site'`) read bare into a `dynamic` destination --
|
|
236
|
+
// `describe(Array.from, 'name')` -- has no native callable convention to
|
|
237
|
+
// fuse with, and is boxed as a function value instead (see
|
|
238
|
+
// `dynamicHostFunctionValueText`'s own comment for why that is sanctioned).
|
|
239
|
+
// The same row read into a NATIVE destination is deferred, and that
|
|
240
|
+
// distinction is stated once, where the claim is made.
|
|
241
|
+
const arity = ctx.hosts.intrinsicMembers.get(memberProtocol)?.find((candidate) => candidate.name === staticKey)?.arity ?? null;
|
|
242
|
+
return dynamicHostFunctionValueText(protocol, staticKey, arity);
|
|
243
|
+
}
|
|
244
|
+
// Nothing claims this member, and there is no spelling to invent for it.
|
|
245
|
+
//
|
|
246
|
+
// This used to interpolate `gea::host::<protocol>::<key>` here, for the
|
|
247
|
+
// singleton members that really do have such a symbol (`Math::pow` and
|
|
248
|
+
// friends). Those are `coreHostMembers` rows now, resolved by the
|
|
249
|
+
// `property` branch above, because the interpolation could not tell them
|
|
250
|
+
// apart from anything else: it answered for EVERY unclaimed member of EVERY
|
|
251
|
+
// native-handle protocol. `Promise.resolve` and `Math.acos` are claimed
|
|
252
|
+
// protocols with no such symbol; `HTMLElement.getAttribute` is a member the
|
|
253
|
+
// table declares one inheritance step away, on `Element`, which
|
|
254
|
+
// `hostMemberOf`'s flat `<protocol>.<member>` lookup does not walk up to.
|
|
255
|
+
// All three were spelled anyway and all three failed in clang as "no member
|
|
256
|
+
// named ... in namespace 'gea::host'", which names neither the access that
|
|
257
|
+
// caused it nor the table that failed to claim it.
|
|
258
|
+
//
|
|
259
|
+
// So this refuses by name instead, at the layer that knows both. The
|
|
260
|
+
// registry deciding which members have an implementation is `hostMembers`
|
|
261
|
+
// itself -- the same shape `emit-host-invoke.ts` gives the call half, where
|
|
262
|
+
// an unregistered protocol refuses against `hostInvocations` rather than
|
|
263
|
+
// being handed a constructed symbol.
|
|
264
|
+
throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is claimed by no host member table -- neither this backend's own (host-members.ts) nor any ` +
|
|
265
|
+
"plugin's states a spelling for it, so there is no host symbol to name");
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* A write to a data property of a host object.
|
|
269
|
+
*
|
|
270
|
+
* The mirror of `nativeHandleMemberText`'s read, and keyed the same way: by the
|
|
271
|
+
* carrier the host stated, falling back to the declared protocol name for a
|
|
272
|
+
* singleton that has no type of its own. A host object is not a struct this
|
|
273
|
+
* compiler lays out, so a write is the host's own spelling with `{value}`
|
|
274
|
+
* filled in -- never a `->` member assignment into a layout that does not
|
|
275
|
+
* exist.
|
|
276
|
+
*
|
|
277
|
+
* Every failure is refused by name, and none of them is answered by inventing
|
|
278
|
+
* a spelling. A member no table claims, a member claimed read-only, a
|
|
279
|
+
* non-constant key: each is a boundary this compiler was told nothing about,
|
|
280
|
+
* and a guess there writes to a symbol the host never declared.
|
|
281
|
+
*/
|
|
282
|
+
export const emitNativeHostStore = (ctx, lines, operation, label) => {
|
|
283
|
+
const representation = operation.receiver.representation;
|
|
284
|
+
const hostProtocol = nativeHostProtocol(operation.receiver);
|
|
285
|
+
if (hostProtocol === null)
|
|
286
|
+
return false;
|
|
287
|
+
const protocol = representation.kind === 'native-handle' ? representation.protocol : hostProtocol.protocol;
|
|
288
|
+
const memberProtocol = hostProtocol.protocol;
|
|
289
|
+
const receiverText = ctx.hostClassReads.has(operation.receiver.value) ? null : operandText(ctx, operation.receiver);
|
|
290
|
+
// A claim, not a fold: this decides whether the store is a STATIC member at
|
|
291
|
+
// all (falls through to the computed-key store below when it is not), so it
|
|
292
|
+
// must not see a key text `constantTexts` only holds because the render
|
|
293
|
+
// minted it (e.g. a folded `typeof` result reaching here via a computed key).
|
|
294
|
+
if (!ctx.staticKeyTexts.has(operation.key.value)) {
|
|
295
|
+
if (representation.kind === 'native-handle' && emitComputedNativeHandleStore(ctx, lines, operation, label, receiverText))
|
|
296
|
+
return true;
|
|
297
|
+
if (!hostProtocol.strict)
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
const staticKey = staticKeyTextOf(ctx, operation.key, `a "${label}" operation on a "${protocol}" host handle`);
|
|
301
|
+
const host = hostMemberOf(ctx.hosts.members, memberProtocol, staticKey);
|
|
302
|
+
if (host === undefined && !hostProtocol.strict)
|
|
303
|
+
return false;
|
|
304
|
+
if (host?.kind !== 'property' || host.store === null) {
|
|
305
|
+
throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}.write`, `writing "${protocol}.${staticKey}" is claimed by no host member table as a settable property, so there is no host symbol to assign through`);
|
|
306
|
+
}
|
|
307
|
+
const filled = fillHostTemplate(host.store, receiverText, [], null, operandText(ctx, operation.value));
|
|
308
|
+
if (filled === null) {
|
|
309
|
+
throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}.write`, `the "${protocol}.${staticKey}" host store template names a slot this write cannot fill`);
|
|
310
|
+
}
|
|
311
|
+
lines.push(`${filled};`);
|
|
312
|
+
// Threaded onward as the receiver, for the reason every other store branch
|
|
313
|
+
// states: a store has no failure to report, and what a consumer reads next
|
|
314
|
+
// is the object written into.
|
|
315
|
+
if (operation.result) {
|
|
316
|
+
// A store threads its receiver onward. When that receiver IS the host
|
|
317
|
+
// object there is no value to name, and the result's own identity is
|
|
318
|
+
// already stated by `emit-bindings.ts`'s `hostClassReadsOf`.
|
|
319
|
+
if (!ctx.hostClassReads.has(operation.receiver.value))
|
|
320
|
+
lines.push(`${defineValue(ctx, operation.result)} = ${receiverText};`);
|
|
321
|
+
}
|
|
322
|
+
return true;
|
|
323
|
+
};
|
|
324
|
+
/**
|
|
325
|
+
* A COMPUTED key on a namespace-shaped native-handle (`Math`, and any other
|
|
326
|
+
* classified intrinsic with no host C++ type of its own): `obj[name]` where
|
|
327
|
+
* `name` is a runtime string or symbol.
|
|
328
|
+
*
|
|
329
|
+
* A host singleton has no runtime member table, so the dispatch is the static
|
|
330
|
+
* one this compiler already owns -- the protocol's classified member list
|
|
331
|
+
* (`intrinsicMembers`), each member's value spelled by
|
|
332
|
+
* `intrinsicMemberValueOf` -- rendered as a name comparison chain. The result
|
|
333
|
+
* is a `gea::Value` by construction and that is not the forbidden shortcut:
|
|
334
|
+
* the checker itself types `Math[k]` with a runtime `k` as `any` (the union
|
|
335
|
+
* of a number constant and forty function objects is a value whose static
|
|
336
|
+
* type genuinely depends on the key), and only a `dynamic` destination is
|
|
337
|
+
* rendered here; any other published carrier is refused by name.
|
|
338
|
+
*
|
|
339
|
+
* In front of the static chain sits `gea::detail::hostIntrinsicSidecar`, the
|
|
340
|
+
* one per-protocol table a program can CHANGE at runtime -- the dynamic-
|
|
341
|
+
* property sidecar every native type gets rather than a box (see
|
|
342
|
+
* `gea::runtime::regex::Pattern`'s). A computed write to a writable member or
|
|
343
|
+
* a fresh key lands there and shadows the static answer; a computed delete of
|
|
344
|
+
* a configurable member marks it removed; a non-writable member ignores the
|
|
345
|
+
* store and a non-configurable one refuses the delete, exactly as ECMA-262's
|
|
346
|
+
* ordinary [[Set]]/[[Delete]] answer for the attributes the member has. What
|
|
347
|
+
* the sidecar does NOT reach is a CONSTANT-key read (`Math.pow`), which
|
|
348
|
+
* renders the host symbol directly: a program that writes `Math['pow'] = f`
|
|
349
|
+
* through a runtime key and then calls `Math.pow` by name still calls the
|
|
350
|
+
* host's. test262's `verifyProperty` restores what it writes and reads back
|
|
351
|
+
* through the same computed path, so the two never disagree there.
|
|
352
|
+
*/
|
|
353
|
+
const namespaceIntrinsicMembersOf = (ctx, receiver) => {
|
|
354
|
+
if (receiver.representation.kind !== 'native-handle' || receiver.representation.native !== null)
|
|
355
|
+
return null;
|
|
356
|
+
return ctx.hosts.intrinsicMembers.get(receiver.representation.protocol) ?? null;
|
|
357
|
+
};
|
|
358
|
+
const computedNativeHandleGetText = (ctx, receiver, key, result, protocol, memberProtocol) => {
|
|
359
|
+
const members = namespaceIntrinsicMembersOf(ctx, receiver);
|
|
360
|
+
if (members === null)
|
|
361
|
+
return null;
|
|
362
|
+
const site = `a computed "get" on a "${protocol}" host handle`;
|
|
363
|
+
if (result === null) {
|
|
364
|
+
// Same subject as `nativeHostMemberText`'s own computed-key refusal above:
|
|
365
|
+
// a computed `[[Get]]` on a native-handle receiver, keyed generically
|
|
366
|
+
// rather than by member -- no member name survives a genuinely computed key.
|
|
367
|
+
throw createCppEmitBlockedError('property-access:native-handle:get:true', `${site} publishes no value for its consumer to read`);
|
|
368
|
+
}
|
|
369
|
+
const arms = members
|
|
370
|
+
.map((member) => `if (__gea_name == ${cppStringLiteral(member.name)}) return ${intrinsicMemberValueOf(ctx, memberProtocol, member, site).value};`)
|
|
371
|
+
.join(' ');
|
|
372
|
+
const read = `([&]() -> gea::Value { const gea::PropertyKey __gea_key = ${propertyKeyText(ctx, key, site)}; ` +
|
|
373
|
+
`auto& __gea_side = gea::detail::hostIntrinsicSidecar(${cppStringLiteral(memberProtocol)}); ` +
|
|
374
|
+
`if (__gea_side.hasOverride(__gea_key)) return __gea_side.get(__gea_key); if (__gea_side.isRemoved(__gea_key)) return gea::Value{}; ` +
|
|
375
|
+
`if (!__gea_key.isSymbol()) { const std::string& __gea_name = __gea_key.text(); ${arms} } return gea::Value{}; })()`;
|
|
376
|
+
return unboxedReadText(result.representation, read, site);
|
|
377
|
+
};
|
|
378
|
+
const emitComputedNativeHandleStore = (ctx, lines, operation, label, receiverText) => {
|
|
379
|
+
const members = namespaceIntrinsicMembersOf(ctx, operation.receiver);
|
|
380
|
+
if (members === null || operation.receiver.representation.kind !== 'native-handle')
|
|
381
|
+
return false;
|
|
382
|
+
const { protocol } = operation.receiver.representation;
|
|
383
|
+
const site = `a computed "${label}" on a "${protocol}" host handle`;
|
|
384
|
+
// A non-writable member ignores the write (10.1.9.2 step 2.a, sloppy mode's
|
|
385
|
+
// silent half); a writable one keeps its attributes through the override
|
|
386
|
+
// (`setMember`); a key the table lacks becomes an ordinary property.
|
|
387
|
+
const arms = members
|
|
388
|
+
.map((member) => {
|
|
389
|
+
const fixed = intrinsicMemberValueOf(ctx, protocol, member, site);
|
|
390
|
+
const store = fixed.writable
|
|
391
|
+
? `__gea_side.setMember(__gea_key, __gea_written, true, ${String(fixed.enumerable)}, ${String(fixed.configurable)});`
|
|
392
|
+
: '';
|
|
393
|
+
return `if (__gea_name == ${cppStringLiteral(member.name)}) { ${store} return; }`;
|
|
394
|
+
})
|
|
395
|
+
.join(' ');
|
|
396
|
+
lines.push(`{ const gea::PropertyKey __gea_key = ${propertyKeyText(ctx, operation.key, site)}; ` +
|
|
397
|
+
`auto& __gea_side = gea::detail::hostIntrinsicSidecar(${cppStringLiteral(protocol)}); ` +
|
|
398
|
+
`const gea::Value __gea_written = ${boxedValueText(ctx, operation.value, site)}; ` +
|
|
399
|
+
`[&]() { if (!__gea_key.isSymbol()) { const std::string& __gea_name = __gea_key.text(); ${arms} } __gea_side.set(__gea_key, __gea_written); }(); }`);
|
|
400
|
+
if (operation.result) {
|
|
401
|
+
// A store threads its receiver onward. When that receiver IS the host
|
|
402
|
+
// object there is no value to name, and the result's own identity is
|
|
403
|
+
// already stated by `emit-bindings.ts`'s `hostClassReadsOf`.
|
|
404
|
+
if (!ctx.hostClassReads.has(operation.receiver.value))
|
|
405
|
+
lines.push(`${defineValue(ctx, operation.result)} = ${receiverText};`);
|
|
406
|
+
}
|
|
407
|
+
return true;
|
|
408
|
+
};
|
|
409
|
+
/**
|
|
410
|
+
* Every deferred host member read of one body, decided from settled facts
|
|
411
|
+
* alone -- the census half of `nativeHostMemberText` and `declaredHostMethodRead`.
|
|
412
|
+
*
|
|
413
|
+
* This is the same question those two answer while they render, asked of the
|
|
414
|
+
* IR before anything renders: which `get` publishes a value that is a host
|
|
415
|
+
* METHOD reached but not materialised. Every input is settled -- the receiver's
|
|
416
|
+
* carrier, the key's constant text, the unioned `HostSpellings`, and
|
|
417
|
+
* `hostClassReads` -- so nothing here waits on a line being printed.
|
|
418
|
+
*
|
|
419
|
+
* This is the ONLY place the question is answered. `nativeHostMemberText` and
|
|
420
|
+
* `declaredHostMethodRead` do not re-test it -- they ask this map and then
|
|
421
|
+
* spell whichever answer it gave, which is what keeps one fact to one
|
|
422
|
+
* authority rather than two implementations that happen to agree. The
|
|
423
|
+
* call-site-arity carve-out is stated here for the same reason: it is part of
|
|
424
|
+
* "is this read deferred", not part of how either answer is printed.
|
|
425
|
+
*
|
|
426
|
+
* What this does NOT reproduce is `emitGet`'s branch LADDER -- whether some
|
|
427
|
+
* resolver AHEAD of `nativeHostMemberText` claims the same `get` first. That
|
|
428
|
+
* was checked rather than assumed, once, during the move: the walk ran beside
|
|
429
|
+
* the render-time map it replaced across both emitted sets (154 corpus + 281
|
|
430
|
+
* runtime), and no read the printer recorded was missing or different, with
|
|
431
|
+
* every one of the 1027 extras the `<value>:present` twin below. That was
|
|
432
|
+
* migration evidence, not a standing guarantee -- the guarantee is that
|
|
433
|
+
* nothing else decides any more.
|
|
434
|
+
*
|
|
435
|
+
* The one place the census must anticipate the ladder is the optional
|
|
436
|
+
* receiver: `emitGet` unwraps `a?.b` and re-enters with the proven-present
|
|
437
|
+
* view, so a read off an `optional` carrier records the `<value>:present`
|
|
438
|
+
* operand `unwrapPresentValue` mints, not the optional itself. The twin is
|
|
439
|
+
* stated unconditionally for the same reason `hostClassReadsOf` states its
|
|
440
|
+
* own: if a value IS a deferred host member then so is the value proven
|
|
441
|
+
* present, and the twin is not an SSA value any walk could otherwise observe.
|
|
442
|
+
*/
|
|
443
|
+
export const hostMemberReadsOf = (body, hosts, staticKeyTexts, hostClassReads, hostMethodAliases) => {
|
|
444
|
+
const reads = new Map();
|
|
445
|
+
// A direct numeric host call consumes the spelling, not a callable value.
|
|
446
|
+
// Defer its property read only when every use has that same property: a
|
|
447
|
+
// first-class alias, reflected value, receiver or argument still materializes.
|
|
448
|
+
const numericRestCallees = new Set();
|
|
449
|
+
const materializedUses = new Set();
|
|
450
|
+
for (const block of body.blocks.values()) {
|
|
451
|
+
for (const operation of allOperationsOf(block)) {
|
|
452
|
+
if (operation.kind === 'call' && operation.numericRestHostCall !== undefined) {
|
|
453
|
+
numericRestCallees.add(operation.callee.value);
|
|
454
|
+
if (operation.receiver)
|
|
455
|
+
materializedUses.add(operation.receiver.value);
|
|
456
|
+
for (const argument of operation.arguments)
|
|
457
|
+
materializedUses.add(argument.value);
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
for (const operand of operandsOfIrOperation(operation))
|
|
461
|
+
materializedUses.add(operand.value);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
for (const region of body.iteratorCloseRegions ?? [])
|
|
466
|
+
materializedUses.add(region.iterator.value);
|
|
467
|
+
for (const value of materializedUses)
|
|
468
|
+
numericRestCallees.delete(value);
|
|
469
|
+
const presentView = (receiver) => receiver.representation.kind === 'optional'
|
|
470
|
+
? { value: `${receiver.value}:present`, representation: receiver.representation.payload }
|
|
471
|
+
: receiver;
|
|
472
|
+
const receiverOf = (receiver) => (hostClassReads.has(receiver.value) ? null : presentView(receiver));
|
|
473
|
+
for (const block of body.blocks.values()) {
|
|
474
|
+
for (const operation of allOperationsOf(block)) {
|
|
475
|
+
if (operation.kind === 'get') {
|
|
476
|
+
const binding = operation.hostMethod;
|
|
477
|
+
if (binding !== undefined) {
|
|
478
|
+
if (hostMemberOf(hosts.members, binding.protocol, binding.member)?.kind === 'method')
|
|
479
|
+
reads.set(operation.result.id, { ...binding, receiver: receiverOf(operation.receiver) });
|
|
480
|
+
continue;
|
|
481
|
+
}
|
|
482
|
+
const receiver = presentView(operation.receiver);
|
|
483
|
+
const hostProtocol = nativeHostProtocol(receiver);
|
|
484
|
+
if (hostProtocol === null)
|
|
485
|
+
continue;
|
|
486
|
+
const staticKey = staticKeyTexts.get(operation.key.value);
|
|
487
|
+
if (staticKey === undefined)
|
|
488
|
+
continue;
|
|
489
|
+
const memberProtocol = hostProtocol.protocol;
|
|
490
|
+
// `Math.hasOwnProperty` and friends are `Object.prototype`'s own, not
|
|
491
|
+
// this protocol's, and `nativeHostMemberText` hands them to the
|
|
492
|
+
// prototype channel before ever asking `hostMemberOf`.
|
|
493
|
+
if (objectShapePrototypeMethods.has(staticKey) && hosts.intrinsicMembers.has(memberProtocol))
|
|
494
|
+
continue;
|
|
495
|
+
const host = hostMemberOf(hosts.members, memberProtocol, staticKey);
|
|
496
|
+
const numericRest = host?.kind === 'property' && host.numericRestCall !== undefined && numericRestCallees.has(operation.result.id);
|
|
497
|
+
if (host?.kind !== 'method' && !numericRest)
|
|
498
|
+
continue;
|
|
499
|
+
// The one host method that is NOT deferred: a call-site-arity row read
|
|
500
|
+
// bare into a `dynamic` destination has no native callable convention
|
|
501
|
+
// to fuse with, and is boxed as a function value instead
|
|
502
|
+
// (`dynamicHostFunctionValueText`). Declining it here is what lets the
|
|
503
|
+
// printer ask this census which of the two spellings to render rather
|
|
504
|
+
// than repeat the test.
|
|
505
|
+
if (!callSiteHostReadIsDeferred(operation.result.representation) && host?.kind === 'method' && host.arity === 'call-site')
|
|
506
|
+
continue;
|
|
507
|
+
reads.set(operation.result.id, {
|
|
508
|
+
protocol: memberProtocol,
|
|
509
|
+
member: staticKey,
|
|
510
|
+
receiver: receiverOf(operation.receiver)
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
else if (operation.kind === 'binding-read') {
|
|
514
|
+
// A cell that holds one host method forever is read as that member.
|
|
515
|
+
const alias = hostMethodAliases.get(operation.declaration);
|
|
516
|
+
if (alias !== undefined)
|
|
517
|
+
reads.set(operation.result.id, { ...alias, receiver: null });
|
|
518
|
+
}
|
|
519
|
+
else if (operation.kind === 'convert') {
|
|
520
|
+
// Optional chaining narrows and widens the callee between its read,
|
|
521
|
+
// its presence test and its call; the deferred invocation travels
|
|
522
|
+
// through every one of those SSA views.
|
|
523
|
+
const inherited = reads.get(operation.source.value);
|
|
524
|
+
if (inherited !== undefined)
|
|
525
|
+
reads.set(operation.result.id, inherited);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
// The proven-present view of a deferred read is the same deferred read.
|
|
530
|
+
for (const [value, read] of [...reads])
|
|
531
|
+
reads.set(`${value}:present`, read);
|
|
532
|
+
return reads;
|
|
533
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CallOperation } from '../../../ir/model.js';
|
|
2
|
+
import { type EmitContext } from '../emit-context.js';
|
|
3
|
+
/** Reflect over native data storage. Unsupported layouts must not enter a boxed host call implicitly. */
|
|
4
|
+
export declare const nativeReflectCallText: (ctx: EmitContext, operation: CallOperation, spelling: string) => string | null;
|