@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,61 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId } from '../identity/ids.js';
|
|
2
|
+
import type { CallableAbi } from '../representation/model.js';
|
|
3
|
+
/**
|
|
4
|
+
* The identity of one extra calling convention over `declaration`.
|
|
5
|
+
*
|
|
6
|
+
* `identity/ids.ts` mints every real `FunctionId` from a declaration alone
|
|
7
|
+
* (`functionId`), because an ordinary function has exactly one: the
|
|
8
|
+
* convention its own parameter list states. An extra convention is not that
|
|
9
|
+
* function -- calling it with the ordinary convention's frame would read
|
|
10
|
+
* arguments nobody pushed -- so it needs its own identity, and this compiler
|
|
11
|
+
* has no declaration to mint one from: nothing in the checked program is the
|
|
12
|
+
* extra convention. What it does have is the declaration the convention is
|
|
13
|
+
* *about*, which is real and already sealed, plus whatever the caller uses to
|
|
14
|
+
* tell two extra conventions on one declaration apart. Keying on both is what
|
|
15
|
+
* makes the result stable (the same inputs always mint the same identity),
|
|
16
|
+
* reproducible (any later reader with the same two facts can recompute it
|
|
17
|
+
* independently), and collision-free with the declaration's own convention:
|
|
18
|
+
* `functionId(declaration)` alone is never a valid identity here, because
|
|
19
|
+
* `synthesizedFunctionId` always appends a field after it, and an ordinary
|
|
20
|
+
* `FunctionId` never has one.
|
|
21
|
+
*
|
|
22
|
+
* Built from a file path, a source position, or generated text, this would
|
|
23
|
+
* silently change identity every time the program was reformatted or a
|
|
24
|
+
* function moved in the file -- the exact failure this compiler's identity
|
|
25
|
+
* scheme (`identity/ids.ts`'s own module comment) exists to rule out
|
|
26
|
+
* everywhere else. `declaration` and `discriminator` are the only two inputs
|
|
27
|
+
* to guarantee that outcome cannot happen here either.
|
|
28
|
+
*/
|
|
29
|
+
export declare const synthesizedFunctionId: (declaration: DeclarationId, discriminator: string) => FunctionId;
|
|
30
|
+
/** One caller-supplied statement: "this declaration also has this convention, distinguished by this discriminator". */
|
|
31
|
+
export interface SynthesizedAbiRequest {
|
|
32
|
+
readonly declaration: DeclarationId;
|
|
33
|
+
/** Distinguishes two extra conventions the caller wants on the same declaration; opaque to this file. */
|
|
34
|
+
readonly discriminator: string;
|
|
35
|
+
readonly abi: CallableAbi;
|
|
36
|
+
}
|
|
37
|
+
/** Two requests named the same declaration and discriminator but disagreed about the convention. */
|
|
38
|
+
export interface SynthesizedAbiConflict {
|
|
39
|
+
readonly declaration: DeclarationId;
|
|
40
|
+
readonly discriminator: string;
|
|
41
|
+
readonly reason: string;
|
|
42
|
+
}
|
|
43
|
+
export interface SynthesizedAbiProjection {
|
|
44
|
+
readonly abis: ReadonlyMap<FunctionId, CallableAbi>;
|
|
45
|
+
readonly conflicts: readonly SynthesizedAbiConflict[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Keys every request by its identity and publishes the map.
|
|
49
|
+
*
|
|
50
|
+
* A repeated `(declaration, discriminator)` pair is not an error by itself --
|
|
51
|
+
* two callers, or one caller building its request list twice, may legitimately
|
|
52
|
+
* agree -- so it is accepted silently when the two `CallableAbi`s are the same
|
|
53
|
+
* convention (`abiKey` equal). Two *different* conventions asking to be the
|
|
54
|
+
* same identity is the one case this must not let through in silence: the
|
|
55
|
+
* `FunctionId` the map ends up publishing for that identity would depend on
|
|
56
|
+
* request order, which is exactly the "one operation, one authoritative
|
|
57
|
+
* result" invariant every other publication step in this compiler enforces,
|
|
58
|
+
* so a conflict is reported here rather than resolved by whichever request
|
|
59
|
+
* happened to run last.
|
|
60
|
+
*/
|
|
61
|
+
export declare const projectSynthesizedAbis: (requests: readonly SynthesizedAbiRequest[]) => SynthesizedAbiProjection;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { functionId } from '../identity/ids.js';
|
|
2
|
+
import { abiKey } from '../representation/model.js';
|
|
3
|
+
/**
|
|
4
|
+
* Publishing an extra calling convention for a declaration that already has
|
|
5
|
+
* one.
|
|
6
|
+
*
|
|
7
|
+
* An ordinary function's calling convention is derived, not stated: the plan
|
|
8
|
+
* selects a carrier for its `function-object` allocation, and `projectAbis`
|
|
9
|
+
* (`projection/abi.ts`) reads that carrier back as the one true ABI for the
|
|
10
|
+
* one identity `functionId` mints from its declaration. That is correct for
|
|
11
|
+
* every convention the program itself wrote, and it is exactly why it cannot
|
|
12
|
+
* be the whole answer: nothing in a checked program is obligated to write
|
|
13
|
+
* every convention a caller of this compiler might need. Something composing
|
|
14
|
+
* this compiler into a larger tool may know -- from information this compiler
|
|
15
|
+
* has no way to see, because it is not TypeScript -- that a given declaration
|
|
16
|
+
* is also reachable through one or more *additional* conventions the checked
|
|
17
|
+
* source never spells out. This compiler cannot derive such a convention
|
|
18
|
+
* (there is nothing in the program to derive it from), cannot name why it
|
|
19
|
+
* exists (that reason lives entirely outside a checked program), and must not
|
|
20
|
+
* guess at one either -- so it does neither. It only does the one part that
|
|
21
|
+
* is genuinely generic: given a convention already built by the caller, key
|
|
22
|
+
* it so it is addressable, stable across runs, and never confusable with the
|
|
23
|
+
* declaration's own ordinary convention or with a different caller's.
|
|
24
|
+
*
|
|
25
|
+
* That is the whole of this file. It has no notion of what an extra
|
|
26
|
+
* convention is *for*, does not decide which declarations get one, and does
|
|
27
|
+
* not build one from a declaration's shape -- all three are the caller's
|
|
28
|
+
* business, supplied as data (a `DeclarationId`, a `discriminator`, and an
|
|
29
|
+
* already-built `CallableAbi`) rather than inferred here. Nothing here is
|
|
30
|
+
* called during an ordinary compilation; it exists to be called by whichever
|
|
31
|
+
* later caller has that information, unconditionally on it, if any ever does.
|
|
32
|
+
*/
|
|
33
|
+
/** Escapes this identity's own field separator, exactly as `identity/ids.ts`'s own (unexported) `encode` does. */
|
|
34
|
+
const encode = (part) => part.replace(/[|]/g, '%7C');
|
|
35
|
+
/**
|
|
36
|
+
* The identity of one extra calling convention over `declaration`.
|
|
37
|
+
*
|
|
38
|
+
* `identity/ids.ts` mints every real `FunctionId` from a declaration alone
|
|
39
|
+
* (`functionId`), because an ordinary function has exactly one: the
|
|
40
|
+
* convention its own parameter list states. An extra convention is not that
|
|
41
|
+
* function -- calling it with the ordinary convention's frame would read
|
|
42
|
+
* arguments nobody pushed -- so it needs its own identity, and this compiler
|
|
43
|
+
* has no declaration to mint one from: nothing in the checked program is the
|
|
44
|
+
* extra convention. What it does have is the declaration the convention is
|
|
45
|
+
* *about*, which is real and already sealed, plus whatever the caller uses to
|
|
46
|
+
* tell two extra conventions on one declaration apart. Keying on both is what
|
|
47
|
+
* makes the result stable (the same inputs always mint the same identity),
|
|
48
|
+
* reproducible (any later reader with the same two facts can recompute it
|
|
49
|
+
* independently), and collision-free with the declaration's own convention:
|
|
50
|
+
* `functionId(declaration)` alone is never a valid identity here, because
|
|
51
|
+
* `synthesizedFunctionId` always appends a field after it, and an ordinary
|
|
52
|
+
* `FunctionId` never has one.
|
|
53
|
+
*
|
|
54
|
+
* Built from a file path, a source position, or generated text, this would
|
|
55
|
+
* silently change identity every time the program was reformatted or a
|
|
56
|
+
* function moved in the file -- the exact failure this compiler's identity
|
|
57
|
+
* scheme (`identity/ids.ts`'s own module comment) exists to rule out
|
|
58
|
+
* everywhere else. `declaration` and `discriminator` are the only two inputs
|
|
59
|
+
* to guarantee that outcome cannot happen here either.
|
|
60
|
+
*/
|
|
61
|
+
export const synthesizedFunctionId = (declaration, discriminator) => `${functionId(declaration)}|${encode(discriminator)}`;
|
|
62
|
+
/**
|
|
63
|
+
* Keys every request by its identity and publishes the map.
|
|
64
|
+
*
|
|
65
|
+
* A repeated `(declaration, discriminator)` pair is not an error by itself --
|
|
66
|
+
* two callers, or one caller building its request list twice, may legitimately
|
|
67
|
+
* agree -- so it is accepted silently when the two `CallableAbi`s are the same
|
|
68
|
+
* convention (`abiKey` equal). Two *different* conventions asking to be the
|
|
69
|
+
* same identity is the one case this must not let through in silence: the
|
|
70
|
+
* `FunctionId` the map ends up publishing for that identity would depend on
|
|
71
|
+
* request order, which is exactly the "one operation, one authoritative
|
|
72
|
+
* result" invariant every other publication step in this compiler enforces,
|
|
73
|
+
* so a conflict is reported here rather than resolved by whichever request
|
|
74
|
+
* happened to run last.
|
|
75
|
+
*/
|
|
76
|
+
export const projectSynthesizedAbis = (requests) => {
|
|
77
|
+
const abis = new Map();
|
|
78
|
+
const conflicts = [];
|
|
79
|
+
for (const request of requests) {
|
|
80
|
+
const id = synthesizedFunctionId(request.declaration, request.discriminator);
|
|
81
|
+
const existing = abis.get(id);
|
|
82
|
+
if (existing && abiKey(existing) !== abiKey(request.abi)) {
|
|
83
|
+
conflicts.push({
|
|
84
|
+
declaration: request.declaration,
|
|
85
|
+
discriminator: request.discriminator,
|
|
86
|
+
reason: `two requests name declaration ${request.declaration} under discriminator "${request.discriminator}" with different ` +
|
|
87
|
+
`calling conventions: "${abiKey(existing)}" and "${abiKey(request.abi)}"`
|
|
88
|
+
});
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
abis.set(id, request.abi);
|
|
92
|
+
}
|
|
93
|
+
return { abis, conflicts: Object.freeze(conflicts) };
|
|
94
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a key's known constant text spells a canonical array index --
|
|
3
|
+
* ECMA-262 6.1.7's own definition, the same one `gea::ArrayObject::isIndex`
|
|
4
|
+
* applies at runtime for a key that is not a compile-time constant.
|
|
5
|
+
*
|
|
6
|
+
* `keyOf` (semantics/normalize/producers/properties.ts) records a numeric
|
|
7
|
+
* *and* a string literal key identically -- `ToPropertyKey` turns `0` into the
|
|
8
|
+
* String `"0"`, so `a[0]` and `a["0"]` reach here as the same constant text --
|
|
9
|
+
* which means a constant key on an Array is never provably "not an index" by
|
|
10
|
+
* its syntax alone; the value has to be parsed the same way a computed key's
|
|
11
|
+
* runtime value would be, so a literal and a computed key never disagree on
|
|
12
|
+
* whether the same value is an index.
|
|
13
|
+
*/
|
|
14
|
+
export declare const canonicalIndexLiteral: (text: string) => string | null;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a key's known constant text spells a canonical array index --
|
|
3
|
+
* ECMA-262 6.1.7's own definition, the same one `gea::ArrayObject::isIndex`
|
|
4
|
+
* applies at runtime for a key that is not a compile-time constant.
|
|
5
|
+
*
|
|
6
|
+
* `keyOf` (semantics/normalize/producers/properties.ts) records a numeric
|
|
7
|
+
* *and* a string literal key identically -- `ToPropertyKey` turns `0` into the
|
|
8
|
+
* String `"0"`, so `a[0]` and `a["0"]` reach here as the same constant text --
|
|
9
|
+
* which means a constant key on an Array is never provably "not an index" by
|
|
10
|
+
* its syntax alone; the value has to be parsed the same way a computed key's
|
|
11
|
+
* runtime value would be, so a literal and a computed key never disagree on
|
|
12
|
+
* whether the same value is an index.
|
|
13
|
+
*/
|
|
14
|
+
export const canonicalIndexLiteral = (text) => {
|
|
15
|
+
const value = Number(text);
|
|
16
|
+
return Number.isInteger(value) && value >= 0 && value < 4294967295 && String(value) === text ? text : null;
|
|
17
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** These carriers preserve a Function object's shared property-table identity. */
|
|
2
|
+
export const isNativeCallableCarrier = (kind) => kind === 'function' ||
|
|
3
|
+
kind === 'function-family' ||
|
|
4
|
+
kind === 'function-value-family' ||
|
|
5
|
+
kind === 'function-value-dispatch' ||
|
|
6
|
+
kind === 'function-and-constructor';
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { StructuralTypeId } from '../identity/ids.js';
|
|
2
|
+
import type { StructuralShape } from '../semantics/model/structural-types.js';
|
|
3
|
+
import type { Representation } from './model.js';
|
|
4
|
+
import type { KeyedCollectionFamily, OwnershipPolicy } from './policies.js';
|
|
5
|
+
/**
|
|
6
|
+
* The carrier for the language's four keyed collections.
|
|
7
|
+
*
|
|
8
|
+
* Its own module rather than a case inside `derive.ts` for the architecture
|
|
9
|
+
* gate's 800-line ceiling, and it stays one function: `derive.ts`'s
|
|
10
|
+
* `'declared'` case hands it the already-resolved family plus the two things
|
|
11
|
+
* it cannot compute for itself -- the deriver's stored-position carrier (which
|
|
12
|
+
* is recursive, and belongs to the deriver's own memo/cycle bookkeeping) and
|
|
13
|
+
* the ownership policy.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Whether a carrier is physically a POINTER, so two values of it can be
|
|
17
|
+
* compared by reference identity.
|
|
18
|
+
*
|
|
19
|
+
* The question a weak collection asks of its key, and the only honest way to
|
|
20
|
+
* ask it here: `targets/cpp/types.ts`'s `cppOwnershipWrap` spells exactly
|
|
21
|
+
* these kinds as `std::shared_ptr<...>` when their own ownership is
|
|
22
|
+
* `shared-refcount`, and spells them as a bare value otherwise -- so the
|
|
23
|
+
* ownership is as load-bearing as the kind. A `record` held `owned` is a
|
|
24
|
+
* struct by value, and two copies of it are two objects with two addresses;
|
|
25
|
+
* using one as a weak key would look up a different entry every time.
|
|
26
|
+
* A tagged union qualifies only when every arm qualifies: its discriminant
|
|
27
|
+
* selects one arm's pointer without changing that object's identity.
|
|
28
|
+
*
|
|
29
|
+
* Stated here rather than in `model.ts` beside `alwaysTruthyKinds` because it
|
|
30
|
+
* is a fact about one BACKEND's spelling, and a target that carried these
|
|
31
|
+
* kinds differently would need a different answer. It is enforced at
|
|
32
|
+
* derivation rather than at emission for the ordinary fail-closed reason: a
|
|
33
|
+
* `WeakMap<number, T>` has no correct lowering at all, so it must never reach
|
|
34
|
+
* a certificate.
|
|
35
|
+
*/
|
|
36
|
+
export declare const hasReferenceIdentity: (representation: Representation) => boolean;
|
|
37
|
+
/**
|
|
38
|
+
* `Map<K, V>` / `Set<T>` / `WeakMap<K, V>` / `WeakSet<T>` over the concrete
|
|
39
|
+
* key and value carriers, or a NAMED refusal.
|
|
40
|
+
*
|
|
41
|
+
* This is the port of v1's `typedJsCollectionCarrierRule`
|
|
42
|
+
* (`compiler/packages/geatsc/src/targets/cpp/driver/type-carriers/typed-js-collections.ts`),
|
|
43
|
+
* and it keeps that rule's three real decisions:
|
|
44
|
+
*
|
|
45
|
+
* - all-or-nothing over the type arguments, exactly like `records.ts` /
|
|
46
|
+
* `unions.ts` / `arrays.ts` there and `deriveTuple` here: one argument
|
|
47
|
+
* that proves no carrier refuses the whole collection rather than
|
|
48
|
+
* half-sealing it;
|
|
49
|
+
* - the key is the strict position. It participates in the collection's own
|
|
50
|
+
* SameValueZero comparison, so a key with no proven equality has no
|
|
51
|
+
* proven lookup;
|
|
52
|
+
* - a Set/WeakSet's element is a key, not a payload, and is held to the
|
|
53
|
+
* same standard.
|
|
54
|
+
*
|
|
55
|
+
* A `dynamic` key or value RESOLVES here, and that is deliberate. `dynamic`
|
|
56
|
+
* is not a box over a static type -- `deriveStored` reaches it only for a
|
|
57
|
+
* position the program itself declared `any`/`unknown` and never narrowed,
|
|
58
|
+
* which is a genuine dynamic boundary and gets the real dynamic carrier. The
|
|
59
|
+
* one thing that must never happen is the reverse: a key or value the program
|
|
60
|
+
* DID give a type to must stay that type, and it does, because nothing here
|
|
61
|
+
* widens. Refusing the declared-`any` case instead was measurably wrong --
|
|
62
|
+
* `unresolved` is lattice bottom ("normalization could not name the shape"),
|
|
63
|
+
* so stating it for a shape that is perfectly well named made every consumer
|
|
64
|
+
* downstream fail closed on a carrier that had an answer; it accounted for
|
|
65
|
+
* 107 of 133 unmet obligations in the reactive runtime on its own. The C++
|
|
66
|
+
* side of admitting it is three explicit specializations in
|
|
67
|
+
* `runtime/gea_runtime.h` -- `sameValueZero<Value>`, `canonicalKey<Value>`
|
|
68
|
+
* and `weakKeySame<Value>` -- so a dynamic key is compared by the SAME
|
|
69
|
+
* ECMA-262 rules a static one is, not by a looser stand-in.
|
|
70
|
+
*
|
|
71
|
+
* The type-argument COUNT is checked against the family rather than assumed:
|
|
72
|
+
* a `Map` reached in its open generic form (the library's own declaration,
|
|
73
|
+
* which has type PARAMETERS and no arguments) has nothing concrete to
|
|
74
|
+
* specialize over, and mistaking that for a zero-argument instantiation is
|
|
75
|
+
* how a carrier for "some Map" would get minted. Same guard as v1's
|
|
76
|
+
* `checkerArguments.length !== TYPE_ARGUMENT_COUNT[family]`.
|
|
77
|
+
*/
|
|
78
|
+
export declare const deriveKeyedCollection: (family: KeyedCollectionFamily, shape: Extract<StructuralShape, {
|
|
79
|
+
kind: "declared";
|
|
80
|
+
}>,
|
|
81
|
+
/** The interned identity of `shape`, which the ownership policy is keyed by. */
|
|
82
|
+
id: StructuralTypeId,
|
|
83
|
+
/** The deriver's own stored-position carrier for one type id -- see `derive.ts`'s `deriveStored`. */
|
|
84
|
+
deriveStored: (id: StructuralTypeId) => Representation, ownership: OwnershipPolicy) => Representation;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { representationKey } from './model.js';
|
|
2
|
+
import { unresolved } from './primitives.js';
|
|
3
|
+
/**
|
|
4
|
+
* The carrier for the language's four keyed collections.
|
|
5
|
+
*
|
|
6
|
+
* Its own module rather than a case inside `derive.ts` for the architecture
|
|
7
|
+
* gate's 800-line ceiling, and it stays one function: `derive.ts`'s
|
|
8
|
+
* `'declared'` case hands it the already-resolved family plus the two things
|
|
9
|
+
* it cannot compute for itself -- the deriver's stored-position carrier (which
|
|
10
|
+
* is recursive, and belongs to the deriver's own memo/cycle bookkeeping) and
|
|
11
|
+
* the ownership policy.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Whether a carrier is physically a POINTER, so two values of it can be
|
|
15
|
+
* compared by reference identity.
|
|
16
|
+
*
|
|
17
|
+
* The question a weak collection asks of its key, and the only honest way to
|
|
18
|
+
* ask it here: `targets/cpp/types.ts`'s `cppOwnershipWrap` spells exactly
|
|
19
|
+
* these kinds as `std::shared_ptr<...>` when their own ownership is
|
|
20
|
+
* `shared-refcount`, and spells them as a bare value otherwise -- so the
|
|
21
|
+
* ownership is as load-bearing as the kind. A `record` held `owned` is a
|
|
22
|
+
* struct by value, and two copies of it are two objects with two addresses;
|
|
23
|
+
* using one as a weak key would look up a different entry every time.
|
|
24
|
+
* A tagged union qualifies only when every arm qualifies: its discriminant
|
|
25
|
+
* selects one arm's pointer without changing that object's identity.
|
|
26
|
+
*
|
|
27
|
+
* Stated here rather than in `model.ts` beside `alwaysTruthyKinds` because it
|
|
28
|
+
* is a fact about one BACKEND's spelling, and a target that carried these
|
|
29
|
+
* kinds differently would need a different answer. It is enforced at
|
|
30
|
+
* derivation rather than at emission for the ordinary fail-closed reason: a
|
|
31
|
+
* `WeakMap<number, T>` has no correct lowering at all, so it must never reach
|
|
32
|
+
* a certificate.
|
|
33
|
+
*/
|
|
34
|
+
export const hasReferenceIdentity = (representation) => {
|
|
35
|
+
if (representation.kind === 'tagged-union')
|
|
36
|
+
return representation.arms.every((arm) => hasReferenceIdentity(arm.value));
|
|
37
|
+
switch (representation.kind) {
|
|
38
|
+
case 'class-ref':
|
|
39
|
+
case 'record':
|
|
40
|
+
case 'record-with-index':
|
|
41
|
+
case 'native-record-ref':
|
|
42
|
+
case 'array-object':
|
|
43
|
+
case 'dictionary':
|
|
44
|
+
case 'typed-array':
|
|
45
|
+
case 'array-buffer':
|
|
46
|
+
case 'shared-array-buffer':
|
|
47
|
+
case 'data-view':
|
|
48
|
+
case 'keyed-collection':
|
|
49
|
+
return representation.ownership === 'shared-refcount';
|
|
50
|
+
// A `dynamic` key is admitted, and `gea::Value::identity()` is why: it is
|
|
51
|
+
// the address of the held payload, which for an object-tagged box is
|
|
52
|
+
// exactly the reference identity ECMA-262 asks for, shared by every box
|
|
53
|
+
// of that same object. `weakKeySame<Value>` in `runtime/gea_runtime.h`
|
|
54
|
+
// reads it. The divergence, stated rather than hidden: a box holding a
|
|
55
|
+
// PRIMITIVE has a per-box address, so `weakMap.has(1)` answers `false`
|
|
56
|
+
// where ECMA-262 24.3.3.3 throws a TypeError -- a wrong answer only for a
|
|
57
|
+
// program that is already illegal, and the alternative was to refuse
|
|
58
|
+
// `WeakMap<object, T>` outright, since `object` carries dynamically.
|
|
59
|
+
case 'dynamic':
|
|
60
|
+
return true;
|
|
61
|
+
default:
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* `Map<K, V>` / `Set<T>` / `WeakMap<K, V>` / `WeakSet<T>` over the concrete
|
|
67
|
+
* key and value carriers, or a NAMED refusal.
|
|
68
|
+
*
|
|
69
|
+
* This is the port of v1's `typedJsCollectionCarrierRule`
|
|
70
|
+
* (`compiler/packages/geatsc/src/targets/cpp/driver/type-carriers/typed-js-collections.ts`),
|
|
71
|
+
* and it keeps that rule's three real decisions:
|
|
72
|
+
*
|
|
73
|
+
* - all-or-nothing over the type arguments, exactly like `records.ts` /
|
|
74
|
+
* `unions.ts` / `arrays.ts` there and `deriveTuple` here: one argument
|
|
75
|
+
* that proves no carrier refuses the whole collection rather than
|
|
76
|
+
* half-sealing it;
|
|
77
|
+
* - the key is the strict position. It participates in the collection's own
|
|
78
|
+
* SameValueZero comparison, so a key with no proven equality has no
|
|
79
|
+
* proven lookup;
|
|
80
|
+
* - a Set/WeakSet's element is a key, not a payload, and is held to the
|
|
81
|
+
* same standard.
|
|
82
|
+
*
|
|
83
|
+
* A `dynamic` key or value RESOLVES here, and that is deliberate. `dynamic`
|
|
84
|
+
* is not a box over a static type -- `deriveStored` reaches it only for a
|
|
85
|
+
* position the program itself declared `any`/`unknown` and never narrowed,
|
|
86
|
+
* which is a genuine dynamic boundary and gets the real dynamic carrier. The
|
|
87
|
+
* one thing that must never happen is the reverse: a key or value the program
|
|
88
|
+
* DID give a type to must stay that type, and it does, because nothing here
|
|
89
|
+
* widens. Refusing the declared-`any` case instead was measurably wrong --
|
|
90
|
+
* `unresolved` is lattice bottom ("normalization could not name the shape"),
|
|
91
|
+
* so stating it for a shape that is perfectly well named made every consumer
|
|
92
|
+
* downstream fail closed on a carrier that had an answer; it accounted for
|
|
93
|
+
* 107 of 133 unmet obligations in the reactive runtime on its own. The C++
|
|
94
|
+
* side of admitting it is three explicit specializations in
|
|
95
|
+
* `runtime/gea_runtime.h` -- `sameValueZero<Value>`, `canonicalKey<Value>`
|
|
96
|
+
* and `weakKeySame<Value>` -- so a dynamic key is compared by the SAME
|
|
97
|
+
* ECMA-262 rules a static one is, not by a looser stand-in.
|
|
98
|
+
*
|
|
99
|
+
* The type-argument COUNT is checked against the family rather than assumed:
|
|
100
|
+
* a `Map` reached in its open generic form (the library's own declaration,
|
|
101
|
+
* which has type PARAMETERS and no arguments) has nothing concrete to
|
|
102
|
+
* specialize over, and mistaking that for a zero-argument instantiation is
|
|
103
|
+
* how a carrier for "some Map" would get minted. Same guard as v1's
|
|
104
|
+
* `checkerArguments.length !== TYPE_ARGUMENT_COUNT[family]`.
|
|
105
|
+
*/
|
|
106
|
+
export const deriveKeyedCollection = (family, shape,
|
|
107
|
+
/** The interned identity of `shape`, which the ownership policy is keyed by. */
|
|
108
|
+
id,
|
|
109
|
+
/** The deriver's own stored-position carrier for one type id -- see `derive.ts`'s `deriveStored`. */
|
|
110
|
+
deriveStored, ownership) => {
|
|
111
|
+
const pair = family === 'map' || family === 'weak-map';
|
|
112
|
+
const expected = pair ? 2 : 1;
|
|
113
|
+
if (shape.typeArguments.length !== expected) {
|
|
114
|
+
return unresolved(`${family} reached representation with ${shape.typeArguments.length} type argument(s) and needs exactly ${expected}`);
|
|
115
|
+
}
|
|
116
|
+
// `deriveStored`, not `derive`: both positions are STORED inside the
|
|
117
|
+
// collection, so they take the same storage promotion every record field
|
|
118
|
+
// and array element takes. v1 spelled this as its own
|
|
119
|
+
// `typedJsCollectionMapValueCarrier`/`typedJsCollectionSetElementCarrier`
|
|
120
|
+
// promotion for the identical reason (a record or callable held in a
|
|
121
|
+
// collection has exactly one legal physical storage form).
|
|
122
|
+
const key = deriveStored(shape.typeArguments[0]);
|
|
123
|
+
const value = pair ? deriveStored(shape.typeArguments[1]) : null;
|
|
124
|
+
if (key.kind === 'unresolved')
|
|
125
|
+
return unresolved(`a ${family} key carries no representation: ${key.reason}`);
|
|
126
|
+
if (value?.kind === 'unresolved')
|
|
127
|
+
return unresolved(`a ${family} value carries no representation: ${value.reason}`);
|
|
128
|
+
// A weak collection's key must be a REFERENCE. ECMA-262 24.3/24.4 admit
|
|
129
|
+
// only objects (and, since ES2023, unregistered symbols) as weak keys, and
|
|
130
|
+
// this runtime's weak families compare keys by pointer identity -- so a
|
|
131
|
+
// key carried by value (a `double`, a `std::string`) has no pointer to
|
|
132
|
+
// compare and would silently become an ordinary equality map wearing the
|
|
133
|
+
// weak name. See `gea::WeakMap` in `runtime/gea_runtime.h`.
|
|
134
|
+
if ((family === 'weak-map' || family === 'weak-set') && !hasReferenceIdentity(key)) {
|
|
135
|
+
return unresolved(`a ${family} key carried as "${representationKey(key)}" has no reference identity; ECMA-262 24.3/24.4 admit only ` +
|
|
136
|
+
'objects as weak keys, and this runtime compares a weak key by pointer');
|
|
137
|
+
}
|
|
138
|
+
return { kind: 'keyed-collection', family, key, value, ownership: ownership.forShape(shape, id) };
|
|
139
|
+
};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import type { FunctionId, StructuralTypeId } from '../identity/ids.js';
|
|
2
|
+
import { type SelectedSignature } from '../semantics/model/selected-signature.js';
|
|
3
|
+
import type { SignatureShape, StructuralType } from '../semantics/model/structural-types.js';
|
|
4
|
+
import type { CallableAbi, Representation } from './model.js';
|
|
5
|
+
import type { DateDeclarationPolicy, HostBindingPolicy, HostNamespaceRootPolicy, KeyedCollectionPolicy, OwnershipPolicy, PromiseDeclarationPolicy, GeneratorDeclarationPolicy, RegExpDeclarationPolicy, StandardBufferPolicy, StringObjectDeclarationPolicy, ErrorDeclarationPolicy, FunctionDeclarationPolicy, ClassHeritagePolicy, ClassCopyPolicy, InterfaceImplementorPolicy, TypedArrayElementPolicy, ValueRecordPolicy } from './policies.js';
|
|
6
|
+
import { defaultClassCopyPolicy, defaultDateDeclarationPolicy, defaultHostBindingPolicy, defaultHostNamespaceRootPolicy, defaultKeyedCollectionPolicy, defaultOwnershipPolicy, defaultPromiseDeclarationPolicy, defaultGeneratorDeclarationPolicy, defaultRegExpDeclarationPolicy, defaultStandardBufferPolicy, defaultStringObjectDeclarationPolicy, defaultErrorDeclarationPolicy, defaultFunctionDeclarationPolicy, defaultClassHeritagePolicy, defaultInterfaceImplementorPolicy, defaultTypedArrayElementPolicy, defaultValueRecordPolicy } from './policies.js';
|
|
7
|
+
export type { DateDeclarationPolicy, HostBindingPolicy, HostNamespaceRootPolicy, HostProtocolBinding, KeyedCollectionFamily, KeyedCollectionPolicy, OwnershipPolicy, PromiseDeclarationPolicy, GeneratorDeclarationPolicy, RegExpDeclarationBinding, RegExpDeclarationKind, RegExpDeclarationPolicy, StandardBufferKind, StandardBufferPolicy, StringObjectDeclarationPolicy, ErrorDeclarationPolicy, FunctionDeclarationPolicy, ClassHeritagePolicy, ClassCopyPolicy, InterfaceImplementorPolicy, TypedArrayElementPolicy, ValueRecordPolicy } from './policies.js';
|
|
8
|
+
export { defaultClassCopyPolicy, defaultDateDeclarationPolicy, defaultHostBindingPolicy, defaultHostNamespaceRootPolicy, defaultKeyedCollectionPolicy, defaultOwnershipPolicy, defaultPromiseDeclarationPolicy, defaultGeneratorDeclarationPolicy, defaultRegExpDeclarationPolicy, defaultStandardBufferPolicy, defaultStringObjectDeclarationPolicy, defaultErrorDeclarationPolicy, defaultFunctionDeclarationPolicy, defaultClassHeritagePolicy, defaultInterfaceImplementorPolicy, defaultTypedArrayElementPolicy, defaultValueRecordPolicy };
|
|
9
|
+
/**
|
|
10
|
+
* Selecting a physical carrier for a canonical structural shape.
|
|
11
|
+
*
|
|
12
|
+
* This is the only place a shape becomes a carrier, and it reads nothing but the
|
|
13
|
+
* sealed structural table. It never consults the AST, a name, or a print form:
|
|
14
|
+
* if a carrier cannot be selected from the shape alone, the shape did not carry
|
|
15
|
+
* enough and the answer is `unresolved` with a reason, never a guess.
|
|
16
|
+
* `unresolved` here is not failure -- it is the fail-closed answer that stops a
|
|
17
|
+
* half-known value from reaching materialization. The opt-in fallback also
|
|
18
|
+
* admits runtime-erased type expressions and proxy-connected types, selected
|
|
19
|
+
* before publication. Missing structure remains unresolved in both modes.
|
|
20
|
+
*/
|
|
21
|
+
export interface RepresentationDeriver {
|
|
22
|
+
readonly dynamicFallback?: boolean;
|
|
23
|
+
readonly derive: (type: StructuralTypeId) => Representation;
|
|
24
|
+
/**
|
|
25
|
+
* The LAYOUT a shape id names, for a lookup that holds a `native-record-ref`
|
|
26
|
+
* (or a `class-ref`, or a tuple's shape) and needs its fields -- as opposed
|
|
27
|
+
* to `derive`, which is the carrier a VALUE of that type occupies. For every
|
|
28
|
+
* shape but one the two are the same answer. The exception is an anonymous
|
|
29
|
+
* record that contains itself (`nameSelfReferencedRecord`): `derive` spells
|
|
30
|
+
* it by name at every value position so its key does not depend on walk
|
|
31
|
+
* order, and this is where its record definition is still served from.
|
|
32
|
+
* Every "what fields does this shape have" question must ask here, never
|
|
33
|
+
* `derive`, or it reads the name back and finds no fields.
|
|
34
|
+
*/
|
|
35
|
+
readonly layoutOf: (type: StructuralTypeId) => Representation;
|
|
36
|
+
/** The ABI of one signature shape, or `null` when its arity is not physical. */
|
|
37
|
+
readonly abiOf: (signature: SignatureShape) => CallableAbi | null;
|
|
38
|
+
/**
|
|
39
|
+
* The carrier a *stored* position holds -- see `primitives.ts`'s
|
|
40
|
+
* `storedCarrier`. Exposed alongside `derive` because a stored position is
|
|
41
|
+
* not only something this deriver builds internally (a record field, an
|
|
42
|
+
* array element, a parameter's ABI slot): any external caller asking "what
|
|
43
|
+
* does this cell physically hold" -- a binding's own storage, not a
|
|
44
|
+
* transient expression result -- needs the identical `void`-is-`undefined`
|
|
45
|
+
* correction `abiOf` already applies to every parameter slot, and had no
|
|
46
|
+
* way to ask for it before this was added.
|
|
47
|
+
*/
|
|
48
|
+
readonly deriveStored: (type: StructuralTypeId) => Representation;
|
|
49
|
+
/**
|
|
50
|
+
* Whether a structural type's own shape is the primitive `never` --
|
|
51
|
+
* distinct from asking whether its *carrier* is `{kind:'void'}`, which
|
|
52
|
+
* `never` and a genuine completed-void evaluation share on purpose
|
|
53
|
+
* (`primitives.ts`'s own comment: "physically both occupy no storage").
|
|
54
|
+
* That equivalence is correct for storage and wrong for reachability: a
|
|
55
|
+
* position whose structural type is `never` is provably never reached, so
|
|
56
|
+
* an operation performed on it (a property read, an `instanceof` test, a
|
|
57
|
+
* conversion) is dead code, while an operation on a genuine `void` result
|
|
58
|
+
* is not. Consumers that need to tell "unreachable" from "a completed
|
|
59
|
+
* evaluation with no result" must ask this, not compare carrier kinds.
|
|
60
|
+
*/
|
|
61
|
+
readonly isNeverType: (type: StructuralTypeId) => boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Whether a shape is a CLOSED TUPLE -- the one record layout whose values
|
|
64
|
+
* are Array exotic objects in the language.
|
|
65
|
+
*
|
|
66
|
+
* "There is deliberately no tuple carrier: a closed tuple is a record whose
|
|
67
|
+
* keys are its indices", which is the right physical answer and loses the
|
|
68
|
+
* one non-physical fact 23.1.2.2 asks for. `Array.isArray` is decided from
|
|
69
|
+
* the carrier's kind alone (`isArrayConstantOf`), and `record` is in that
|
|
70
|
+
* table's `false` set because an object literal is not an Array -- so a
|
|
71
|
+
* tuple, whose record is indistinguishable from one, was answered `false`
|
|
72
|
+
* for a value the language says `true` for. hono's trie router is the
|
|
73
|
+
* measured case: `Pattern = readonly [string, string, RegExp | true] | '*'`
|
|
74
|
+
* and `Array.isArray(pattern) ? pattern[0] : p` folded to the string arm at
|
|
75
|
+
* compile time, so no parameterized route would ever have been registered.
|
|
76
|
+
*
|
|
77
|
+
* Asked of the SHAPE rather than carried on the carrier on purpose: the
|
|
78
|
+
* record's layout is genuinely the same either way, and a flag on the
|
|
79
|
+
* representation would make two physically identical carriers compare
|
|
80
|
+
* unequal everywhere conversions and the certificate key them.
|
|
81
|
+
*/
|
|
82
|
+
readonly isTupleShape: (type: StructuralTypeId) => boolean;
|
|
83
|
+
/**
|
|
84
|
+
* The calling convention of one checker-authenticated source function that
|
|
85
|
+
* semantic publication registered for dynamic Function-object storage.
|
|
86
|
+
* StructuralTypeId is intentionally not accepted: unrelated functions can
|
|
87
|
+
* share one signature shape and may never borrow each other's ABI.
|
|
88
|
+
*/
|
|
89
|
+
readonly nativeCallableConventions: (functionId: FunctionId) => {
|
|
90
|
+
call: CallableAbi;
|
|
91
|
+
construct: CallableAbi | null;
|
|
92
|
+
} | null;
|
|
93
|
+
/**
|
|
94
|
+
* Whether a carrier is the standard `Date`. The C++ spelling a Date is
|
|
95
|
+
* carried in is a fact this layer only carries (`DateDeclarationPolicy`),
|
|
96
|
+
* so the one place that can say "this `native-record-ref` is a Date" is
|
|
97
|
+
* the deriver that stamped the spelling on. The slot census asks, because
|
|
98
|
+
* ECMA-262 ToPrimitive of a Date prefers `valueOf` where every other object
|
|
99
|
+
* this compiler carries has only `toString` to fall through to -- a
|
|
100
|
+
* mixed-carrier `+`/`<` over a Date is not the ToString answer.
|
|
101
|
+
*/
|
|
102
|
+
readonly isDateCarrier?: (representation: Representation) => boolean;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The `SignatureShape` a checker-resolved invocation actually calls.
|
|
106
|
+
*
|
|
107
|
+
* A callee's own declared type is an overload *set*, and `sharedAbiOf` below
|
|
108
|
+
* correctly refuses to join it into one convention when the overloads are not
|
|
109
|
+
* physically identical -- that is not a gap, it is the honest fact that one
|
|
110
|
+
* value's general-purpose carrier has no single calling convention to state.
|
|
111
|
+
* A call site is a different question: the checker already resolved it to
|
|
112
|
+
* exactly one signature (`InvocationOperation.selectedSignature`,
|
|
113
|
+
* `semantics/model/selected-signature.ts`), with no sibling overload left to
|
|
114
|
+
* disagree with it, and `SelectedSignature` already carries every field
|
|
115
|
+
* `abiOf` needs to answer that question -- it is a `SignatureShape` under
|
|
116
|
+
* `returnType` instead of `result`. Naming that correspondence here, instead
|
|
117
|
+
* of leaving it as an unstated coincidence two field lists happen to share, is
|
|
118
|
+
* what makes it the one thing an invocation lowering has to reach for instead
|
|
119
|
+
* of a joined lowest-common-denominator carrier it was never going to get.
|
|
120
|
+
*/
|
|
121
|
+
export declare const signatureShapeOfSelectedSignature: (signature: SelectedSignature) => SignatureShape;
|
|
122
|
+
/**
|
|
123
|
+
* The frame one `new` of a host constructor fills, read off the overload the
|
|
124
|
+
* checker selected at that site -- the construct-side use of
|
|
125
|
+
* `signatureShapeOfSelectedSignature` above.
|
|
126
|
+
*
|
|
127
|
+
* `hostInvocationAbiOf` answers for the constructor VALUE, and for
|
|
128
|
+
* `MapConstructor` (`new ()` beside `new <K, V>(entries?)`),
|
|
129
|
+
* `WeakMapConstructor` (generic, plus an `Iterable` overload) and every
|
|
130
|
+
* typed-array constructor (`length` / `ArrayLike<number>` / `buffer,
|
|
131
|
+
* byteOffset?, length?`) it correctly answers "no single convention". Yet
|
|
132
|
+
* every three.js renderer module builds its cache as `new WeakMap()` or
|
|
133
|
+
* `new Map()` (`WebGLProperties`, `WebGLRenderStates`, `WebGLShaderCache`,
|
|
134
|
+
* `WebGLGeometries`, ...), and each of those SITES resolved to exactly one
|
|
135
|
+
* overload. Without a frame to test, the reflection census read each of them
|
|
136
|
+
* as an unknown construction and published the new collection's key and
|
|
137
|
+
* value carriers -- every field of every render-state record they hold.
|
|
138
|
+
*
|
|
139
|
+
* Only the formals the site FILLS are laid out. A formal the site omits is
|
|
140
|
+
* optional by the checker's own resolution (`minimumArity`), the host
|
|
141
|
+
* construction reads its absence itself (`emitKeyedCollectionConstruct`'s
|
|
142
|
+
* zero-argument `gea::makeRef<T>()`), and no value is transported into it --
|
|
143
|
+
* so it states nothing about the frame and, for a generic overload, never has
|
|
144
|
+
* to be instantiated. A FILLED formal of a generic overload whose type
|
|
145
|
+
* arguments the checker inferred is refused: `instantiatedParameterTypes`
|
|
146
|
+
* withholds those on purpose, and reconstructing them here would be the
|
|
147
|
+
* rediscovery that authority exists to prevent. A rest formal has no fixed
|
|
148
|
+
* position to lay out and is refused with it.
|
|
149
|
+
*
|
|
150
|
+
* The result is the carrier the construction itself holds, not the
|
|
151
|
+
* signature's return type: the checker defaults `new WeakMap()` to
|
|
152
|
+
* `WeakMap<WeakKey, any>` while the collection census bound the key and value
|
|
153
|
+
* the program actually stores (`collection-construct-type-inference`), and the
|
|
154
|
+
* host renderer mints the held carrier directly. That is how a generic
|
|
155
|
+
* overload's K/V are instantiated here -- from the construction's own result,
|
|
156
|
+
* never from argument syntax.
|
|
157
|
+
*/
|
|
158
|
+
export declare const selectedHostConstructFrameOf: (deriver: Pick<RepresentationDeriver, "abiOf">, signature: SelectedSignature, received: number, result: Representation) => CallableAbi | null;
|
|
159
|
+
export declare const createRepresentationDeriver: (types: ReadonlyMap<StructuralTypeId, StructuralType>, ownership?: OwnershipPolicy, binding?: HostBindingPolicy, elements?: TypedArrayElementPolicy, promise?: PromiseDeclarationPolicy, collections?: KeyedCollectionPolicy, buffers?: StandardBufferPolicy, namespaceRoots?: HostNamespaceRootPolicy, date?: DateDeclarationPolicy, generator?: GeneratorDeclarationPolicy, regexp?: RegExpDeclarationPolicy, stringObject?: StringObjectDeclarationPolicy, functionType?: FunctionDeclarationPolicy, heritage?: ClassHeritagePolicy, valueRecords?: ValueRecordPolicy, implementors?: InterfaceImplementorPolicy, errors?: ErrorDeclarationPolicy, dynamicFallback?: boolean, dynamicFallbackTypes?: ReadonlySet<StructuralTypeId>, dynamicCallableShapes?: ReadonlyMap<FunctionId, StructuralTypeId>, dynamicWrittenTypes?: ReadonlySet<StructuralTypeId>, classCopies?: ClassCopyPolicy) => RepresentationDeriver;
|