@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,221 @@
|
|
|
1
|
+
import { representationKey } from '../../representation/model.js';
|
|
2
|
+
import { fieldPresenceOf, staticOwnFieldsOf } from '../../representation/record-fields.js';
|
|
3
|
+
import { nativeEnumerationPlanOf } from '../native-enumeration.js';
|
|
4
|
+
/**
|
|
5
|
+
* The pure `(kind, representation[, receiver][, deriver]) => string`
|
|
6
|
+
* refinements `preflight/runtime-helper-key.ts` used to compute a
|
|
7
|
+
* `protocol:*`/`allocation:regexp-object:*` carrier key from a SEMANTIC
|
|
8
|
+
* operand it first had to resolve through the plan. `ir/certify/runtime-helper.ts`
|
|
9
|
+
* needs the identical spellings for the LOWERED operand, which already
|
|
10
|
+
* carries its representation directly (`IrOperand.representation`) -- so the
|
|
11
|
+
* resolution half (operand -> representation, through the plan or the
|
|
12
|
+
* deriver) stays in `runtime-helper-key.ts`, and only the refinement half
|
|
13
|
+
* moves here, imported by both, so the two censuses cannot spell one carrier
|
|
14
|
+
* two different ways.
|
|
15
|
+
*
|
|
16
|
+
* Every function here takes `kind` as an explicit argument rather than
|
|
17
|
+
* deriving it from `representation.kind` internally, because the two are NOT
|
|
18
|
+
* always the same fact: a semantic operand whose own result exists but was
|
|
19
|
+
* never selected by the plan reports `kind === 'unselected'` while
|
|
20
|
+
* `representation` is `undefined` -- a real, distinct outcome from an
|
|
21
|
+
* operand that does not exist at all (`kind === 'absent'`), and both old
|
|
22
|
+
* skip-paths return `kind` verbatim in that case. Collapsing the two into
|
|
23
|
+
* one `representation?.kind ?? 'absent'` computation would silently turn
|
|
24
|
+
* "unselected" into "absent" and change what the old preflight walk
|
|
25
|
+
* certified. A lowered `IrOperand`'s representation is always resolved, so
|
|
26
|
+
* the IR side simply passes `representation.kind` for both arguments.
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* `for`-`in`'s `get-iterator` step, refined the way a `native-record-ref`
|
|
30
|
+
* receiver (host-bound vs. compiler-owned) and a `dictionary`/`optional`
|
|
31
|
+
* receiver's own key domain must be to tell a claimed carrier from an
|
|
32
|
+
* identically-`.kind`ed one this backend cannot walk. See
|
|
33
|
+
* `preflight/runtime-helper-key.ts`'s own (much longer) doc for the full
|
|
34
|
+
* reasoning; this is that function's body, unchanged, parameterized by the
|
|
35
|
+
* representation directly instead of by a semantic operand.
|
|
36
|
+
*/
|
|
37
|
+
export const enumerateGetIteratorCarrierKeyOf = (kind, representation) => {
|
|
38
|
+
if (representation &&
|
|
39
|
+
(representation.kind === 'optional' || representation.kind === 'tagged-union') &&
|
|
40
|
+
nativeEnumerationPlanOf(representation))
|
|
41
|
+
return 'native-sum';
|
|
42
|
+
if (kind === 'dictionary')
|
|
43
|
+
return representation?.kind === 'dictionary' ? `dictionary(${representation.key})` : kind;
|
|
44
|
+
if (kind === 'optional') {
|
|
45
|
+
const payload = representation?.kind === 'optional' ? representation.payload : null;
|
|
46
|
+
if (!payload)
|
|
47
|
+
return kind;
|
|
48
|
+
return payload.kind === 'dictionary' ? `optional(dictionary(${payload.key}))` : `optional(${payload.kind})`;
|
|
49
|
+
}
|
|
50
|
+
if (kind !== 'native-record-ref')
|
|
51
|
+
return kind;
|
|
52
|
+
return representation?.kind === 'native-record-ref' && representation.native !== null ? 'native-record-ref(host-bound)' : kind;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Whether a "record"/"record-with-index" carrier declares its OWN
|
|
56
|
+
* `[Symbol.iterator]` (or `[Symbol.asyncIterator]`) field -- see
|
|
57
|
+
* `preflight/runtime-helper-key.ts`'s own doc for the full reasoning
|
|
58
|
+
* (unchanged here; only moved).
|
|
59
|
+
*/
|
|
60
|
+
export const recordHasIteratorMethodField = (deriver, representation) => {
|
|
61
|
+
const fields = representation.kind === 'record-with-index'
|
|
62
|
+
? representation.fields
|
|
63
|
+
: representation.kind === 'record' || representation.kind === 'native-record-ref'
|
|
64
|
+
? staticOwnFieldsOf(deriver, representation)
|
|
65
|
+
: null;
|
|
66
|
+
if (fields === null)
|
|
67
|
+
return false;
|
|
68
|
+
return fields.some((field) => {
|
|
69
|
+
if (!field.key.startsWith('sym('))
|
|
70
|
+
return false;
|
|
71
|
+
if (field.value.kind !== 'function-value-dispatch')
|
|
72
|
+
return false;
|
|
73
|
+
const abi = field.value.abi;
|
|
74
|
+
// A DECLARED receiver does not disqualify the member. ECMA-262 7.4.2
|
|
75
|
+
// `GetIterator` performs `Call(method, obj)` -- the receiver is part of
|
|
76
|
+
// the step, not an obstacle to it -- and `emitDynamicGetIterator` renders
|
|
77
|
+
// exactly that through `iteratorMethodCallText`, which supplies the
|
|
78
|
+
// receiver argument when and only when the ABI declares one. Refusing a
|
|
79
|
+
// receiver-carrying `[Symbol.iterator]` here made the DECLARATION's
|
|
80
|
+
// spelling decide whether the protocol was claimed at all: the identical
|
|
81
|
+
// member reached this predicate with a receiver when it was written as
|
|
82
|
+
// `type C = { [Symbol.iterator](): Cursor }` (an alias anchors the
|
|
83
|
+
// implicit receiver, `structural-receiver.ts`) and without one otherwise,
|
|
84
|
+
// so `typed-custom-iterator-close.ts` was refused by name for a shape the
|
|
85
|
+
// emitter can print. Parameters still disqualify: `GetIterator` passes
|
|
86
|
+
// none, so a member that requires one is not the protocol's method.
|
|
87
|
+
if (abi.parameters.length !== 0)
|
|
88
|
+
return false;
|
|
89
|
+
const nextResult = abi.result;
|
|
90
|
+
if (nextResult.kind === 'iterator')
|
|
91
|
+
return true;
|
|
92
|
+
const resultFields = nextResult.kind === 'record'
|
|
93
|
+
? nextResult.fields
|
|
94
|
+
: nextResult.kind === 'native-record-ref'
|
|
95
|
+
? staticOwnFieldsOf(deriver, nextResult)
|
|
96
|
+
: null;
|
|
97
|
+
const resultAccessors = nextResult.kind === 'record'
|
|
98
|
+
? nextResult.accessors
|
|
99
|
+
: nextResult.kind === 'native-record-ref'
|
|
100
|
+
? (() => {
|
|
101
|
+
const resolved = deriver.layoutOf(nextResult.shapeId);
|
|
102
|
+
return resolved.kind === 'record' ? resolved.accessors : null;
|
|
103
|
+
})()
|
|
104
|
+
: null;
|
|
105
|
+
if (resultFields === null && resultAccessors === null)
|
|
106
|
+
return false;
|
|
107
|
+
const member = (key) => resultFields?.find((entry) => entry.key === key);
|
|
108
|
+
if (member('value') !== undefined && member('done') !== undefined)
|
|
109
|
+
return true;
|
|
110
|
+
return (member('next')?.value.kind === 'function-value-dispatch' ||
|
|
111
|
+
resultAccessors?.some((accessor) => accessor.key === 'next' && accessor.getter !== null) === true);
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Whether a `record` is a TUPLE's carrier whose elements a single native
|
|
116
|
+
* cursor can walk -- see `preflight/runtime-helper-key.ts`'s own doc.
|
|
117
|
+
*/
|
|
118
|
+
export const isUniformTupleRecord = (representation) => {
|
|
119
|
+
if (representation.kind !== 'record' || representation.fields.length === 0)
|
|
120
|
+
return false;
|
|
121
|
+
const first = representation.fields[0];
|
|
122
|
+
if (!first)
|
|
123
|
+
return false;
|
|
124
|
+
const elementKey = representationKey(first.value);
|
|
125
|
+
return representation.fields.every((field, position) => field.key === String(position) && field.required && representationKey(field.value) === elementKey);
|
|
126
|
+
};
|
|
127
|
+
/** The wrapped key an ABSENT iteration source reports, or `null` when `kind` is not `optional`. */
|
|
128
|
+
const optionalIterationSourceKeyOf = (kind, representation) => {
|
|
129
|
+
if (kind !== 'optional')
|
|
130
|
+
return null;
|
|
131
|
+
if (representation?.kind !== 'optional')
|
|
132
|
+
return kind;
|
|
133
|
+
return `optional(${representation.payload.kind})`;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* The `iterator`/`async-iterator` protocol's `get-method`/`get-iterator`
|
|
137
|
+
* carrier -- see `preflight/runtime-helper-key.ts`'s own doc for the full
|
|
138
|
+
* reasoning behind the `record(no-iterator-method)`/`record(tuple-values)`
|
|
139
|
+
* split.
|
|
140
|
+
*/
|
|
141
|
+
export const iteratorMethodCarrierKeyOf = (kind, representation, deriver) => {
|
|
142
|
+
const wrapped = optionalIterationSourceKeyOf(kind, representation);
|
|
143
|
+
if (wrapped !== null)
|
|
144
|
+
return wrapped;
|
|
145
|
+
if (kind !== 'record' && kind !== 'native-record-ref')
|
|
146
|
+
return kind;
|
|
147
|
+
if (!representation)
|
|
148
|
+
return `${kind}(no-iterator-method)`;
|
|
149
|
+
if (recordHasIteratorMethodField(deriver, representation))
|
|
150
|
+
return kind;
|
|
151
|
+
if (kind === 'native-record-ref')
|
|
152
|
+
return 'native-record-ref(no-iterator-method)';
|
|
153
|
+
return isUniformTupleRecord(representation) ? 'record(tuple-values)' : 'record(no-iterator-method)';
|
|
154
|
+
};
|
|
155
|
+
/** Whether a `record`/`class-ref` is a shape `emitSpreadCopy` can copy without calling user code -- see `runtime-helper-key.ts`'s doc. */
|
|
156
|
+
const isCopyableSpreadRecord = (deriver, representation) => {
|
|
157
|
+
const fields = staticOwnFieldsOf(deriver, representation);
|
|
158
|
+
if (fields === null)
|
|
159
|
+
return false;
|
|
160
|
+
if (representation.kind === 'record' && representation.accessors.length > 0)
|
|
161
|
+
return false;
|
|
162
|
+
return fields.every((field) => !field.key.startsWith('sym(') && fieldPresenceOf(field) !== 'unprovable');
|
|
163
|
+
};
|
|
164
|
+
const isCopyableSpreadRecordInto = (deriver, representation, receiver) => {
|
|
165
|
+
if (!isCopyableSpreadRecord(deriver, representation) || receiver?.kind !== 'dictionary')
|
|
166
|
+
return false;
|
|
167
|
+
const fields = staticOwnFieldsOf(deriver, representation);
|
|
168
|
+
return fields !== null && (receiver.key === 'string' || fields.length === 0);
|
|
169
|
+
};
|
|
170
|
+
/** Whether every arm of a tagged-union is a shape `emitSpreadCopy` can copy into this receiver -- see `runtime-helper-key.ts`'s doc. */
|
|
171
|
+
const isCopyableSpreadUnion = (deriver, representation, receiver) => representation.kind === 'tagged-union' &&
|
|
172
|
+
representation.arms.every((arm) => arm.value.kind === 'dictionary'
|
|
173
|
+
? receiver?.kind === 'dictionary' && arm.value.key === receiver.key && (arm.value.key === 'string' || arm.value.key === 'symbol')
|
|
174
|
+
: isCopyableSpreadRecordInto(deriver, arm.value, receiver));
|
|
175
|
+
/** The source carrier kinds `spreadSourceCarrierKeyOf` refines beyond their bare `.kind` -- see `runtime-helper-key.ts`'s doc. */
|
|
176
|
+
const refinableSpreadSourceKinds = new Set(['tagged-union', 'optional', 'record', 'class-ref', 'native-record-ref']);
|
|
177
|
+
/**
|
|
178
|
+
* `CopyDataProperties`'s source carrier, refined the way a `dictionary`'s key
|
|
179
|
+
* domain, a `tagged-union`'s per-arm copyability, and an `optional`'s present
|
|
180
|
+
* payload have to be -- see `preflight/runtime-helper-key.ts`'s own (longer)
|
|
181
|
+
* doc for the full reasoning; this is that function's body, parameterized by
|
|
182
|
+
* the two representations directly instead of by a semantic operand pair.
|
|
183
|
+
*/
|
|
184
|
+
export const spreadSourceCarrierKeyOf = (kind, representation, receiver, deriver) => {
|
|
185
|
+
if (!representation)
|
|
186
|
+
return kind;
|
|
187
|
+
const dictionaryKind = (candidate) => receiver?.kind === 'dictionary'
|
|
188
|
+
? `dictionary(${candidate.key}->${receiver.key})`
|
|
189
|
+
: `dictionary(${candidate.key}->${receiver?.kind ?? 'absent'})`;
|
|
190
|
+
if (representation.kind === 'dynamic')
|
|
191
|
+
return `dynamic->${receiver?.kind ?? 'absent'}`;
|
|
192
|
+
if (representation.kind === 'dictionary')
|
|
193
|
+
return dictionaryKind(representation);
|
|
194
|
+
if (!refinableSpreadSourceKinds.has(kind))
|
|
195
|
+
return kind;
|
|
196
|
+
const copyableKind = (candidate) => isCopyableSpreadUnion(deriver, candidate, receiver)
|
|
197
|
+
? 'tagged-union(record-or-dictionary)'
|
|
198
|
+
: candidate.kind === 'dictionary'
|
|
199
|
+
? dictionaryKind(candidate)
|
|
200
|
+
: isCopyableSpreadRecordInto(deriver, candidate, receiver)
|
|
201
|
+
? `${candidate.kind}(copyable)`
|
|
202
|
+
: null;
|
|
203
|
+
if (representation.kind === 'optional')
|
|
204
|
+
return `optional(${copyableKind(representation.payload) ?? representation.payload.kind})`;
|
|
205
|
+
return copyableKind(representation) ?? kind;
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* `u` selects the runtime's scalar-value matcher, while `v` stays unbuilt --
|
|
209
|
+
* see `preflight/runtime-helper-key.ts`'s own doc. Unlike that file's
|
|
210
|
+
* version, `flags` here is always a concrete string: by the time an
|
|
211
|
+
* `AllocateRegExpOperation` exists, lowering has already required its own
|
|
212
|
+
* `pattern-flags` operand to be a constant string (`lower-allocation.ts`'s
|
|
213
|
+
* `textOf`), so there is no `unselected-flags` state left to report.
|
|
214
|
+
*/
|
|
215
|
+
export const regexpFlagSupportKeyOf = (flags) => {
|
|
216
|
+
if (flags.includes('v'))
|
|
217
|
+
return 'unicode-sets-flags';
|
|
218
|
+
if (flags.includes('u') && flags.includes('i'))
|
|
219
|
+
return 'unicode-ignore-case-flags';
|
|
220
|
+
return flags.includes('u') ? 'unicode-flags' : 'supported-flags';
|
|
221
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SemanticGraph } from '../../semantics/model/graph.js';
|
|
2
|
+
import type { SemanticOperation } from '../../semantics/model/operations.js';
|
|
3
|
+
/** Only direct calls are implemented: an extracted builtin must not bind itself to the original function. */
|
|
4
|
+
export declare const isDirectFunctionSourceRead: (graph: SemanticGraph, operation: SemanticOperation) => boolean;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { operandOf } from '../../semantics/model/operands.js';
|
|
2
|
+
/** Only direct calls are implemented: an extracted builtin must not bind itself to the original function. */
|
|
3
|
+
export const isDirectFunctionSourceRead = (graph, operation) => {
|
|
4
|
+
if (operation.family !== 'property' || operation.internalMethod !== 'get' || operation.keyIsComputed)
|
|
5
|
+
return false;
|
|
6
|
+
const key = operandOf(operation, 'key');
|
|
7
|
+
const receiver = operandOf(operation, 'receiver');
|
|
8
|
+
if (key?.source.kind !== 'constant' || key.source.text !== 'toString' || receiver?.source.kind !== 'result')
|
|
9
|
+
return false;
|
|
10
|
+
const result = operation.results.find((candidate) => candidate.role === 'value');
|
|
11
|
+
if (!result)
|
|
12
|
+
return false;
|
|
13
|
+
let calls = 0;
|
|
14
|
+
for (const edge of graph.edges) {
|
|
15
|
+
if (edge.kind !== 'value' || edge.result !== result.id)
|
|
16
|
+
continue;
|
|
17
|
+
const user = graph.operations.get(edge.to);
|
|
18
|
+
if (edge.role !== 'callee' || user?.family !== 'invocation' || user.internalMethod !== 'call' || user.optionalChain)
|
|
19
|
+
return false;
|
|
20
|
+
const supplied = operandOf(user, 'receiver');
|
|
21
|
+
if (supplied?.source.kind !== 'result' || supplied.source.result !== receiver.source.result)
|
|
22
|
+
return false;
|
|
23
|
+
if (user.operands.some((operand) => operand.role === 'spread-argument'))
|
|
24
|
+
return false;
|
|
25
|
+
calls++;
|
|
26
|
+
}
|
|
27
|
+
return calls > 0;
|
|
28
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { Representation } from '../../representation/model.js';
|
|
2
|
+
import type { RepresentationDeriver } from '../../representation/derive.js';
|
|
3
|
+
/**
|
|
4
|
+
* The obligation key for `k in o`, ECMA-262 13.10.1's `[[HasProperty]]`.
|
|
5
|
+
*
|
|
6
|
+
* `in` is unlike the other computation forms in that neither operand alone
|
|
7
|
+
* decides whether a backend can answer it. `'value' in descriptor` over a
|
|
8
|
+
* closed struct is settled before the program runs; `k in descriptor` over the
|
|
9
|
+
* same struct is not settled at all, because a C++ struct has no runtime key
|
|
10
|
+
* table to consult; and `k in table` over a dictionary is a real lookup that
|
|
11
|
+
* needs no static key. So the key names BOTH halves -- what the key operand is,
|
|
12
|
+
* and what the receiver carries -- rather than the operator, which is always
|
|
13
|
+
* the word `in` and therefore says nothing (the same reasoning
|
|
14
|
+
* `runtime-helper-key.ts` already applies to `typeof`, whose old flat
|
|
15
|
+
* `computation:in:in` spelling this replaces).
|
|
16
|
+
*
|
|
17
|
+
* Two narrowings matter and are folded into the receiver half here, following
|
|
18
|
+
* `preflight/property-access.ts`'s own `native-record-ref(no-index-sidecar)`
|
|
19
|
+
* precedent -- resolve the named shape through the one deriver this compilation
|
|
20
|
+
* built, then state what was found:
|
|
21
|
+
*
|
|
22
|
+
* - `record(own-field)` -- the static key names a REQUIRED field of the
|
|
23
|
+
* receiver's own layout. A required field is present on every instance of
|
|
24
|
+
* that layout, so `in` is the constant `true`.
|
|
25
|
+
* - `record(optional-field)` -- the static key names a field whose carrier
|
|
26
|
+
* states its own presence, so `in` is that flag. This proves the key IS
|
|
27
|
+
* there when the flag is set, which needs no prototype reasoning at all: a
|
|
28
|
+
* prototype can only ever add keys, never remove one.
|
|
29
|
+
* - `record(sidecar)` -- an otherwise-unknown static key on a compiler-owned
|
|
30
|
+
* shared object. Its generated field dispatcher and identity-keyed expando
|
|
31
|
+
* table together answer the runtime own-property question; known prototype
|
|
32
|
+
* members are handled separately.
|
|
33
|
+
* - `record(unproven)` -- everything else, and ABSENCE ALWAYS. `in` walks the
|
|
34
|
+
* prototype chain, so a key no layout names is not thereby missing:
|
|
35
|
+
* `'toString' in o` is `true` for every ordinary object, and a `class-ref`'s
|
|
36
|
+
* prototype carries the class's own methods. Even a plain struct is not
|
|
37
|
+
* enough, because getting a value into one can SLICE a class instance down
|
|
38
|
+
* to the declared fields -- see `staticKeyPresenceOf`'s own note and
|
|
39
|
+
* `test/fixtures/in-operator-class-through-interface.ts`, which is what a version
|
|
40
|
+
* of this that DID answer absence compiled to a wrong answer. Presence is
|
|
41
|
+
* proven; absence is not.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* A resolved record layout answers only for a required own field. A
|
|
45
|
+
* `record-with-index`'s open half is deliberately not claimed here either: its
|
|
46
|
+
* dictionary sidecar really could answer. This field-only helper still leaves
|
|
47
|
+
* the receiver unproven; `hasPropertyHelperKey` upgrades a compiler-owned
|
|
48
|
+
* shared carrier to the exact runtime sidecar answer after prototype members
|
|
49
|
+
* have been settled.
|
|
50
|
+
*/
|
|
51
|
+
export declare const recordAnswerFor: (layout: Representation, key: string | null) => string;
|
|
52
|
+
/**
|
|
53
|
+
* The named-shape resolution `receiverLayoutOf` already applies to the
|
|
54
|
+
* top-level receiver, applied again to a NESTED representation -- an
|
|
55
|
+
* `optional`'s payload, in practice, since that is the one place a name gets
|
|
56
|
+
* discovered a second layer in.
|
|
57
|
+
*/
|
|
58
|
+
export declare const resolvedLayoutOf: (representation: Representation, deriver: RepresentationDeriver) => {
|
|
59
|
+
readonly layout: Representation;
|
|
60
|
+
};
|
|
61
|
+
/** A compiler-owned object carrier whose shared identity can key the native dynamic-property sidecar. */
|
|
62
|
+
export declare const generatedSharedObjectCarrier: (representation: Representation) => boolean;
|
|
63
|
+
/**
|
|
64
|
+
* A compiler-emitted record has an identity-keyed expando table even when the
|
|
65
|
+
* key is only known at runtime. Classes deliberately stay out of this
|
|
66
|
+
* predicate: an arbitrary string can name an inherited program method, and
|
|
67
|
+
* that prototype question is not recoverable from the record sidecar.
|
|
68
|
+
*/
|
|
69
|
+
export declare const generatedSharedRecordCarrier: (representation: Representation) => boolean;
|
|
70
|
+
/** Any compiler-owned ordinary object carrier, including by-value records with no expando identity. */
|
|
71
|
+
export declare const generatedObjectCarrier: (representation: Representation) => boolean;
|
|
72
|
+
/**
|
|
73
|
+
* The `computation:in:*` answer suffix for one resolved layout, factored out
|
|
74
|
+
* so `optional` can ask it of its own payload without a second copy of the
|
|
75
|
+
* record/dictionary rules.
|
|
76
|
+
*
|
|
77
|
+
* `k in maybeNull` is answerable, and exactly as far as the payload's own
|
|
78
|
+
* layout is: 13.10.1 throws a TypeError before `[[HasProperty]]` runs when
|
|
79
|
+
* the receiver is absent (the language's own answer, rendered by
|
|
80
|
+
* `emit-in.ts`), and when it is present the question is the identical one
|
|
81
|
+
* this function already asks of any other receiver -- so a receiver the
|
|
82
|
+
* checker left nullable is not a fourth case, it is the same three cases one
|
|
83
|
+
* presence test away. Missing this left the fallback below leak the bare
|
|
84
|
+
* word "optional" as the whole claim, which is never installed anywhere:
|
|
85
|
+
* every `in` over a nullable receiver refused, even ones whose payload is a
|
|
86
|
+
* required own field.
|
|
87
|
+
*/
|
|
88
|
+
export declare const layoutAnswerSuffix: (layout: Representation, key: string | null, deriver: RepresentationDeriver) => string;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { staticKeyPresenceOf } from '../../representation/record-fields.js';
|
|
2
|
+
/**
|
|
3
|
+
* The obligation key for `k in o`, ECMA-262 13.10.1's `[[HasProperty]]`.
|
|
4
|
+
*
|
|
5
|
+
* `in` is unlike the other computation forms in that neither operand alone
|
|
6
|
+
* decides whether a backend can answer it. `'value' in descriptor` over a
|
|
7
|
+
* closed struct is settled before the program runs; `k in descriptor` over the
|
|
8
|
+
* same struct is not settled at all, because a C++ struct has no runtime key
|
|
9
|
+
* table to consult; and `k in table` over a dictionary is a real lookup that
|
|
10
|
+
* needs no static key. So the key names BOTH halves -- what the key operand is,
|
|
11
|
+
* and what the receiver carries -- rather than the operator, which is always
|
|
12
|
+
* the word `in` and therefore says nothing (the same reasoning
|
|
13
|
+
* `runtime-helper-key.ts` already applies to `typeof`, whose old flat
|
|
14
|
+
* `computation:in:in` spelling this replaces).
|
|
15
|
+
*
|
|
16
|
+
* Two narrowings matter and are folded into the receiver half here, following
|
|
17
|
+
* `preflight/property-access.ts`'s own `native-record-ref(no-index-sidecar)`
|
|
18
|
+
* precedent -- resolve the named shape through the one deriver this compilation
|
|
19
|
+
* built, then state what was found:
|
|
20
|
+
*
|
|
21
|
+
* - `record(own-field)` -- the static key names a REQUIRED field of the
|
|
22
|
+
* receiver's own layout. A required field is present on every instance of
|
|
23
|
+
* that layout, so `in` is the constant `true`.
|
|
24
|
+
* - `record(optional-field)` -- the static key names a field whose carrier
|
|
25
|
+
* states its own presence, so `in` is that flag. This proves the key IS
|
|
26
|
+
* there when the flag is set, which needs no prototype reasoning at all: a
|
|
27
|
+
* prototype can only ever add keys, never remove one.
|
|
28
|
+
* - `record(sidecar)` -- an otherwise-unknown static key on a compiler-owned
|
|
29
|
+
* shared object. Its generated field dispatcher and identity-keyed expando
|
|
30
|
+
* table together answer the runtime own-property question; known prototype
|
|
31
|
+
* members are handled separately.
|
|
32
|
+
* - `record(unproven)` -- everything else, and ABSENCE ALWAYS. `in` walks the
|
|
33
|
+
* prototype chain, so a key no layout names is not thereby missing:
|
|
34
|
+
* `'toString' in o` is `true` for every ordinary object, and a `class-ref`'s
|
|
35
|
+
* prototype carries the class's own methods. Even a plain struct is not
|
|
36
|
+
* enough, because getting a value into one can SLICE a class instance down
|
|
37
|
+
* to the declared fields -- see `staticKeyPresenceOf`'s own note and
|
|
38
|
+
* `test/fixtures/in-operator-class-through-interface.ts`, which is what a version
|
|
39
|
+
* of this that DID answer absence compiled to a wrong answer. Presence is
|
|
40
|
+
* proven; absence is not.
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* A resolved record layout answers only for a required own field. A
|
|
44
|
+
* `record-with-index`'s open half is deliberately not claimed here either: its
|
|
45
|
+
* dictionary sidecar really could answer. This field-only helper still leaves
|
|
46
|
+
* the receiver unproven; `hasPropertyHelperKey` upgrades a compiler-owned
|
|
47
|
+
* shared carrier to the exact runtime sidecar answer after prototype members
|
|
48
|
+
* have been settled.
|
|
49
|
+
*/
|
|
50
|
+
export const recordAnswerFor = (layout, key) => {
|
|
51
|
+
const fields = layout.kind === 'record' || layout.kind === 'record-with-index' ? layout.fields : null;
|
|
52
|
+
const presence = staticKeyPresenceOf(fields, key);
|
|
53
|
+
if (presence === 'present')
|
|
54
|
+
return 'record(own-field)';
|
|
55
|
+
return presence === 'flagged' ? 'record(optional-field)' : 'record(unproven)';
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* The named-shape resolution `receiverLayoutOf` already applies to the
|
|
59
|
+
* top-level receiver, applied again to a NESTED representation -- an
|
|
60
|
+
* `optional`'s payload, in practice, since that is the one place a name gets
|
|
61
|
+
* discovered a second layer in.
|
|
62
|
+
*/
|
|
63
|
+
export const resolvedLayoutOf = (representation, deriver) => {
|
|
64
|
+
if (representation.kind !== 'native-record-ref' && representation.kind !== 'class-ref')
|
|
65
|
+
return { layout: representation };
|
|
66
|
+
return { layout: deriver.layoutOf(representation.shapeId) };
|
|
67
|
+
};
|
|
68
|
+
/** A compiler-owned object carrier whose shared identity can key the native dynamic-property sidecar. */
|
|
69
|
+
export const generatedSharedObjectCarrier = (representation) => {
|
|
70
|
+
if (representation.kind === 'record' || representation.kind === 'record-with-index' || representation.kind === 'class-ref') {
|
|
71
|
+
return representation.ownership === 'shared-refcount';
|
|
72
|
+
}
|
|
73
|
+
return representation.kind === 'native-record-ref' && representation.native === null && representation.ownership === 'shared-refcount';
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* A compiler-emitted record has an identity-keyed expando table even when the
|
|
77
|
+
* key is only known at runtime. Classes deliberately stay out of this
|
|
78
|
+
* predicate: an arbitrary string can name an inherited program method, and
|
|
79
|
+
* that prototype question is not recoverable from the record sidecar.
|
|
80
|
+
*/
|
|
81
|
+
export const generatedSharedRecordCarrier = (representation) => (representation.kind === 'record' || representation.kind === 'record-with-index') && representation.ownership === 'shared-refcount';
|
|
82
|
+
/** Any compiler-owned ordinary object carrier, including by-value records with no expando identity. */
|
|
83
|
+
export const generatedObjectCarrier = (representation) => representation.kind === 'record' ||
|
|
84
|
+
representation.kind === 'record-with-index' ||
|
|
85
|
+
representation.kind === 'class-ref' ||
|
|
86
|
+
(representation.kind === 'native-record-ref' && representation.native === null);
|
|
87
|
+
/**
|
|
88
|
+
* The `computation:in:*` answer suffix for one resolved layout, factored out
|
|
89
|
+
* so `optional` can ask it of its own payload without a second copy of the
|
|
90
|
+
* record/dictionary rules.
|
|
91
|
+
*
|
|
92
|
+
* `k in maybeNull` is answerable, and exactly as far as the payload's own
|
|
93
|
+
* layout is: 13.10.1 throws a TypeError before `[[HasProperty]]` runs when
|
|
94
|
+
* the receiver is absent (the language's own answer, rendered by
|
|
95
|
+
* `emit-in.ts`), and when it is present the question is the identical one
|
|
96
|
+
* this function already asks of any other receiver -- so a receiver the
|
|
97
|
+
* checker left nullable is not a fourth case, it is the same three cases one
|
|
98
|
+
* presence test away. Missing this left the fallback below leak the bare
|
|
99
|
+
* word "optional" as the whole claim, which is never installed anywhere:
|
|
100
|
+
* every `in` over a nullable receiver refused, even ones whose payload is a
|
|
101
|
+
* required own field.
|
|
102
|
+
*/
|
|
103
|
+
export const layoutAnswerSuffix = (layout, key, deriver) => {
|
|
104
|
+
if (layout.kind === 'record' || layout.kind === 'record-with-index')
|
|
105
|
+
return recordAnswerFor(layout, key);
|
|
106
|
+
// A dictionary's KEY DOMAIN is part of the receiver half: `gea::Dictionary`
|
|
107
|
+
// is keyed by `std::string` and `gea::NumericDictionary` by `double`, two
|
|
108
|
+
// genuinely different containers (`types.ts`'s own note), so one claim
|
|
109
|
+
// covering both would certify a string key against a numeric table.
|
|
110
|
+
if (layout.kind === 'dictionary')
|
|
111
|
+
return `dictionary(${layout.key})`;
|
|
112
|
+
if (layout.kind === 'optional') {
|
|
113
|
+
return `optional(${layoutAnswerSuffix(resolvedLayoutOf(layout.payload, deriver).layout, key, deriver)})`;
|
|
114
|
+
}
|
|
115
|
+
return layout.kind;
|
|
116
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Representation } from '../../representation/model.js';
|
|
2
|
+
/**
|
|
3
|
+
* The carrier vocabulary of the `v instanceof C` key (ECMA-262 13.10.2), whose
|
|
4
|
+
* IR-side spelling is `ir/certify/property-access.ts`'s `instanceofRuntimeHelperKey`.
|
|
5
|
+
*
|
|
6
|
+
* Keyed by BOTH operands, for the same reason `typeof` is keyed by its
|
|
7
|
+
* operand and `in` by both of its own (`has-property-key.ts`): the operator is always the word `instanceof`, so
|
|
8
|
+
* spelling it says nothing, while what decides whether a backend can answer is
|
|
9
|
+
* what the two sides carry. A boxed value against a host `Error` constructor
|
|
10
|
+
* is a real runtime question this backend answers; the same value against a
|
|
11
|
+
* program's own class is a prototype walk nothing here has written. One flat
|
|
12
|
+
* `computation:instanceof:instanceof` key claimed both at once, which is
|
|
13
|
+
* exactly the over-claim a manifest row must not make -- the program certifies
|
|
14
|
+
* and is then refused at emission.
|
|
15
|
+
*
|
|
16
|
+
* The right half names the host PROTOCOL rather than its carrier kind.
|
|
17
|
+
* `native-handle` alone would merge `Error` with `Math` and with every other
|
|
18
|
+
* bound protocol into one claim, and the protocol is what decides the answer:
|
|
19
|
+
* `gea::host::instanceOfError` (gea_runtime.h) is written for the seven error
|
|
20
|
+
* constructors and for nothing else.
|
|
21
|
+
*/
|
|
22
|
+
/** A carrier that cannot possibly hold an ECMAScript object. */
|
|
23
|
+
export declare const definitelyPrimitive: (representation: Representation) => boolean;
|
|
24
|
+
export declare const mapTestable: (representation: Representation) => boolean;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The carrier vocabulary of the `v instanceof C` key (ECMA-262 13.10.2), whose
|
|
3
|
+
* IR-side spelling is `ir/certify/property-access.ts`'s `instanceofRuntimeHelperKey`.
|
|
4
|
+
*
|
|
5
|
+
* Keyed by BOTH operands, for the same reason `typeof` is keyed by its
|
|
6
|
+
* operand and `in` by both of its own (`has-property-key.ts`): the operator is always the word `instanceof`, so
|
|
7
|
+
* spelling it says nothing, while what decides whether a backend can answer is
|
|
8
|
+
* what the two sides carry. A boxed value against a host `Error` constructor
|
|
9
|
+
* is a real runtime question this backend answers; the same value against a
|
|
10
|
+
* program's own class is a prototype walk nothing here has written. One flat
|
|
11
|
+
* `computation:instanceof:instanceof` key claimed both at once, which is
|
|
12
|
+
* exactly the over-claim a manifest row must not make -- the program certifies
|
|
13
|
+
* and is then refused at emission.
|
|
14
|
+
*
|
|
15
|
+
* The right half names the host PROTOCOL rather than its carrier kind.
|
|
16
|
+
* `native-handle` alone would merge `Error` with `Math` and with every other
|
|
17
|
+
* bound protocol into one claim, and the protocol is what decides the answer:
|
|
18
|
+
* `gea::host::instanceOfError` (gea_runtime.h) is written for the seven error
|
|
19
|
+
* constructors and for nothing else.
|
|
20
|
+
*/
|
|
21
|
+
/** A carrier that cannot possibly hold an ECMAScript object. */
|
|
22
|
+
export const definitelyPrimitive = (representation) => representation.kind === 'scalar' ||
|
|
23
|
+
representation.kind === 'string' ||
|
|
24
|
+
representation.kind === 'symbol' ||
|
|
25
|
+
representation.kind === 'null' ||
|
|
26
|
+
representation.kind === 'undefined';
|
|
27
|
+
export const mapTestable = (representation) => {
|
|
28
|
+
if (representation.kind === 'unresolved' || representation.kind === 'borrowed-ref')
|
|
29
|
+
return false;
|
|
30
|
+
if (representation.kind === 'optional')
|
|
31
|
+
return mapTestable(representation.payload);
|
|
32
|
+
if (representation.kind === 'tagged-union')
|
|
33
|
+
return representation.arms.every((arm) => mapTestable(arm.value));
|
|
34
|
+
return true;
|
|
35
|
+
};
|