@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,217 @@
|
|
|
1
|
+
import { templateArity } from '../../targets/cpp/host/host-members.js';
|
|
2
|
+
import { appleBridgeMetadata, appleClassConstructorParameters, appleMemberTables, appleModuleMarkers, appleNativeTypes } from './host.js';
|
|
3
|
+
/**
|
|
4
|
+
* How Apple's frameworks construct their own objects.
|
|
5
|
+
*
|
|
6
|
+
* `new NSStackView()` is not a member of anything -- it is the one expression
|
|
7
|
+
* that brings the view into existence -- so it cannot be a `hostMembers` row,
|
|
8
|
+
* and a compiler with no table for it refuses every program that builds a host
|
|
9
|
+
* object while preflight happily certifies the same program.
|
|
10
|
+
*
|
|
11
|
+
* The spelling is the package's, verbatim: an ObjC `alloc`/`init` message
|
|
12
|
+
* wrapped in the retain that hands the object to the C++ wrapper. Nothing here
|
|
13
|
+
* assembles one -- a constructor whose selector takes arguments
|
|
14
|
+
* (`NSClickGestureRecognizer(target, action)`) states its own `{argN}` slots,
|
|
15
|
+
* and the arity is read back off the template for the same reason
|
|
16
|
+
* `templateArity` exists: the text that renders is the only authority on how
|
|
17
|
+
* many arguments it consumes.
|
|
18
|
+
*
|
|
19
|
+
* Keyed by carrier rather than by class name, so a host's constructor rows and
|
|
20
|
+
* its member rows are filed under one name.
|
|
21
|
+
*/
|
|
22
|
+
export const appleHostConstructors = () => {
|
|
23
|
+
const shims = appleMemberTables();
|
|
24
|
+
if (!shims)
|
|
25
|
+
return new Map();
|
|
26
|
+
const carriers = appleNativeTypes();
|
|
27
|
+
const rows = new Map();
|
|
28
|
+
for (const [className, entry] of Object.entries(shims.embeddedHostClasses ?? {})) {
|
|
29
|
+
const carrier = carriers.get(className);
|
|
30
|
+
// A class the type table does not carry has no key to file under, and
|
|
31
|
+
// inventing one would claim a constructor for a protocol nothing binds.
|
|
32
|
+
if (carrier === undefined)
|
|
33
|
+
continue;
|
|
34
|
+
const emit = entry.construct ?? factoryConstruction(entry, className);
|
|
35
|
+
// A class that states neither convention is skipped rather than guessed.
|
|
36
|
+
if (emit === undefined || emit.length === 0)
|
|
37
|
+
continue;
|
|
38
|
+
rows.set(carrier, { emit, arity: templateArity(emit) });
|
|
39
|
+
}
|
|
40
|
+
return rows;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* The other construction convention this host states: a thunk, not a message
|
|
44
|
+
* send.
|
|
45
|
+
*
|
|
46
|
+
* Four Metal classes are built by a C function the generated bridge defines
|
|
47
|
+
* (`MTKView_init`) rather than by an inline `alloc`/`init`, and they say so
|
|
48
|
+
* with `factory` instead of `construct`. The call is the host package's own
|
|
49
|
+
* rule, quoted from where it states it: "`new X(args)` against an identifier
|
|
50
|
+
* registered here lowers to `wrapper(static_cast<double>(factory(args)))`" --
|
|
51
|
+
* the thunk hands back a retained handle as a `double`, and the wrapper struct
|
|
52
|
+
* is constructed from it.
|
|
53
|
+
*
|
|
54
|
+
* Nothing is invented: the wrapper and the thunk are both the package's, and
|
|
55
|
+
* the argument count is the class's own declared constructor parameter list, so
|
|
56
|
+
* a factory taking arguments renders them and one taking none renders none. A
|
|
57
|
+
* class whose parameters the metadata does not state is skipped -- a call with
|
|
58
|
+
* the wrong arity would be a link error naming a symbol the program never
|
|
59
|
+
* wrote.
|
|
60
|
+
*/
|
|
61
|
+
const factoryConstruction = (entry, className) => {
|
|
62
|
+
const factory = entry.factory;
|
|
63
|
+
const wrapper = entry.wrapper;
|
|
64
|
+
if (factory === undefined || factory.length === 0 || wrapper === undefined || wrapper.length === 0)
|
|
65
|
+
return undefined;
|
|
66
|
+
const parameters = appleClassConstructorParameters(className);
|
|
67
|
+
if (parameters === null)
|
|
68
|
+
return undefined;
|
|
69
|
+
const args = parameters.map((_, position) => `{arg${position}}`).join(', ');
|
|
70
|
+
return `${wrapper}(static_cast<double>(${factory}(${args})))`;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Apple's own class hierarchy, carrier to immediate base carrier.
|
|
74
|
+
*
|
|
75
|
+
* `NSStackView` IS an `NSView`, and the generated bridge says so in C++ by
|
|
76
|
+
* giving the wrapper structs the same inheritance the ObjC classes have
|
|
77
|
+
* (`struct NSStackView : gea::apple::AppKit::NSView`, written by
|
|
78
|
+
* `appleNativeBridgeHeader`). So passing one where the other is declared costs
|
|
79
|
+
* nothing at all at the target -- but nothing in TypeScript's structural view
|
|
80
|
+
* relates two opaque handles, so without this table the backend refuses an
|
|
81
|
+
* upcast the target performs implicitly.
|
|
82
|
+
*
|
|
83
|
+
* The base is spelled `Framework.Class` in the metadata, which is also a key of
|
|
84
|
+
* `nativeTypes` -- the shim builder files every class under both its bare and
|
|
85
|
+
* its qualified name -- so the carrier is looked up rather than re-derived. A
|
|
86
|
+
* base the type table does not carry is dropped: an unresolvable base is a
|
|
87
|
+
* chain this compiler cannot follow, and half a chain would answer "unrelated"
|
|
88
|
+
* for a pair that is related, which is the same refusal with a worse reason.
|
|
89
|
+
*/
|
|
90
|
+
export const appleNativeBases = () => {
|
|
91
|
+
const carriers = appleNativeTypes();
|
|
92
|
+
const rows = new Map();
|
|
93
|
+
for (const entry of Object.values(appleBridgeMetadata().classes ?? {})) {
|
|
94
|
+
const wrapper = entry.wrapper;
|
|
95
|
+
const base = entry.extends;
|
|
96
|
+
if (wrapper === undefined || base === undefined)
|
|
97
|
+
continue;
|
|
98
|
+
const baseCarrier = carriers.get(base);
|
|
99
|
+
if (baseCarrier === undefined || baseCarrier === wrapper)
|
|
100
|
+
continue;
|
|
101
|
+
rows.set(wrapper, baseCarrier);
|
|
102
|
+
}
|
|
103
|
+
return rows;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* The one header every Apple carrier is declared by.
|
|
107
|
+
*
|
|
108
|
+
* Named as a constant rather than written twice because a second reader of the
|
|
109
|
+
* same spelling exists outside the carrier table: `generatedSupportIncludes`
|
|
110
|
+
* (plugin.ts) states it in `generated_support.hpp`, and
|
|
111
|
+
* `apple/targets/macos/build-macos.sh` -- through
|
|
112
|
+
* `finalize-apple-native-output.mjs` and
|
|
113
|
+
* `apple_native_cached_output_is_current` -- greps that file for exactly the
|
|
114
|
+
* `#include` line built from it to decide whether an app is apple-native. Two
|
|
115
|
+
* places that must agree on one string is what the constant is for; `cli-emit.ts`
|
|
116
|
+
* used to hold its own copy and search the rendered C++ for it.
|
|
117
|
+
*
|
|
118
|
+
* `native_bridge.h` is written by the plugin package itself
|
|
119
|
+
* (`writeAppleNativeBridgeRuntime`) next to the emitted unit, and it declares
|
|
120
|
+
* every wrapper struct, the `objc::object`/`objc::retain` handle functions the
|
|
121
|
+
* templates call, and the framework imports behind an `__OBJC__` guard. One
|
|
122
|
+
* header for all of them because one generator writes all of them; the table is
|
|
123
|
+
* still keyed by carrier so a program that uses no Apple type includes nothing.
|
|
124
|
+
*/
|
|
125
|
+
export const appleNativeBridgeHeader = 'gea/apple/native_bridge.h';
|
|
126
|
+
export const appleNativeIncludes = () => new Map([...new Set(appleNativeTypes().values())].map((carrier) => [carrier, appleNativeBridgeHeader]));
|
|
127
|
+
/**
|
|
128
|
+
* Apple's ambient constants, to the C++ text each one is.
|
|
129
|
+
*
|
|
130
|
+
* `NSBoxCustom`, `NSLayoutAttributeLeading` and the hundred others are
|
|
131
|
+
* Objective-C enumerators. Nothing declares a C++ global of those names, so a
|
|
132
|
+
* program that reads one and gets an `extern double` does not link -- and in
|
|
133
|
+
* Objective-C++ it does not even compile, because the enumerator is already a
|
|
134
|
+
* name at that scope and the declaration is a redefinition as a different kind
|
|
135
|
+
* of symbol. The host states the value instead, and the read renders it.
|
|
136
|
+
*/
|
|
137
|
+
export const appleNativeConstants = () => {
|
|
138
|
+
const shims = appleMemberTables();
|
|
139
|
+
if (!shims)
|
|
140
|
+
return new Map();
|
|
141
|
+
const rows = new Map();
|
|
142
|
+
for (const [name, entry] of Object.entries(shims.embeddedHostConstants ?? {})) {
|
|
143
|
+
const emit = entry.emit;
|
|
144
|
+
if (emit === undefined || emit.length === 0)
|
|
145
|
+
continue;
|
|
146
|
+
rows.set(name, emit);
|
|
147
|
+
}
|
|
148
|
+
return rows;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Apple's ambient free functions, to the C++ function each one is.
|
|
152
|
+
*
|
|
153
|
+
* `installRootViewController(vc)`, `CGRectMake(x, y, w, h)`,
|
|
154
|
+
* `dispatchAsyncMain(f)` -- names a program writes bare, that resolve to
|
|
155
|
+
* functions the target's own runtime defines (`macos_main.mm` defines the
|
|
156
|
+
* first; CoreGraphics defines the second). None of them is a member of
|
|
157
|
+
* anything, so `hostMembers` cannot state one, and none of them constructs a
|
|
158
|
+
* host object, so `hostConstructors` cannot either.
|
|
159
|
+
*
|
|
160
|
+
* Without this table the backend has one shape left for a value that is
|
|
161
|
+
* called -- a callable carrier -- and so it declares
|
|
162
|
+
* `extern gea::CallableObject<void(NSViewController)> installRootViewController;`
|
|
163
|
+
* and invokes `.call(...)` on it. That is not a near miss: the host exports a
|
|
164
|
+
* FUNCTION, this declares a global VARIABLE of the same name, and the program
|
|
165
|
+
* compiles and then fails to link against the very runtime that implements it.
|
|
166
|
+
*
|
|
167
|
+
* The spelling is the package's own `embeddedHostFunctions`, verbatim -- the
|
|
168
|
+
* same table v1's build has consumed all along, and the same one the bridge
|
|
169
|
+
* metadata records as each function's `thunk`.
|
|
170
|
+
*/
|
|
171
|
+
export const appleHostFunctions = () => {
|
|
172
|
+
const shims = appleMemberTables();
|
|
173
|
+
if (!shims)
|
|
174
|
+
return new Map();
|
|
175
|
+
const rows = new Map();
|
|
176
|
+
for (const [name, emit] of Object.entries(shims.embeddedHostFunctions ?? {})) {
|
|
177
|
+
if (typeof emit !== 'string' || emit.length === 0)
|
|
178
|
+
continue;
|
|
179
|
+
rows.set(name, emit);
|
|
180
|
+
}
|
|
181
|
+
return rows;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* The free functions whose spelling depends on which declaration the program
|
|
185
|
+
* read, keyed by the file that declaration lives in.
|
|
186
|
+
*
|
|
187
|
+
* `installRootView` is the whole of the case: UIKit declares one and AppKit
|
|
188
|
+
* declares another, they are different functions with different parameter types
|
|
189
|
+
* and different thunks, and they share a bare name. A table keyed by name alone
|
|
190
|
+
* cannot hold both, so the flat one holds whichever the package wrote last --
|
|
191
|
+
* and an iOS program calling UIKit's got AppKit's spelling, which is not a
|
|
192
|
+
* near miss but a call into a framework the program never imported.
|
|
193
|
+
*
|
|
194
|
+
* The name a program wrote is not the coordinate; the declaration it resolved to
|
|
195
|
+
* is. `appleModuleMarkers` says which marker each declaration file belongs to
|
|
196
|
+
* and the package says which spelling each marker names, so this is those two
|
|
197
|
+
* facts joined -- nothing about frameworks is decided here.
|
|
198
|
+
*/
|
|
199
|
+
export const appleHostFunctionsByDeclaration = () => {
|
|
200
|
+
const shims = appleMemberTables();
|
|
201
|
+
if (!shims)
|
|
202
|
+
return new Map();
|
|
203
|
+
const variants = shims.embeddedHostFunctionFrameworkVariants ?? {};
|
|
204
|
+
const rows = new Map();
|
|
205
|
+
for (const [file, marker] of appleModuleMarkers()) {
|
|
206
|
+
const spellings = new Map();
|
|
207
|
+
for (const [name, byMarker] of Object.entries(variants)) {
|
|
208
|
+
const emit = byMarker[marker];
|
|
209
|
+
if (typeof emit !== 'string' || emit.length === 0)
|
|
210
|
+
continue;
|
|
211
|
+
spellings.set(name, emit);
|
|
212
|
+
}
|
|
213
|
+
if (spellings.size > 0)
|
|
214
|
+
rows.set(file, spellings);
|
|
215
|
+
}
|
|
216
|
+
return rows;
|
|
217
|
+
};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two fields of the Apple packages this compiler reads, as this compiler
|
|
3
|
+
* needs them.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately NOT `import type { HostShimDefinitions } from
|
|
6
|
+
* '@geastack/geatsc-plugin-apple-native'`: a static type import would make the
|
|
7
|
+
* Apple packages a hard build dependency of the compiler, and this load is a
|
|
8
|
+
* `require` in a `try` precisely so they are not one. The same reasoning
|
|
9
|
+
* `plugins/gea/host.ts` states for its own slice -- restating the shape of the
|
|
10
|
+
* one field read is not restating the data.
|
|
11
|
+
*/
|
|
12
|
+
export interface AppleMemberBinding {
|
|
13
|
+
readonly emit?: string;
|
|
14
|
+
/** A C++ free function the generated bridge declares, taking the receiver first -- see `externTemplate`. */
|
|
15
|
+
readonly extern?: string;
|
|
16
|
+
readonly receiverTypes?: readonly string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A member of a *class object* -- `NSColor.clearColor`, `ObjCTarget.create`.
|
|
20
|
+
*
|
|
21
|
+
* Stated by class name rather than by receiver type, and with no receiver slot
|
|
22
|
+
* in the template at all: the spelling names the class outright
|
|
23
|
+
* (`[::NSColor clearColor]`), because the receiver of a class method is the
|
|
24
|
+
* class, which no value carries. `returnType` is the package's own note about
|
|
25
|
+
* what the spelling yields; this compiler reads the carrier from the checker
|
|
26
|
+
* instead and so does not consume it.
|
|
27
|
+
*/
|
|
28
|
+
export interface AppleNamespaceMember {
|
|
29
|
+
readonly emit?: string;
|
|
30
|
+
readonly returnType?: string;
|
|
31
|
+
}
|
|
32
|
+
/** What constructing one of a host's classes costs, as the host spells it. */
|
|
33
|
+
export interface AppleHostClass {
|
|
34
|
+
readonly wrapper?: string;
|
|
35
|
+
/** The whole `new C(...)` expression, `{argN}`-slotted; absent when the class states no constructor. */
|
|
36
|
+
readonly construct?: string;
|
|
37
|
+
/** A thunk name, for a class whose construction is not an ObjC message send. */
|
|
38
|
+
readonly factory?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface AppleHostShimSlice {
|
|
41
|
+
readonly nativeTypes?: Readonly<Record<string, string>>;
|
|
42
|
+
readonly nativeMemberMethods?: Readonly<Record<string, readonly AppleMemberBinding[]>>;
|
|
43
|
+
readonly nativeMemberPropertyGetters?: Readonly<Record<string, readonly AppleMemberBinding[]>>;
|
|
44
|
+
readonly nativeMemberPropertySetters?: Readonly<Record<string, readonly AppleMemberBinding[]>>;
|
|
45
|
+
readonly nativeNamespaceMethods?: Readonly<Record<string, Readonly<Record<string, AppleNamespaceMember>>>>;
|
|
46
|
+
readonly embeddedHostClasses?: Readonly<Record<string, AppleHostClass>>;
|
|
47
|
+
readonly embeddedHostConstants?: Readonly<Record<string, {
|
|
48
|
+
readonly emit?: string;
|
|
49
|
+
readonly type?: string;
|
|
50
|
+
}>>;
|
|
51
|
+
readonly embeddedHostFunctions?: Readonly<Record<string, string>>;
|
|
52
|
+
/**
|
|
53
|
+
* `bareName -> markerName -> spelling`, for the free functions whose bare name
|
|
54
|
+
* more than one framework declares.
|
|
55
|
+
*
|
|
56
|
+
* `installRootView` is UIKit's and AppKit's alike, so the flat map above keeps
|
|
57
|
+
* whichever framework the package happened to process last and the other one
|
|
58
|
+
* is simply gone. This table is the package's own answer to that: every
|
|
59
|
+
* colliding name is restated once per framework, keyed by the marker the
|
|
60
|
+
* framework's runtime module calls. Which marker belongs to which module is a
|
|
61
|
+
* fact the package states too -- see `appleModuleMarkers`.
|
|
62
|
+
*/
|
|
63
|
+
readonly embeddedHostFunctionFrameworkVariants?: Readonly<Record<string, Readonly<Record<string, string>>>>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* One class in the bridge metadata, as this compiler needs it.
|
|
67
|
+
*
|
|
68
|
+
* The metadata is the SDK package's own description of the platform, one step
|
|
69
|
+
* upstream of the shim tables: `createAppleHostShims` reads it to produce the
|
|
70
|
+
* spellings, and it carries one fact the shims do not keep -- which class each
|
|
71
|
+
* class extends. `extends` is spelled `Framework.Class`, which is also a key of
|
|
72
|
+
* `nativeTypes`, so a base resolves to a carrier through the table already read
|
|
73
|
+
* rather than by re-deriving the C++ qualification here.
|
|
74
|
+
*/
|
|
75
|
+
export interface AppleClassMetadata {
|
|
76
|
+
readonly name?: string;
|
|
77
|
+
readonly wrapper?: string;
|
|
78
|
+
readonly extends?: string;
|
|
79
|
+
readonly methods?: Readonly<Record<string, AppleMethodMetadata>>;
|
|
80
|
+
/**
|
|
81
|
+
* How the class is built, when it states one. Read for its parameter list
|
|
82
|
+
* alone: the shim tables downstream keep the thunk's NAME but not how many
|
|
83
|
+
* arguments it takes, and a thunk called with the wrong count is a link error
|
|
84
|
+
* naming a symbol the program never wrote.
|
|
85
|
+
*/
|
|
86
|
+
readonly constructor?: AppleMethodMetadata;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* One method's declared parameters, as the SDK states them.
|
|
90
|
+
*
|
|
91
|
+
* Read for one question only: what a parameter an attribute cannot spell would
|
|
92
|
+
* have to be. `{ kind: 'primitive', name: 'number' }` is a control state, an
|
|
93
|
+
* animation flag is `boolean`, and a parameter of any other kind has no value
|
|
94
|
+
* this compiler could supply -- see `plugins/apple/jsx.ts`. The shim tables one
|
|
95
|
+
* step downstream keep only the rendered template and its arity, so this is the
|
|
96
|
+
* nearest authority that still knows what each slot holds.
|
|
97
|
+
*/
|
|
98
|
+
export interface AppleMethodParameter {
|
|
99
|
+
readonly type?: {
|
|
100
|
+
readonly kind?: string;
|
|
101
|
+
readonly name?: string;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export interface AppleMethodMetadata {
|
|
105
|
+
readonly parameters?: readonly AppleMethodParameter[];
|
|
106
|
+
}
|
|
107
|
+
export interface AppleBridgeMetadataSlice {
|
|
108
|
+
readonly classes?: Readonly<Record<string, AppleClassMetadata>>;
|
|
109
|
+
}
|
|
110
|
+
/** The declared type names Apple's frameworks own, to the C++ wrapper their runtime carries values of each in. */
|
|
111
|
+
export declare const appleNativeTypes: () => ReadonlyMap<string, string>;
|
|
112
|
+
/** The member tables, exactly as the plugin package states them; `null` when the packages are not installed. */
|
|
113
|
+
export declare const appleMemberTables: () => AppleHostShimSlice | null;
|
|
114
|
+
/** The SDK's own platform description, one step upstream of the shim tables; empty when the packages are not installed. */
|
|
115
|
+
export declare const appleBridgeMetadata: () => AppleBridgeMetadataSlice;
|
|
116
|
+
/**
|
|
117
|
+
* Each declaration file of the Apple SDK package, to the native-only marker the
|
|
118
|
+
* module implementing that same subpath calls.
|
|
119
|
+
*
|
|
120
|
+
* This is what makes a per-framework variant selectable. v1 never has to ask:
|
|
121
|
+
* it compiles the *bundled* program, where the placeholder body has been inlined
|
|
122
|
+
* and the marker call is right there in the source. v2 compiles the unbundled
|
|
123
|
+
* program against the package's `.d.ts`, where the body is not present at all --
|
|
124
|
+
* so the same fact has to be read from the package instead of from the program.
|
|
125
|
+
*
|
|
126
|
+
* And it is read, not assumed. The `exports` map pairs each subpath's `types`
|
|
127
|
+
* with its `import`; the implementation module is opened and asked which of the
|
|
128
|
+
* markers the variants table actually uses appear in it. No marker spelling is
|
|
129
|
+
* constructed here and no file-naming convention is relied on: a module that
|
|
130
|
+
* mentions exactly one marker identifies itself, a module that mentions none
|
|
131
|
+
* (every framework whose functions collide with nobody) contributes nothing, and
|
|
132
|
+
* a module that mentions more than one is ambiguous and contributes nothing
|
|
133
|
+
* either. Every one of those three is the same outcome as before this existed --
|
|
134
|
+
* the flat table's answer -- so the failure mode is the old behaviour, never a
|
|
135
|
+
* wrong framework.
|
|
136
|
+
*/
|
|
137
|
+
export declare const appleModuleMarkers: () => ReadonlyMap<string, string>;
|
|
138
|
+
/**
|
|
139
|
+
* The parameters a class declares for its own constructor, or `null` when the
|
|
140
|
+
* metadata states none.
|
|
141
|
+
*
|
|
142
|
+
* Keyed by the class's own name, which is how `embeddedHostClasses` is keyed --
|
|
143
|
+
* the metadata is keyed by `Framework.Class`, so the two are joined on the
|
|
144
|
+
* `name` each metadata row carries rather than by re-deriving either spelling.
|
|
145
|
+
*/
|
|
146
|
+
export declare const appleClassConstructorParameters: (className: string) => readonly AppleMethodParameter[] | null;
|
|
147
|
+
/**
|
|
148
|
+
* Writes `gea/apple/native_bridge.{h,mm}` next to the emitted unit, by driving
|
|
149
|
+
* the Apple plugin package's own generator.
|
|
150
|
+
*
|
|
151
|
+
* The unit this compiler emits opens with `#include "gea/apple/native_bridge.h"`
|
|
152
|
+
* and the target links `native_bridge.mm`, so both files are part of what a
|
|
153
|
+
* generated Apple program is compiled against -- the same kind of fact as the
|
|
154
|
+
* runtime header `cli-emit.ts` copies in, owned by a host rather than by the
|
|
155
|
+
* core. Nothing else in the tree writes them: v1's pipeline gets them from
|
|
156
|
+
* `createCppBackend(...).transformGeneratedSources(...)`, a hook this compiler's
|
|
157
|
+
* plugin seam does not have and should not grow, because the thing that hook
|
|
158
|
+
* exists to do to v1's SOURCES is not wanted here (see below).
|
|
159
|
+
*
|
|
160
|
+
* Measured, and this is why it is a defect worth a memory: with no one writing
|
|
161
|
+
* them, a build succeeded only where a *stale* bridge from a v1 build happened
|
|
162
|
+
* to still be sitting in the gitignored output directory. Moving it aside made
|
|
163
|
+
* the macOS build fail immediately, and the five iOS apps -- which had no
|
|
164
|
+
* leftover -- all stopped at `'gea/apple/native_bridge.h' file not found`.
|
|
165
|
+
*
|
|
166
|
+
* The metadata is the one the *pipeline* passed, not the fixture-derived table
|
|
167
|
+
* `appleHostShims` reads above, and the difference is load-bearing: v1's build
|
|
168
|
+
* script filters the SDK fixture by platform before writing the file, so a
|
|
169
|
+
* macOS build's metadata declares `AppKit.installRootView` and an iOS build's
|
|
170
|
+
* declares `UIKit.installRootView`. Generating the bridge from the unfiltered
|
|
171
|
+
* fixture would declare both, and the header would name five AppKit free
|
|
172
|
+
* functions no iOS target defines.
|
|
173
|
+
*
|
|
174
|
+
* Only the file-writing half of v1's hook is driven. The other half inserts a
|
|
175
|
+
* preamble of `gea::apple::bridge` helpers into `generated_support.hpp`, for
|
|
176
|
+
* calls v1's emitter makes; this compiler's units reference no such helper
|
|
177
|
+
* (measured: zero occurrences of `gea::apple::bridge::` across every emitted
|
|
178
|
+
* Apple unit), so an empty source list is handed over and the transformed
|
|
179
|
+
* result is discarded rather than a preamble being inserted for nothing.
|
|
180
|
+
*/
|
|
181
|
+
export declare const writeAppleBridgeArtifacts: (metadataPath: string, outDir: string) => void;
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { dirname, resolve as resolvePath } from 'node:path';
|
|
4
|
+
const require_ = createRequire(import.meta.url);
|
|
5
|
+
/**
|
|
6
|
+
* `nativeTypes`, narrowed at the boundary.
|
|
7
|
+
*
|
|
8
|
+
* Anything that is not a string-to-string record is refused whole rather than
|
|
9
|
+
* partially admitted, exactly as the gea seam refuses its own: a table half of
|
|
10
|
+
* which is a carrier and half of which is something else would put this
|
|
11
|
+
* compiler back in the business of guessing.
|
|
12
|
+
*/
|
|
13
|
+
const nativeTypesOf = (value) => {
|
|
14
|
+
if (value === undefined)
|
|
15
|
+
return new Map();
|
|
16
|
+
if (typeof value !== 'object' || value === null)
|
|
17
|
+
return null;
|
|
18
|
+
const table = new Map();
|
|
19
|
+
for (const [name, carrier] of Object.entries(value)) {
|
|
20
|
+
if (typeof carrier !== 'string' || carrier.length === 0)
|
|
21
|
+
return null;
|
|
22
|
+
table.set(name, carrier);
|
|
23
|
+
}
|
|
24
|
+
return table;
|
|
25
|
+
};
|
|
26
|
+
/** A module that failed to resolve because it is not installed, as opposed to one that failed to load. */
|
|
27
|
+
const isAbsent = (error) => error.code === 'MODULE_NOT_FOUND';
|
|
28
|
+
let loaded;
|
|
29
|
+
let loadedMetadata = null;
|
|
30
|
+
/**
|
|
31
|
+
* The Apple host type table, from the packages that own it.
|
|
32
|
+
*
|
|
33
|
+
* Two packages, because the data is split the way the platform is:
|
|
34
|
+
* `@geastack/apple` holds the SDK definition (`appleSdkFixture`) and the
|
|
35
|
+
* function that turns it into bridge metadata, and
|
|
36
|
+
* `@geastack/geatsc-plugin-apple-native` turns that metadata into the shim
|
|
37
|
+
* definitions a compiler consumes. Neither half is restated here -- the
|
|
38
|
+
* hundreds of AppKit/Foundation rows stay in the packages that generate them,
|
|
39
|
+
* which is the whole point.
|
|
40
|
+
*
|
|
41
|
+
* No platform filter is applied. v1's build script strips the off-platform
|
|
42
|
+
* framework's class MEMBERS (UIKit's, for a macOS build) while keeping the
|
|
43
|
+
* class shells, so that a member name shared by `UIView` and `NSView` resolves
|
|
44
|
+
* to the on-platform one. That filter exists to disambiguate the *member*
|
|
45
|
+
* tables; this compiler reads only `nativeTypes`, whose entry for a shell class
|
|
46
|
+
* is the same either way. Restating the filter here to change nothing would be
|
|
47
|
+
* a second copy of a rule that lives in v1's build script, and it would go
|
|
48
|
+
* stale the first time that rule changed. When the member tables are read, the
|
|
49
|
+
* platform will have to be an input to this function rather than a rule copied
|
|
50
|
+
* into it.
|
|
51
|
+
*
|
|
52
|
+
* `require` rather than `import()`, and the same two-failure distinction the
|
|
53
|
+
* gea seam draws: a package simply not installed is a configuration, and the
|
|
54
|
+
* table is empty. A package that IS installed but does not answer -- a load
|
|
55
|
+
* error, a missing export, a table that is not string-to-string -- is a defect,
|
|
56
|
+
* and it throws. Swallowing the second returns an empty table indistinguishable
|
|
57
|
+
* from the first, and every Apple program then loses every carrier at once and
|
|
58
|
+
* is refused for obligations spelled in names (`NSView@1`) that nothing was
|
|
59
|
+
* ever going to claim.
|
|
60
|
+
*/
|
|
61
|
+
const appleHostShims = () => {
|
|
62
|
+
if (loaded !== undefined)
|
|
63
|
+
return loaded;
|
|
64
|
+
const sdkSpecifier = process.env.GEATSC2_APPLE_SDK ?? '@geastack/apple';
|
|
65
|
+
const pluginSpecifier = process.env.GEATSC2_APPLE_PLUGIN ?? '@geastack/geatsc-plugin-apple-native';
|
|
66
|
+
let sdk;
|
|
67
|
+
let plugin;
|
|
68
|
+
try {
|
|
69
|
+
sdk = require_(sdkSpecifier);
|
|
70
|
+
plugin = require_(pluginSpecifier);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const requested = process.env.GEATSC2_APPLE_SDK !== undefined || process.env.GEATSC2_APPLE_PLUGIN !== undefined;
|
|
74
|
+
if (!isAbsent(error) || requested) {
|
|
75
|
+
throw new Error(`apple host shims failed to load from '${sdkSpecifier}' + '${pluginSpecifier}': ${String(error)}`);
|
|
76
|
+
}
|
|
77
|
+
loaded = null;
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
const fixture = sdk.appleSdkFixture;
|
|
81
|
+
const metadataOf = sdk.generateAppleBridgeMetadata;
|
|
82
|
+
const shimsOf = plugin.createAppleHostShims;
|
|
83
|
+
if (fixture === undefined || typeof metadataOf !== 'function') {
|
|
84
|
+
throw new Error(`'${sdkSpecifier}' exports no appleSdkFixture/generateAppleBridgeMetadata pair`);
|
|
85
|
+
}
|
|
86
|
+
if (typeof shimsOf !== 'function')
|
|
87
|
+
throw new Error(`'${pluginSpecifier}' exports no createAppleHostShims function`);
|
|
88
|
+
const metadata = metadataOf(fixture);
|
|
89
|
+
const shims = shimsOf(metadata);
|
|
90
|
+
if (nativeTypesOf(shims.nativeTypes) === null) {
|
|
91
|
+
throw new Error(`'${pluginSpecifier}' provided a nativeTypes table that is not string-to-string`);
|
|
92
|
+
}
|
|
93
|
+
loaded = shims;
|
|
94
|
+
loadedMetadata = (typeof metadata === 'object' && metadata !== null ? metadata : {});
|
|
95
|
+
return shims;
|
|
96
|
+
};
|
|
97
|
+
/** The declared type names Apple's frameworks own, to the C++ wrapper their runtime carries values of each in. */
|
|
98
|
+
export const appleNativeTypes = () => nativeTypesOf(appleHostShims()?.nativeTypes) ?? new Map();
|
|
99
|
+
/** The member tables, exactly as the plugin package states them; `null` when the packages are not installed. */
|
|
100
|
+
export const appleMemberTables = () => appleHostShims();
|
|
101
|
+
/** The SDK's own platform description, one step upstream of the shim tables; empty when the packages are not installed. */
|
|
102
|
+
export const appleBridgeMetadata = () => {
|
|
103
|
+
appleHostShims();
|
|
104
|
+
return loadedMetadata ?? {};
|
|
105
|
+
};
|
|
106
|
+
let loadedMarkers = null;
|
|
107
|
+
/** The directory of the package a resolved entry point belongs to, by its own manifest. */
|
|
108
|
+
const packageRootOf = (entry, name) => {
|
|
109
|
+
let directory = dirname(entry);
|
|
110
|
+
for (;;) {
|
|
111
|
+
try {
|
|
112
|
+
const manifest = JSON.parse(readFileSync(resolvePath(directory, 'package.json'), 'utf8'));
|
|
113
|
+
if (typeof manifest === 'object' && manifest !== null && manifest.name === name)
|
|
114
|
+
return directory;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Not this directory's manifest, or none here at all. Keep walking up.
|
|
118
|
+
}
|
|
119
|
+
const parent = dirname(directory);
|
|
120
|
+
if (parent === directory)
|
|
121
|
+
return null;
|
|
122
|
+
directory = parent;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Each declaration file of the Apple SDK package, to the native-only marker the
|
|
127
|
+
* module implementing that same subpath calls.
|
|
128
|
+
*
|
|
129
|
+
* This is what makes a per-framework variant selectable. v1 never has to ask:
|
|
130
|
+
* it compiles the *bundled* program, where the placeholder body has been inlined
|
|
131
|
+
* and the marker call is right there in the source. v2 compiles the unbundled
|
|
132
|
+
* program against the package's `.d.ts`, where the body is not present at all --
|
|
133
|
+
* so the same fact has to be read from the package instead of from the program.
|
|
134
|
+
*
|
|
135
|
+
* And it is read, not assumed. The `exports` map pairs each subpath's `types`
|
|
136
|
+
* with its `import`; the implementation module is opened and asked which of the
|
|
137
|
+
* markers the variants table actually uses appear in it. No marker spelling is
|
|
138
|
+
* constructed here and no file-naming convention is relied on: a module that
|
|
139
|
+
* mentions exactly one marker identifies itself, a module that mentions none
|
|
140
|
+
* (every framework whose functions collide with nobody) contributes nothing, and
|
|
141
|
+
* a module that mentions more than one is ambiguous and contributes nothing
|
|
142
|
+
* either. Every one of those three is the same outcome as before this existed --
|
|
143
|
+
* the flat table's answer -- so the failure mode is the old behaviour, never a
|
|
144
|
+
* wrong framework.
|
|
145
|
+
*/
|
|
146
|
+
export const appleModuleMarkers = () => {
|
|
147
|
+
if (loadedMarkers !== null)
|
|
148
|
+
return loadedMarkers;
|
|
149
|
+
const markers = new Map();
|
|
150
|
+
loadedMarkers = markers;
|
|
151
|
+
const shims = appleHostShims();
|
|
152
|
+
if (!shims)
|
|
153
|
+
return markers;
|
|
154
|
+
const used = new Set();
|
|
155
|
+
for (const variants of Object.values(shims.embeddedHostFunctionFrameworkVariants ?? {})) {
|
|
156
|
+
for (const marker of Object.keys(variants))
|
|
157
|
+
used.add(marker);
|
|
158
|
+
}
|
|
159
|
+
if (used.size === 0)
|
|
160
|
+
return markers;
|
|
161
|
+
const specifier = process.env.GEATSC2_APPLE_SDK ?? '@geastack/apple';
|
|
162
|
+
const root = packageRootOf(require_.resolve(specifier), specifier);
|
|
163
|
+
if (root === null)
|
|
164
|
+
return markers;
|
|
165
|
+
const manifest = JSON.parse(readFileSync(resolvePath(root, 'package.json'), 'utf8'));
|
|
166
|
+
const exports_ = manifest.exports;
|
|
167
|
+
if (typeof exports_ !== 'object' || exports_ === null)
|
|
168
|
+
return markers;
|
|
169
|
+
for (const entry of Object.values(exports_)) {
|
|
170
|
+
if (typeof entry !== 'object' || entry === null)
|
|
171
|
+
continue;
|
|
172
|
+
if (typeof entry.types !== 'string' || typeof entry.import !== 'string')
|
|
173
|
+
continue;
|
|
174
|
+
let implementation;
|
|
175
|
+
try {
|
|
176
|
+
implementation = readFileSync(resolvePath(root, entry.import), 'utf8');
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const mentioned = [...used].filter((marker) => implementation.includes(marker));
|
|
182
|
+
if (mentioned.length !== 1)
|
|
183
|
+
continue;
|
|
184
|
+
markers.set(resolvePath(root, entry.types), mentioned[0]);
|
|
185
|
+
}
|
|
186
|
+
return markers;
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* The parameters a class declares for its own constructor, or `null` when the
|
|
190
|
+
* metadata states none.
|
|
191
|
+
*
|
|
192
|
+
* Keyed by the class's own name, which is how `embeddedHostClasses` is keyed --
|
|
193
|
+
* the metadata is keyed by `Framework.Class`, so the two are joined on the
|
|
194
|
+
* `name` each metadata row carries rather than by re-deriving either spelling.
|
|
195
|
+
*/
|
|
196
|
+
export const appleClassConstructorParameters = (className) => {
|
|
197
|
+
for (const entry of Object.values(appleBridgeMetadata().classes ?? {})) {
|
|
198
|
+
if (entry.name !== className)
|
|
199
|
+
continue;
|
|
200
|
+
const declared = entry.constructor;
|
|
201
|
+
// `constructor` is inherited from `Object.prototype` on any plain object,
|
|
202
|
+
// so a class that states none answers with a FUNCTION here rather than
|
|
203
|
+
// with `undefined`. Own-property, or nothing.
|
|
204
|
+
if (!Object.prototype.hasOwnProperty.call(entry, 'constructor') || typeof declared !== 'object' || declared === null)
|
|
205
|
+
return null;
|
|
206
|
+
return declared.parameters ?? [];
|
|
207
|
+
}
|
|
208
|
+
return null;
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Writes `gea/apple/native_bridge.{h,mm}` next to the emitted unit, by driving
|
|
212
|
+
* the Apple plugin package's own generator.
|
|
213
|
+
*
|
|
214
|
+
* The unit this compiler emits opens with `#include "gea/apple/native_bridge.h"`
|
|
215
|
+
* and the target links `native_bridge.mm`, so both files are part of what a
|
|
216
|
+
* generated Apple program is compiled against -- the same kind of fact as the
|
|
217
|
+
* runtime header `cli-emit.ts` copies in, owned by a host rather than by the
|
|
218
|
+
* core. Nothing else in the tree writes them: v1's pipeline gets them from
|
|
219
|
+
* `createCppBackend(...).transformGeneratedSources(...)`, a hook this compiler's
|
|
220
|
+
* plugin seam does not have and should not grow, because the thing that hook
|
|
221
|
+
* exists to do to v1's SOURCES is not wanted here (see below).
|
|
222
|
+
*
|
|
223
|
+
* Measured, and this is why it is a defect worth a memory: with no one writing
|
|
224
|
+
* them, a build succeeded only where a *stale* bridge from a v1 build happened
|
|
225
|
+
* to still be sitting in the gitignored output directory. Moving it aside made
|
|
226
|
+
* the macOS build fail immediately, and the five iOS apps -- which had no
|
|
227
|
+
* leftover -- all stopped at `'gea/apple/native_bridge.h' file not found`.
|
|
228
|
+
*
|
|
229
|
+
* The metadata is the one the *pipeline* passed, not the fixture-derived table
|
|
230
|
+
* `appleHostShims` reads above, and the difference is load-bearing: v1's build
|
|
231
|
+
* script filters the SDK fixture by platform before writing the file, so a
|
|
232
|
+
* macOS build's metadata declares `AppKit.installRootView` and an iOS build's
|
|
233
|
+
* declares `UIKit.installRootView`. Generating the bridge from the unfiltered
|
|
234
|
+
* fixture would declare both, and the header would name five AppKit free
|
|
235
|
+
* functions no iOS target defines.
|
|
236
|
+
*
|
|
237
|
+
* Only the file-writing half of v1's hook is driven. The other half inserts a
|
|
238
|
+
* preamble of `gea::apple::bridge` helpers into `generated_support.hpp`, for
|
|
239
|
+
* calls v1's emitter makes; this compiler's units reference no such helper
|
|
240
|
+
* (measured: zero occurrences of `gea::apple::bridge::` across every emitted
|
|
241
|
+
* Apple unit), so an empty source list is handed over and the transformed
|
|
242
|
+
* result is discarded rather than a preamble being inserted for nothing.
|
|
243
|
+
*/
|
|
244
|
+
export const writeAppleBridgeArtifacts = (metadataPath, outDir) => {
|
|
245
|
+
const pluginSpecifier = process.env.GEATSC2_APPLE_PLUGIN ?? '@geastack/geatsc-plugin-apple-native';
|
|
246
|
+
const plugin = require_(pluginSpecifier);
|
|
247
|
+
const factory = plugin.appleNativePlugin;
|
|
248
|
+
if (typeof factory !== 'function')
|
|
249
|
+
throw new Error(`'${pluginSpecifier}' exports no appleNativePlugin function`);
|
|
250
|
+
// Read here rather than through the package's own `loadMetadata`, which is
|
|
251
|
+
// private to it and resolves relative to the compiled ENTRY -- a path this
|
|
252
|
+
// seam does not have. The pipeline states an absolute path
|
|
253
|
+
// (`build-gea-vite-geatsc.mjs` resolves `--out-dir` before joining), so
|
|
254
|
+
// resolving against the working directory is the same answer for every real
|
|
255
|
+
// build and a defined one otherwise.
|
|
256
|
+
const metadata = JSON.parse(readFileSync(resolvePath(metadataPath), 'utf8'));
|
|
257
|
+
const backend = factory({ metadata }).createCppBackend?.({ outDir });
|
|
258
|
+
if (backend?.transformGeneratedSources === undefined) {
|
|
259
|
+
throw new Error(`'${pluginSpecifier}' produced no C++ backend for the metadata at '${metadataPath}'`);
|
|
260
|
+
}
|
|
261
|
+
backend.transformGeneratedSources([]);
|
|
262
|
+
};
|