@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,589 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId, StructuralTypeId } from '../identity/ids.js';
|
|
2
|
+
import type { Ownership, RecordField, Representation, TypedArrayElementDomain, RecordAccessor } from './model.js';
|
|
3
|
+
import type { StructuralShape } from '../semantics/model/structural-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* The policies a representation deriver consults, and the neutral default of
|
|
6
|
+
* each.
|
|
7
|
+
*
|
|
8
|
+
* They live apart from the derivation itself because that is precisely what
|
|
9
|
+
* they are: decisions the deriver is *handed*, not answers it computes. A
|
|
10
|
+
* policy that the deriver could reach in and change -- or that changed to suit
|
|
11
|
+
* one call site -- would make the same `StructuralTypeId` derive two different
|
|
12
|
+
* carriers, which is the drift `representation/publish.ts` seals against by
|
|
13
|
+
* deriving every carrier exactly once.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Who owns a reference and for how long.
|
|
17
|
+
*
|
|
18
|
+
* Ownership is a decision, not a property of the shape, so it is injected. A
|
|
19
|
+
* deriver that picked ownership itself would be a second authority competing
|
|
20
|
+
* with the target's own lifetime rules.
|
|
21
|
+
*/
|
|
22
|
+
export interface OwnershipPolicy {
|
|
23
|
+
/**
|
|
24
|
+
* Ownership for a value of this shape held in an ordinary position.
|
|
25
|
+
*
|
|
26
|
+
* The interned identity comes with the shape because the question is not
|
|
27
|
+
* always answerable from the layout alone: whether a record may be carried
|
|
28
|
+
* by value is a fact about how the whole PROGRAM uses that one type
|
|
29
|
+
* (`representation/value-records.ts`), and the type id is what the proof is
|
|
30
|
+
* keyed by. A policy with no use for it ignores it, as the default does.
|
|
31
|
+
*/
|
|
32
|
+
readonly forShape: (shape: StructuralShape, id: StructuralTypeId) => Ownership;
|
|
33
|
+
/** Ownership for a value passed as a physical parameter. */
|
|
34
|
+
readonly forParameter: (value: Representation) => Ownership;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Shared ownership for references, by-value for everything else, and a
|
|
38
|
+
* parameter passed exactly as its carrier is held.
|
|
39
|
+
*
|
|
40
|
+
* Borrowing at parameter positions is an optimization, and it was one this
|
|
41
|
+
* layer had not earned: nothing here proves a callee does not retain what it
|
|
42
|
+
* was handed. Worse, it made a parameter's carrier and its passing mode two
|
|
43
|
+
* different answers to one question -- the value inside the body was a shared
|
|
44
|
+
* reference while the formal declaring it was a borrowed one -- so the body
|
|
45
|
+
* initialized a `shared_ptr` from a reference and the emitted C++ did not
|
|
46
|
+
* compile. Passing as held keeps one answer; a proven non-escaping parameter
|
|
47
|
+
* may be narrowed to `borrowed` later, on top of this, not instead of it.
|
|
48
|
+
*/
|
|
49
|
+
export declare const defaultOwnershipPolicy: OwnershipPolicy;
|
|
50
|
+
/**
|
|
51
|
+
* Which object types this program may carry BY VALUE -- see
|
|
52
|
+
* `representation/value-records.ts` for the proof, and `derive.ts`'s
|
|
53
|
+
* `'declared'` case for the one place a NAME for one is expanded rather than
|
|
54
|
+
* carried nominally.
|
|
55
|
+
*
|
|
56
|
+
* A policy rather than a table the deriver computes, for the reason every
|
|
57
|
+
* policy here is one: the answer is a whole-program fact about how a type is
|
|
58
|
+
* USED, and the deriver sees one type at a time.
|
|
59
|
+
*/
|
|
60
|
+
export interface ValueRecordPolicy {
|
|
61
|
+
/** Whether a value of this object type may be held by value. */
|
|
62
|
+
readonly forType: (id: StructuralTypeId) => boolean;
|
|
63
|
+
}
|
|
64
|
+
/** No value records: every record is a shared handle, exactly as before. */
|
|
65
|
+
export declare const defaultValueRecordPolicy: ValueRecordPolicy;
|
|
66
|
+
/**
|
|
67
|
+
* One version of one host protocol a declared type is bound to.
|
|
68
|
+
*
|
|
69
|
+
* Structurally the same interface `semantics/frontend.ts` declares, and
|
|
70
|
+
* deliberately a second declaration of it rather than an import: this layer may
|
|
71
|
+
* not depend on the frontend. Structural typing at `compiler.ts`'s
|
|
72
|
+
* `publishRepresentations` call is the whole of the join, so the two move
|
|
73
|
+
* together and the typechecker is what enforces it.
|
|
74
|
+
*/
|
|
75
|
+
export interface HostProtocolBinding {
|
|
76
|
+
readonly protocol: string;
|
|
77
|
+
readonly version: number;
|
|
78
|
+
/**
|
|
79
|
+
* The type the host's own runtime carries values of this protocol in, when
|
|
80
|
+
* the plugin that installs it stated one; `null` when it did not. See
|
|
81
|
+
* `semantics/frontend.ts`'s copy for what states it, and
|
|
82
|
+
* `Representation`'s `native-handle` arm for what reads it.
|
|
83
|
+
*/
|
|
84
|
+
readonly native: string | null;
|
|
85
|
+
/**
|
|
86
|
+
* True when the host builds values of this protocol, so its declared body is
|
|
87
|
+
* not a layout. See `semantics/frontend.ts`'s copy; `derive.ts`'s data-only
|
|
88
|
+
* record exception is what reads it.
|
|
89
|
+
*/
|
|
90
|
+
readonly opaque: boolean;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Which declared types this program's declarations are bound to a host
|
|
94
|
+
* protocol for, keyed by declaration identity.
|
|
95
|
+
*
|
|
96
|
+
* A declared type with a binding is not a layout this compiler owns or should
|
|
97
|
+
* ever expand: `Element`, `Map`, and every other host-implemented type are
|
|
98
|
+
* defined by whatever installs the protocol, not by the members its ambient
|
|
99
|
+
* (or even non-ambient, structurally-empty) TypeScript declaration happens to
|
|
100
|
+
* spell. Keying by `DeclarationId` rather than a name or a source location is
|
|
101
|
+
* the same rule every other identity in this compiler runs on -- and a host
|
|
102
|
+
* binding, resolved by whichever declaration the checker says a value's type
|
|
103
|
+
* actually names, is exactly the place a name match would silently bind the
|
|
104
|
+
* wrong symbol.
|
|
105
|
+
*/
|
|
106
|
+
export interface HostBindingPolicy {
|
|
107
|
+
/** The protocol a declared type is bound to, or `null` for an ordinary declared type. */
|
|
108
|
+
readonly forDeclaration: (declaration: DeclarationId) => HostProtocolBinding | null;
|
|
109
|
+
/**
|
|
110
|
+
* Every host carrier the given one derives from, transitively, nearest base
|
|
111
|
+
* first -- what the host stated about its own inheritance
|
|
112
|
+
* (`PluginCapabilities.nativeBases`), read by the one site that derives a
|
|
113
|
+
* `native-handle` at all and stated on the carrier it builds (see
|
|
114
|
+
* `Representation`'s `native-handle` arm for why the fact has to travel on
|
|
115
|
+
* the carrier).
|
|
116
|
+
*
|
|
117
|
+
* Keyed by the CARRIER rather than by declaration, unlike `forDeclaration`
|
|
118
|
+
* above, because that is the shape of the fact: thirteen declared names can
|
|
119
|
+
* share one runtime type, and what derives from what is a statement about
|
|
120
|
+
* the type, not about any one name for it. A handle whose host stated no
|
|
121
|
+
* carrier (`null`) derives from nothing -- a host that named no type for a
|
|
122
|
+
* protocol has said nothing about that protocol's place in a hierarchy
|
|
123
|
+
* either, and treating the protocol name as a carrier would compare two
|
|
124
|
+
* different key spaces.
|
|
125
|
+
*/
|
|
126
|
+
readonly basesOf: (native: string | null) => readonly string[];
|
|
127
|
+
}
|
|
128
|
+
/** No bindings installed: every declared type falls through to its structural answer, unchanged. */
|
|
129
|
+
export declare const defaultHostBindingPolicy: HostBindingPolicy;
|
|
130
|
+
/**
|
|
131
|
+
* Which declared types this program's declarations resolve to a typed-array
|
|
132
|
+
* element width for, keyed by declaration identity -- the same identity
|
|
133
|
+
* `HostBindingPolicy` reads, and for the same reason: matching by the
|
|
134
|
+
* checker's own declaration rather than by name text or file path is what
|
|
135
|
+
* keeps this a checker-driven policy and not a second, source-shaped
|
|
136
|
+
* authority. Unlike a host protocol, a typed array is not something any host
|
|
137
|
+
* installs; it is core ECMAScript with a compiler-owned native layout, so it
|
|
138
|
+
* gets its own policy type rather than a case of `HostBindingPolicy`.
|
|
139
|
+
*/
|
|
140
|
+
export interface TypedArrayElementPolicy {
|
|
141
|
+
/** The element width a declared type is a typed-array view over, or `null` for an ordinary declared type. */
|
|
142
|
+
readonly forDeclaration: (declaration: DeclarationId) => TypedArrayElementDomain | null;
|
|
143
|
+
}
|
|
144
|
+
/** No typed-array declarations installed: every declared type falls through to its ordinary answer, unchanged. */
|
|
145
|
+
export declare const defaultTypedArrayElementPolicy: TypedArrayElementPolicy;
|
|
146
|
+
/**
|
|
147
|
+
* Whether a declared type is *the* standard library `Promise<T>` interface --
|
|
148
|
+
* a narrower question than its two siblings above answer. There are eight
|
|
149
|
+
* TypedArray interfaces and an open set of host protocols, each needing a
|
|
150
|
+
* "which one" answer; there is exactly one `Promise<T>` declaration per
|
|
151
|
+
* compilation, so a boolean is the honest shape for the answer, not a richer
|
|
152
|
+
* lookup result with nothing to look up.
|
|
153
|
+
*
|
|
154
|
+
* Checked ahead of `HostBindingPolicy`/the ambient-no-protocol refusal in
|
|
155
|
+
* `representation/derive.ts`'s `'declared'` case, for the identical reason
|
|
156
|
+
* `TypedArrayElementPolicy` is: `Promise<T>`'s ambient interface body, run
|
|
157
|
+
* through `declaredBodyOf`'s data-only member stripping, is not empty the
|
|
158
|
+
* way a JSX `Element` interface is -- it has real (method) members that get
|
|
159
|
+
* stripped, landing on a non-empty but WRONG structural body if this policy
|
|
160
|
+
* is not consulted first. `Promise` is not a host protocol either: nothing
|
|
161
|
+
* installs it, it is core ECMAScript with a compiler-owned native layout
|
|
162
|
+
* (`gea::Promise<T>`), the same category `Uint8Array` and friends are in.
|
|
163
|
+
*/
|
|
164
|
+
export interface PromiseDeclarationPolicy {
|
|
165
|
+
/** Whether this declaration is the standard library's own `Promise<T>` interface. */
|
|
166
|
+
readonly forDeclaration: (declaration: DeclarationId) => boolean;
|
|
167
|
+
}
|
|
168
|
+
/** No `Promise` declaration installed: every declared type falls through to its ordinary answer, unchanged. */
|
|
169
|
+
export declare const defaultPromiseDeclarationPolicy: PromiseDeclarationPolicy;
|
|
170
|
+
/**
|
|
171
|
+
* Whether a declared type is *the* standard library `Date` interface, and the
|
|
172
|
+
* C++ type the target carries one in.
|
|
173
|
+
*
|
|
174
|
+
* The same one-declaration-per-compilation question `PromiseDeclarationPolicy`
|
|
175
|
+
* answers, and checked in `derive.ts` immediately beside it for the same
|
|
176
|
+
* reason: `Date`'s ambient body, run through `declaredBodyOf`'s data-only
|
|
177
|
+
* stripping, is an EMPTY object shape (every member of `interface Date` is a
|
|
178
|
+
* method), so without this policy a Date carries a `native-record-ref` whose
|
|
179
|
+
* layout is a struct with no members -- and `d.getFullYear()` then emits as a
|
|
180
|
+
* read of a field that does not exist.
|
|
181
|
+
*
|
|
182
|
+
* It answers a STRING rather than a boolean, which is the one shape difference
|
|
183
|
+
* from its sibling. A Date is not laid out by this compiler; it IS the
|
|
184
|
+
* runtime's own `gea::runtime::Date`, so what the policy carries is that
|
|
185
|
+
* type's spelling -- exactly what `HostProtocolBinding.native` carries for a
|
|
186
|
+
* host-implemented type, and the field `native-record-ref` already has for
|
|
187
|
+
* "the definition is not mine". Keeping the spelling on the policy is what
|
|
188
|
+
* keeps a C++ name out of this layer: `compiler.ts` joins the declaration
|
|
189
|
+
* (semantics) to the spelling (`targets/cpp/prototype/emit-prototype-date.ts`), and
|
|
190
|
+
* `derive.ts` only carries what it is given.
|
|
191
|
+
*
|
|
192
|
+
* Date is core ECMAScript, not a host protocol -- nothing installs it, the
|
|
193
|
+
* standard library declares it -- so it is its own policy rather than a case
|
|
194
|
+
* of `HostBindingPolicy`, on the same footing as `Promise` and the typed
|
|
195
|
+
* arrays.
|
|
196
|
+
*/
|
|
197
|
+
export interface DateDeclarationPolicy {
|
|
198
|
+
/** The C++ type a Date is carried in when this declaration is the standard `Date`, or `null` for any other declaration. */
|
|
199
|
+
readonly forDeclaration: (declaration: DeclarationId) => string | null;
|
|
200
|
+
}
|
|
201
|
+
/** No `Date` declaration installed: every declared type falls through to its ordinary answer, unchanged. */
|
|
202
|
+
export declare const defaultDateDeclarationPolicy: DateDeclarationPolicy;
|
|
203
|
+
/**
|
|
204
|
+
* Which declared type is the standard library's own `Generator<T, TReturn,
|
|
205
|
+
* TNext>` -- the type a `function*` returns.
|
|
206
|
+
*
|
|
207
|
+
* Its own parameter for the same reasons `PromiseDeclarationPolicy` is one: it
|
|
208
|
+
* is core ECMAScript rather than a host protocol (nothing installs it), it is
|
|
209
|
+
* ONE declaration rather than a family, and the question it answers is "is
|
|
210
|
+
* this THE ambient `Generator`", which no other policy asks.
|
|
211
|
+
*
|
|
212
|
+
* It has to be asked before the ambient-body walk for the same concrete reason
|
|
213
|
+
* `Promise<T>` does: run through `declaredBodyOf`'s data-only member
|
|
214
|
+
* stripping, `Generator`'s body loses `next`/`return`/`throw` and keeps
|
|
215
|
+
* whatever else survives, so without this check every generator value would
|
|
216
|
+
* silently derive as a `native-record-ref` to a struct with no members -- a
|
|
217
|
+
* carrier that compiles and answers nothing. `IterableIterator` and the bare
|
|
218
|
+
* `Iterator` are deliberately NOT included: a program can and does hand-write
|
|
219
|
+
* a plain object typed `Iterator<T>` (a class's own `[Symbol.iterator]()`
|
|
220
|
+
* routinely returns one), and claiming those objects are coroutine frames
|
|
221
|
+
* would be exactly the silent wrong answer this policy exists to prevent.
|
|
222
|
+
*/
|
|
223
|
+
export interface GeneratorDeclarationPolicy {
|
|
224
|
+
readonly forDeclaration: (declaration: DeclarationId) => boolean;
|
|
225
|
+
}
|
|
226
|
+
/** No `Generator` declaration installed: every declared type falls through to its ordinary answer, unchanged. */
|
|
227
|
+
export declare const defaultGeneratorDeclarationPolicy: GeneratorDeclarationPolicy;
|
|
228
|
+
/** The four keyed-collection families the language declares -- see `Representation`'s `keyed-collection` arm. */
|
|
229
|
+
export type KeyedCollectionFamily = 'map' | 'set' | 'weak-map' | 'weak-set';
|
|
230
|
+
/**
|
|
231
|
+
* Which declared types are the standard library's own `Map`/`Set`/`WeakMap`/
|
|
232
|
+
* `WeakSet` interfaces -- the same shape of policy `TypedArrayElementPolicy`
|
|
233
|
+
* is, and installed for the same reason.
|
|
234
|
+
*
|
|
235
|
+
* These four are core ECMAScript, not a host protocol: nothing installs them,
|
|
236
|
+
* and the runtime's own `gea::Map`/`gea::Set`/`gea::WeakMap`/`gea::WeakSet`
|
|
237
|
+
* are compiler-owned native layouts exactly as `gea::TypedArray` and
|
|
238
|
+
* `gea::Promise` are. Consulted ahead of `HostBindingPolicy` in `derive.ts`'s
|
|
239
|
+
* `'declared'` case, and that ordering is load-bearing rather than cosmetic:
|
|
240
|
+
* `lib.es5.d.ts` declares `var Map: MapConstructor`, so the ambient-value
|
|
241
|
+
* census (`semantics/host-protocols.ts`) reaches the `Map` INTERFACE through
|
|
242
|
+
* `MapConstructor.groupBy`'s return type and binds it as a host protocol
|
|
243
|
+
* named `Map`. That binding is a real fact about the constructor's own
|
|
244
|
+
* handle, and a wrong one about instances: it turns every `Map<K, V>` in the
|
|
245
|
+
* program into an OPAQUE `native-handle` with no key or value carrier at all
|
|
246
|
+
* -- exactly the untyped answer this policy exists to displace.
|
|
247
|
+
*/
|
|
248
|
+
export interface KeyedCollectionPolicy {
|
|
249
|
+
/** The collection family a declared type names, or `null` for an ordinary declared type. */
|
|
250
|
+
readonly forDeclaration: (declaration: DeclarationId) => KeyedCollectionFamily | null;
|
|
251
|
+
}
|
|
252
|
+
/** No keyed-collection declarations installed: every declared type falls through to its ordinary answer, unchanged. */
|
|
253
|
+
export declare const defaultKeyedCollectionPolicy: KeyedCollectionPolicy;
|
|
254
|
+
/** The two standard ArrayBuffer-family object types -- see `Representation`'s `array-buffer` and `data-view` arms. */
|
|
255
|
+
export type StandardBufferKind = 'array-buffer' | 'shared-array-buffer' | 'data-view';
|
|
256
|
+
/**
|
|
257
|
+
* Which declared types are the standard library's own `ArrayBuffer` and
|
|
258
|
+
* `DataView` interfaces -- the same shape of policy, checked at the same point
|
|
259
|
+
* in `derive.ts`'s `'declared'` case, and installed for the same reason as
|
|
260
|
+
* `TypedArrayElementPolicy` and `KeyedCollectionPolicy` above.
|
|
261
|
+
*
|
|
262
|
+
* The reason, concretely: the ambient-value census binds `ArrayBuffer` as a
|
|
263
|
+
* host protocol -- it is reachable as `Uint8ArrayConstructor`'s own return type
|
|
264
|
+
* `Uint8Array<ArrayBuffer>`, among several other routes -- so without this
|
|
265
|
+
* policy every `ArrayBuffer` in the program carries an OPAQUE `native-handle`
|
|
266
|
+
* with no bytes behind it, and every program that names one is refused for a
|
|
267
|
+
* `native-boundary:ArrayBufferConstructor@1` nothing could honestly claim. The
|
|
268
|
+
* CONSTRUCTOR keeps its handle, which is right: `ArrayBuffer` the value really
|
|
269
|
+
* is a host-supplied constructor object.
|
|
270
|
+
*/
|
|
271
|
+
export interface StandardBufferPolicy {
|
|
272
|
+
/** Which standard buffer type a declared type is, or `null` for an ordinary declared type. */
|
|
273
|
+
readonly forDeclaration: (declaration: DeclarationId) => StandardBufferKind | null;
|
|
274
|
+
}
|
|
275
|
+
/** No buffer declarations installed: every declared type falls through to its ordinary answer, unchanged. */
|
|
276
|
+
export declare const defaultStandardBufferPolicy: StandardBufferPolicy;
|
|
277
|
+
/**
|
|
278
|
+
* The three standard regular-expression declarations that have a compiler-owned
|
|
279
|
+
* native layout: the pattern object itself, and the two shapes a match answers
|
|
280
|
+
* in.
|
|
281
|
+
*
|
|
282
|
+
* `pattern` is `lib.es5.d.ts`'s `RegExp` interface; `exec-result` is
|
|
283
|
+
* `RegExpExecArray`; `match-result` is `RegExpMatchArray`. The two results are
|
|
284
|
+
* kept apart rather than folded into one kind because `lib.es5.d.ts` itself
|
|
285
|
+
* keeps them apart, and the difference is physical, not cosmetic:
|
|
286
|
+
* `RegExpExecArray` declares `index: number` and `input: string` REQUIRED,
|
|
287
|
+
* while `RegExpMatchArray` declares both OPTIONAL -- because `'s'.match(re)`
|
|
288
|
+
* with a `g` flag answers a plain list of matched substrings with neither
|
|
289
|
+
* field. One native struct for both would have to widen the required pair to
|
|
290
|
+
* optional and force every `exec` reader through an unwrap the program never
|
|
291
|
+
* wrote.
|
|
292
|
+
*/
|
|
293
|
+
export type RegExpDeclarationKind = 'pattern' | 'exec-result' | 'match-result';
|
|
294
|
+
/**
|
|
295
|
+
* Which declared types are the standard library's own `RegExp`,
|
|
296
|
+
* `RegExpExecArray` and `RegExpMatchArray` -- the same shape of policy
|
|
297
|
+
* `PromiseDeclarationPolicy` is, installed for the same reason and consulted
|
|
298
|
+
* in the same place.
|
|
299
|
+
*
|
|
300
|
+
* A regular expression is core ECMAScript (`lib.es5.d.ts`), not a host
|
|
301
|
+
* protocol: nothing installs it, and `gea::runtime::regex::Pattern` is a
|
|
302
|
+
* compiler-owned native layout in exactly the category `gea::TypedArray`,
|
|
303
|
+
* `gea::Promise` and `gea::Map` are in. So this is checked in `derive.ts`'s
|
|
304
|
+
* `'declared'` case AHEAD of `HostBindingPolicy`, and the ordering is
|
|
305
|
+
* load-bearing for the same measured reason `KeyedCollectionPolicy`'s is:
|
|
306
|
+
* `lib.es5.d.ts` declares `var RegExp: RegExpConstructor`, so the ambient-value
|
|
307
|
+
* census reaches the `RegExp` INTERFACE through the constructor's own
|
|
308
|
+
* `new (...): RegExp` result and binds it as an opaque host protocol named
|
|
309
|
+
* `RegExp`. That binding is right about the constructor object and wrong about
|
|
310
|
+
* instances -- it turns every pattern in the program into a `native-handle`
|
|
311
|
+
* with no layout, so `re.source` has nowhere to go.
|
|
312
|
+
*
|
|
313
|
+
* The three bodies are NOT empty after `declaredBodyOf`'s method stripping
|
|
314
|
+
* either, which is the second half of why this cannot be left to fall through:
|
|
315
|
+
* `RegExp` keeps exactly the ten data members `gea::runtime::regex::Pattern`
|
|
316
|
+
* declares, and the two result interfaces keep `index`/`input`/`groups`/
|
|
317
|
+
* `length` plus a number index signature. Falling through would seal a
|
|
318
|
+
* plausible-looking struct for each and emit a program that compiles and is
|
|
319
|
+
* not a regular expression.
|
|
320
|
+
*/
|
|
321
|
+
export interface RegExpDeclarationBinding {
|
|
322
|
+
/** Which of the three standard regular-expression declarations this is. */
|
|
323
|
+
readonly kind: RegExpDeclarationKind;
|
|
324
|
+
/**
|
|
325
|
+
* The target's own spelling for the layout, supplied by whoever installs the
|
|
326
|
+
* policy rather than named here -- for the same reason `HostBindingPolicy`
|
|
327
|
+
* carries `native` instead of `derive.ts` guessing one. Nothing under
|
|
328
|
+
* `src/representation/` may name a C++ type: the deriver selects carriers for
|
|
329
|
+
* any backend, and the one that renders them is the authority on how they
|
|
330
|
+
* are spelled. `compiler.ts` composes the two (it is already the place that
|
|
331
|
+
* defaults the conversion registry to the C++ one).
|
|
332
|
+
*/
|
|
333
|
+
readonly native: string;
|
|
334
|
+
}
|
|
335
|
+
export interface RegExpDeclarationPolicy {
|
|
336
|
+
/** Which regular-expression declaration this is, or `null` for an ordinary declared type. */
|
|
337
|
+
readonly forDeclaration: (declaration: DeclarationId) => RegExpDeclarationBinding | null;
|
|
338
|
+
}
|
|
339
|
+
/** No `RegExp` declarations installed: every declared type falls through to its ordinary answer, unchanged. */
|
|
340
|
+
export declare const defaultRegExpDeclarationPolicy: RegExpDeclarationPolicy;
|
|
341
|
+
/**
|
|
342
|
+
* Which declared type is the standard library's own `String` -- the WRAPPER
|
|
343
|
+
* OBJECT interface (`lib.es5.d.ts`'s `interface String`), not the `string`
|
|
344
|
+
* primitive every other value of that name carries. Same shape of policy as
|
|
345
|
+
* `RegExpDeclarationPolicy` immediately above, installed for the same reason
|
|
346
|
+
* and consulted in the same place, right after it.
|
|
347
|
+
*
|
|
348
|
+
* A `String` object is core ECMAScript (ECMA-262 22.1.5, `new String(x)`),
|
|
349
|
+
* not a host protocol, so this is checked in `derive.ts`'s `'declared'` case
|
|
350
|
+
* AHEAD of `HostBindingPolicy`, for the identical load-bearing reason
|
|
351
|
+
* `RegExpDeclarationPolicy`'s ordering is: `lib.es5.d.ts` declares
|
|
352
|
+
* `var String: StringConstructor`, so the ambient-value census reaches the
|
|
353
|
+
* `String` INTERFACE through the constructor's own `new (...): String` result
|
|
354
|
+
* and binds it as an opaque host protocol named `String`. That binding is
|
|
355
|
+
* right about the constructor object and wrong about instances -- it would
|
|
356
|
+
* turn every wrapper object in the program into a `native-handle` with no
|
|
357
|
+
* layout, so a dynamic write like `escapedString.isEscaped = true` (hono's
|
|
358
|
+
* `utils/html.ts`) has nowhere to land.
|
|
359
|
+
*
|
|
360
|
+
* `String`'s body is NOT empty after `declaredBodyOf`'s method stripping
|
|
361
|
+
* either, the second half of why this cannot be left to fall through: it
|
|
362
|
+
* keeps `length: number` and a number index signature (indexed character
|
|
363
|
+
* access), which is the same "real data members plus an index signature"
|
|
364
|
+
* shape `RegExpExecArray` has. Falling through would seal a plausible
|
|
365
|
+
* `record-with-index` struct with a `length` FIELD, and a later `.length`
|
|
366
|
+
* read would compile against a struct member that does not exist on the
|
|
367
|
+
* hand-written `gea::runtime::StringObject` -- a `cert green / clang red`
|
|
368
|
+
* outcome. `emit-prototype-string.ts`'s `stringObjectMemberText` renders
|
|
369
|
+
* `.length` correctly instead, off the one real datum
|
|
370
|
+
* (`StringObject::value`), which is why this policy names no fields at all:
|
|
371
|
+
* unlike `RegExpDeclarationBinding`, there is exactly one shape here, so
|
|
372
|
+
* there is nothing to distinguish by `kind`.
|
|
373
|
+
*/
|
|
374
|
+
export interface StringObjectDeclarationPolicy {
|
|
375
|
+
/** The target's spelling for the String-object layout, or `null` for an ordinary declared type. */
|
|
376
|
+
readonly forDeclaration: (declaration: DeclarationId) => string | null;
|
|
377
|
+
}
|
|
378
|
+
/** No `String` declaration installed: every declared type falls through to its ordinary answer, unchanged. */
|
|
379
|
+
export declare const defaultStringObjectDeclarationPolicy: StringObjectDeclarationPolicy;
|
|
380
|
+
/** Built-in Error interfaces share the runtime's native error layout. */
|
|
381
|
+
export interface ErrorDeclarationPolicy {
|
|
382
|
+
readonly forDeclaration: (declaration: DeclarationId) => string | null;
|
|
383
|
+
}
|
|
384
|
+
export declare const defaultErrorDeclarationPolicy: ErrorDeclarationPolicy;
|
|
385
|
+
/**
|
|
386
|
+
* Which declared type is the bare `Function` interface (`lib.es5.d.ts`'s
|
|
387
|
+
* `interface Function`, not `FunctionConstructor` and not a signature type).
|
|
388
|
+
*
|
|
389
|
+
* Its own policy, on the same footing as `PromiseDeclarationPolicy` and
|
|
390
|
+
* consulted in `derive.ts` AHEAD of `HostBindingPolicy`, for the identical
|
|
391
|
+
* reason theirs are: the ambient-value census has ALREADY bound `Function` as
|
|
392
|
+
* an opaque host protocol -- `lib.es5.d.ts` declares `var Function:
|
|
393
|
+
* FunctionConstructor`, whose `new (...): Function` result carries the
|
|
394
|
+
* INTERFACE into the closure -- so falling through to `binding` gives every
|
|
395
|
+
* `Function`-typed value a `native-handle` and mints
|
|
396
|
+
* `native-boundary:Function@1`, an obligation no target can ever satisfy
|
|
397
|
+
* because there is no C++ type for "some callable, signature unknown".
|
|
398
|
+
*
|
|
399
|
+
* The carrier is `dynamic('untyped-callable')` rather than a layout, and that
|
|
400
|
+
* is not a boxing shortcut: see that reason's own comment
|
|
401
|
+
* (`representation/model.ts`) for why a bare `Function` genuinely states no
|
|
402
|
+
* frame, and why the checker already answers `any` for the same type on the
|
|
403
|
+
* callee side. Deriving the interface's BODY instead would seal a struct of
|
|
404
|
+
* `name`/`length`/`arguments`/`caller`/`prototype` -- a plausible-looking
|
|
405
|
+
* layout that is not a function.
|
|
406
|
+
*/
|
|
407
|
+
export interface FunctionDeclarationPolicy {
|
|
408
|
+
/** True when this declaration is the standard bare `Function` interface. */
|
|
409
|
+
readonly forDeclaration: (declaration: DeclarationId) => boolean;
|
|
410
|
+
}
|
|
411
|
+
/** No `Function` declaration installed: every declared type falls through to its ordinary answer, unchanged. */
|
|
412
|
+
export declare const defaultFunctionDeclarationPolicy: FunctionDeclarationPolicy;
|
|
413
|
+
/**
|
|
414
|
+
* Which classes a class inherits from, transitively, nearest ancestor first.
|
|
415
|
+
*
|
|
416
|
+
* Its own policy rather than a field on `class-ref`, and deliberately so: a
|
|
417
|
+
* carrier states what a cell HOLDS, and two cells holding the same class hold
|
|
418
|
+
* the same thing whatever that class extends. Putting the chain in the carrier
|
|
419
|
+
* would put it in `representationKey`, making a class's ancestry part of its
|
|
420
|
+
* carrier identity -- and a key that states more than the identity is the
|
|
421
|
+
* defect `interning-key` guidance already names, not a richer answer.
|
|
422
|
+
*
|
|
423
|
+
* Read by exactly two questions, both of which are unanswerable without it and
|
|
424
|
+
* both of which are only ever sound in the ancestor direction:
|
|
425
|
+
* `derive.ts`'s intersection reduction (`T & AggregateOperation` IS the
|
|
426
|
+
* more-derived class when one member descends from the other), and
|
|
427
|
+
* `conversion/build.ts`'s widening enumeration (a derived class-ref may be
|
|
428
|
+
* stored into a base class-ref cell; the reverse may not).
|
|
429
|
+
*
|
|
430
|
+
* See `classHeritageOf` (semantics/class-heritage.ts) for why the checker
|
|
431
|
+
* rather than the heritage syntax answers it, and why `implements` is absent.
|
|
432
|
+
*/
|
|
433
|
+
export interface ClassHeritagePolicy {
|
|
434
|
+
/** The classes this declaration inherits from, nearest first; empty for a base class or a non-class. */
|
|
435
|
+
readonly forDeclaration: (declaration: DeclarationId) => readonly DeclarationId[];
|
|
436
|
+
/**
|
|
437
|
+
* The derived classes the program stores into a slot typed as this class's
|
|
438
|
+
* constructor, which that constructor family must therefore also name; see
|
|
439
|
+
* `semantics/constructor-slot-subclasses.ts`.
|
|
440
|
+
*/
|
|
441
|
+
readonly constructorSlotSubclassesOf: (declaration: DeclarationId) => readonly DeclarationId[];
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* The one class a program declares as an interface's implementation, keyed by
|
|
445
|
+
* the interface's declaration -- see `semantics/interface-implementors.ts` for
|
|
446
|
+
* what "the one" means and for the three refusals that keep this off every
|
|
447
|
+
* interface that is really a record.
|
|
448
|
+
*
|
|
449
|
+
* Read by the deriver in the `declared` case, ahead of the host-binding and
|
|
450
|
+
* structural-body paths: the answer is not a layout for the interface, it is
|
|
451
|
+
* that the interface has no inhabitant of its own and the class's carrier is
|
|
452
|
+
* what a slot of it holds.
|
|
453
|
+
*/
|
|
454
|
+
export interface InterfaceImplementorPolicy {
|
|
455
|
+
/** Every class the program declares as this interface's implementation, in source order; empty when none. */
|
|
456
|
+
readonly forDeclaration: (declaration: DeclarationId) => readonly DeclarationId[];
|
|
457
|
+
}
|
|
458
|
+
/** No implementors installed: every interface derives its own structural body, exactly as before this policy existed. */
|
|
459
|
+
export declare const defaultInterfaceImplementorPolicy: InterfaceImplementorPolicy;
|
|
460
|
+
/**
|
|
461
|
+
* The copies of a generic class whose copies can differ in layout, by the
|
|
462
|
+
* class's root declaration id -- `structural.ts`'s `classCopies`. The
|
|
463
|
+
* deriver's `physicalClassDeclarationOf` groups them by the representation
|
|
464
|
+
* of their layout-relevant fillings: one physical class per group, named by
|
|
465
|
+
* the group's lowest copy ordinal (`decl|f0|36@1`) when there is more than
|
|
466
|
+
* one group, and by the root alone when there is one.
|
|
467
|
+
*/
|
|
468
|
+
export interface ClassCopyPolicy {
|
|
469
|
+
readonly copiesOf: (declaration: DeclarationId) => readonly {
|
|
470
|
+
readonly ordinal: number;
|
|
471
|
+
readonly typeArguments: readonly StructuralTypeId[];
|
|
472
|
+
readonly constructor: StructuralTypeId;
|
|
473
|
+
}[];
|
|
474
|
+
}
|
|
475
|
+
/** No copies installed: every generic class is one physical class, named by its root. */
|
|
476
|
+
export declare const defaultClassCopyPolicy: ClassCopyPolicy;
|
|
477
|
+
/** No heritage installed: every class reads as a base class, and no upcast or intersection reduction is proposed. */
|
|
478
|
+
export declare const defaultClassHeritagePolicy: ClassHeritagePolicy;
|
|
479
|
+
/**
|
|
480
|
+
* The type a host carries the one object behind a namespace ROOT in, keyed by
|
|
481
|
+
* the root value's own structural type -- `window`'s `Window & typeof
|
|
482
|
+
* globalThis` to `gea::host::WindowFacade`.
|
|
483
|
+
*
|
|
484
|
+
* The one policy here NOT keyed by `DeclarationId`, and the difference is
|
|
485
|
+
* forced rather than chosen. Its three siblings above all answer a question
|
|
486
|
+
* about a declared TYPE, so the declaration the checker resolved is both
|
|
487
|
+
* available and the right key. This one answers a question about a VALUE the
|
|
488
|
+
* host owns, and a root's value type routinely has no declaration to key by:
|
|
489
|
+
* `window`'s is an intersection, whose `getSymbol()` is `undefined`, and a
|
|
490
|
+
* host may equally declare a root with an anonymous object type. A structural
|
|
491
|
+
* type id is also the only key `derive.ts` could read here at all, because
|
|
492
|
+
* this has to be consulted BEFORE the shape switch rather than inside its
|
|
493
|
+
* `'declared'` case -- an intersection never reaches that case.
|
|
494
|
+
*
|
|
495
|
+
* Why a root needs a carrier when the emitter never materializes one: a root
|
|
496
|
+
* is a path, so `window.innerWidth` renders `gea::host::window.innerWidth()`
|
|
497
|
+
* and no cell named `window` exists (`projection/bindings.ts`'s
|
|
498
|
+
* `host-namespace` storage). But the program still PUBLISHES a reference and a
|
|
499
|
+
* binding read for the root, and every published result gets a carrier. With
|
|
500
|
+
* no answer here the only one available is the root's ambient declaration, and
|
|
501
|
+
* `deriveIntersection` flattens lib.dom's `Window` into a 26-field struct
|
|
502
|
+
* naming protocol tags -- `gea_native_protocol_Window_v1`,
|
|
503
|
+
* `..._ServiceWorker_v1` -- that no plugin declares and no header defines. That
|
|
504
|
+
* struct is unreachable from any value in the program and still lands in the
|
|
505
|
+
* translation unit, because `targets/cpp/records.ts` seeds from every selected
|
|
506
|
+
* carrier; `examples/bouncing-balls` certified clean, emitted 6230 lines, and
|
|
507
|
+
* was rejected by clang for exactly that.
|
|
508
|
+
*
|
|
509
|
+
* The answer is a `native-record-ref` with the stated `native` spelling, which
|
|
510
|
+
* is the carrier that already means "the host defines this type, emit no
|
|
511
|
+
* struct of your own for it". Never a `native-handle`: that would need a
|
|
512
|
+
* protocol tag, and inventing `Window@1` is the regression
|
|
513
|
+
* `semantics/host-protocols.ts` records having cost three apps their
|
|
514
|
+
* certificate. Never `unresolved` either -- lattice bottom is the absence of an
|
|
515
|
+
* answer, and there is a perfectly good one: `gea::host::window` is a real
|
|
516
|
+
* `inline constexpr WindowFacade` in the engine's own `host/window.h`.
|
|
517
|
+
*
|
|
518
|
+
* A root the installed plugins state no type for answers `null` and derives
|
|
519
|
+
* exactly as it did before. Nothing here invents a spelling.
|
|
520
|
+
*/
|
|
521
|
+
export interface HostNamespaceRootPolicy {
|
|
522
|
+
/** The host's own type for this namespace root's object, or `null` for an ordinary value type. */
|
|
523
|
+
readonly forType: (type: StructuralTypeId) => string | null;
|
|
524
|
+
}
|
|
525
|
+
/** No namespace roots installed: every type falls through to its structural answer, unchanged. */
|
|
526
|
+
export declare const defaultHostNamespaceRootPolicy: HostNamespaceRootPolicy;
|
|
527
|
+
/**
|
|
528
|
+
* The field list a named record layout resolves to, or `null` for a shape that
|
|
529
|
+
* carries none.
|
|
530
|
+
*
|
|
531
|
+
* `native-record-ref` names a shape and nothing else -- its layout lives in the
|
|
532
|
+
* sealed table and is resolved at emission (`targets/cpp/records.ts`'s
|
|
533
|
+
* `recordFieldsOfShape`), which is exactly what makes it finite for a recursive
|
|
534
|
+
* interface. The conversion registry has to ask the same question earlier, to
|
|
535
|
+
* decide whether a structural `record` satisfies that named shape, and a
|
|
536
|
+
* policy is how it asks without the registry gaining a second opinion about
|
|
537
|
+
* layout. A policy rather than a field on the carrier for the reason
|
|
538
|
+
* `ClassHeritagePolicy` states: a layout is not carrier identity and would
|
|
539
|
+
* wrongly enter `representationKey`.
|
|
540
|
+
*/
|
|
541
|
+
export interface RecordLayoutPolicy {
|
|
542
|
+
readonly forShape: (shapeId: string) => readonly RecordField[] | null;
|
|
543
|
+
readonly indexesForShape?: (shapeId: string) => readonly {
|
|
544
|
+
readonly value: Representation;
|
|
545
|
+
readonly key: 'string' | 'number' | 'symbol';
|
|
546
|
+
}[];
|
|
547
|
+
/** Data-only layouts, excluding accessors and open property sidecars. */
|
|
548
|
+
readonly plainFieldsForShape?: (shapeId: string) => readonly RecordField[] | null;
|
|
549
|
+
/** The accessors a shape declares; `null` for a shape with no record layout. */
|
|
550
|
+
readonly accessorsForShape?: (shapeId: string) => readonly RecordAccessor[] | null;
|
|
551
|
+
/** Whether a generated class provides a bindable instance method for this key. */
|
|
552
|
+
readonly classMethodFor?: (declaration: DeclarationId, key: string) => boolean;
|
|
553
|
+
/**
|
|
554
|
+
* The zero-argument instance method this key names when a call to it can be
|
|
555
|
+
* spelled DIRECTLY from a bare receiver expression -- the body to call and
|
|
556
|
+
* the carrier it answers -- or `null`.
|
|
557
|
+
*
|
|
558
|
+
* A fact about the projection, not a spelling: the caller composes the C++
|
|
559
|
+
* name from the `FunctionId`, exactly as it does for every other body. What
|
|
560
|
+
* this decides is the part only the class table can decide -- whether the
|
|
561
|
+
* key is a method at all, whether its convention takes nothing but the
|
|
562
|
+
* receiver, and whether any subclass overrides it. An overridden key
|
|
563
|
+
* dispatches virtually, and a direct body call would run the BASE's
|
|
564
|
+
* implementation against a derived instance, so such a key answers `null`
|
|
565
|
+
* and its reader refuses rather than answering wrong.
|
|
566
|
+
*/
|
|
567
|
+
readonly classDirectMethodFor?: (declaration: DeclarationId, key: string) => {
|
|
568
|
+
readonly callable: FunctionId;
|
|
569
|
+
readonly result: Representation;
|
|
570
|
+
} | null;
|
|
571
|
+
/**
|
|
572
|
+
* The carrier a class's GETTER publishes for this key, or `null` when the
|
|
573
|
+
* key names no readable accessor on the class or its bases.
|
|
574
|
+
*
|
|
575
|
+
* A class's accessors are not in `forShape`: that list is physical storage,
|
|
576
|
+
* and an accessor has none. So a record view of a class instance has to ask
|
|
577
|
+
* for them separately, or a target field backed by a getter looks absent --
|
|
578
|
+
* which is why `IncomingMessage` could not be viewed as
|
|
579
|
+
* `{ rawHeaders: string[] }` at all, though every read of it answers.
|
|
580
|
+
*
|
|
581
|
+
* A carrier rather than a boolean because the view has to decide the pair:
|
|
582
|
+
* the getter's own result is what the target field is built from, and the
|
|
583
|
+
* two are not always the same carrier.
|
|
584
|
+
*/
|
|
585
|
+
readonly classAccessorFor?: (declaration: DeclarationId, key: string) => Representation | null;
|
|
586
|
+
/** Whether no evaluation can instantiate this class (`semantics/uninstantiable-classes.ts`). */
|
|
587
|
+
readonly classUninstantiable?: (declaration: DeclarationId) => boolean;
|
|
588
|
+
}
|
|
589
|
+
export declare const defaultRecordLayoutPolicy: RecordLayoutPolicy;
|