@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,376 @@
|
|
|
1
|
+
import { carriesMergeAbsence, carriesUndefined } from '../../representation/model.js';
|
|
2
|
+
import { createCppEmitBlockedError } from './emit-context.js';
|
|
3
|
+
/**
|
|
4
|
+
* Presence: whether a value is neither `null` nor `undefined`.
|
|
5
|
+
*
|
|
6
|
+
* This is the test `a?.b`, `a ?? b` and a default parameter initializer branch
|
|
7
|
+
* on, and it is emphatically not truthiness. `0`, `''`, `NaN` and `false` are
|
|
8
|
+
* all *present* and all falsy, so running `ToBoolean` where the language runs a
|
|
9
|
+
* nullish check takes the wrong branch for exactly the values a program is most
|
|
10
|
+
* likely to hold -- `count ?? 10` would yield `10` for a real zero.
|
|
11
|
+
*
|
|
12
|
+
* Most carriers answer without consulting the value at all. A `double` is never
|
|
13
|
+
* `null`, so `x ?? y` over one is `x` and the test is the constant `true`. That
|
|
14
|
+
* is not an optimization: it is what presence means once a carrier has been
|
|
15
|
+
* selected, and emitting a runtime test there would compute a constant.
|
|
16
|
+
*
|
|
17
|
+
* The three that do consult the value are the three that can hold absence: an
|
|
18
|
+
* optional, whose flag is the whole answer; the `null` and `undefined`
|
|
19
|
+
* carriers, which are absence; and a tagged union, which is present unless the
|
|
20
|
+
* live arm is one of those.
|
|
21
|
+
*/
|
|
22
|
+
/** Carriers that are absence itself, so presence over one is the constant `false`. */
|
|
23
|
+
const absent = new Set(['null', 'undefined', 'void']);
|
|
24
|
+
/**
|
|
25
|
+
* Definedness: whether a value is `undefined`. The narrow half of presence.
|
|
26
|
+
*
|
|
27
|
+
* One construct asks it: a defaulted parameter. The language substitutes an
|
|
28
|
+
* initializer for a MISSING argument and for nothing else -- ECMA-262 8.6.3
|
|
29
|
+
* tests `undefined`, so `f(x = 0)` called `f(null)` binds `null`. Asking the
|
|
30
|
+
* presence question there re-runs the default on a `null` the caller chose,
|
|
31
|
+
* which is a silently wrong answer rather than a refusal.
|
|
32
|
+
*
|
|
33
|
+
* It made no observable difference while a defaulted parameter's slot could
|
|
34
|
+
* only be `T | undefined`: with no `null` state in the carrier, both tests read
|
|
35
|
+
* the same flag. It does now that `T | null | undefined` has a carrier
|
|
36
|
+
* (`normalize/parameter-slot.ts`), and it always did for a box, whose tag has
|
|
37
|
+
* both states.
|
|
38
|
+
*
|
|
39
|
+
* `null` is DEFINED, and that is the one place the two tests disagree in
|
|
40
|
+
* writing: presence over the `null` carrier is `false`, definedness is `true`.
|
|
41
|
+
*/
|
|
42
|
+
export const definedTestText = (text, representation) => {
|
|
43
|
+
if (representation.kind === 'undefined' || representation.kind === 'void')
|
|
44
|
+
return 'false';
|
|
45
|
+
if (representation.kind === 'borrowed-ref')
|
|
46
|
+
return definedTestText(text, representation.referent);
|
|
47
|
+
if (representation.kind === 'unresolved') {
|
|
48
|
+
throw createCppEmitBlockedError('runtime-helper:conversion:is-present:unresolved', 'a definedness test on an "unresolved" carrier has no carrier to read: selection never happened');
|
|
49
|
+
}
|
|
50
|
+
// WHICH carriers have an `undefined` state is `representation/model.ts`'s
|
|
51
|
+
// `carriesUndefined`, not a second list kept here: the IR lowering asks the
|
|
52
|
+
// same question before it merges over a definedness guard, and two lists
|
|
53
|
+
// would let a carrier be untestable there and testable here. What stays here
|
|
54
|
+
// is only the spelling of the test for the carriers that do have one. A flag
|
|
55
|
+
// standing for `null` says nothing about `undefined`; only the
|
|
56
|
+
// `undefined`-tagged optional's flag IS this question.
|
|
57
|
+
if (!carriesUndefined(representation))
|
|
58
|
+
return 'true';
|
|
59
|
+
if (representation.kind === 'optional')
|
|
60
|
+
return `(${text}).has_value()`;
|
|
61
|
+
if (representation.kind === 'tagged-union') {
|
|
62
|
+
// An `undefined`-tagged optional ARM is a second place definedness can
|
|
63
|
+
// live, and reading both is what the language says: the value is
|
|
64
|
+
// `undefined` when the live arm is the `undefined` one, OR when it is an
|
|
65
|
+
// optional arm whose flag is empty. Those are not two competing answers to
|
|
66
|
+
// pick between -- they are two disjoint cases of one question, joined by
|
|
67
|
+
// the arm test that already tells them apart.
|
|
68
|
+
const undefinedTests = representation.arms.flatMap((arm, index) => {
|
|
69
|
+
if (arm.value.kind === 'undefined' || arm.value.kind === 'void')
|
|
70
|
+
return [`${text}.is<${index}>()`];
|
|
71
|
+
if (arm.value.kind === 'optional' && arm.value.absence === 'undefined') {
|
|
72
|
+
return [`(${text}.is<${index}>() && !${text}.get<${index}>().has_value())`];
|
|
73
|
+
}
|
|
74
|
+
return [];
|
|
75
|
+
});
|
|
76
|
+
if (undefinedTests.length === 0)
|
|
77
|
+
return 'true';
|
|
78
|
+
return `!(${undefinedTests.join(' || ')})`;
|
|
79
|
+
}
|
|
80
|
+
if (representation.kind === 'dynamic')
|
|
81
|
+
return `((${text}).tag() != gea::Value::Tag::Undefined)`;
|
|
82
|
+
return 'true';
|
|
83
|
+
};
|
|
84
|
+
export const presenceTestText = (text, representation) => {
|
|
85
|
+
if (absent.has(representation.kind))
|
|
86
|
+
return 'false';
|
|
87
|
+
if (representation.kind === 'optional')
|
|
88
|
+
return `(${text}).has_value()`;
|
|
89
|
+
if (representation.kind === 'borrowed-ref')
|
|
90
|
+
return presenceTestText(text, representation.referent);
|
|
91
|
+
if (representation.kind === 'tagged-union') {
|
|
92
|
+
// Present unless the live arm is an absent one. Testing the absent arms and
|
|
93
|
+
// negating, rather than testing the present ones and or-ing, keeps the
|
|
94
|
+
// expression the same length whichever way a union leans and states the
|
|
95
|
+
// question the way the language does.
|
|
96
|
+
// An optional ARM holds its own absence, so a union carrying one has two
|
|
97
|
+
// places absence can live. Both are read: the value is nullish when the
|
|
98
|
+
// live arm is an absent one, OR when it is an optional arm whose flag is
|
|
99
|
+
// empty -- an empty `Optional<T>` IS the `null` or `undefined` its own tag
|
|
100
|
+
// names. The arm test tells the two cases apart, so joining them states
|
|
101
|
+
// one answer rather than choosing between two.
|
|
102
|
+
//
|
|
103
|
+
// hono reaches this on the `Data` union its `Context.body` builds and on
|
|
104
|
+
// `compose`'s own middleware result; refusing it left `conversion:
|
|
105
|
+
// is-present:tagged-union` uninstalled for the WHOLE program, since that
|
|
106
|
+
// helper key carries only the kind.
|
|
107
|
+
const absentTests = representation.arms.flatMap((arm, index) => {
|
|
108
|
+
if (absent.has(arm.value.kind))
|
|
109
|
+
return [`${text}.is<${index}>()`];
|
|
110
|
+
if (arm.value.kind === 'optional')
|
|
111
|
+
return [`(${text}.is<${index}>() && !${text}.get<${index}>().has_value())`];
|
|
112
|
+
return [];
|
|
113
|
+
});
|
|
114
|
+
if (absentTests.length === 0)
|
|
115
|
+
return 'true';
|
|
116
|
+
return `!(${absentTests.join(' || ')})`;
|
|
117
|
+
}
|
|
118
|
+
// A box answers this from its own tag, exactly as `absenceComparisonText`
|
|
119
|
+
// below already answers `x == null` from it -- the nullish test IS that
|
|
120
|
+
// comparison (ECMA-262 7.2.15 steps 2-3), so one carrier cannot have two
|
|
121
|
+
// answers here without the two disagreeing. `unresolved` is lattice bottom
|
|
122
|
+
// and genuinely has none.
|
|
123
|
+
if (representation.kind === 'dynamic') {
|
|
124
|
+
return `!((${text}).tag() == gea::Value::Tag::Null || (${text}).tag() == gea::Value::Tag::Undefined)`;
|
|
125
|
+
}
|
|
126
|
+
if (representation.kind === 'unresolved') {
|
|
127
|
+
throw createCppEmitBlockedError('runtime-helper:conversion:is-present:unresolved', 'a nullish test on an "unresolved" carrier has no carrier to read: selection never happened');
|
|
128
|
+
}
|
|
129
|
+
// A host handle is the one value-carrier that holds its own absence: a
|
|
130
|
+
// nullable host handle IS a handle, with nil as a state of it (see
|
|
131
|
+
// `optionalOf`), so there is no flag beside it to read and the handle itself
|
|
132
|
+
// is the answer. Both shapes spell that the same way -- the Apple bridge
|
|
133
|
+
// writes `explicit operator bool() const { return handle != 0; }` on every
|
|
134
|
+
// wrapper struct, and `gea::NativeHandle` carries the same conversion over
|
|
135
|
+
// its own `valid()`.
|
|
136
|
+
if (representation.kind === 'native-handle')
|
|
137
|
+
return `static_cast<bool>(${text})`;
|
|
138
|
+
// A refcounted class instance is the program's own half of that same fact:
|
|
139
|
+
// `gea::Ref<T>` is null or it is an object, and `optional.ts` collapses
|
|
140
|
+
// `TreeNode | null` onto it for exactly that reason. `explicit operator bool`
|
|
141
|
+
// reads the pointer, which is the whole of the question.
|
|
142
|
+
if (representation.kind === 'class-ref' && representation.ownership === 'shared-refcount')
|
|
143
|
+
return `static_cast<bool>(${text})`;
|
|
144
|
+
// Every remaining carrier is a value that exists: a number, a string, a
|
|
145
|
+
// record, an owned class instance, a callable. None of them can be `null` or
|
|
146
|
+
// `undefined` -- the plan puts those in an optional or a union arm -- so the
|
|
147
|
+
// answer is settled before the program runs.
|
|
148
|
+
return 'true';
|
|
149
|
+
};
|
|
150
|
+
/** Whether this backend can answer a presence test for a carrier, asked of the one authority rather than re-listed. */
|
|
151
|
+
export const presenceIsAnswerable = (representation) => {
|
|
152
|
+
try {
|
|
153
|
+
presenceTestText('operand', representation);
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* `x === null`, `x !== undefined`, `x == null` -- equality against an absent
|
|
162
|
+
* literal.
|
|
163
|
+
*
|
|
164
|
+
* Not a general comparison and never a conversion: the language settles most
|
|
165
|
+
* of it from the two carriers alone. `null === undefined` is false. An
|
|
166
|
+
* `Optional<T>` whose tag stands for `null` answers `x === undefined` false
|
|
167
|
+
* whatever it holds, and a carrier that cannot be absent at all answers both
|
|
168
|
+
* false without reading the value. Only when the tag and the literal agree is
|
|
169
|
+
* there a runtime question, and that question is the presence flag.
|
|
170
|
+
*
|
|
171
|
+
* The loose operators are a different rule and get it: `x == null` is true for
|
|
172
|
+
* *either* absent value, which is the presence test, so a union with both
|
|
173
|
+
* absent arms answers it correctly where `===` has to name one arm.
|
|
174
|
+
*
|
|
175
|
+
* Returns `null` when neither side is an absent literal, leaving ordinary
|
|
176
|
+
* equality to its own path, and when a side is carried dynamically -- a runtime
|
|
177
|
+
* tag this backend does not read.
|
|
178
|
+
*/
|
|
179
|
+
export const absenceComparisonText = (operator, left, right) => {
|
|
180
|
+
const strict = operator === '===' || operator === '!==';
|
|
181
|
+
const loose = operator === '==' || operator === '!=';
|
|
182
|
+
if (!strict && !loose)
|
|
183
|
+
return null;
|
|
184
|
+
const negated = operator === '!==' || operator === '!=';
|
|
185
|
+
const isLiteral = (representation) => representation.kind === 'null' || representation.kind === 'undefined';
|
|
186
|
+
const literal = isLiteral(left.representation) ? left : isLiteral(right.representation) ? right : null;
|
|
187
|
+
if (!literal)
|
|
188
|
+
return null;
|
|
189
|
+
const other = literal === left ? right : left;
|
|
190
|
+
const negate = (text) => (negated ? (text === 'true' ? 'false' : text === 'false' ? 'true' : `!(${text})`) : text);
|
|
191
|
+
// Both sides are absent literals: `null === undefined` is false and
|
|
192
|
+
// `null == undefined` is true, and neither reads a value.
|
|
193
|
+
if (isLiteral(other.representation)) {
|
|
194
|
+
return negate(loose || other.representation.kind === literal.representation.kind ? 'true' : 'false');
|
|
195
|
+
}
|
|
196
|
+
// `unresolved` is lattice bottom, not a carrier: nothing is known about what
|
|
197
|
+
// holds the value, so nothing can be said about its absence either.
|
|
198
|
+
if (other.representation.kind === 'unresolved')
|
|
199
|
+
return null;
|
|
200
|
+
// A boxed value answers this from its own tag and never unpacks the payload.
|
|
201
|
+
// ECMA-262 7.2.16 IsStrictlyEqual returns `true` for `x === null` exactly
|
|
202
|
+
// when `x` IS the null value -- a type test, which the box already carries --
|
|
203
|
+
// and 7.2.15 IsLooselyEqual steps 2-3 make `x == null` true for `null` and
|
|
204
|
+
// `undefined` alike. This is the one comparison a dynamic operand settles
|
|
205
|
+
// without a conversion, which is why it belongs here rather than in the
|
|
206
|
+
// binary-operator tables: `emitCompute` refuses a mixed-carrier operator
|
|
207
|
+
// immediately after asking this function, so declining here (as this used
|
|
208
|
+
// to, before `gea::Value` had a tag to read) refused `caught !== null` --
|
|
209
|
+
// the single most ordinary thing a `catch` body does, and the reason
|
|
210
|
+
// `test/fixtures/try-catch-equality.ts` could not emit at all.
|
|
211
|
+
//
|
|
212
|
+
// `other.text` is read twice in the loose form, which is safe because
|
|
213
|
+
// `operandText` always answers an already-materialized SSA value name
|
|
214
|
+
// (`nameOfValue`, emit-context.ts) and never an expression with effects.
|
|
215
|
+
if (other.representation.kind === 'dynamic') {
|
|
216
|
+
const tag = `(${other.text}).tag()`;
|
|
217
|
+
if (loose)
|
|
218
|
+
return negate(`(${tag} == gea::Value::Tag::Null || ${tag} == gea::Value::Tag::Undefined)`);
|
|
219
|
+
return negate(`${tag} == gea::Value::Tag::${literal.representation.kind === 'null' ? 'Null' : 'Undefined'}`);
|
|
220
|
+
}
|
|
221
|
+
// `x == null` asks about absence itself, whichever value carries it.
|
|
222
|
+
if (loose)
|
|
223
|
+
return negate(`!(${presenceTestText(other.text, other.representation)})`);
|
|
224
|
+
if (other.representation.kind === 'optional') {
|
|
225
|
+
return negate(other.representation.absence === literal.representation.kind ? `!(${other.text}).has_value()` : 'false');
|
|
226
|
+
}
|
|
227
|
+
if (other.representation.kind === 'tagged-union') {
|
|
228
|
+
const arm = other.representation.arms.findIndex((candidate) => candidate.value.kind === literal.representation.kind);
|
|
229
|
+
return negate(arm < 0 ? 'false' : `(${other.text}).is<${arm}>()`);
|
|
230
|
+
}
|
|
231
|
+
// The two carriers that hold their own absence answer `=== null` at RUNTIME,
|
|
232
|
+
// where every other carrier answers it before the program runs. Folding it to
|
|
233
|
+
// `false` here is what `sum(node)`'s `node === null` would have become --
|
|
234
|
+
// `optional.ts` collapsed `TreeNode | null` onto the bare `Ref`, so the
|
|
235
|
+
// carrier no longer says whether absence is possible and the value has to.
|
|
236
|
+
// `=== undefined` stays settled: neither collapse admits that absence.
|
|
237
|
+
if (carriesMergeAbsence(other.representation)) {
|
|
238
|
+
return negate(literal.representation.kind === 'null' ? `!(${presenceTestText(other.text, other.representation)})` : 'false');
|
|
239
|
+
}
|
|
240
|
+
// Every remaining carrier is a value that exists, so it is neither `null` nor
|
|
241
|
+
// `undefined` and the comparison is settled before the program runs.
|
|
242
|
+
return negate('false');
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* `ToBoolean` of one value, per carrier.
|
|
246
|
+
*
|
|
247
|
+
* The table is the language's, not a convenience: `0` and `NaN` are false and
|
|
248
|
+
* every other number true, an empty string is false and a one-space string
|
|
249
|
+
* true, `null` and `undefined` are false, an absent optional is false, and
|
|
250
|
+
* *every* object is true no matter what it holds. Writing any of these as a
|
|
251
|
+
* C++ implicit conversion would get several of them wrong -- `NaN` converts to
|
|
252
|
+
* `true`, and a `std::string` does not convert at all -- so each carrier gets
|
|
253
|
+
* the expression that is exactly its rule, and a carrier with no stated rule
|
|
254
|
+
* is refused rather than left to whatever `if (x)` happens to mean in C++.
|
|
255
|
+
*
|
|
256
|
+
* Truthiness and presence live in one file because they are the two questions
|
|
257
|
+
* a program asks of a value it has not looked at, they disagree on exactly the
|
|
258
|
+
* values that matter (`0`, `''`, `NaN` are present and falsy), and keeping them
|
|
259
|
+
* apart is how a backend ends up answering one with the other's rule.
|
|
260
|
+
*/
|
|
261
|
+
/**
|
|
262
|
+
* `integral` says the value is HELD in a `long long` -- the integer storage
|
|
263
|
+
* census narrowed the cell, the field or the formal it came out of.
|
|
264
|
+
*
|
|
265
|
+
* It changes one answer and it has to: a `long long` has no NaN, so `v == v`
|
|
266
|
+
* is not a NaN test there but a tautology, and gcc rejects it outright under
|
|
267
|
+
* `-Werror=tautological-compare`. `examples/apps/weather` is where that
|
|
268
|
+
* surfaced -- five `if (store.searchResultVisible)` sites the moment those
|
|
269
|
+
* flags became `Signal<long long>` -- and it is a compile error rather than a
|
|
270
|
+
* wrong answer only because the board builds with `-Werror`.
|
|
271
|
+
*/
|
|
272
|
+
export const booleanTestText = (text, representation, integral = false) => {
|
|
273
|
+
switch (representation.kind) {
|
|
274
|
+
case 'scalar':
|
|
275
|
+
// `NaN` is false, and `NaN != 0` is true, so the zero test alone is
|
|
276
|
+
// wrong for the one domain that has a NaN. `v == v` is the ordinary
|
|
277
|
+
// spelling of "not NaN" and needs no <cmath>.
|
|
278
|
+
if (representation.domain === 'boolean')
|
|
279
|
+
return text;
|
|
280
|
+
if (representation.domain === 'number' && !integral)
|
|
281
|
+
return `((${text}) == (${text}) && (${text}) != 0)`;
|
|
282
|
+
return `((${text}) != 0)`;
|
|
283
|
+
case 'string':
|
|
284
|
+
return `(!(${text}).empty())`;
|
|
285
|
+
case 'null':
|
|
286
|
+
case 'undefined':
|
|
287
|
+
return 'false';
|
|
288
|
+
case 'tagged-union': {
|
|
289
|
+
// Each arm has its own rule -- a `null` arm is false, a string arm is
|
|
290
|
+
// false only when empty, an object arm is always true -- so the test is
|
|
291
|
+
// the arm dispatch, not one expression over the union. The final arm
|
|
292
|
+
// needs no discriminant check: the union always holds one of them, and
|
|
293
|
+
// testing for it anyway would leave a value C++ requires an answer for.
|
|
294
|
+
const arms = representation.arms;
|
|
295
|
+
const last = arms[arms.length - 1];
|
|
296
|
+
if (!last)
|
|
297
|
+
throw createCppEmitBlockedError('runtime-helper:conversion:to-boolean:tagged-union', 'a tagged union with no arms has no value to test');
|
|
298
|
+
return arms
|
|
299
|
+
.slice(0, -1)
|
|
300
|
+
.reduceRight((fallback, arm, index) => `((${text}).is<${index}>() ? ${booleanTestText(`(${text}).get<${index}>()`, arm.value)} : ${fallback})`, booleanTestText(`(${text}).get<${arms.length - 1}>()`, last.value));
|
|
301
|
+
}
|
|
302
|
+
case 'optional':
|
|
303
|
+
// An absent optional is the language's `undefined` or `null`, which is
|
|
304
|
+
// false; a present one is whatever its payload's own rule says, because
|
|
305
|
+
// `Optional<string>` holding `""` is false and not true.
|
|
306
|
+
return `((${text}).has_value() && ${booleanTestText(`*(${text})`, representation.payload)})`;
|
|
307
|
+
case 'native-handle':
|
|
308
|
+
// The one carrier in this group that is not always an object. A nullable
|
|
309
|
+
// host handle IS a handle with nil as a state of it, so the absence the
|
|
310
|
+
// plan would put in an `Optional` for any other carrier lives inside the
|
|
311
|
+
// handle itself -- which `presenceTestText` above already states, and
|
|
312
|
+
// answering `true` here contradicted it. A nil handle is the language's
|
|
313
|
+
// `null`, whose `ToBoolean` is false, and a valid one is an object,
|
|
314
|
+
// whose `ToBoolean` is true; `explicit operator bool` is exactly that
|
|
315
|
+
// distinction, so presence and truthiness genuinely coincide here and
|
|
316
|
+
// are spelled the same way rather than by accident.
|
|
317
|
+
//
|
|
318
|
+
// Getting this wrong is invisible: `if (!root)` over a handle folded to
|
|
319
|
+
// `!true`, so the guard tested a constant instead of the value.
|
|
320
|
+
return presenceTestText(text, representation);
|
|
321
|
+
case 'symbol':
|
|
322
|
+
// ECMA-262's ToBoolean table has no symbol row of its own: a symbol is
|
|
323
|
+
// not a primitive with a falsy value, it is one of the values that is
|
|
324
|
+
// simply true. `Symbol()` and `Symbol('')` are both truthy.
|
|
325
|
+
return 'true';
|
|
326
|
+
case 'class-ref':
|
|
327
|
+
// Truthy as every object is -- unless it is the refcounted shape
|
|
328
|
+
// `optional.ts` collapses `T | null` onto, whose null state is the
|
|
329
|
+
// absence that collapse removed the flag for. `presenceTestText` states
|
|
330
|
+
// that distinction once; answering `true` here would contradict it, the
|
|
331
|
+
// same way it once did for `native-handle`.
|
|
332
|
+
return presenceTestText(text, representation);
|
|
333
|
+
case 'record':
|
|
334
|
+
case 'record-with-index':
|
|
335
|
+
case 'native-record-ref':
|
|
336
|
+
case 'array-object':
|
|
337
|
+
case 'dictionary':
|
|
338
|
+
case 'proxy-object':
|
|
339
|
+
case 'typed-array':
|
|
340
|
+
case 'array-buffer':
|
|
341
|
+
case 'shared-array-buffer':
|
|
342
|
+
case 'data-view':
|
|
343
|
+
case 'promise':
|
|
344
|
+
case 'keyed-collection':
|
|
345
|
+
case 'function':
|
|
346
|
+
case 'function-family':
|
|
347
|
+
case 'function-value-family':
|
|
348
|
+
case 'function-value-dispatch':
|
|
349
|
+
case 'callable-identity':
|
|
350
|
+
case 'generic-function-set':
|
|
351
|
+
case 'constructor-family':
|
|
352
|
+
case 'constructor-value-dispatch':
|
|
353
|
+
case 'function-and-constructor':
|
|
354
|
+
// Every object is truthy, including an empty array and a `new
|
|
355
|
+
// Boolean(false)`. The value is not read at all, which is the point.
|
|
356
|
+
// ECMA-262 gives `Promise` no special ToBoolean rule -- it is an
|
|
357
|
+
// ordinary object for this purpose, same as every other carrier in
|
|
358
|
+
// this group.
|
|
359
|
+
return 'true';
|
|
360
|
+
case 'dynamic':
|
|
361
|
+
// A value the program declared `any`/`unknown` and never narrowed --
|
|
362
|
+
// one of the four reasons a box is legitimate at all
|
|
363
|
+
// (representation/model.ts). `ToBoolean` is a closed nine-tag table
|
|
364
|
+
// with no user code in it, unlike a property get or a call, so
|
|
365
|
+
// `gea::host::detail::toBoolean` (gea_runtime.h) can state the whole
|
|
366
|
+
// thing rather than leaving it as an open dispatch: undefined/null
|
|
367
|
+
// false, an object/function/symbol always true, and a boxed
|
|
368
|
+
// boolean/number/string reads its own payload for the same
|
|
369
|
+
// NaN/zero/empty-string rule the scalar and string cases above already
|
|
370
|
+
// state. Only bigint has no answer, because no arbitrary-precision
|
|
371
|
+
// type exists anywhere in this runtime for it to hold.
|
|
372
|
+
return `gea::host::detail::toBoolean(${text})`;
|
|
373
|
+
default:
|
|
374
|
+
throw createCppEmitBlockedError(`runtime-helper:conversion:to-boolean:${representation.kind}`, `a "${representation.kind}" carrier has no stated ToBoolean rule; testing it would mean choosing one, and the wrong choice is invisible`);
|
|
375
|
+
}
|
|
376
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { Representation } from '../../representation/model.js';
|
|
2
|
+
import type { DefineOwnPropertyOperation, GetOperation, IrOperand, SetOperation } from '../../ir/model.js';
|
|
3
|
+
import type { FunctionId } from '../../identity/ids.js';
|
|
4
|
+
import { type EmitContext, type ReactiveRevisionOrigin } from './emit-context.js';
|
|
5
|
+
/** The static field name a `get`/`set`/`define-own-property` key resolves to. A key with no recorded constant text is a dynamic key. */
|
|
6
|
+
export declare const staticKeyTextOf: (ctx: EmitContext, key: IrOperand, contextDescription: string) => string;
|
|
7
|
+
/**
|
|
8
|
+
* The host-member reading of a property access, or `null` when the receiver is
|
|
9
|
+
* not a `native-handle`.
|
|
10
|
+
*
|
|
11
|
+
* A host singleton -- `Math`, `Date`, `String` -- carries no data of its own:
|
|
12
|
+
* every one of its interned handles names the same host object, and the value
|
|
13
|
+
* a `[[Get]]` produces depends only on the protocol and the key, never on
|
|
14
|
+
* which handle instance asked. So, unlike every other branch here, the
|
|
15
|
+
* materialized receiver operand is not read at all -- the qualified host
|
|
16
|
+
* symbol `gea::host::<protocol>::<key>` names the member directly, the same
|
|
17
|
+
* way `classMemberText` names a method without reading the instance. That
|
|
18
|
+
* symbol is read out of `hostMembers`, never built from the protocol and the
|
|
19
|
+
* key: the table states the spelling for every member that has one, so a
|
|
20
|
+
* member no table claims is refused by name below rather than handed an
|
|
21
|
+
* interpolated symbol no runtime header declares.
|
|
22
|
+
*
|
|
23
|
+
* A non-constant key is refused: a host object has no runtime member table
|
|
24
|
+
* for this backend to dispatch a dynamic key against, only the fixed set of
|
|
25
|
+
* qualified symbols `gea_runtime.h` declares.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* The dictionary table behind a receiver, in both spellings a use of it needs.
|
|
29
|
+
*
|
|
30
|
+
* A `dictionary` carrier is a `std::map`-backed container: `member` reaches
|
|
31
|
+
* its methods (`read`, `has`) through whichever accessor its ownership calls
|
|
32
|
+
* for, and `subscript` is the `operator[]` form a store writes through. Both
|
|
33
|
+
* are built here rather than at each use so the two cannot disagree about
|
|
34
|
+
* which object is being indexed.
|
|
35
|
+
*
|
|
36
|
+
* A `record-with-index` deliberately answers `null`. Its index signature does
|
|
37
|
+
* live in a dictionary sidecar beside the named fields, but a key that spells
|
|
38
|
+
* a declared field must reach the *struct member* and not the table, and
|
|
39
|
+
* deciding that needs the field list this function does not have. Answering
|
|
40
|
+
* here would route `style.width` into the sidecar and silently read nothing,
|
|
41
|
+
* so it stays refused by name in the caller until that decision is written.
|
|
42
|
+
*/
|
|
43
|
+
export declare const dictionaryTableOf: (ctx: EmitContext, receiver: IrOperand, key: IrOperand) => {
|
|
44
|
+
readonly member: string;
|
|
45
|
+
readonly subscript: string;
|
|
46
|
+
readonly key: string;
|
|
47
|
+
} | null;
|
|
48
|
+
/**
|
|
49
|
+
* The emitted body behind an accessor-backed *record* member, or `null` when
|
|
50
|
+
* the key is an ordinary field (or the receiver carries no record accessors
|
|
51
|
+
* at all).
|
|
52
|
+
*
|
|
53
|
+
* An object literal's `get width() { ... }` has no storage: the shape says so,
|
|
54
|
+
* and `records.ts` lays out no member for it. So the read is a call, spelled
|
|
55
|
+
* against the same free function every other body is emitted as, with the
|
|
56
|
+
* object passed as the receiver it was compiled to take.
|
|
57
|
+
*/
|
|
58
|
+
/**
|
|
59
|
+
* Whether a member read renders as a pure load -- an element, a `length`, a
|
|
60
|
+
* field, a method reference -- rather than as a call into the program.
|
|
61
|
+
*
|
|
62
|
+
* `ir/dead-values.ts` asks this before dropping a read nothing consumes, and
|
|
63
|
+
* `ir/deferral.ts` before moving one to its use. A read through a record
|
|
64
|
+
* accessor (`get width() { ... }`) runs a body; a read off a host handle may
|
|
65
|
+
* reach the host; a read through an `optional` receiver renders a presence
|
|
66
|
+
* check first. All three keep their statement. `key` is the IR's own text for
|
|
67
|
+
* a string-literal key, passed in rather than looked up: this is asked from the
|
|
68
|
+
* IR passes, before an `EmitContext` for the body exists at all, so neither
|
|
69
|
+
* `constantTexts` nor the settled `staticKeyTexts` is reachable from here.
|
|
70
|
+
*/
|
|
71
|
+
export declare const isPlainMemberRead: (ctx: EmitContext, operation: GetOperation, key: string | null) => boolean;
|
|
72
|
+
/**
|
|
73
|
+
* The environment actual a capturing accessor's body is called with, or no
|
|
74
|
+
* actual at all when the body captures nothing.
|
|
75
|
+
*
|
|
76
|
+
* `emit-iterator.ts` asks the identical question of the identical member for a
|
|
77
|
+
* `next`/`return` read it renders as one expression, so this is exported: one
|
|
78
|
+
* answer for "what does this accessor's body need beyond its receiver",
|
|
79
|
+
* reached from every site that calls one.
|
|
80
|
+
*/
|
|
81
|
+
export declare const accessorEnvironmentArguments: (ctx: EmitContext, receiver: Representation, key: string, body: FunctionId | null, half: "getter" | "setter", receiverText: string) => readonly string[];
|
|
82
|
+
export declare const emitGet: (ctx: EmitContext, lines: string[], operation: GetOperation) => void;
|
|
83
|
+
/**
|
|
84
|
+
* What a reactive RECORD-field read obliges a consumer to do.
|
|
85
|
+
*
|
|
86
|
+
* The record half of `reactiveClassFieldClaim`, kept beside the record layout
|
|
87
|
+
* for the same reason that one is kept beside the class layout: a class
|
|
88
|
+
* resolves the DECLARING class along its inheritance chain first, a record has
|
|
89
|
+
* no chain, so this is the whole of it. Both are asked by the one walk that
|
|
90
|
+
* settles the channel before the body renders.
|
|
91
|
+
*
|
|
92
|
+
* A class-ref receiver is excluded rather than merely losing a race: the class
|
|
93
|
+
* layout is the authority for a class's fields, and `celled` is derived from
|
|
94
|
+
* what JSX binds, which is a different question with a different answer.
|
|
95
|
+
*/
|
|
96
|
+
export declare const reactiveRecordFieldClaim: (ctx: EmitContext, operation: GetOperation) => ReactiveRevisionOrigin | null;
|
|
97
|
+
/**
|
|
98
|
+
* A store, plus the revision tick a store into reactive array state owes.
|
|
99
|
+
*
|
|
100
|
+
* Wrapped rather than pushed inside `emitFieldStoreLines`, which returns from a
|
|
101
|
+
* dozen places: a tick that some branches emit and others forget is a list that
|
|
102
|
+
* re-renders for some writes and not others, which is worse than one that never
|
|
103
|
+
* re-renders because the failure depends on which member you wrote.
|
|
104
|
+
*/
|
|
105
|
+
export declare const emitFieldStore: (ctx: EmitContext, lines: string[], operation: SetOperation | DefineOwnPropertyOperation, label: string) => void;
|