@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,601 @@
|
|
|
1
|
+
import { classViewCarrierKinds, typedArrayConstructorDomains } from '../../projection/instance-test.js';
|
|
2
|
+
import { representationKey } from '../../representation/model.js';
|
|
3
|
+
import { createCppEmitBlockedError, operandText } from './emit-context.js';
|
|
4
|
+
import { cppClassName, cppScalarType } from './types.js';
|
|
5
|
+
import { cppErrorNativeType, errorConstructorNames, isNativeError } from './error-types.js';
|
|
6
|
+
import { cppRegExpNativeTypes } from './regexp-types.js';
|
|
7
|
+
/**
|
|
8
|
+
* `v instanceof C` -- ECMA-262 13.10.2, for the one right-hand side this
|
|
9
|
+
* backend has a real `[[HasInstance]]` for.
|
|
10
|
+
*
|
|
11
|
+
* The general operator is a prototype walk (7.3.22 OrdinaryHasInstance), and
|
|
12
|
+
* this compiler's objects have no prototype chain: a record is a C++ struct
|
|
13
|
+
* and a class instance is a C++ object, and neither carries a link to the
|
|
14
|
+
* constructor that built it. So the general answer is not rendered, and this
|
|
15
|
+
* refuses by name rather than approximating one -- a test that compared
|
|
16
|
+
* payload types directly would answer `false` for `new RangeError(m)
|
|
17
|
+
* instanceof Error`, which the language answers `true`, and a wrong answer
|
|
18
|
+
* wearing a plausible shape is the one outcome worth refusing for.
|
|
19
|
+
*
|
|
20
|
+
* The ERROR family is different, and exactly so. Every error a compiled
|
|
21
|
+
* program can hold was minted by `gea::host::<X>Constructor::create`, which
|
|
22
|
+
* records the record struct it minted under its own constructor's name and
|
|
23
|
+
* under every name that constructor inherits (`detail::registerErrorRecordType`,
|
|
24
|
+
* gea_runtime.h) -- 20.5.6.3's prototype chain, stated once at the one place
|
|
25
|
+
* that knows both halves. `gea::host::instanceOfError` reads it back through
|
|
26
|
+
* the box's own payload type, so the answer is the language's for every value
|
|
27
|
+
* this runtime can produce.
|
|
28
|
+
*/
|
|
29
|
+
/** Native object families whose identity survives an explicitly dynamic boundary. */
|
|
30
|
+
const dynamicNativeInstanceTests = new Map([
|
|
31
|
+
['MapConstructor', 'gea::host::instanceOfMap'],
|
|
32
|
+
['DateConstructor', 'gea::host::instanceOfDate'],
|
|
33
|
+
['RegExpConstructor', 'gea::host::instanceOfRegExp'],
|
|
34
|
+
['ArrayBufferConstructor', 'gea::host::instanceOfArrayBuffer']
|
|
35
|
+
]);
|
|
36
|
+
/** A carrier that can never hold an object and therefore always fails OrdinaryHasInstance. */
|
|
37
|
+
const definitelyPrimitive = (representation) => representation.kind === 'scalar' ||
|
|
38
|
+
representation.kind === 'string' ||
|
|
39
|
+
representation.kind === 'symbol' ||
|
|
40
|
+
representation.kind === 'null' ||
|
|
41
|
+
representation.kind === 'undefined';
|
|
42
|
+
/** Render the hierarchy census's recipe without rediscovering membership. */
|
|
43
|
+
const classInstanceTestText = (test, text) => {
|
|
44
|
+
switch (test.kind) {
|
|
45
|
+
case 'constant':
|
|
46
|
+
return `((void)(${text}), ${test.value ? 'true' : 'false'})`;
|
|
47
|
+
case 'throws-non-object':
|
|
48
|
+
return `(gea::host::throwInstanceofNonObject("${test.target}"), false)`;
|
|
49
|
+
case 'present':
|
|
50
|
+
return `static_cast<bool>(${text})`;
|
|
51
|
+
case 'boxed-typed-array':
|
|
52
|
+
return `gea::host::instanceOfTypedArray<${cppScalarType(test.domain)}>(${text})`;
|
|
53
|
+
case 'class-family':
|
|
54
|
+
if (test.members.length === 0)
|
|
55
|
+
return `((void)(${text}), false)`;
|
|
56
|
+
return `gea::host::${test.boxed ? 'instanceOfClassFamily' : 'instanceOfClassFamilyRef'}<${test.members.map(cppClassName).join(', ')}>(${text})`;
|
|
57
|
+
case 'view-origin':
|
|
58
|
+
if (test.members.length === 0)
|
|
59
|
+
return `((void)(${text}), false)`;
|
|
60
|
+
return `gea::host::instanceOfClassFamily<${test.members.map(cppClassName).join(', ')}>(gea::record::viewOrigin(${text}))`;
|
|
61
|
+
case 'optional':
|
|
62
|
+
return `((${text}).has_value() ? (${classInstanceTestText(test.payload, `(*${text})`)}) : false)`;
|
|
63
|
+
case 'union': {
|
|
64
|
+
const clauses = test.arms.map(({ index, test: arm }) => {
|
|
65
|
+
const nested = classInstanceTestText(arm, `${text}.get<${index}>()`);
|
|
66
|
+
return arm.kind === 'class-family' && arm.boxed
|
|
67
|
+
? `(${text}.is<${index}>() && ${nested})`
|
|
68
|
+
: `(${text}.is<${index}>() && (${nested}))`;
|
|
69
|
+
});
|
|
70
|
+
if (clauses.length === 0)
|
|
71
|
+
return `((void)(${text}), false)`;
|
|
72
|
+
return clauses.length === 1 ? clauses[0] : `(${clauses.join(' || ')})`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* `value instanceof Promise` for a left operand the checker joined into a
|
|
78
|
+
* `tagged-union`, the exact counterpart of the instance-test census
|
|
79
|
+
* for the one host protocol this backend's own `Promise<T>` carrier answers
|
|
80
|
+
* for.
|
|
81
|
+
*
|
|
82
|
+
* Like that function, no runtime read is needed for a `promise` arm: which
|
|
83
|
+
* arms could ever BE a Promise is the checker's own declared member list, so
|
|
84
|
+
* the answer is the union's own discriminant test. A `dynamic` arm is refused
|
|
85
|
+
* rather than approximated -- see `instanceofText`'s own `dynamic` refusal
|
|
86
|
+
* below for why a boxed value cannot answer this either (no boxing path
|
|
87
|
+
* exists for a `promise` carrier at all: `emit-narrowing.ts`'s `dynamicTagFor`
|
|
88
|
+
* has no case for it, so a box reaching this test was never produced FROM a
|
|
89
|
+
* promise, but this file does not lean on that absence to fabricate `false`
|
|
90
|
+
* for the arm -- it refuses by name, the same posture every other
|
|
91
|
+
* unanswerable shape here takes).
|
|
92
|
+
*/
|
|
93
|
+
const instanceofTaggedUnionPromiseText = (ctx, left, union) => {
|
|
94
|
+
const text = operandText(ctx, left);
|
|
95
|
+
const clauses = [];
|
|
96
|
+
for (const [index, arm] of union.arms.entries()) {
|
|
97
|
+
if (arm.value.kind === 'promise') {
|
|
98
|
+
clauses.push(`${text}.is<${index}>()`);
|
|
99
|
+
}
|
|
100
|
+
else if (arm.value.kind === 'dynamic') {
|
|
101
|
+
throw createCppEmitBlockedError('runtime-helper:computation:instanceof:dynamic:native-handle(PromiseConstructor)', '"instanceof" against "Promise" over a boxed union arm needs a runtime read this backend does not perform for a Promise payload');
|
|
102
|
+
}
|
|
103
|
+
// Every other arm kind is never how this backend carries a Promise
|
|
104
|
+
// (`types.ts`'s `promise -> gea::Promise<T>` is the only spelling), so it
|
|
105
|
+
// contributes nothing.
|
|
106
|
+
}
|
|
107
|
+
if (clauses.length === 0)
|
|
108
|
+
return `((void)(${text}), false)`;
|
|
109
|
+
return clauses.length === 1 ? clauses[0] : `(${clauses.join(' || ')})`;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* `value instanceof Promise` for a left operand the checker settled to an
|
|
113
|
+
* `optional`.
|
|
114
|
+
*
|
|
115
|
+
* The same question `instanceofTaggedUnionPromiseText` above answers, asked of
|
|
116
|
+
* the other spelling of one absence: `T | undefined` and `T | void` are one
|
|
117
|
+
* carrier (`representation/union.ts`'s `absenceOf`), and this compiler names
|
|
118
|
+
* it `optional(T, undefined)`. hono's `defineWebSocketHelper` and
|
|
119
|
+
* node-compat's `whatwg-streams.ts` both reach it -- `const result =
|
|
120
|
+
* write(chunk, ...)` typed `void | Promise<void>`, then `result instanceof
|
|
121
|
+
* Promise`.
|
|
122
|
+
*
|
|
123
|
+
* Written as its own renderer rather than folded into the tagged-union one:
|
|
124
|
+
* that function's text is what every program carrying a union arm already
|
|
125
|
+
* emits, and a shared recursion would re-spell it. A `dynamic` payload is
|
|
126
|
+
* refused by name for exactly the reason stated there.
|
|
127
|
+
*/
|
|
128
|
+
const instanceofOptionalPromiseText = (ctx, left, optional) => {
|
|
129
|
+
const test = (carrier, value) => {
|
|
130
|
+
if (carrier.kind === 'promise')
|
|
131
|
+
return `((void)(${value}), true)`;
|
|
132
|
+
if (carrier.kind === 'dynamic')
|
|
133
|
+
throw createCppEmitBlockedError('runtime-helper:computation:instanceof:dynamic:native-handle(PromiseConstructor)', '"instanceof" against "Promise" over a boxed optional payload needs a runtime read this backend does not perform for a Promise payload');
|
|
134
|
+
if (carrier.kind === 'optional')
|
|
135
|
+
return `((${value}).has_value() && (${test(carrier.payload, `(*${value})`)}))`;
|
|
136
|
+
if (carrier.kind === 'tagged-union') {
|
|
137
|
+
const clauses = [];
|
|
138
|
+
for (const [index, arm] of carrier.arms.entries()) {
|
|
139
|
+
if (arm.value.kind === 'promise')
|
|
140
|
+
clauses.push(`${value}.is<${index}>()`);
|
|
141
|
+
else if (arm.value.kind === 'dynamic')
|
|
142
|
+
test(arm.value, `${value}.get<${index}>()`);
|
|
143
|
+
}
|
|
144
|
+
return clauses.length === 0 ? `((void)(${value}), false)` : clauses.length === 1 ? clauses[0] : `(${clauses.join(' || ')})`;
|
|
145
|
+
}
|
|
146
|
+
// Every other carrier is never how this backend holds a Promise
|
|
147
|
+
// (`types.ts`'s `promise -> gea::Promise<T>` is the only spelling).
|
|
148
|
+
return `((void)(${value}), false)`;
|
|
149
|
+
};
|
|
150
|
+
return test(optional, operandText(ctx, left));
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* `value instanceof Map` for a flow-carrier union containing a native Map.
|
|
154
|
+
*
|
|
155
|
+
* A `Map<K,V>` has one physical spelling in this backend: a
|
|
156
|
+
* `keyed-collection` whose family is `map`. The union discriminant therefore
|
|
157
|
+
* answers concrete arms exactly. A genuinely dynamic arm uses the same
|
|
158
|
+
* payload identity test as the standalone dynamic case; every other carrier
|
|
159
|
+
* is a different allocation kind and contributes false.
|
|
160
|
+
*/
|
|
161
|
+
const instanceofTaggedUnionMapText = (ctx, left, union) => {
|
|
162
|
+
const text = operandText(ctx, left);
|
|
163
|
+
const test = (representation, value) => {
|
|
164
|
+
if (representation.kind === 'keyed-collection') {
|
|
165
|
+
return `((void)(${value}), ${representation.family === 'map' ? 'true' : 'false'})`;
|
|
166
|
+
}
|
|
167
|
+
if (representation.kind === 'dynamic')
|
|
168
|
+
return `gea::host::instanceOfMap(${value})`;
|
|
169
|
+
if (representation.kind === 'optional') {
|
|
170
|
+
return `((${value}).has_value() && (${test(representation.payload, `(*${value})`)}))`;
|
|
171
|
+
}
|
|
172
|
+
if (representation.kind === 'tagged-union') {
|
|
173
|
+
const nested = [];
|
|
174
|
+
for (const [index, arm] of representation.arms.entries()) {
|
|
175
|
+
const clause = test(arm.value, `${value}.get<${index}>()`);
|
|
176
|
+
nested.push(`(${value}.is<${index}>() && (${clause}))`);
|
|
177
|
+
}
|
|
178
|
+
return nested.length === 0 ? `((void)(${value}), false)` : `(${nested.join(' || ')})`;
|
|
179
|
+
}
|
|
180
|
+
return `((void)(${value}), false)`;
|
|
181
|
+
};
|
|
182
|
+
const clauses = [];
|
|
183
|
+
for (const [index, arm] of union.arms.entries()) {
|
|
184
|
+
const armText = `${text}.get<${index}>()`;
|
|
185
|
+
clauses.push(`(${text}.is<${index}>() && (${test(arm.value, armText)}))`);
|
|
186
|
+
}
|
|
187
|
+
if (clauses.length === 0)
|
|
188
|
+
return `((void)(${text}), false)`;
|
|
189
|
+
return clauses.length === 1 ? clauses[0] : `(${clauses.join(' || ')})`;
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* `v instanceof C` for a native protocol whose identity this backend really
|
|
193
|
+
* can settle, over a left operand the checker joined into an `optional` or a
|
|
194
|
+
* `tagged-union` -- `Buffer | Error`, `string | RegExp`, `BodyInit`.
|
|
195
|
+
*
|
|
196
|
+
* It is the generalization of `instanceofTaggedUnionPromiseText` and
|
|
197
|
+
* `instanceofTaggedUnionMapText` above, written once instead of a third time,
|
|
198
|
+
* and it exists because those two already established that a composite carrier
|
|
199
|
+
* is not an obstacle to answering `instanceof`: a sum's discriminant IS the
|
|
200
|
+
* question for every arm whose carrier is a settled physical allocation, and
|
|
201
|
+
* only the arms that are not need a runtime read. The two older functions are
|
|
202
|
+
* left where they are rather than folded in, because folding them would move
|
|
203
|
+
* the emitted text of programs this change is not about.
|
|
204
|
+
*
|
|
205
|
+
* Which protocols: the seven error constructors, whose `gea::runtime::Error`
|
|
206
|
+
* handle answers its own inheritance chain through `instanceOf` (see this
|
|
207
|
+
* file's header), plus `RegExp` and `ArrayBuffer`, each of which has exactly
|
|
208
|
+
* one physical carrier here, so an arm carrying it IS one and an arm carrying
|
|
209
|
+
* anything else is not. `Map` and `Promise` are deliberately absent: their own
|
|
210
|
+
* composite renderers above already claim those keys, and routing them here
|
|
211
|
+
* would move their output.
|
|
212
|
+
*/
|
|
213
|
+
const compositeNativeInstanceProtocols = new Set([
|
|
214
|
+
...errorConstructorNames.keys(),
|
|
215
|
+
'RegExpConstructor',
|
|
216
|
+
'ArrayBufferConstructor'
|
|
217
|
+
]);
|
|
218
|
+
/** A settled answer that still evaluates the operand, the way every other constant verdict in this file does. */
|
|
219
|
+
const settledInstanceText = (value, answer) => `((void)(${value}), ${answer ? 'true' : 'false'})`;
|
|
220
|
+
/**
|
|
221
|
+
* Whether any class in this one's base chain links a NATIVE base.
|
|
222
|
+
*
|
|
223
|
+
* The intrinsic `Error` family is the only native base this compiler links
|
|
224
|
+
* (`emit-callable.ts` refuses every other `nativeBase.instance.native`), so a
|
|
225
|
+
* class with none anywhere in its chain is a plain C++ object of its own
|
|
226
|
+
* layout and cannot BE a native allocation of any kind -- which is what lets
|
|
227
|
+
* an arm carrying it settle `false` without a read. A class that DOES link one
|
|
228
|
+
* is refused rather than guessed at: `class NativeFailure extends Error` is
|
|
229
|
+
* real, supported code (`test/runtime/native-error-descriptor-inheritance.ts`),
|
|
230
|
+
* and answering `false` for `new NativeFailure() instanceof Error` would be
|
|
231
|
+
* exactly the plausibly-shaped wrong answer this file exists to refuse.
|
|
232
|
+
*/
|
|
233
|
+
const extendsNativeClass = (ctx, declaration) => {
|
|
234
|
+
let layout = ctx.classes.get(declaration);
|
|
235
|
+
const seen = new Set();
|
|
236
|
+
while (layout !== undefined && !seen.has(layout.declaration)) {
|
|
237
|
+
if (layout.nativeBase !== null)
|
|
238
|
+
return true;
|
|
239
|
+
seen.add(layout.declaration);
|
|
240
|
+
layout = layout.base === null ? undefined : ctx.classes.get(layout.base);
|
|
241
|
+
}
|
|
242
|
+
return false;
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* The carriers that are a DIFFERENT physical allocation than any native object
|
|
246
|
+
* tested for here, so `instanceof` is `false` for them with nothing read.
|
|
247
|
+
*
|
|
248
|
+
* Spelled as an explicit list rather than a default arm for the same reason
|
|
249
|
+
* `instanceofLeftKinds` below is: a carrier kind added to the representation
|
|
250
|
+
* model must not silently acquire a verdict here. Anything absent refuses by
|
|
251
|
+
* name, which is the posture every unanswerable shape in this file takes.
|
|
252
|
+
*/
|
|
253
|
+
const settledNonNativeCarrier = (ctx, carrier) => {
|
|
254
|
+
switch (carrier.kind) {
|
|
255
|
+
case 'scalar':
|
|
256
|
+
case 'string':
|
|
257
|
+
case 'symbol':
|
|
258
|
+
case 'null':
|
|
259
|
+
case 'undefined':
|
|
260
|
+
case 'void':
|
|
261
|
+
case 'record':
|
|
262
|
+
case 'record-with-index':
|
|
263
|
+
case 'array-object':
|
|
264
|
+
case 'typed-array':
|
|
265
|
+
case 'dense-buffer':
|
|
266
|
+
case 'native-sequence':
|
|
267
|
+
case 'keyed-collection':
|
|
268
|
+
case 'dictionary':
|
|
269
|
+
case 'iterator':
|
|
270
|
+
case 'promise':
|
|
271
|
+
case 'data-view':
|
|
272
|
+
case 'array-buffer':
|
|
273
|
+
case 'shared-array-buffer':
|
|
274
|
+
return true;
|
|
275
|
+
case 'class-ref':
|
|
276
|
+
return !extendsNativeClass(ctx, carrier.declaration);
|
|
277
|
+
default:
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
/** One arm/payload of the walk above: a carrier with no discriminant left to read. */
|
|
282
|
+
const nativeInstanceLeafText = (ctx, protocol, carrier, value) => {
|
|
283
|
+
const errorName = errorConstructorNames.get(protocol);
|
|
284
|
+
if (carrier.kind === 'dynamic') {
|
|
285
|
+
const nativeTest = dynamicNativeInstanceTests.get(protocol);
|
|
286
|
+
if (nativeTest !== undefined)
|
|
287
|
+
return `${nativeTest}(${value})`;
|
|
288
|
+
if (errorName !== undefined)
|
|
289
|
+
return `gea::host::instanceOfError(${value}, "${errorName}")`;
|
|
290
|
+
}
|
|
291
|
+
else if (errorName !== undefined) {
|
|
292
|
+
if (isNativeError(carrier))
|
|
293
|
+
return `(${value})->instanceOf("${errorName}")`;
|
|
294
|
+
// A `gea::runtime::Error` held some other way than by a counted handle has
|
|
295
|
+
// no `instanceOf` to call through, and `false` would be a wrong answer for
|
|
296
|
+
// the one carrier that certainly IS an error. Refuse, so the defect is
|
|
297
|
+
// named at the carrier rather than folded into a verdict. Every OTHER
|
|
298
|
+
// native record is one C++ layout and not that one.
|
|
299
|
+
const isOtherNativeRecord = carrier.kind === 'native-record-ref' && carrier.native !== cppErrorNativeType;
|
|
300
|
+
if (isOtherNativeRecord || settledNonNativeCarrier(ctx, carrier))
|
|
301
|
+
return settledInstanceText(value, false);
|
|
302
|
+
}
|
|
303
|
+
else if (protocol === 'RegExpConstructor' || protocol === 'ArrayBufferConstructor') {
|
|
304
|
+
const matches = protocol === 'RegExpConstructor'
|
|
305
|
+
? carrier.kind === 'native-record-ref' && carrier.native === cppRegExpNativeTypes.pattern
|
|
306
|
+
: carrier.kind === 'array-buffer';
|
|
307
|
+
// A `native-record-ref` of a different native layout IS that layout and no
|
|
308
|
+
// other -- one C++ type per native record -- so it settles as flatly as a
|
|
309
|
+
// scalar does.
|
|
310
|
+
if (matches || carrier.kind === 'native-record-ref' || settledNonNativeCarrier(ctx, carrier)) {
|
|
311
|
+
return settledInstanceText(value, matches);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${carrier.kind}:native-handle(${protocol})`, `"instanceof" against "${protocol}" over a "${representationKey(carrier)}" arm has no identity this backend can read`);
|
|
315
|
+
};
|
|
316
|
+
const compositeNativeInstanceText = (ctx, left, protocol) => {
|
|
317
|
+
const render = (carrier, value) => {
|
|
318
|
+
if (carrier.kind === 'optional')
|
|
319
|
+
return `((${value}).has_value() ? (${render(carrier.payload, `(*${value})`)}) : false)`;
|
|
320
|
+
if (carrier.kind === 'tagged-union') {
|
|
321
|
+
const clauses = carrier.arms.map((arm, index) => `(${value}.is<${index}>() && (${render(arm.value, `${value}.get<${index}>()`)}))`);
|
|
322
|
+
return clauses.length === 0 ? settledInstanceText(value, false) : `(${clauses.join(' || ')})`;
|
|
323
|
+
}
|
|
324
|
+
return nativeInstanceLeafText(ctx, protocol, carrier, value);
|
|
325
|
+
};
|
|
326
|
+
return render(left.representation, operandText(ctx, left));
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* The carrier kinds a left operand can arrive in, for the `undefined`
|
|
330
|
+
* right-hand side below.
|
|
331
|
+
*
|
|
332
|
+
* The obligation key names BOTH sides (`preflight/instanceof-key.ts`), and this
|
|
333
|
+
* answer does not depend on the left one at all -- 13.10.2 throws before it
|
|
334
|
+
* looks at `V`. So the claim has to be made for every left kind rather than
|
|
335
|
+
* once, and the list is spelled here rather than derived from
|
|
336
|
+
* `Representation`'s own union because a manifest row must claim only what this
|
|
337
|
+
* file renders: adding a carrier kind to the model should not silently widen a
|
|
338
|
+
* claim.
|
|
339
|
+
*/
|
|
340
|
+
export const cppInstanceofLeftKinds = [
|
|
341
|
+
'absent',
|
|
342
|
+
'constant',
|
|
343
|
+
'unplanned',
|
|
344
|
+
'dynamic',
|
|
345
|
+
'record',
|
|
346
|
+
'class-ref',
|
|
347
|
+
'native-record-ref',
|
|
348
|
+
'array-object',
|
|
349
|
+
'string',
|
|
350
|
+
'scalar',
|
|
351
|
+
'optional',
|
|
352
|
+
'tagged-union',
|
|
353
|
+
'undefined',
|
|
354
|
+
'null',
|
|
355
|
+
'typed-array',
|
|
356
|
+
'keyed-collection',
|
|
357
|
+
'dictionary',
|
|
358
|
+
'iterator',
|
|
359
|
+
'promise',
|
|
360
|
+
'symbol'
|
|
361
|
+
];
|
|
362
|
+
/**
|
|
363
|
+
* The left carrier kinds `constructorFamilyInstanceofText` actually renders a
|
|
364
|
+
* verdict for against a program-class (`constructor-family`) right-hand
|
|
365
|
+
* side. `dynamic` is included since `instanceOfClassFamilyText` above --
|
|
366
|
+
* `Value::classIdentity()` answers the family test exactly for a boxed
|
|
367
|
+
* operand, upcast or not (see that function's own doc comment).
|
|
368
|
+
*/
|
|
369
|
+
const constructorFamilyLeftKinds = [
|
|
370
|
+
'class-ref',
|
|
371
|
+
'dynamic',
|
|
372
|
+
'optional',
|
|
373
|
+
'tagged-union',
|
|
374
|
+
// A structural view the class census settled (`projection/instance-test.ts`'s `viewed`).
|
|
375
|
+
...classViewCarrierKinds
|
|
376
|
+
];
|
|
377
|
+
/** Every `computation:instanceof:*` key this file renders -- what `capabilities.ts` claims, derived from the tables above so the two cannot drift. */
|
|
378
|
+
export const cppInstanceofHelperKeys = new Set([
|
|
379
|
+
...[...errorConstructorNames.keys()].map((protocol) => `computation:instanceof:dynamic:native-handle(${protocol})`),
|
|
380
|
+
...[...errorConstructorNames.keys()].map((protocol) => `computation:instanceof:native-record-ref:native-handle(${protocol})`),
|
|
381
|
+
...cppInstanceofLeftKinds.map((left) => `computation:instanceof:${left}:undefined`),
|
|
382
|
+
...[...dynamicNativeInstanceTests.keys()].map((protocol) => `computation:instanceof:dynamic:native-handle(${protocol})`),
|
|
383
|
+
...[...dynamicNativeInstanceTests.keys()].map((protocol) => `computation:instanceof:dictionary:native-handle(${protocol})`),
|
|
384
|
+
'computation:instanceof:scalar:native-handle(NumberConstructor)',
|
|
385
|
+
'computation:instanceof:tagged-union(primitive-only):native-handle(NumberConstructor)',
|
|
386
|
+
// The native element domain is also sufficient when narrowing has already
|
|
387
|
+
// removed the union: it is the same identity used for each union arm.
|
|
388
|
+
...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:typed-array:native-handle(${protocol})`),
|
|
389
|
+
...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:optional:native-handle(${protocol})`),
|
|
390
|
+
...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:dynamic:native-handle(${protocol})`),
|
|
391
|
+
...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:tagged-union:native-handle(${protocol})`),
|
|
392
|
+
...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:dictionary:native-handle(${protocol})`),
|
|
393
|
+
// A `class-ref` left operand: the census's own plan answers it (`constant
|
|
394
|
+
// false`), because a program class's instance is a C++ object of that
|
|
395
|
+
// class's layout and the only native base this compiler ever links is the
|
|
396
|
+
// intrinsic Error family -- never a typed array. It was renderable all
|
|
397
|
+
// along and merely unclaimed, which is how `@hono/node-server`'s `body
|
|
398
|
+
// instanceof Uint8Array` over a narrowed `BodyInit` slot refused.
|
|
399
|
+
...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:class-ref:native-handle(${protocol})`),
|
|
400
|
+
// `compositeNativeInstanceText` above -- an `optional`/`tagged-union` left
|
|
401
|
+
// operand against a protocol whose identity is a physical carrier here.
|
|
402
|
+
...[...compositeNativeInstanceProtocols].flatMap((protocol) => [
|
|
403
|
+
`computation:instanceof:optional:native-handle(${protocol})`,
|
|
404
|
+
`computation:instanceof:tagged-union:native-handle(${protocol})`
|
|
405
|
+
]),
|
|
406
|
+
// `v instanceof <program class>` -- `constructorFamilyInstanceofText`'s own
|
|
407
|
+
// three renderable left shapes.
|
|
408
|
+
...constructorFamilyLeftKinds.map((left) => `computation:instanceof:${left}:constructor-family`),
|
|
409
|
+
// `v instanceof Promise` / `v instanceof String` for a left operand the
|
|
410
|
+
// checker already settled to exactly `promise` -- `instanceofText`'s own
|
|
411
|
+
// `left.representation.kind === 'promise'` branch below, sound for ANY
|
|
412
|
+
// right-hand protocol (a Promise's identity can only ever be Promise's),
|
|
413
|
+
// claimed for the two protocols this program actually exercises rather
|
|
414
|
+
// than every authenticated protocol, matching this file's own
|
|
415
|
+
// one-row-per-demonstrated-need practice elsewhere.
|
|
416
|
+
'computation:instanceof:promise:native-handle(PromiseConstructor)',
|
|
417
|
+
'computation:instanceof:promise:native-handle(StringConstructor)',
|
|
418
|
+
// `v instanceof Promise` for a left operand joined into a `tagged-union` --
|
|
419
|
+
// `instanceofTaggedUnionPromiseText` above.
|
|
420
|
+
'computation:instanceof:tagged-union:native-handle(PromiseConstructor)',
|
|
421
|
+
// ...and for one joined into an `optional`, the other spelling of the same
|
|
422
|
+
// absence -- `instanceofOptionalPromiseText` above.
|
|
423
|
+
'computation:instanceof:optional:native-handle(PromiseConstructor)',
|
|
424
|
+
'computation:instanceof:tagged-union(map-testable):native-handle(MapConstructor)',
|
|
425
|
+
// `v instanceof Promise` for a BOXED left operand -- the branch above that
|
|
426
|
+
// reads `gea::host::instanceOfPromise`'s family table.
|
|
427
|
+
'computation:instanceof:dynamic:native-handle(PromiseConstructor)',
|
|
428
|
+
// `v instanceof C` where `C` is a plain JS function boxed `dynamic` under
|
|
429
|
+
// `--dynamic-fallback` (its own `.prototype` is read or written) -- the
|
|
430
|
+
// general prototype WALK `gea::host::instanceOfDynamicConstructor` renders,
|
|
431
|
+
// over a left operand this same census also boxed (see that function's own
|
|
432
|
+
// doc comment for why the left operand can only ever be `dynamic` too).
|
|
433
|
+
'computation:instanceof:dynamic:dynamic'
|
|
434
|
+
]);
|
|
435
|
+
/**
|
|
436
|
+
* `v instanceof <host namespace root>` -- the host's own `[[HasInstance]]`.
|
|
437
|
+
*
|
|
438
|
+
* A namespace root is a PATH, not a value, and the object behind it carries an
|
|
439
|
+
* empty facade struct with no prototype chain 13.10.2 could walk. Node's
|
|
440
|
+
* `Buffer` is exactly that shape and `x instanceof Buffer` is exactly the
|
|
441
|
+
* question `@hono/node-server` asks of it. The host is the one authority that
|
|
442
|
+
* can answer: `gea::node::buffer::isBuffer` reads the opaque brand a Buffer
|
|
443
|
+
* factory attached to the byte view, so a `Uint8Array` no Buffer ever produced
|
|
444
|
+
* answers `false` -- which is the language's answer and not a structural guess
|
|
445
|
+
* a shared byte-view carrier could ever have made.
|
|
446
|
+
*
|
|
447
|
+
* The predicate is applied per LEAF, never to a composite: an `Optional<T>`
|
|
448
|
+
* or a `TaggedUnion<...>` is a different C++ type than anything the host
|
|
449
|
+
* declared an overload for, and handing one over would silently select a
|
|
450
|
+
* catch-all `false`. The presence and discriminant tests are this backend's own
|
|
451
|
+
* question anyway, exactly as they are for every other `instanceof` here.
|
|
452
|
+
*/
|
|
453
|
+
const hostInstanceTestText = (ctx, left, spelling) => {
|
|
454
|
+
const render = (carrier, value) => {
|
|
455
|
+
if (carrier.kind === 'optional')
|
|
456
|
+
return `((${value}).has_value() ? ${spelling}(*${value}) : false)`;
|
|
457
|
+
if (carrier.kind === 'tagged-union') {
|
|
458
|
+
const clauses = carrier.arms.map((arm, index) => `(${value}.is<${index}>() && (${render(arm.value, `${value}.get<${index}>()`)}))`);
|
|
459
|
+
return clauses.length === 0 ? settledInstanceText(value, false) : `(${clauses.join(' || ')})`;
|
|
460
|
+
}
|
|
461
|
+
return `${spelling}(${value})`;
|
|
462
|
+
};
|
|
463
|
+
return render(left.representation, operandText(ctx, left));
|
|
464
|
+
};
|
|
465
|
+
export const instanceofText = (ctx, left, right, recipe) => {
|
|
466
|
+
const constructor = right.representation;
|
|
467
|
+
// A right-hand side that is not an Object is the one case the specification
|
|
468
|
+
// answers with no prototype chain at all: 13.10.2 step 3 throws a TypeError
|
|
469
|
+
// before `[[HasInstance]]` is consulted. It arises when a host has declared a
|
|
470
|
+
// global ABSENT and a program tests against it anyway. Rendering the throw is
|
|
471
|
+
// the language's own answer; rendering `false` would be a fabricated one, and
|
|
472
|
+
// refusing would reject a library whose guard already made the test dead.
|
|
473
|
+
// The instance-test census publishes the same answer for every non-Object
|
|
474
|
+
// carrier (`throws-non-object`), which is what reflection consumes.
|
|
475
|
+
if (recipe?.test.kind === 'throws-non-object')
|
|
476
|
+
return classInstanceTestText(recipe.test, operandText(ctx, left));
|
|
477
|
+
if (constructor.kind === 'undefined') {
|
|
478
|
+
return `(gea::host::throwInstanceofNonObject("undefined"), false)`;
|
|
479
|
+
}
|
|
480
|
+
// A `constructor-family` right-hand side names a PROGRAM class rather than
|
|
481
|
+
// a host protocol, and unlike the general prototype-walk case just above,
|
|
482
|
+
// the left operand's own carrier already answers this without one --
|
|
483
|
+
// `constructorFamilyInstanceofText`'s own doc comment states exactly how
|
|
484
|
+
// far that goes (declaration membership, no inheritance chain) and where it
|
|
485
|
+
// refuses instead (a boxed left operand).
|
|
486
|
+
if (constructor.kind === 'constructor-family') {
|
|
487
|
+
if (recipe === undefined)
|
|
488
|
+
throw createCppEmitBlockedError('runtime-helper:instanceof:missing-class-recipe', 'class membership was not published by the hierarchy census');
|
|
489
|
+
return classInstanceTestText(recipe.test, operandText(ctx, left));
|
|
490
|
+
}
|
|
491
|
+
// A BOXED right-hand side: a plain JS function whose own `.prototype` is
|
|
492
|
+
// read or written somewhere in the program, so `representation/derive.ts`
|
|
493
|
+
// (under `--dynamic-fallback`) answers its structural type `dynamic`
|
|
494
|
+
// instead of `function-and-constructor` -- there is no declaration here for
|
|
495
|
+
// `constructorFamilyInstanceofText`'s membership test to read, only a
|
|
496
|
+
// runtime value. `gea::host::instanceOfDynamicConstructor` performs the
|
|
497
|
+
// general prototype WALK 13.10.2 asks for, over the left operand's own
|
|
498
|
+
// chain (also boxed: a program's own class instance never derives
|
|
499
|
+
// `dynamic` on its own, so the only left operand that can reach a `dynamic`
|
|
500
|
+
// constructor is one this same census also marked `dynamic` -- its own
|
|
501
|
+
// construct signature's return type).
|
|
502
|
+
if (constructor.kind === 'dynamic') {
|
|
503
|
+
if (left.representation.kind !== 'dynamic') {
|
|
504
|
+
throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${left.representation.kind}:dynamic`, `"instanceof" against a boxed constructor function needs a boxed left operand too, and this one carries "${representationKey(left.representation)}"`);
|
|
505
|
+
}
|
|
506
|
+
return `gea::host::instanceOfDynamicConstructor(${operandText(ctx, left)}, ${operandText(ctx, right)})`;
|
|
507
|
+
}
|
|
508
|
+
if (constructor.kind === 'native-record-ref' && constructor.native !== null) {
|
|
509
|
+
const spelling = ctx.hosts.instanceTests.get(constructor.native);
|
|
510
|
+
if (spelling !== undefined)
|
|
511
|
+
return hostInstanceTestText(ctx, left, spelling);
|
|
512
|
+
}
|
|
513
|
+
if (constructor.kind !== 'native-handle') {
|
|
514
|
+
throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${left.representation.kind}:${representationKey(constructor)}`, `"instanceof" against a "${representationKey(constructor)}" right-hand side needs a prototype chain, which this backend does not model`);
|
|
515
|
+
}
|
|
516
|
+
if (left.representation.kind === 'dynamic') {
|
|
517
|
+
const nativeTest = dynamicNativeInstanceTests.get(constructor.protocol);
|
|
518
|
+
if (nativeTest !== undefined)
|
|
519
|
+
return `${nativeTest}(${operandText(ctx, left)})`;
|
|
520
|
+
}
|
|
521
|
+
// A native Dictionary is an ordinary object whose physical allocation is
|
|
522
|
+
// neither a Map exotic nor a Date/RegExp object. Its static carrier proves
|
|
523
|
+
// the result false; preserve evaluation of the left operand.
|
|
524
|
+
if (left.representation.kind === 'dictionary' && dynamicNativeInstanceTests.has(constructor.protocol)) {
|
|
525
|
+
return `((void)(${operandText(ctx, left)}), false)`;
|
|
526
|
+
}
|
|
527
|
+
// OrdinaryHasInstance returns false for a primitive. A scalar carrier is
|
|
528
|
+
// never a Number wrapper object, including when an erased `as unknown`
|
|
529
|
+
// assertion was used to write the test. Keep evaluation of the operand.
|
|
530
|
+
if (constructor.protocol === 'NumberConstructor' && left.representation.kind === 'scalar') {
|
|
531
|
+
return `((void)(${operandText(ctx, left)}), false)`;
|
|
532
|
+
}
|
|
533
|
+
if (constructor.protocol === 'NumberConstructor' &&
|
|
534
|
+
left.representation.kind === 'tagged-union' &&
|
|
535
|
+
left.representation.arms.every((arm) => definitelyPrimitive(arm.value))) {
|
|
536
|
+
return `((void)(${operandText(ctx, left)}), false)`;
|
|
537
|
+
}
|
|
538
|
+
// A `promise` left operand settles ANY native-handle right-hand side
|
|
539
|
+
// without reading anything: ECMA-262 27.2's Promise objects have exactly
|
|
540
|
+
// one exotic kind, so the checker having already proved this exact carrier
|
|
541
|
+
// IS the whole answer -- `true` for `PromiseConstructor` itself, `false`
|
|
542
|
+
// for every other protocol, the same posture the instance-test census
|
|
543
|
+
// takes for a typed-array arm that can never match a DIFFERENT element
|
|
544
|
+
// domain.
|
|
545
|
+
if (left.representation.kind === 'promise') {
|
|
546
|
+
return `((void)(${operandText(ctx, left)}), ${constructor.protocol === 'PromiseConstructor' ? 'true' : 'false'})`;
|
|
547
|
+
}
|
|
548
|
+
if (constructor.protocol === 'PromiseConstructor' && left.representation.kind === 'tagged-union') {
|
|
549
|
+
return instanceofTaggedUnionPromiseText(ctx, left, left.representation);
|
|
550
|
+
}
|
|
551
|
+
if (constructor.protocol === 'PromiseConstructor' && left.representation.kind === 'optional') {
|
|
552
|
+
return instanceofOptionalPromiseText(ctx, left, left.representation);
|
|
553
|
+
}
|
|
554
|
+
if (constructor.protocol === 'MapConstructor' && left.representation.kind === 'tagged-union') {
|
|
555
|
+
return instanceofTaggedUnionMapText(ctx, left, left.representation);
|
|
556
|
+
}
|
|
557
|
+
// A BOXED left operand, answered by the family table `Value::box` fills.
|
|
558
|
+
// Between the two shapes this file already renders: a promise needs a table
|
|
559
|
+
// like the error family, because `gea::Promise<V>` is a different C++ type
|
|
560
|
+
// for every `V` and no single `payloadType()` address identifies "a
|
|
561
|
+
// promise"; but it needs no inheritance reconciliation like the errors,
|
|
562
|
+
// because every promise is an instance of exactly one constructor
|
|
563
|
+
// (ECMA-262 27.2.5). Sound for any box -- a payload that is not a promise
|
|
564
|
+
// answers `false`, the same OrdinaryHasInstance step every other renderer
|
|
565
|
+
// here takes.
|
|
566
|
+
if (constructor.protocol === 'PromiseConstructor' && left.representation.kind === 'dynamic') {
|
|
567
|
+
return `gea::host::instanceOfPromise(${operandText(ctx, left)})`;
|
|
568
|
+
}
|
|
569
|
+
// A composite left operand against one of the protocols whose identity IS a
|
|
570
|
+
// physical carrier here -- the seven errors, `RegExp`, `ArrayBuffer`. It sits
|
|
571
|
+
// below the Map/Promise/typed-array branches on purpose: each of those has
|
|
572
|
+
// its own composite renderer already, and `compositeNativeInstanceProtocols`
|
|
573
|
+
// deliberately excludes them so this cannot take a program's output away
|
|
574
|
+
// from the renderer that already claims its key.
|
|
575
|
+
if ((left.representation.kind === 'optional' || left.representation.kind === 'tagged-union') &&
|
|
576
|
+
compositeNativeInstanceProtocols.has(constructor.protocol)) {
|
|
577
|
+
return compositeNativeInstanceText(ctx, left, constructor.protocol);
|
|
578
|
+
}
|
|
579
|
+
if (typedArrayConstructorDomains.has(constructor.protocol)) {
|
|
580
|
+
if (recipe === undefined)
|
|
581
|
+
throw createCppEmitBlockedError('runtime-helper:instanceof:missing-typed-array-recipe', 'typed array membership was not published by the instance-test census');
|
|
582
|
+
return classInstanceTestText(recipe.test, operandText(ctx, left));
|
|
583
|
+
}
|
|
584
|
+
const name = errorConstructorNames.get(constructor.protocol);
|
|
585
|
+
if (name === undefined) {
|
|
586
|
+
throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${left.representation.kind}:native-handle(${constructor.protocol})`, `"instanceof" against the host protocol "${constructor.protocol}" over a "${representationKey(left.representation)}" left operand has ` +
|
|
587
|
+
'no [[HasInstance]] rendered here -- only the error constructors answer a boxed left operand, and Promise/TypedArray answer only the ' +
|
|
588
|
+
'left shapes their own tables above cover');
|
|
589
|
+
}
|
|
590
|
+
if (isNativeError(left.representation))
|
|
591
|
+
return `(${operandText(ctx, left)})->instanceOf("${name}")`;
|
|
592
|
+
if (left.representation.kind !== 'dynamic') {
|
|
593
|
+
// A statically typed left operand is a question the checker already
|
|
594
|
+
// answered, and answering it again from a carrier would be a second
|
|
595
|
+
// authority over the same fact -- one that cannot see the narrowing the
|
|
596
|
+
// checker performed. Refused until the constant folding is written where
|
|
597
|
+
// the proof lives.
|
|
598
|
+
throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${left.representation.kind}:native-handle(${constructor.protocol})`, `"instanceof" over a "${representationKey(left.representation)}" left operand is settled by the checker, and this backend renders only the boxed test`);
|
|
599
|
+
}
|
|
600
|
+
return `gea::host::instanceOfError(${operandText(ctx, left)}, "${name}")`;
|
|
601
|
+
};
|