@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,532 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { geaRenderMemberName } from './contract.js';
|
|
3
|
+
import { isReactiveComponentChild, openingOf, namesAComponent } from './reactive-slots.js';
|
|
4
|
+
const unwrapParentheses = (expression) => ts.isParenthesizedExpression(expression) ? unwrapParentheses(expression.expression) : expression;
|
|
5
|
+
const holdsJsx = (node) => {
|
|
6
|
+
if (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node))
|
|
7
|
+
return true;
|
|
8
|
+
let found = false;
|
|
9
|
+
ts.forEachChild(node, (child) => {
|
|
10
|
+
if (!found && holdsJsx(child))
|
|
11
|
+
found = true;
|
|
12
|
+
});
|
|
13
|
+
return found;
|
|
14
|
+
};
|
|
15
|
+
const isFunctionLike = (node) => ts.isArrowFunction(node) ||
|
|
16
|
+
ts.isFunctionExpression(node) ||
|
|
17
|
+
ts.isFunctionDeclaration(node) ||
|
|
18
|
+
ts.isMethodDeclaration(node) ||
|
|
19
|
+
ts.isGetAccessorDeclaration(node) ||
|
|
20
|
+
ts.isSetAccessorDeclaration(node) ||
|
|
21
|
+
ts.isConstructorDeclaration(node);
|
|
22
|
+
/**
|
|
23
|
+
* Whether an expression can be moved, and duplicated, without changing what the
|
|
24
|
+
* program does.
|
|
25
|
+
*
|
|
26
|
+
* A prop's expression is written once at the call site and read wherever the
|
|
27
|
+
* body reads that prop -- possibly more than once, possibly in a different
|
|
28
|
+
* order. That is only the same program when evaluating it has no effect and no
|
|
29
|
+
* result that depends on when it runs, so anything that calls, constructs,
|
|
30
|
+
* assigns, awaits, or yields refuses the whole invocation. Property reads stay
|
|
31
|
+
* in: they are what a reactive prop IS, and re-reading one is the point.
|
|
32
|
+
*/
|
|
33
|
+
const isPureExpression = (node) => {
|
|
34
|
+
if (ts.isCallExpression(node) ||
|
|
35
|
+
ts.isNewExpression(node) ||
|
|
36
|
+
ts.isTaggedTemplateExpression(node) ||
|
|
37
|
+
ts.isAwaitExpression(node) ||
|
|
38
|
+
ts.isYieldExpression(node) ||
|
|
39
|
+
ts.isDeleteExpression(node) ||
|
|
40
|
+
ts.isPostfixUnaryExpression(node) ||
|
|
41
|
+
ts.isClassExpression(node) ||
|
|
42
|
+
ts.isSpreadAssignment(node) ||
|
|
43
|
+
holdsJsx(node) ||
|
|
44
|
+
isFunctionLike(node)) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
if (ts.isPrefixUnaryExpression(node)) {
|
|
48
|
+
if (node.operator === ts.SyntaxKind.PlusPlusToken || node.operator === ts.SyntaxKind.MinusMinusToken)
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (ts.isBinaryExpression(node)) {
|
|
52
|
+
const operator = node.operatorToken.kind;
|
|
53
|
+
if (operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment)
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
let pure = true;
|
|
57
|
+
ts.forEachChild(node, (child) => {
|
|
58
|
+
if (pure && !isPureExpression(child))
|
|
59
|
+
pure = false;
|
|
60
|
+
});
|
|
61
|
+
return pure;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* The name an identifier READS, or `null` when it names a declaration, a
|
|
65
|
+
* property, an attribute, or a tag rather than a value in scope.
|
|
66
|
+
*
|
|
67
|
+
* Substitution is by reference site, so a node that merely SPELLS a name --
|
|
68
|
+
* `{ angle: 1 }`'s key, `x.angle`'s member, `angle={...}`'s attribute -- must
|
|
69
|
+
* not be mistaken for a read of it.
|
|
70
|
+
*/
|
|
71
|
+
const readNameOf = (node) => {
|
|
72
|
+
if (!ts.isIdentifier(node))
|
|
73
|
+
return null;
|
|
74
|
+
const parent = node.parent;
|
|
75
|
+
if (!parent)
|
|
76
|
+
return null;
|
|
77
|
+
if (ts.isPropertyAccessExpression(parent) && parent.name === node)
|
|
78
|
+
return null;
|
|
79
|
+
if (ts.isQualifiedName(parent) && parent.right === node)
|
|
80
|
+
return null;
|
|
81
|
+
if (ts.isPropertyAssignment(parent) && parent.name === node)
|
|
82
|
+
return null;
|
|
83
|
+
if (ts.isJsxAttribute(parent) && parent.name === node)
|
|
84
|
+
return null;
|
|
85
|
+
if (ts.isJsxNamespacedName(parent))
|
|
86
|
+
return null;
|
|
87
|
+
if (ts.isBindingElement(parent) && (parent.propertyName === node || parent.name === node))
|
|
88
|
+
return null;
|
|
89
|
+
if (ts.isVariableDeclaration(parent) && parent.name === node)
|
|
90
|
+
return null;
|
|
91
|
+
if (ts.isParameter(parent) && parent.name === node)
|
|
92
|
+
return null;
|
|
93
|
+
if (ts.isFunctionDeclaration(parent) && parent.name === node)
|
|
94
|
+
return null;
|
|
95
|
+
if (ts.isClassDeclaration(parent) && parent.name === node)
|
|
96
|
+
return null;
|
|
97
|
+
if (ts.isEnumMember(parent) && parent.name === node)
|
|
98
|
+
return null;
|
|
99
|
+
if (ts.isMetaProperty(parent))
|
|
100
|
+
return null;
|
|
101
|
+
if ((ts.isJsxOpeningElement(parent) || ts.isJsxSelfClosingElement(parent) || ts.isJsxClosingElement(parent)) && parent.tagName === node)
|
|
102
|
+
return null;
|
|
103
|
+
return node.text;
|
|
104
|
+
};
|
|
105
|
+
/** Every identifier under `root` that reads a name, in source order. */
|
|
106
|
+
const readsUnder = (root) => {
|
|
107
|
+
const reads = [];
|
|
108
|
+
const visit = (node) => {
|
|
109
|
+
if (readNameOf(node) !== null)
|
|
110
|
+
reads.push(node);
|
|
111
|
+
ts.forEachChild(node, visit);
|
|
112
|
+
};
|
|
113
|
+
visit(root);
|
|
114
|
+
return reads;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* The kind of slot a reference sits in, or `null` when it sits somewhere a
|
|
118
|
+
* re-run could change the shape of the tree.
|
|
119
|
+
*
|
|
120
|
+
* `prop` and `child` are the two positions whose reactive forms write into a
|
|
121
|
+
* node that already exists. A child expression holding JSX is not one of them:
|
|
122
|
+
* what it produces is elements, and re-running it produces DIFFERENT elements.
|
|
123
|
+
*/
|
|
124
|
+
const slotPositionOf = (reference, root) => {
|
|
125
|
+
let node = reference;
|
|
126
|
+
while (node !== root) {
|
|
127
|
+
const parent = node.parent;
|
|
128
|
+
if (!parent)
|
|
129
|
+
return null;
|
|
130
|
+
if (isFunctionLike(parent) || ts.isClassLike(parent))
|
|
131
|
+
return null;
|
|
132
|
+
if (ts.isJsxAttribute(parent))
|
|
133
|
+
return 'prop';
|
|
134
|
+
if (ts.isJsxExpression(node) && (ts.isJsxElement(parent) || ts.isJsxFragment(parent)))
|
|
135
|
+
return holdsJsx(node) ? null : 'child';
|
|
136
|
+
node = parent;
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Whether the body builds a fixed tree of intrinsic elements.
|
|
142
|
+
*
|
|
143
|
+
* A nested component element is refused for the reason this whole rewrite
|
|
144
|
+
* exists -- it is an invocation, not an element, and nothing here can see
|
|
145
|
+
* through a second one. `this` means the body is a method, whose receiver the
|
|
146
|
+
* call site has no expression for. A spread attribute names props this rewrite
|
|
147
|
+
* cannot enumerate.
|
|
148
|
+
*/
|
|
149
|
+
const buildsFixedIntrinsicTree = (root) => {
|
|
150
|
+
let fixed = true;
|
|
151
|
+
const visit = (node) => {
|
|
152
|
+
if (!fixed)
|
|
153
|
+
return;
|
|
154
|
+
if (node.kind === ts.SyntaxKind.ThisKeyword || ts.isJsxSpreadAttribute(node))
|
|
155
|
+
fixed = false;
|
|
156
|
+
else if ((ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node)) && namesAComponent(openingOf(node).tagName))
|
|
157
|
+
fixed = false;
|
|
158
|
+
else
|
|
159
|
+
ts.forEachChild(node, visit);
|
|
160
|
+
};
|
|
161
|
+
visit(root);
|
|
162
|
+
return fixed;
|
|
163
|
+
};
|
|
164
|
+
/** The props a component destructures, or `null` for any parameter shape this rewrite cannot supply. */
|
|
165
|
+
const parametersOf = (parameters) => {
|
|
166
|
+
if (parameters.length === 0)
|
|
167
|
+
return [];
|
|
168
|
+
if (parameters.length > 1)
|
|
169
|
+
return null;
|
|
170
|
+
const parameter = parameters[0];
|
|
171
|
+
if (!parameter || parameter.dotDotDotToken || parameter.initializer)
|
|
172
|
+
return null;
|
|
173
|
+
// Only the destructured form. `function C(props)` would need every
|
|
174
|
+
// `props.x` rewritten instead, and `props` handed anywhere whole -- passed
|
|
175
|
+
// on, spread, `Object.keys`ed -- is a use this rewrite cannot supply, so the
|
|
176
|
+
// shape it can answer for is the one that names its props up front.
|
|
177
|
+
if (!ts.isObjectBindingPattern(parameter.name))
|
|
178
|
+
return null;
|
|
179
|
+
const found = [];
|
|
180
|
+
for (const element of parameter.name.elements) {
|
|
181
|
+
if (element.dotDotDotToken || element.initializer)
|
|
182
|
+
return null;
|
|
183
|
+
if (!ts.isIdentifier(element.name))
|
|
184
|
+
return null;
|
|
185
|
+
const propertyName = element.propertyName;
|
|
186
|
+
if (propertyName !== undefined && !ts.isIdentifier(propertyName))
|
|
187
|
+
return null;
|
|
188
|
+
found.push({ attribute: propertyName ? propertyName.text : element.name.text, local: element.name.text });
|
|
189
|
+
}
|
|
190
|
+
return found;
|
|
191
|
+
};
|
|
192
|
+
/** The body's `const`s and the element it returns, or `null` for any body that does more than that. */
|
|
193
|
+
const bodyOf = (declaration) => {
|
|
194
|
+
const body = declaration.body;
|
|
195
|
+
if (!body)
|
|
196
|
+
return null;
|
|
197
|
+
if (!ts.isBlock(body)) {
|
|
198
|
+
const expression = unwrapParentheses(body);
|
|
199
|
+
if (!ts.isJsxElement(expression) && !ts.isJsxSelfClosingElement(expression))
|
|
200
|
+
return null;
|
|
201
|
+
return { locals: [], element: expression };
|
|
202
|
+
}
|
|
203
|
+
const locals = [];
|
|
204
|
+
const statements = body.statements;
|
|
205
|
+
for (let index = 0; index + 1 < statements.length; index += 1) {
|
|
206
|
+
const statement = statements[index];
|
|
207
|
+
if (!statement || !ts.isVariableStatement(statement))
|
|
208
|
+
return null;
|
|
209
|
+
if ((statement.declarationList.flags & ts.NodeFlags.Const) === 0)
|
|
210
|
+
return null;
|
|
211
|
+
for (const variable of statement.declarationList.declarations) {
|
|
212
|
+
if (!ts.isIdentifier(variable.name) || !variable.initializer)
|
|
213
|
+
return null;
|
|
214
|
+
if (!isPureExpression(variable.initializer))
|
|
215
|
+
return null;
|
|
216
|
+
locals.push({ name: variable.name.text, initializer: variable.initializer });
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const last = statements[statements.length - 1];
|
|
220
|
+
if (!last || !ts.isReturnStatement(last) || !last.expression)
|
|
221
|
+
return null;
|
|
222
|
+
const returned = unwrapParentheses(last.expression);
|
|
223
|
+
if (!ts.isJsxElement(returned) && !ts.isJsxSelfClosingElement(returned))
|
|
224
|
+
return null;
|
|
225
|
+
return { locals, element: returned };
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* A component this rewrite can substitute into, or `null`.
|
|
229
|
+
*
|
|
230
|
+
* The positional check is the load-bearing one: every read of a prop, and every
|
|
231
|
+
* read of a local (which may itself be computed from a prop), must sit in a
|
|
232
|
+
* slot that writes a value into an existing node. A shorthand property
|
|
233
|
+
* assignment is refused because the identifier there is both the key and the
|
|
234
|
+
* value, and replacing its text would rename the key.
|
|
235
|
+
*/
|
|
236
|
+
const analyzeComponent = (declaration) => {
|
|
237
|
+
if (declaration.typeParameters && declaration.typeParameters.length > 0)
|
|
238
|
+
return null;
|
|
239
|
+
if (declaration.asteriskToken)
|
|
240
|
+
return null;
|
|
241
|
+
const parameters = parametersOf(declaration.parameters);
|
|
242
|
+
if (parameters === null)
|
|
243
|
+
return null;
|
|
244
|
+
const body = bodyOf(declaration);
|
|
245
|
+
if (body === null)
|
|
246
|
+
return null;
|
|
247
|
+
if (!buildsFixedIntrinsicTree(body.element))
|
|
248
|
+
return null;
|
|
249
|
+
const supplied = new Set(parameters.map((parameter) => parameter.local));
|
|
250
|
+
const declared = new Set(body.locals.map((local) => local.name));
|
|
251
|
+
for (const name of declared)
|
|
252
|
+
if (supplied.has(name))
|
|
253
|
+
return null;
|
|
254
|
+
// A local may read the props and the locals BEFORE it; a later one is a
|
|
255
|
+
// temporal dead zone the substitution order cannot reproduce.
|
|
256
|
+
const visible = new Set(supplied);
|
|
257
|
+
for (const local of body.locals) {
|
|
258
|
+
for (const read of readsUnder(local.initializer)) {
|
|
259
|
+
if (declared.has(read.text) && !visible.has(read.text))
|
|
260
|
+
return null;
|
|
261
|
+
if (ts.isShorthandPropertyAssignment(read.parent) && (supplied.has(read.text) || declared.has(read.text)))
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
visible.add(local.name);
|
|
265
|
+
}
|
|
266
|
+
const free = new Set();
|
|
267
|
+
for (const read of readsUnder(body.element)) {
|
|
268
|
+
const name = read.text;
|
|
269
|
+
if (!supplied.has(name) && !declared.has(name)) {
|
|
270
|
+
free.add(name);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (ts.isShorthandPropertyAssignment(read.parent))
|
|
274
|
+
return null;
|
|
275
|
+
if (slotPositionOf(read, body.element) === null)
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
for (const local of body.locals)
|
|
279
|
+
for (const read of readsUnder(local.initializer))
|
|
280
|
+
if (!supplied.has(read.text) && !declared.has(read.text))
|
|
281
|
+
free.add(read.text);
|
|
282
|
+
return { parameters, locals: body.locals, element: body.element, free };
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* The `template` method of a class whose ONLY member is that method, or `null`.
|
|
286
|
+
*
|
|
287
|
+
* "Only member" is the whole of the proof that such a class is a function of
|
|
288
|
+
* its props: a field is state, another method is behaviour reachable from
|
|
289
|
+
* elsewhere, a lifecycle hook is work the construction performs -- and this
|
|
290
|
+
* rewrite deletes the construction. A class that declares any of them keeps its
|
|
291
|
+
* invocation. What the class DERIVES from is deliberately not asked: the base
|
|
292
|
+
* is ambient and contributes no body, and `template` is refused below if it so
|
|
293
|
+
* much as mentions `this`, so there is nothing of an instance left to preserve.
|
|
294
|
+
*/
|
|
295
|
+
const soleTemplateOf = (declaration) => {
|
|
296
|
+
if (declaration.typeParameters && declaration.typeParameters.length > 0)
|
|
297
|
+
return null;
|
|
298
|
+
if (declaration.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AbstractKeyword))
|
|
299
|
+
return null;
|
|
300
|
+
if (declaration.members.length !== 1)
|
|
301
|
+
return null;
|
|
302
|
+
const member = declaration.members[0];
|
|
303
|
+
if (!member || !ts.isMethodDeclaration(member))
|
|
304
|
+
return null;
|
|
305
|
+
if (!ts.isIdentifier(member.name) || member.name.text !== geaRenderMemberName)
|
|
306
|
+
return null;
|
|
307
|
+
if (member.modifiers && member.modifiers.length > 0)
|
|
308
|
+
return null;
|
|
309
|
+
return member;
|
|
310
|
+
};
|
|
311
|
+
/** Every module-scope component this file declares by name, with a duplicate name naming nothing. */
|
|
312
|
+
const namedComponentsOf = (file) => {
|
|
313
|
+
const found = new Map();
|
|
314
|
+
const ambiguous = new Set();
|
|
315
|
+
const note = (name, declaration) => {
|
|
316
|
+
if (found.has(name))
|
|
317
|
+
ambiguous.add(name);
|
|
318
|
+
found.set(name, declaration);
|
|
319
|
+
};
|
|
320
|
+
for (const statement of file.statements) {
|
|
321
|
+
if (ts.isFunctionDeclaration(statement) && statement.name)
|
|
322
|
+
note(statement.name.text, statement);
|
|
323
|
+
else if (ts.isClassDeclaration(statement) && statement.name) {
|
|
324
|
+
const template = soleTemplateOf(statement);
|
|
325
|
+
if (template)
|
|
326
|
+
note(statement.name.text, template);
|
|
327
|
+
else
|
|
328
|
+
ambiguous.add(statement.name.text);
|
|
329
|
+
}
|
|
330
|
+
else if (ts.isVariableStatement(statement)) {
|
|
331
|
+
for (const variable of statement.declarationList.declarations) {
|
|
332
|
+
if (!ts.isIdentifier(variable.name) || !variable.initializer)
|
|
333
|
+
continue;
|
|
334
|
+
const initializer = unwrapParentheses(variable.initializer);
|
|
335
|
+
if (ts.isArrowFunction(initializer))
|
|
336
|
+
note(variable.name.text, initializer);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
for (const name of ambiguous)
|
|
341
|
+
found.delete(name);
|
|
342
|
+
return found;
|
|
343
|
+
};
|
|
344
|
+
const collectBoundNames = (root, into) => {
|
|
345
|
+
const noteBindingName = (name) => {
|
|
346
|
+
if (ts.isIdentifier(name)) {
|
|
347
|
+
into.add(name.text);
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
for (const element of name.elements)
|
|
351
|
+
if (!ts.isOmittedExpression(element))
|
|
352
|
+
noteBindingName(element.name);
|
|
353
|
+
};
|
|
354
|
+
const visit = (node) => {
|
|
355
|
+
if (ts.isVariableDeclaration(node) || ts.isParameter(node) || ts.isBindingElement(node))
|
|
356
|
+
noteBindingName(node.name);
|
|
357
|
+
else if ((ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node)) && node.name)
|
|
358
|
+
into.add(node.name.text);
|
|
359
|
+
else if (ts.isCatchClause(node) && node.variableDeclaration)
|
|
360
|
+
noteBindingName(node.variableDeclaration.name);
|
|
361
|
+
ts.forEachChild(node, visit);
|
|
362
|
+
};
|
|
363
|
+
visit(root);
|
|
364
|
+
};
|
|
365
|
+
/**
|
|
366
|
+
* Names that are bound somewhere between this element and module scope.
|
|
367
|
+
*
|
|
368
|
+
* The body is moved into the call site's scope, so a name it reads freely --
|
|
369
|
+
* an import, a module constant, another component -- must still mean what it
|
|
370
|
+
* meant where it was written. A local of the same name at the destination would
|
|
371
|
+
* silently capture it, so any collision refuses the invocation. Every name
|
|
372
|
+
* bound anywhere in an enclosing function counts, not only the ones visible at
|
|
373
|
+
* this point: over-refusing costs a rebuild, under-refusing reads the wrong
|
|
374
|
+
* value.
|
|
375
|
+
*/
|
|
376
|
+
const namesBoundAround = (element) => {
|
|
377
|
+
const names = new Set();
|
|
378
|
+
let node = element.parent;
|
|
379
|
+
while (node) {
|
|
380
|
+
if (isFunctionLike(node))
|
|
381
|
+
collectBoundNames(node, names);
|
|
382
|
+
node = node.parent;
|
|
383
|
+
}
|
|
384
|
+
return names;
|
|
385
|
+
};
|
|
386
|
+
/** The C++-bound expression text an attribute supplies, or `null` when this rewrite cannot move it. */
|
|
387
|
+
const attributeExpressionText = (attribute, file) => {
|
|
388
|
+
const initializer = attribute.initializer;
|
|
389
|
+
if (initializer === undefined)
|
|
390
|
+
return 'true';
|
|
391
|
+
if (ts.isStringLiteral(initializer)) {
|
|
392
|
+
// A JSX attribute string is not a TypeScript string literal: it may hold a
|
|
393
|
+
// raw backslash and it may hold an HTML entity, neither of which means what
|
|
394
|
+
// it would mean once the same characters sit in an expression.
|
|
395
|
+
const raw = initializer.getText(file);
|
|
396
|
+
return raw.includes('\\') || raw.includes('&') ? null : raw;
|
|
397
|
+
}
|
|
398
|
+
if (!ts.isJsxExpression(initializer) || initializer.dotDotDotToken || !initializer.expression)
|
|
399
|
+
return null;
|
|
400
|
+
if (!isPureExpression(initializer.expression))
|
|
401
|
+
return null;
|
|
402
|
+
return initializer.expression.getText(file);
|
|
403
|
+
};
|
|
404
|
+
/** What each prop is given at this call site, or `null` when the invocation cannot be inlined. */
|
|
405
|
+
const argumentsAt = (element, file) => {
|
|
406
|
+
if (ts.isJsxElement(element)) {
|
|
407
|
+
for (const child of element.children) {
|
|
408
|
+
if (ts.isJsxText(child) && child.containsOnlyTriviaWhiteSpaces)
|
|
409
|
+
continue;
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
const given = new Map();
|
|
414
|
+
for (const attribute of openingOf(element).attributes.properties) {
|
|
415
|
+
if (!ts.isJsxAttribute(attribute) || !ts.isIdentifier(attribute.name))
|
|
416
|
+
return null;
|
|
417
|
+
const text = attributeExpressionText(attribute, file);
|
|
418
|
+
if (text === null)
|
|
419
|
+
return null;
|
|
420
|
+
given.set(attribute.name.text, text);
|
|
421
|
+
}
|
|
422
|
+
return given;
|
|
423
|
+
};
|
|
424
|
+
/**
|
|
425
|
+
* One expression's text with every prop and local read replaced by what it
|
|
426
|
+
* stands for at the call site.
|
|
427
|
+
*
|
|
428
|
+
* A local's text is the substitution of ITS initializer, so a body that names
|
|
429
|
+
* an intermediate value is the same program as one that repeats the
|
|
430
|
+
* expression -- which is what makes `const textClass = active ? ... : ...`
|
|
431
|
+
* inlinable at all. Purity is what allows the repetition; `isPureExpression`
|
|
432
|
+
* is asked of both halves.
|
|
433
|
+
*/
|
|
434
|
+
const substituteInto = (node, file, values) => {
|
|
435
|
+
const text = node.getText(file);
|
|
436
|
+
const base = node.getStart(file);
|
|
437
|
+
let out = '';
|
|
438
|
+
let cursor = base;
|
|
439
|
+
for (const read of readsUnder(node)) {
|
|
440
|
+
const value = values.get(read.text);
|
|
441
|
+
if (value === undefined)
|
|
442
|
+
continue;
|
|
443
|
+
const start = read.getStart(file);
|
|
444
|
+
if (start < cursor)
|
|
445
|
+
continue;
|
|
446
|
+
out += text.slice(cursor - base, start - base) + value;
|
|
447
|
+
cursor = read.end;
|
|
448
|
+
}
|
|
449
|
+
return out + text.slice(cursor - base);
|
|
450
|
+
};
|
|
451
|
+
const inlinedText = (component, given, file) => {
|
|
452
|
+
const values = new Map();
|
|
453
|
+
for (const parameter of component.parameters) {
|
|
454
|
+
const argument = given.get(parameter.attribute);
|
|
455
|
+
if (argument === undefined) {
|
|
456
|
+
// A prop the body never reads needs no argument; one it does read and
|
|
457
|
+
// was not given would inline `undefined` in place of a value the
|
|
458
|
+
// component's own declaration says it has.
|
|
459
|
+
const read = readsUnder(component.element).some((identifier) => identifier.text === parameter.local);
|
|
460
|
+
const inLocal = component.locals.some((local) => readsUnder(local.initializer).some((identifier) => identifier.text === parameter.local));
|
|
461
|
+
if (read || inLocal)
|
|
462
|
+
return null;
|
|
463
|
+
continue;
|
|
464
|
+
}
|
|
465
|
+
values.set(parameter.local, `(${argument})`);
|
|
466
|
+
}
|
|
467
|
+
for (const local of component.locals)
|
|
468
|
+
values.set(local.name, `(${substituteInto(local.initializer, file, values)})`);
|
|
469
|
+
return substituteInto(component.element, file, values);
|
|
470
|
+
};
|
|
471
|
+
/**
|
|
472
|
+
* Every component invocation in this file that `reactive-slots.ts` would
|
|
473
|
+
* otherwise wrap in a subtree-replacing thunk, rewritten as the element it
|
|
474
|
+
* builds.
|
|
475
|
+
*
|
|
476
|
+
* Gated on `isReactiveComponentChild` and nothing wider, so the set of
|
|
477
|
+
* invocations this touches is exactly the set that would otherwise take the
|
|
478
|
+
* replacement path. An invocation whose props are constant is left alone: it
|
|
479
|
+
* has no re-render to make cheaper, and inlining it would only duplicate the
|
|
480
|
+
* body.
|
|
481
|
+
*/
|
|
482
|
+
export const geaComponentInlineTransform = ({ fileName, text }) => {
|
|
483
|
+
if (!fileName.endsWith('.tsx') && !fileName.endsWith('.jsx'))
|
|
484
|
+
return null;
|
|
485
|
+
if (!text.includes('<'))
|
|
486
|
+
return null;
|
|
487
|
+
const file = ts.createSourceFile(fileName, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
488
|
+
const declarations = namedComponentsOf(file);
|
|
489
|
+
if (declarations.size === 0)
|
|
490
|
+
return null;
|
|
491
|
+
const analyzed = new Map();
|
|
492
|
+
const componentNamed = (name) => {
|
|
493
|
+
const known = analyzed.get(name);
|
|
494
|
+
if (known !== undefined)
|
|
495
|
+
return known;
|
|
496
|
+
const declaration = declarations.get(name);
|
|
497
|
+
const answer = declaration ? analyzeComponent(declaration) : null;
|
|
498
|
+
analyzed.set(name, answer);
|
|
499
|
+
return answer;
|
|
500
|
+
};
|
|
501
|
+
const rewrites = [];
|
|
502
|
+
const visit = (node) => {
|
|
503
|
+
if (isReactiveComponentChild(node)) {
|
|
504
|
+
const tag = openingOf(node).tagName;
|
|
505
|
+
const component = ts.isIdentifier(tag) ? componentNamed(tag.text) : null;
|
|
506
|
+
if (component) {
|
|
507
|
+
const given = argumentsAt(node, file);
|
|
508
|
+
const bound = namesBoundAround(node);
|
|
509
|
+
const shadowed = [...component.free].some((name) => bound.has(name));
|
|
510
|
+
const inlined = given && !shadowed ? inlinedText(component, given, file) : null;
|
|
511
|
+
if (inlined !== null) {
|
|
512
|
+
rewrites.push({ start: node.getStart(file), end: node.end, text: inlined });
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
ts.forEachChild(node, visit);
|
|
518
|
+
};
|
|
519
|
+
ts.forEachChild(file, visit);
|
|
520
|
+
if (rewrites.length === 0)
|
|
521
|
+
return null;
|
|
522
|
+
rewrites.sort((left, right) => left.start - right.start);
|
|
523
|
+
let out = '';
|
|
524
|
+
let cursor = 0;
|
|
525
|
+
for (const rewrite of rewrites) {
|
|
526
|
+
if (rewrite.start < cursor)
|
|
527
|
+
continue;
|
|
528
|
+
out += text.slice(cursor, rewrite.start) + rewrite.text;
|
|
529
|
+
cursor = rewrite.end;
|
|
530
|
+
}
|
|
531
|
+
return out + text.slice(cursor);
|
|
532
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { HostConstructorTable } from '../../targets/cpp/host/host-members.js';
|
|
2
|
+
/**
|
|
3
|
+
* Every way gea's host states a construction, as one table.
|
|
4
|
+
*
|
|
5
|
+
* The package states two, and they are not alternatives: `nativeConstructors`
|
|
6
|
+
* (host.ts's `geaAmbientConstructors`) is keyed by the CONSTRUCTOR INTERFACE's
|
|
7
|
+
* declared name and writes its slots out one by one -- `HTMLAudioElement(
|
|
8
|
+
* {arg0})` -- while `embeddedHostClasses` is keyed by the CLASS's name and
|
|
9
|
+
* passes whatever the call wrote straight through. Both resolve to the same
|
|
10
|
+
* carrier for the four classes both name, and each reaches classes the other
|
|
11
|
+
* does not: only `embeddedHostClasses` states `WebSocket` and
|
|
12
|
+
* `RTCPeerConnection`, which are built from a factory and have no ambient
|
|
13
|
+
* constructor row at all.
|
|
14
|
+
*
|
|
15
|
+
* The ambient row wins where both answer, because a counted `{argN}` template
|
|
16
|
+
* is the stronger statement: it is what lets a call that omits a trailing
|
|
17
|
+
* optional be padded to the arity the C++ constructor actually declares
|
|
18
|
+
* (`paddedArguments`), which `{args}` pass-through cannot express -- it would
|
|
19
|
+
* emit `HTMLAudioElement()` for a `new Audio()` whose real overload takes a
|
|
20
|
+
* string. Nothing is lost the other way: a class the ambient table reaches is
|
|
21
|
+
* one `embeddedHostClasses` states the identical spelling for.
|
|
22
|
+
*/
|
|
23
|
+
export declare const geaHostConstructors: () => HostConstructorTable;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { geaAmbientConstructors, geaMemberTables, geaProtocolCarriers } from './host.js';
|
|
2
|
+
/**
|
|
3
|
+
* How gea's host constructs its own classes -- `new WebSocket(url)`,
|
|
4
|
+
* `new RTCPeerConnection(config)`, `new MediaStream()`, `new AudioContext()`.
|
|
5
|
+
*
|
|
6
|
+
* These are real `gea::host` C++ classes (`core/packages/host/include/host/
|
|
7
|
+
* rtc.h`, `websocket.h`, `media.h`, `audio.h`) with a real native runtime
|
|
8
|
+
* behind them (`core/packages/host/src/rtc.cpp` etc., backed by libpeer on
|
|
9
|
+
* ESP32 and a host-side test double elsewhere) -- not something this file
|
|
10
|
+
* invents. The package states two different ways a class comes into being
|
|
11
|
+
* (`GeaHostClass`, host.ts) and this reads both, the same transposition
|
|
12
|
+
* `plugins/apple/constructors.ts` performs over the Apple package's own
|
|
13
|
+
* `embeddedHostClasses`.
|
|
14
|
+
*
|
|
15
|
+
* - `construct` states the whole `new C(...)` expression already, most of
|
|
16
|
+
* them naming the single `{args}` slot (`gea::host::MediaStream({args})`):
|
|
17
|
+
* the real constructor takes the arguments directly, and forwarding
|
|
18
|
+
* whatever the program wrote lets C++'s own overload resolution decide
|
|
19
|
+
* which one, exactly as `HostMember`'s `'pass-through'` arm already does
|
|
20
|
+
* for member calls.
|
|
21
|
+
* - `factory` + `wrapper`, for a class built from a free function instead of
|
|
22
|
+
* a constructor call: `new WebSocket(url)` and `new RTCPeerConnection(cfg)`
|
|
23
|
+
* go through `gea::host::websocket::create_handle`/`gea::host::rtc::
|
|
24
|
+
* create_handle`, each returning a handle as a `double` that the wrapper
|
|
25
|
+
* type is then constructed from -- `rtc.h`'s own templated overload
|
|
26
|
+
* (`template <typename Config> NativeRtcPeerHandle create_handle(const
|
|
27
|
+
* Config &)`) is what lets a config record pass through and be ignored,
|
|
28
|
+
* stated in that header's own comment, not reinvented here. Built the
|
|
29
|
+
* same `'pass-through'` way for the same reason: which factory overload a
|
|
30
|
+
* call means is a C++ question, not one to answer by counting.
|
|
31
|
+
*
|
|
32
|
+
* Keyed by carrier, not by class name, so a class's constructor row and its
|
|
33
|
+
* member rows (`members.ts`) file under the same key. A class the type table
|
|
34
|
+
* carries no carrier for is skipped -- there is no key to file it under, and
|
|
35
|
+
* inventing one would claim a constructor for a protocol nothing binds.
|
|
36
|
+
*
|
|
37
|
+
* Carriers come from `geaProtocolCarriers`, not the raw `geaNativeTypes`:
|
|
38
|
+
* `WebSocket`/`RTCPeerConnection`/`Audio` state a `wrapper` here with no
|
|
39
|
+
* separate `nativeTypes` row at all, and `geaProtocolCarriers` is where that
|
|
40
|
+
* fallback already lives (see its own doc comment, host.ts) -- reading the
|
|
41
|
+
* narrower table would skip exactly the three classes this function most
|
|
42
|
+
* needs to reach.
|
|
43
|
+
*/
|
|
44
|
+
const geaHostClassConstructors = () => {
|
|
45
|
+
const shims = geaMemberTables();
|
|
46
|
+
if (!shims)
|
|
47
|
+
return new Map();
|
|
48
|
+
const carriers = geaProtocolCarriers();
|
|
49
|
+
const rows = new Map();
|
|
50
|
+
for (const [className, entry] of Object.entries(shims.embeddedHostClasses ?? {})) {
|
|
51
|
+
const carrier = carriers.get(className);
|
|
52
|
+
if (carrier === undefined)
|
|
53
|
+
continue;
|
|
54
|
+
const emit = entry.construct ?? factoryConstruction(entry);
|
|
55
|
+
if (emit === undefined || emit.length === 0)
|
|
56
|
+
continue;
|
|
57
|
+
rows.set(carrier, { emit, arity: 'pass-through' });
|
|
58
|
+
}
|
|
59
|
+
return rows;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* The factory convention: a thunk hands back a handle as a `double`, and the
|
|
63
|
+
* wrapper type is constructed from it -- `WebSocket(static_cast<double>(
|
|
64
|
+
* gea::host::websocket::create_handle({args})))`. Both names are the
|
|
65
|
+
* package's own (`GeaHostClass.factory`/`.wrapper`); nothing here invents a
|
|
66
|
+
* spelling.
|
|
67
|
+
*/
|
|
68
|
+
const factoryConstruction = (entry) => {
|
|
69
|
+
const { factory, wrapper } = entry;
|
|
70
|
+
if (factory === undefined || factory.length === 0 || wrapper === undefined || wrapper.length === 0)
|
|
71
|
+
return undefined;
|
|
72
|
+
return `${wrapper}(static_cast<double>(${factory}({args})))`;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Every way gea's host states a construction, as one table.
|
|
76
|
+
*
|
|
77
|
+
* The package states two, and they are not alternatives: `nativeConstructors`
|
|
78
|
+
* (host.ts's `geaAmbientConstructors`) is keyed by the CONSTRUCTOR INTERFACE's
|
|
79
|
+
* declared name and writes its slots out one by one -- `HTMLAudioElement(
|
|
80
|
+
* {arg0})` -- while `embeddedHostClasses` is keyed by the CLASS's name and
|
|
81
|
+
* passes whatever the call wrote straight through. Both resolve to the same
|
|
82
|
+
* carrier for the four classes both name, and each reaches classes the other
|
|
83
|
+
* does not: only `embeddedHostClasses` states `WebSocket` and
|
|
84
|
+
* `RTCPeerConnection`, which are built from a factory and have no ambient
|
|
85
|
+
* constructor row at all.
|
|
86
|
+
*
|
|
87
|
+
* The ambient row wins where both answer, because a counted `{argN}` template
|
|
88
|
+
* is the stronger statement: it is what lets a call that omits a trailing
|
|
89
|
+
* optional be padded to the arity the C++ constructor actually declares
|
|
90
|
+
* (`paddedArguments`), which `{args}` pass-through cannot express -- it would
|
|
91
|
+
* emit `HTMLAudioElement()` for a `new Audio()` whose real overload takes a
|
|
92
|
+
* string. Nothing is lost the other way: a class the ambient table reaches is
|
|
93
|
+
* one `embeddedHostClasses` states the identical spelling for.
|
|
94
|
+
*/
|
|
95
|
+
export const geaHostConstructors = () => {
|
|
96
|
+
const rows = new Map(geaHostClassConstructors());
|
|
97
|
+
for (const [carrier, row] of geaAmbientConstructors())
|
|
98
|
+
rows.set(carrier, row);
|
|
99
|
+
return rows;
|
|
100
|
+
};
|