@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,349 @@
|
|
|
1
|
+
import { declarationOfFunction } from '../identity/ids.js';
|
|
2
|
+
import { abiKey, representationKey } from '../representation/model.js';
|
|
3
|
+
import { callableMutationFactsOf, callableOriginsOf } from '../semantics/callable-origins.js';
|
|
4
|
+
import { resultOf } from '../semantics/model/operands.js';
|
|
5
|
+
/**
|
|
6
|
+
* The carrier the plan selected for one parameter binding's published value.
|
|
7
|
+
*
|
|
8
|
+
* Read through the plan rather than re-derived, for the same reason the ABI is:
|
|
9
|
+
* a parameter's carrier is a fixed-point output, and a second derivation of it
|
|
10
|
+
* would be a second answer.
|
|
11
|
+
*/
|
|
12
|
+
const parameterCarrierKeys = (input, functionId, bodies) => {
|
|
13
|
+
const keys = new Map();
|
|
14
|
+
for (const operation of bodies.get(functionId) ?? []) {
|
|
15
|
+
// A defaulted parameter's own `binding.initialize` operand no longer cites
|
|
16
|
+
// `{kind: 'parameter'}` directly -- it cites the `default-value` merge's
|
|
17
|
+
// result instead, because what it binds is the post-default value, not
|
|
18
|
+
// the raw argument. The raw argument is what the new `parameter-value`
|
|
19
|
+
// reference operation cites, so that operation is equally valid evidence
|
|
20
|
+
// that this ABI position is bound, for the one case the original scan
|
|
21
|
+
// alone can no longer see.
|
|
22
|
+
const isDefaultedParameterSource = operation.family === 'reference' && operation.form === 'parameter-value';
|
|
23
|
+
if (!isDefaultedParameterSource && (operation.family !== 'binding' || operation.action !== 'initialize'))
|
|
24
|
+
continue;
|
|
25
|
+
const initializer = operation.operands.find((operand) => operand.source.kind === 'parameter');
|
|
26
|
+
if (!initializer || initializer.source.kind !== 'parameter')
|
|
27
|
+
continue;
|
|
28
|
+
const published = resultOf(operation, 'value');
|
|
29
|
+
const carrier = published ? input.plan.selected.get(published.id) : undefined;
|
|
30
|
+
keys.set(initializer.source.ordinal, carrier ? representationKey(carrier) : 'unselected');
|
|
31
|
+
}
|
|
32
|
+
return keys;
|
|
33
|
+
};
|
|
34
|
+
const abiOfCarrier = (input, functionId, allocations) => {
|
|
35
|
+
for (const operation of allocations.get(functionId) ?? []) {
|
|
36
|
+
const published = resultOf(operation, 'value');
|
|
37
|
+
const carrier = published ? input.plan.selected.get(published.id) : undefined;
|
|
38
|
+
if (!carrier)
|
|
39
|
+
continue;
|
|
40
|
+
if (carrier.kind === 'function' || carrier.kind === 'function-value-dispatch')
|
|
41
|
+
return { call: carrier.abi, construct: null };
|
|
42
|
+
if (carrier.kind === 'function-family' || carrier.kind === 'function-value-family')
|
|
43
|
+
return { call: carrier.abi, construct: null };
|
|
44
|
+
// A JS CONSTRUCTOR FUNCTION: one `function F( a, b ) {}` that is both
|
|
45
|
+
// called and `new`ed, which is how three.js writes almost every internal
|
|
46
|
+
// module -- `WebGLTextures`, `WebGLProgram`, `WebGLShadowMap`, ten of them
|
|
47
|
+
// in one program, each blocked here with "no function-object allocation
|
|
48
|
+
// published a callable carrier" while its allocation had published a
|
|
49
|
+
// perfectly good one this function had no arm for.
|
|
50
|
+
//
|
|
51
|
+
// One body serves both conventions, and its FORMALS are the shared half:
|
|
52
|
+
// the same parameter list is read whichever way it was entered. The result
|
|
53
|
+
// is not shared -- `new F()` evaluates to the instance and `F()` to what
|
|
54
|
+
// the body returns -- and the body's own is the call one, since a
|
|
55
|
+
// construction takes the instance from `.construct` (`emit-callable.ts`),
|
|
56
|
+
// never from the body's return value.
|
|
57
|
+
//
|
|
58
|
+
// Only when the two frames agree. Where they do not, the two entry points
|
|
59
|
+
// would need two bodies, and this projection has one to state.
|
|
60
|
+
if (carrier.kind === 'function-and-constructor' && argumentFrameKey(carrier.call) === argumentFrameKey(carrier.construct)) {
|
|
61
|
+
return { call: carrier.call, construct: carrier.construct };
|
|
62
|
+
}
|
|
63
|
+
// A function boxed to `dynamic` under `--dynamic-fallback` (its own
|
|
64
|
+
// `.prototype` read or written, `prototypeMutatedConstructorTypes` in
|
|
65
|
+
// dynamic-fallback.ts) still has to bind a real parameter frame when its
|
|
66
|
+
// body runs -- a fact about the DECLARATION, never about which carrier a
|
|
67
|
+
// later census chose for the value. `nativeCallableConventions` answers
|
|
68
|
+
// exactly that, keyed by the allocation's checker-authenticated FunctionId.
|
|
69
|
+
// Its structural shape is deliberately not accepted: unrelated functions
|
|
70
|
+
// with the same signature share that id and may not borrow this frame.
|
|
71
|
+
if (carrier.kind === 'dynamic' &&
|
|
72
|
+
operation.family === 'allocation' &&
|
|
73
|
+
operation.allocated === 'function-object' &&
|
|
74
|
+
operation.callable === functionId &&
|
|
75
|
+
input.deriver) {
|
|
76
|
+
const native = input.deriver.nativeCallableConventions(functionId);
|
|
77
|
+
if (native)
|
|
78
|
+
return native;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* A convention's ARGUMENT half, as a key -- the part two entry points into one
|
|
85
|
+
* body have to share, with the result and the receiver deliberately left out.
|
|
86
|
+
*
|
|
87
|
+
* The receiver is left out because it is the one slot the two conventions into
|
|
88
|
+
* a JS constructor function legitimately DISAGREE in, and neither answer is
|
|
89
|
+
* wrong: `[[Construct]]` manufactures the receiver (ECMA-262 10.2.2, so
|
|
90
|
+
* `representation/derive.ts` states none for it) while `[[Call]]` is handed
|
|
91
|
+
* one. Keying on it made every such function's frames compare unequal and
|
|
92
|
+
* blocked the body -- which is the whole of three.js's renderer -- for a
|
|
93
|
+
* disagreement that is the language's own.
|
|
94
|
+
*/
|
|
95
|
+
const argumentFrameKey = (abi) => [abi.parameters.map((parameter) => `${representationKey(parameter.value)}/${parameter.ownership}`).join(','), abi.restFrom ?? '-'].join(';');
|
|
96
|
+
/**
|
|
97
|
+
* The calling convention a Representation states, when it states one -- the
|
|
98
|
+
* same set of callable carrier kinds `abiOfCarrier` above reads off a
|
|
99
|
+
* `function-object` allocation, asked instead of an arbitrary published
|
|
100
|
+
* value. `function-and-constructor` contributes its `call` half alone: unlike
|
|
101
|
+
* `abiOfCarrier`'s own use of that carrier (which is *becoming* the two-entry
|
|
102
|
+
* function and so needs both frames to agree), a forwarding candidate is only
|
|
103
|
+
* ever borrowed as a callee, and a call site only ever needs `[[Call]]`.
|
|
104
|
+
*/
|
|
105
|
+
const callConventionOf = (representation) => {
|
|
106
|
+
switch (representation.kind) {
|
|
107
|
+
case 'function':
|
|
108
|
+
case 'function-family':
|
|
109
|
+
case 'function-value-dispatch':
|
|
110
|
+
case 'function-value-family':
|
|
111
|
+
return representation.abi;
|
|
112
|
+
case 'native-handle':
|
|
113
|
+
return representation.call;
|
|
114
|
+
case 'function-and-constructor':
|
|
115
|
+
return representation.call;
|
|
116
|
+
default:
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Whether a convention is the fiction a checker synthesizes for a JavaScript
|
|
122
|
+
* function that declares no parameters but reads the `arguments` object --
|
|
123
|
+
* three.js's `function texImage2D() { gl.texImage2D( ...arguments ) }`, one
|
|
124
|
+
* of ~2,315 functions across a real application and the majority shape behind
|
|
125
|
+
* this projection's blockers.
|
|
126
|
+
*
|
|
127
|
+
* There is no declared parameter for `structural-parts.ts`'s `parameterOf` to
|
|
128
|
+
* read a `ts.ParameterDeclaration` from, so the checker's own inferred
|
|
129
|
+
* signature is the only source that layer has, and what it publishes is one
|
|
130
|
+
* parameter shaped like the whole `arguments` object: a plain dynamic array,
|
|
131
|
+
* with no rest marker (a real `...args: T[]` parameter has a declaration, and
|
|
132
|
+
* derives to whatever `T` is, not to this specific undeclared shape). Naming
|
|
133
|
+
* the shape precisely -- one parameter, no `restFrom`, an `array-object` of
|
|
134
|
+
* `dynamic(declared-any-never-narrowed)` -- is what keeps this from ever
|
|
135
|
+
* matching a real single-parameter function whose declared type happens to be
|
|
136
|
+
* `any[]`: that function has a `ts.ParameterDeclaration`, and its body binds
|
|
137
|
+
* one physical parameter the standard check below already accepts.
|
|
138
|
+
*/
|
|
139
|
+
const isArgumentsObjectFiction = (abi) => {
|
|
140
|
+
if (abi.restFrom !== null || abi.parameters.length !== 1)
|
|
141
|
+
return false;
|
|
142
|
+
const value = abi.parameters[0]?.value;
|
|
143
|
+
return value?.kind === 'array-object' && value.element.kind === 'dynamic' && value.element.reason === 'declared-any-never-narrowed';
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* The one other callable this shim forwards its whole `arguments` object to,
|
|
147
|
+
* when there is exactly one.
|
|
148
|
+
*
|
|
149
|
+
* A forwarding shim's entire body is `callee( ...arguments )`, so the
|
|
150
|
+
* `callee` sub-expression is READ (a `property` or `reference` operation
|
|
151
|
+
* publishes it) but never itself an operand of anything else in the body --
|
|
152
|
+
* the spread call that would consume it is exactly the call this compiler has
|
|
153
|
+
* no primitive to build (`producers/spread-arguments.ts` refuses spreading an
|
|
154
|
+
* `arguments` object into a callee with no rest formal), so it leaves no
|
|
155
|
+
* `invocation` operation behind and the read sits unconsumed. That is the
|
|
156
|
+
* signal: among this body's operations, the callable-valued one nothing else
|
|
157
|
+
* cites is the callee the source forwarded to. A body with zero or with more
|
|
158
|
+
* than one such candidate states nothing this projection can act on, and
|
|
159
|
+
* returns `null` rather than guess between them -- `console.error`'s own
|
|
160
|
+
* receiver read is exactly this shape's other common case (see the shim
|
|
161
|
+
* bodies in `.scratch/threejs/abi-arity.mjs`'s output), and is excluded by
|
|
162
|
+
* being consumed by its own call.
|
|
163
|
+
*
|
|
164
|
+
* `isArgumentsObjectFiction` is asked of every candidate too, not only of
|
|
165
|
+
* this function's own ABI, so a chain of two shims never borrows the nearer
|
|
166
|
+
* one's fiction instead of walking to the real callee underneath it.
|
|
167
|
+
*/
|
|
168
|
+
const forwardingCalleeAbi = (input, functionId, bodies) => {
|
|
169
|
+
const operations = bodies.get(functionId) ?? [];
|
|
170
|
+
const consumed = new Set();
|
|
171
|
+
for (const operation of operations) {
|
|
172
|
+
for (const operand of operation.operands) {
|
|
173
|
+
if (operand.source.kind === 'result')
|
|
174
|
+
consumed.add(operand.source.result);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
let found = null;
|
|
178
|
+
for (const operation of operations) {
|
|
179
|
+
const published = resultOf(operation, 'value');
|
|
180
|
+
if (!published || consumed.has(published.id))
|
|
181
|
+
continue;
|
|
182
|
+
const carrier = input.plan.selected.get(published.id);
|
|
183
|
+
const abi = carrier ? callConventionOf(carrier) : null;
|
|
184
|
+
if (!abi || isArgumentsObjectFiction(abi))
|
|
185
|
+
continue;
|
|
186
|
+
if (found)
|
|
187
|
+
return null;
|
|
188
|
+
found = abi;
|
|
189
|
+
}
|
|
190
|
+
return found;
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* The `[[Construct]]` convention each call frame is asked for, over the whole
|
|
194
|
+
* plan, computed once.
|
|
195
|
+
*
|
|
196
|
+
* A cast that asserts a construct signature onto a call-only function puts the
|
|
197
|
+
* second convention on the CAST's carrier; nothing links it back to the
|
|
198
|
+
* declaration except the call frame the two share. This is that link, read by
|
|
199
|
+
* the demand test below. Deliberately keyed by the call frame and not by a
|
|
200
|
+
* declaration: the plan has no declaration to offer here, and matching two
|
|
201
|
+
* declarations that share one frame costs an unused thunk, never a wrong
|
|
202
|
+
* construction -- the runtime looks the entry up by the value's own invoke
|
|
203
|
+
* pointer.
|
|
204
|
+
*
|
|
205
|
+
* A carrier nested inside a container is not reached. That is the fail-closed
|
|
206
|
+
* direction: the conversion then finds no entry and refuses by name.
|
|
207
|
+
*/
|
|
208
|
+
const demandedConstructAbis = (plan) => {
|
|
209
|
+
const abis = new Map();
|
|
210
|
+
// Two different construct conventions over one call frame name no single
|
|
211
|
+
// second entry point for the body, so neither is published. That is the same
|
|
212
|
+
// "one body states one convention" rule `abiOfCarrier` applies to the
|
|
213
|
+
// allocation's own carrier, and the conversion then refuses by name.
|
|
214
|
+
const ambiguous = new Set();
|
|
215
|
+
for (const carrier of plan.selected.values()) {
|
|
216
|
+
const payload = carrier.kind === 'optional' ? carrier.payload : carrier;
|
|
217
|
+
if (payload.kind !== 'function-and-constructor')
|
|
218
|
+
continue;
|
|
219
|
+
const key = abiKey(payload.call);
|
|
220
|
+
const seen = abis.get(key);
|
|
221
|
+
if (seen !== undefined && abiKey(seen) !== abiKey(payload.construct))
|
|
222
|
+
ambiguous.add(key);
|
|
223
|
+
abis.set(key, payload.construct);
|
|
224
|
+
}
|
|
225
|
+
for (const key of ambiguous)
|
|
226
|
+
abis.delete(key);
|
|
227
|
+
return abis;
|
|
228
|
+
};
|
|
229
|
+
const indexOperations = (graph) => {
|
|
230
|
+
const bodies = new Map();
|
|
231
|
+
const allocations = new Map();
|
|
232
|
+
const add = (into, key, operation) => {
|
|
233
|
+
const bucket = into.get(key);
|
|
234
|
+
if (bucket)
|
|
235
|
+
bucket.push(operation);
|
|
236
|
+
else
|
|
237
|
+
into.set(key, [operation]);
|
|
238
|
+
};
|
|
239
|
+
for (const operation of graph.operations.values()) {
|
|
240
|
+
if (operation.caller.kind === 'function')
|
|
241
|
+
add(bodies, operation.caller.functionId, operation);
|
|
242
|
+
if (operation.family === 'allocation' && operation.allocated === 'function-object' && operation.callable) {
|
|
243
|
+
add(allocations, operation.callable, operation);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return { bodies, allocations };
|
|
247
|
+
};
|
|
248
|
+
export const projectAbis = (input) => {
|
|
249
|
+
const abis = new Map();
|
|
250
|
+
const constructs = new Map();
|
|
251
|
+
const blocked = [];
|
|
252
|
+
const callableOrigins = callableOriginsOf(input.graph);
|
|
253
|
+
const callableMutations = callableMutationFactsOf(input.graph, input.plan, callableOrigins);
|
|
254
|
+
const { bodies, allocations } = indexOperations(input.graph);
|
|
255
|
+
const demandedConstructs = demandedConstructAbis(input.plan);
|
|
256
|
+
const functions = new Set();
|
|
257
|
+
for (const operation of input.graph.operations.values()) {
|
|
258
|
+
if (operation.caller.kind === 'function')
|
|
259
|
+
functions.add(operation.caller.functionId);
|
|
260
|
+
if (operation.family === 'allocation' && operation.callable)
|
|
261
|
+
functions.add(operation.callable);
|
|
262
|
+
}
|
|
263
|
+
// Resolved once per blocked function rather than inline at each push site:
|
|
264
|
+
// every blocker below names the SAME `functionId`, and `declarationOfFunction`
|
|
265
|
+
// plus the lookup is one answer, not three.
|
|
266
|
+
const locationOf = (functionId) => input.locationOfDeclaration?.(declarationOfFunction(functionId)) ?? null;
|
|
267
|
+
for (const functionId of [...functions].sort()) {
|
|
268
|
+
const conventions = abiOfCarrier(input, functionId, allocations);
|
|
269
|
+
if (!conventions) {
|
|
270
|
+
blocked.push({
|
|
271
|
+
functionId,
|
|
272
|
+
reason: 'no function-object allocation published a callable carrier for this function, so it has no stated calling convention',
|
|
273
|
+
location: locationOf(functionId)
|
|
274
|
+
});
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
const abi = conventions.call;
|
|
278
|
+
const carriers = parameterCarrierKeys(input, functionId, bodies);
|
|
279
|
+
// A forwarding shim declares no `ts.ParameterDeclaration` at all, so
|
|
280
|
+
// `carriers` is legitimately empty by source, not by defect -- there is no
|
|
281
|
+
// named binding the standard check below could ever find. Its checker-
|
|
282
|
+
// published ABI is not a second, disagreeing authority either: it is a
|
|
283
|
+
// fiction the checker states for lack of anything better, over a value
|
|
284
|
+
// this compiler's own plan already carries the real convention for, one
|
|
285
|
+
// step away at the callee the shim forwards to. Adopting that convention
|
|
286
|
+
// here is not the reconciliation this file's own module comment refuses --
|
|
287
|
+
// there was never a real disagreement to reconcile, only one authority
|
|
288
|
+
// (the checker, over an undeclared parameter) that had nothing to publish
|
|
289
|
+
// and said so with a fiction.
|
|
290
|
+
if (carriers.size === 0 && isArgumentsObjectFiction(abi)) {
|
|
291
|
+
const forwarded = forwardingCalleeAbi(input, functionId, bodies);
|
|
292
|
+
if (forwarded) {
|
|
293
|
+
abis.set(functionId, forwarded);
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (carriers.size !== abi.parameters.length) {
|
|
298
|
+
blocked.push({
|
|
299
|
+
functionId,
|
|
300
|
+
reason: `the body binds ${carriers.size} physical parameter(s) but the ABI declares ${abi.parameters.length}`,
|
|
301
|
+
location: locationOf(functionId)
|
|
302
|
+
});
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const mismatch = abi.parameters.findIndex((parameter, ordinal) => carriers.get(ordinal) !== representationKey(parameter.value));
|
|
306
|
+
const declared = abi.parameters[mismatch];
|
|
307
|
+
if (mismatch >= 0 && declared) {
|
|
308
|
+
blocked.push({
|
|
309
|
+
functionId,
|
|
310
|
+
reason: `parameter ${mismatch} is bound as "${carriers.get(mismatch) ?? 'absent'}" but the ABI declares ` +
|
|
311
|
+
`"${representationKey(declared.value)}"`,
|
|
312
|
+
location: locationOf(functionId)
|
|
313
|
+
});
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
abis.set(functionId, abi);
|
|
317
|
+
if (conventions.construct)
|
|
318
|
+
constructs.set(functionId, conventions.construct);
|
|
319
|
+
else {
|
|
320
|
+
// The allocation published only a `[[Call]]` carrier, and somewhere the
|
|
321
|
+
// program still names this declaration's `[[Construct]]`: `Factory as
|
|
322
|
+
// typeof Factory & (new (v: number) => T)` puts the construct half on
|
|
323
|
+
// the CAST's carrier, never on the allocation's. ECMA-262 gives a
|
|
324
|
+
// pre-`class` constructor function both internal methods when it is
|
|
325
|
+
// created, so the second convention is not invented here -- it is taken
|
|
326
|
+
// from the carrier that demanded it, matched to this declaration by its
|
|
327
|
+
// call frame, and only where the two entry points share one argument
|
|
328
|
+
// frame the single body can bind.
|
|
329
|
+
//
|
|
330
|
+
// Demand-driven, so a function that is only ever called still emits one
|
|
331
|
+
// thunk. Two declarations sharing one call frame both get one, and that
|
|
332
|
+
// costs an unused thunk rather than a wrong answer: the runtime looks
|
|
333
|
+
// the entry up by the value's own invoke pointer
|
|
334
|
+
// (`gea::withConstructEntry`), so a construction can never enter another
|
|
335
|
+
// declaration's body.
|
|
336
|
+
const demanded = demandedConstructs.get(abiKey(abi));
|
|
337
|
+
if (demanded && argumentFrameKey(abi) === argumentFrameKey(demanded))
|
|
338
|
+
constructs.set(functionId, demanded);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return {
|
|
342
|
+
abis,
|
|
343
|
+
constructs,
|
|
344
|
+
callableOrigins,
|
|
345
|
+
callableOwnPropertyWrites: callableMutations.ownProperties,
|
|
346
|
+
functionPrototypePropertyWrites: callableMutations.functionPrototypeProperties,
|
|
347
|
+
blocked: Object.freeze(blocked)
|
|
348
|
+
};
|
|
349
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { StructuralTypeId } from '../identity/ids.js';
|
|
2
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
3
|
+
import type { RecordField, Representation } from '../representation/model.js';
|
|
4
|
+
import type { StructuralType } from '../semantics/model/structural-types.js';
|
|
5
|
+
/**
|
|
6
|
+
* The positions CreateListFromArrayLike reads from a closed typed tuple.
|
|
7
|
+
* Arity comes from the semantic type; payload carriers come from physical
|
|
8
|
+
* storage. Homogeneous tuples can use ArrayObject storage, while heterogeneous
|
|
9
|
+
* tuples use positional records. Neither changes the tuple's stated arity.
|
|
10
|
+
* Optional/open tuples retain the runtime-sized path.
|
|
11
|
+
*/
|
|
12
|
+
export declare const fixedApplyArgumentFieldsOf: (types: ReadonlyMap<StructuralTypeId, StructuralType>, type: StructuralTypeId, carrier: Representation, deriver: RepresentationDeriver) => readonly RecordField[] | null;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The positions CreateListFromArrayLike reads from a closed typed tuple.
|
|
3
|
+
* Arity comes from the semantic type; payload carriers come from physical
|
|
4
|
+
* storage. Homogeneous tuples can use ArrayObject storage, while heterogeneous
|
|
5
|
+
* tuples use positional records. Neither changes the tuple's stated arity.
|
|
6
|
+
* Optional/open tuples retain the runtime-sized path.
|
|
7
|
+
*/
|
|
8
|
+
export const fixedApplyArgumentFieldsOf = (types, type, carrier, deriver) => {
|
|
9
|
+
const shape = types.get(type)?.shape;
|
|
10
|
+
if (shape?.kind !== 'tuple' || shape.elements.some((element) => element.optional || element.rest || element.variadic))
|
|
11
|
+
return null;
|
|
12
|
+
if (carrier.kind === 'array-object') {
|
|
13
|
+
return shape.elements.map((_, index) => ({ key: String(index), value: carrier.element, required: true }));
|
|
14
|
+
}
|
|
15
|
+
const layout = carrier.kind === 'native-record-ref' ? deriver.layoutOf(carrier.shapeId) : carrier;
|
|
16
|
+
if (layout.kind !== 'record')
|
|
17
|
+
return null;
|
|
18
|
+
const fields = shape.elements.map((_, index) => layout.fields.find((field) => field.key === String(index)));
|
|
19
|
+
return fields.every((field) => field !== undefined && field.required) ? fields : null;
|
|
20
|
+
};
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId, RegionId } from '../identity/ids.js';
|
|
2
|
+
import type { Representation } from '../representation/model.js';
|
|
3
|
+
import type { SealedRepresentationPlan } from '../representation/plan.js';
|
|
4
|
+
import type { HostNamespaceTable } from '../targets/cpp/host/host-members.js';
|
|
5
|
+
import type { SemanticGraph } from '../semantics/model/graph.js';
|
|
6
|
+
/**
|
|
7
|
+
* Where each binding cell physically lives.
|
|
8
|
+
*
|
|
9
|
+
* A binding is introduced by exactly one operation, and that operation's caller
|
|
10
|
+
* is the execution context the cell belongs to. Nothing else in the compiler
|
|
11
|
+
* knows this: the IR carries a `DeclarationId` on every read and write, and a
|
|
12
|
+
* body seeing one has no way to tell a local of its own from a module-level
|
|
13
|
+
* cell it merely refers to. Without this projection the emitter treats every
|
|
14
|
+
* cell as a local, which turns a perfectly ordinary module-scope `const` read
|
|
15
|
+
* from inside a function into either a capture it must refuse or -- worse -- a
|
|
16
|
+
* reference to a variable no enclosing block declares.
|
|
17
|
+
*
|
|
18
|
+
* A binding introduced with `BindingOperation.external` set is `external`
|
|
19
|
+
* storage instead of `local`/`region`: `declare const x` names a cell the
|
|
20
|
+
* *host* defines, not this program, so there is no callable frame or run-once
|
|
21
|
+
* region that owns it. That is not a defect to route around -- it is a
|
|
22
|
+
* different, legitimate ownership, gated by its own preflight obligation
|
|
23
|
+
* (`buildExternalBindingObligation`, preflight/run.ts) rather than by the
|
|
24
|
+
* carrier-selection one every other binding raises. A declaration with no
|
|
25
|
+
* introducing operation at all -- an import this program's semantic graph
|
|
26
|
+
* does not yet model, for instance -- has no entry in the map rather than an
|
|
27
|
+
* explicit `external` placement; a consumer sees the same absence either way
|
|
28
|
+
* and refuses by name (`bindingReference`, targets/cpp/emit-context.ts).
|
|
29
|
+
*/
|
|
30
|
+
export type BindingStorage =
|
|
31
|
+
/** A cell owned by one callable frame. */
|
|
32
|
+
{
|
|
33
|
+
readonly kind: 'local';
|
|
34
|
+
readonly owner: FunctionId;
|
|
35
|
+
}
|
|
36
|
+
/** A cell owned by a region that runs once: a module body, an initializer, a static block. */
|
|
37
|
+
| {
|
|
38
|
+
readonly kind: 'region';
|
|
39
|
+
readonly owner: RegionId;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Named by this program, defined by a host. `linkageName` is the ABI
|
|
43
|
+
* contract the two sides agree on, carried verbatim from
|
|
44
|
+
* `BindingOperation.external` (semantics/model/operations.ts) -- the one
|
|
45
|
+
* place that string is read from the declaration's own spelling.
|
|
46
|
+
*/
|
|
47
|
+
| {
|
|
48
|
+
readonly kind: 'external';
|
|
49
|
+
readonly linkageName: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Named by this program, and defined by NOBODY -- an ambient global an
|
|
53
|
+
* installed host declared it does not provide
|
|
54
|
+
* (`PluginCapabilities.absentGlobals`).
|
|
55
|
+
*
|
|
56
|
+
* A cell, not an `extern`, and the difference is the whole point. The program
|
|
57
|
+
* still reads the name, so there has to be something to read; but no object
|
|
58
|
+
* file defines it, so `extern` would compile and never link. The unit defines
|
|
59
|
+
* it itself, holding the one value it can have -- `undefined`, which is also
|
|
60
|
+
* the carrier the type census gave it, so the storage and the value agree by
|
|
61
|
+
* construction rather than by coincidence.
|
|
62
|
+
*
|
|
63
|
+
* `linkageName` is kept for diagnostics only. Nothing links against it.
|
|
64
|
+
*/
|
|
65
|
+
| {
|
|
66
|
+
readonly kind: 'absent';
|
|
67
|
+
readonly linkageName: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A host's class object: named by this program, and no cell anywhere.
|
|
71
|
+
*
|
|
72
|
+
* `NSColor` is not a variable a host defines. It is a class, and the only
|
|
73
|
+
* things a program reaches through it -- constructing one, and its own class
|
|
74
|
+
* members -- are spelled by the host by naming the class outright
|
|
75
|
+
* (`[[::NSStackView alloc] init]`, `[::NSColor clearColor]`). Declaring an
|
|
76
|
+
* `extern` for it invents a C++ global nothing defines, and in Objective-C++
|
|
77
|
+
* it does worse than fail to link: the ObjC class of the same name is already
|
|
78
|
+
* a type at global scope, so `extern gea::apple::AppKit::NSColor NSColor;` is
|
|
79
|
+
* a redefinition as a different kind of symbol and the file does not compile.
|
|
80
|
+
*
|
|
81
|
+
* So the read of one produces no C++ at all, exactly as a host METHOD access
|
|
82
|
+
* does (`emit-host-properties.ts` returns the empty rendering and the call
|
|
83
|
+
* site spells the whole thing). Anything that genuinely needs a value here
|
|
84
|
+
* is refused by name rather than handed a cell that does not exist.
|
|
85
|
+
*/
|
|
86
|
+
| {
|
|
87
|
+
readonly kind: 'host-class';
|
|
88
|
+
readonly linkageName: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* A host's SINGLETON: one object the host owns, reached by its own name
|
|
92
|
+
* rather than loaded from a cell.
|
|
93
|
+
*
|
|
94
|
+
* `document` is the case. The engine's `gea::embedded::ui::Document` has a
|
|
95
|
+
* private default constructor and one instance behind `Document::instance()`,
|
|
96
|
+
* and the member table the host ships spells every call through that -- no
|
|
97
|
+
* template names a receiver. So there is nothing for a read of the global to
|
|
98
|
+
* load: `extern gea::embedded::ui::Document document;` names a cell the
|
|
99
|
+
* engine never defines and would not link, and the local it was copied into
|
|
100
|
+
* (`gea::embedded::ui::Document v1;`) calls a constructor that is private.
|
|
101
|
+
*
|
|
102
|
+
* Physically identical to `host-class` -- the read renders nothing and the
|
|
103
|
+
* member site spells the whole thing -- and named apart from it because the
|
|
104
|
+
* two are recognized differently: a class object is one this program can
|
|
105
|
+
* `new`, and a singleton is one the host states members for and no program
|
|
106
|
+
* ever constructs.
|
|
107
|
+
*/
|
|
108
|
+
| {
|
|
109
|
+
readonly kind: 'host-singleton';
|
|
110
|
+
readonly linkageName: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A host's constant: named by this program, and the host states the text.
|
|
114
|
+
*
|
|
115
|
+
* `NSBoxCustom` is an Objective-C enumerator, not a C++ global, so there is
|
|
116
|
+
* no cell for it and an `extern` naming one is ill-formed where the
|
|
117
|
+
* enumerator is already in scope. The host answers with the value instead,
|
|
118
|
+
* and every read renders that text.
|
|
119
|
+
*/
|
|
120
|
+
| {
|
|
121
|
+
readonly kind: 'host-constant';
|
|
122
|
+
readonly linkageName: string;
|
|
123
|
+
readonly emit: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* A name the host defines as a FUNCTION.
|
|
127
|
+
*
|
|
128
|
+
* `installRootViewController` is not a cell -- there is nothing to read and
|
|
129
|
+
* nothing to declare `extern`, because the host exports a function of that
|
|
130
|
+
* name and a C++ `extern <callable-carrier> installRootViewController;` would
|
|
131
|
+
* be a global variable that no object file defines. The read renders
|
|
132
|
+
* nothing; the call it feeds renders the host's own spelling.
|
|
133
|
+
*/
|
|
134
|
+
| {
|
|
135
|
+
readonly kind: 'host-function';
|
|
136
|
+
readonly linkageName: string;
|
|
137
|
+
readonly emit: string;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* A name the host defines as a NAMESPACE: a path, not a value.
|
|
141
|
+
*
|
|
142
|
+
* `deviceInfo`, `Display` and `navigator` are global objects to the
|
|
143
|
+
* checker and paths to the host: `deviceInfo.deviceId(...)` is
|
|
144
|
+
* `gea::host::device_info::deviceId(...)`, and no object of that name exists at run
|
|
145
|
+
* time. Reading one produces no C++ -- `host-class`'s own convention, for
|
|
146
|
+
* the same reason -- and what is done THROUGH it renders the host's
|
|
147
|
+
* spelling. Without this the cell is an ordinary external and the unit
|
|
148
|
+
* declares `extern std::shared_ptr<gea_record_type_801> deviceInfo;`,
|
|
149
|
+
* which compiles and never links.
|
|
150
|
+
*/
|
|
151
|
+
| {
|
|
152
|
+
readonly kind: 'host-namespace';
|
|
153
|
+
readonly linkageName: string;
|
|
154
|
+
};
|
|
155
|
+
export interface BindingPlacement {
|
|
156
|
+
readonly storage: BindingStorage;
|
|
157
|
+
/** The carrier the plan selected for the value this cell holds, or `null` when the introduction published none. */
|
|
158
|
+
readonly representation: Representation | null;
|
|
159
|
+
}
|
|
160
|
+
export interface BindingPlacementInput {
|
|
161
|
+
readonly graph: SemanticGraph;
|
|
162
|
+
readonly plan: SealedRepresentationPlan;
|
|
163
|
+
/**
|
|
164
|
+
* The ABI name a host defines a cell under, for declarations this program
|
|
165
|
+
* reads but never introduces (`FrontendResult.externalBindings`).
|
|
166
|
+
*
|
|
167
|
+
* Only the frontend can produce this, because deciding it means asking the
|
|
168
|
+
* checker which declaration a name resolves to and whether that declaration
|
|
169
|
+
* is ambient. Omitted, every such cell simply has no placement -- which is
|
|
170
|
+
* what it had before this existed.
|
|
171
|
+
*/
|
|
172
|
+
readonly externals?: ReadonlyMap<DeclarationId, string>;
|
|
173
|
+
/** Which of those an installed host denied (`FrontendResult.absentBindings`) -- see `absent` storage. */
|
|
174
|
+
readonly absentBindings?: ReadonlySet<DeclarationId>;
|
|
175
|
+
/**
|
|
176
|
+
* The ambient names an installed host defines as constants, to the text each
|
|
177
|
+
* one is (`PluginCapabilities.nativeConstants`).
|
|
178
|
+
*
|
|
179
|
+
* Consulted only for a declaration this program never introduces, and only by
|
|
180
|
+
* the name the frontend resolved it to -- a program that declares its own
|
|
181
|
+
* `NSBoxCustom` keeps its own cell, because the loop below runs second and
|
|
182
|
+
* skips anything already placed.
|
|
183
|
+
*/
|
|
184
|
+
readonly hostConstants?: ReadonlyMap<string, string>;
|
|
185
|
+
/** The ambient names this program's hosts define as free functions, to the C++ each is. */
|
|
186
|
+
readonly hostFunctions?: ReadonlyMap<string, string>;
|
|
187
|
+
/**
|
|
188
|
+
* The ECMAScript/WHATWG GLOBAL FUNCTIONS the backend implements itself, to
|
|
189
|
+
* the C++ each is (`targets/cpp/host/core-globals.ts`).
|
|
190
|
+
*
|
|
191
|
+
* Held apart from `hostFunctions` above rather than merged into it, because
|
|
192
|
+
* the two are admitted differently: a host's name is the host's whatever
|
|
193
|
+
* declares it, while a language builtin's name is only the language's when
|
|
194
|
+
* the STANDARD LIBRARY declared it -- see `standardLibraryExternals`.
|
|
195
|
+
*/
|
|
196
|
+
readonly coreGlobalFunctions?: ReadonlyMap<string, string>;
|
|
197
|
+
/**
|
|
198
|
+
* The language's own CLASS OBJECTS -- names whose value is a constructor
|
|
199
|
+
* this backend spells the construction of, with no cell behind the name.
|
|
200
|
+
* See `coreGlobalClasses` (targets/cpp/host/core-globals.ts). Same
|
|
201
|
+
* `standardLibraryExternals` gate as its two siblings.
|
|
202
|
+
*/
|
|
203
|
+
readonly coreGlobalClasses?: ReadonlySet<string>;
|
|
204
|
+
/**
|
|
205
|
+
* The declarations the standard library declares
|
|
206
|
+
* (`FrontendResult.standardLibraryBindings`).
|
|
207
|
+
*
|
|
208
|
+
* The gate on `coreGlobalFunctions`: without it, a program's own ambient
|
|
209
|
+
* `declare function btoa(...)` would be silently redirected to this
|
|
210
|
+
* backend's base64 codec by name alone.
|
|
211
|
+
*/
|
|
212
|
+
readonly standardLibraryExternals?: ReadonlySet<DeclarationId>;
|
|
213
|
+
/**
|
|
214
|
+
* The same, for the names one host declares in more than one of its own files
|
|
215
|
+
* (`PluginCapabilities.hostFunctionsByDeclaration`), keyed by that file.
|
|
216
|
+
*/
|
|
217
|
+
readonly hostFunctionsByDeclaration?: ReadonlyMap<string, ReadonlyMap<string, string>>;
|
|
218
|
+
/** The file each external declaration lives in (`FrontendResult.externalBindingFiles`). */
|
|
219
|
+
readonly externalFiles?: ReadonlyMap<DeclarationId, string>;
|
|
220
|
+
/**
|
|
221
|
+
* The same disambiguation `hostFunctionsByDeclaration` gives constants: two
|
|
222
|
+
* of a host's own files can declare one name as a different ambient
|
|
223
|
+
* constant, and only the declaration this program actually resolved to says
|
|
224
|
+
* which was meant.
|
|
225
|
+
*/
|
|
226
|
+
readonly hostConstantsByDeclaration?: ReadonlyMap<string, ReadonlyMap<string, string>>;
|
|
227
|
+
/** The ambient names this program's hosts own as namespace paths rather than as values. */
|
|
228
|
+
readonly hostNamespaces?: HostNamespaceTable;
|
|
229
|
+
/** The same disambiguation, for a namespace root two of a host's own files both claim. */
|
|
230
|
+
readonly hostNamespaceRootsByDeclaration?: ReadonlyMap<string, ReadonlySet<string>>;
|
|
231
|
+
/** Namespace roots authenticated by the frontend against a complete declaration set. */
|
|
232
|
+
readonly hostNamespaceBindings?: ReadonlySet<DeclarationId>;
|
|
233
|
+
/** Names with exact declaration rows; these may not fall back to name-only admission. */
|
|
234
|
+
readonly exactHostNamespaceNames?: ReadonlySet<string>;
|
|
235
|
+
/** The ambient names this program's hosts own as singleton objects reached by name -- see `host-singleton`. */
|
|
236
|
+
readonly hostSingletons?: ReadonlySet<string>;
|
|
237
|
+
/** The same disambiguation, for a singleton name two of a host's own files both claim. */
|
|
238
|
+
readonly hostSingletonsByDeclaration?: ReadonlyMap<string, ReadonlySet<string>>;
|
|
239
|
+
/** Singleton values the frontend authenticated from an exact host declaration. */
|
|
240
|
+
readonly hostSingletonBindings?: ReadonlySet<DeclarationId>;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Every cell a program introduces, keyed by declaration.
|
|
244
|
+
*
|
|
245
|
+
* `initialize`, `declare`, and the `module-link`/`initialize` events of the
|
|
246
|
+
* declaration-lifecycle family are all introductions, and they are collected
|
|
247
|
+
* together on purpose: a consumer asking "where does this cell live" must get
|
|
248
|
+
* one answer regardless of which family happened to introduce it.
|
|
249
|
+
*/
|
|
250
|
+
export declare const projectBindingPlacements: (input: BindingPlacementInput) => ReadonlyMap<DeclarationId, BindingPlacement>;
|