@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,307 @@
|
|
|
1
|
+
import { sharedPrimitiveDomainOf } from './primitive-domain.js';
|
|
2
|
+
/**
|
|
3
|
+
* The object types this program may carry BY VALUE rather than behind a
|
|
4
|
+
* refcounted handle.
|
|
5
|
+
*
|
|
6
|
+
* A JavaScript object is a reference: two names for one object see each
|
|
7
|
+
* other's writes, and `a === b` answers whether they are that one object. A
|
|
8
|
+
* C++ struct held by value has neither property, so carrying a record by value
|
|
9
|
+
* is sound exactly when the program cannot tell the difference -- and this is
|
|
10
|
+
* the proof of that, computed once over the whole graph before any carrier is
|
|
11
|
+
* derived.
|
|
12
|
+
*
|
|
13
|
+
* Three facts make the difference unobservable, and all three are required:
|
|
14
|
+
*
|
|
15
|
+
* - **Nothing ever writes a field of it.** A record built once and only read
|
|
16
|
+
* has no write for a second reference to observe, so a copy and the
|
|
17
|
+
* original stay equal forever. This is the condition that does the work:
|
|
18
|
+
* one `o.x = 1` anywhere in the program on this type disqualifies it.
|
|
19
|
+
* - **Nothing compares it by identity.** `===` on two objects asks which
|
|
20
|
+
* object, not which value; copies answer that question differently.
|
|
21
|
+
* - **Every field is a primitive.** A field that is itself a reference would
|
|
22
|
+
* make the copy share what it points at, which is the aliasing question
|
|
23
|
+
* again one level down; and a field of its own type would make the struct
|
|
24
|
+
* contain itself, which has no size.
|
|
25
|
+
*
|
|
26
|
+
* What this buys is the layout the fixture comment in
|
|
27
|
+
* `bench/comparison/fixtures/object_create.ts` describes: a `Point[]` becomes a
|
|
28
|
+
* contiguous `std::vector` of structs, with no per-object allocation and no
|
|
29
|
+
* refcount traffic on a store -- exactly what the hand-written C++ baseline
|
|
30
|
+
* does, and what `gea::Ref<Point>` per element cannot.
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* The set holds only OBJECT shape ids -- never the declared name of one. A
|
|
34
|
+
* declared name derives a `native-record-ref`, whose whole purpose is that the
|
|
35
|
+
* layout is NOT expanded here, and a by-value carrier for an unexpanded name is
|
|
36
|
+
* an incomplete type: twelve corpus programs stopped compiling the first time
|
|
37
|
+
* an alias was admitted. `derive.ts`'s `'declared'` case reaches the value
|
|
38
|
+
* record by DELEGATING to its body instead, which is the only place that knows
|
|
39
|
+
* a name can be expanded safely.
|
|
40
|
+
*/
|
|
41
|
+
/** How wide a struct may get before copying it stops being cheaper than sharing it. */
|
|
42
|
+
const maximumValueFields = 8;
|
|
43
|
+
/**
|
|
44
|
+
* What a container type carries, one level deep -- `Point[]` carries `Point`.
|
|
45
|
+
*
|
|
46
|
+
* `array` is its own shape kind with an `element`, NOT a `declared` `Array<T>`
|
|
47
|
+
* with a type argument, and reading only the latter is why `RailStore.items`
|
|
48
|
+
* looked like it held nothing: the whole point of the walk that consumes this
|
|
49
|
+
* is to reach a record through the array a class stores it in.
|
|
50
|
+
*/
|
|
51
|
+
const typeArgumentsOf = (graph, id) => {
|
|
52
|
+
const shape = graph.structuralTypes.get(id)?.shape;
|
|
53
|
+
if (!shape)
|
|
54
|
+
return new Set();
|
|
55
|
+
if (shape.kind === 'array')
|
|
56
|
+
return new Set([shape.element]);
|
|
57
|
+
if (shape.kind === 'tuple')
|
|
58
|
+
return new Set(shape.elements.map((element) => element.type));
|
|
59
|
+
if (shape.kind === 'declared' || shape.kind === 'class-instance')
|
|
60
|
+
return new Set(shape.typeArguments);
|
|
61
|
+
return new Set();
|
|
62
|
+
};
|
|
63
|
+
/** Object shapes reachable from a type that a mutation or an identity test named. */
|
|
64
|
+
const objectCoresOf = (graph, id, into) => {
|
|
65
|
+
if (into.has(id))
|
|
66
|
+
return;
|
|
67
|
+
into.add(id);
|
|
68
|
+
const shape = graph.structuralTypes.get(id)?.shape;
|
|
69
|
+
if (!shape)
|
|
70
|
+
return;
|
|
71
|
+
// A named type stands for its body, and the body is the id a record carrier
|
|
72
|
+
// is keyed by -- so a write through the NAME has to reach the layout the
|
|
73
|
+
// name stands for, or `type Point = {...}` would be judged immutable while
|
|
74
|
+
// `p.x = 1` sits in the program.
|
|
75
|
+
if (shape.kind === 'declared' && shape.body !== null)
|
|
76
|
+
objectCoresOf(graph, shape.body, into);
|
|
77
|
+
if (shape.kind === 'union' || shape.kind === 'intersection')
|
|
78
|
+
for (const member of shape.members)
|
|
79
|
+
objectCoresOf(graph, member, into);
|
|
80
|
+
};
|
|
81
|
+
/** Whether every member of this object shape is a primitive-shaped, required field. */
|
|
82
|
+
const isFlatData = (graph, shape) => {
|
|
83
|
+
if (shape.members.length === 0 || shape.members.length > maximumValueFields)
|
|
84
|
+
return false;
|
|
85
|
+
if (shape.index.length > 0 || shape.membersDropped)
|
|
86
|
+
return false;
|
|
87
|
+
return shape.members.every((member) => {
|
|
88
|
+
if (member.accessor !== null || member.optional || member.key.kind !== 'string')
|
|
89
|
+
return false;
|
|
90
|
+
// A field is primitive DATA when every value it can hold is of one
|
|
91
|
+
// primitive -- which a union of literals of that primitive is, and which
|
|
92
|
+
// `sharedPrimitiveDomainOf` is the one authority on. Reading only
|
|
93
|
+
// `kind === 'primitive'` judged `CameraDevice`'s `facing: 'front' | 'back' |
|
|
94
|
+
// 'external'` a reference, so a `CameraDevice[]` allocated a `gea::Ref` per
|
|
95
|
+
// element for a struct of two strings -- and the deriver carries that field
|
|
96
|
+
// as one `std::string`, which is exactly what the same authority says.
|
|
97
|
+
const domain = sharedPrimitiveDomainOf((id) => graph.structuralTypes.get(id)?.shape, graph.structuralTypes.get(member.type)?.shape);
|
|
98
|
+
return domain !== null && domain !== 'symbol';
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
export const valueRecordTypesOf = (graph) => {
|
|
102
|
+
const disqualified = new Set();
|
|
103
|
+
/** Whether this operand names the result of an allocation -- the object being built. */
|
|
104
|
+
const namesFreshObject = (operand) => {
|
|
105
|
+
if (operand.source.kind !== 'result')
|
|
106
|
+
return false;
|
|
107
|
+
const producer = graph.results.get(operand.source.result);
|
|
108
|
+
return producer !== undefined && graph.operations.get(producer)?.family === 'allocation';
|
|
109
|
+
};
|
|
110
|
+
/** The call signatures a type carries, resolved through a declared name or a union of callables. */
|
|
111
|
+
const signatureShapesOf = (id, seen = new Set()) => {
|
|
112
|
+
if (seen.has(id))
|
|
113
|
+
return [];
|
|
114
|
+
seen.add(id);
|
|
115
|
+
const shape = graph.structuralTypes.get(id)?.shape;
|
|
116
|
+
if (!shape)
|
|
117
|
+
return [];
|
|
118
|
+
if (shape.kind === 'signature')
|
|
119
|
+
return shape.call;
|
|
120
|
+
if (shape.kind === 'declared' && shape.body !== null)
|
|
121
|
+
return signatureShapesOf(shape.body, seen);
|
|
122
|
+
if (shape.kind === 'union')
|
|
123
|
+
return shape.members.flatMap((member) => signatureShapesOf(member, seen));
|
|
124
|
+
return [];
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* A callable escaping this compiler's view is exactly as much a boundary for
|
|
128
|
+
* its OWN return and parameter types as the operand a `dynamic-language`/
|
|
129
|
+
* `boundary`/`protocol` operation touches is for ITS type, just one hop
|
|
130
|
+
* further out -- nothing about a value record's three conditions (top of
|
|
131
|
+
* this file) changes once the record is reached only by calling a function
|
|
132
|
+
* dynamically instead of by naming it directly. Runtime-side, this is the
|
|
133
|
+
* same boundary `gea_runtime.h`'s `DynamicCarrier`/`DynamicCallableCarrier`
|
|
134
|
+
* describe: their closed carrier set has a rule for `gea::Ref<T>` and never
|
|
135
|
+
* for a bare record, so a callable's record-typed result or parameter that
|
|
136
|
+
* is not disqualified here reaches `gea::CallableObject<...>` stored BY
|
|
137
|
+
* VALUE, which `nativeCallOpsFor` then refuses to adapt at all -- aborting
|
|
138
|
+
* the first dynamic call, not merely mis-copying one.
|
|
139
|
+
*/
|
|
140
|
+
const disqualifyCallable = (id) => {
|
|
141
|
+
for (const signature of signatureShapesOf(id)) {
|
|
142
|
+
objectCoresOf(graph, signature.result, disqualified);
|
|
143
|
+
for (const parameter of signature.parameters)
|
|
144
|
+
objectCoresOf(graph, parameter.type, disqualified);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
for (const operation of graph.operations.values()) {
|
|
148
|
+
// A `VariableDeclaration` with an initializer is the one binding shape
|
|
149
|
+
// whose operand and result can carry two DIFFERENT types: `initializer`
|
|
150
|
+
// reads `typeAt(initializer)`, the value's own concrete type, while the
|
|
151
|
+
// result reads `typeAt(node)`, the declaration's -- see
|
|
152
|
+
// `contributeVariableDeclaration` in `producers/bindings.ts`. Every other
|
|
153
|
+
// binding shape (a plain parameter, a destructured element, a plain `x =
|
|
154
|
+
// expr` write) reuses ONE type for both, so this never fires for them.
|
|
155
|
+
//
|
|
156
|
+
// Gated on the RESULT resolving to `any`/`unknown` specifically, not on
|
|
157
|
+
// the two types merely differing: an ordinary typed widening (`let n:
|
|
158
|
+
// number = 5 as const`, a literal into its declared interface where
|
|
159
|
+
// `recordStorageFamilies` did not happen to connect the two Type objects)
|
|
160
|
+
// differs by identity constantly without being an escape, and disqualifying
|
|
161
|
+
// on that alone moved well over a hundred unrelated programs' emitted
|
|
162
|
+
// output measured against `npm run gate`. `any`/`unknown` is the one
|
|
163
|
+
// declared type this compiler can never narrow back to the operand's own
|
|
164
|
+
// shape, which is exactly the condition a second, differently-typed name
|
|
165
|
+
// for this cell needs to retain the object after this rule's proof.
|
|
166
|
+
if (operation.family === 'binding') {
|
|
167
|
+
if (operation.action !== 'initialize' && operation.action !== 'write')
|
|
168
|
+
continue;
|
|
169
|
+
const result = operation.results[0];
|
|
170
|
+
if (!result)
|
|
171
|
+
continue;
|
|
172
|
+
const resultShape = graph.structuralTypes.get(result.type)?.shape;
|
|
173
|
+
const resultIsDynamic = resultShape?.kind === 'primitive' && (resultShape.primitive === 'any' || resultShape.primitive === 'unknown');
|
|
174
|
+
if (!resultIsDynamic)
|
|
175
|
+
continue;
|
|
176
|
+
for (const operand of operation.operands) {
|
|
177
|
+
if (operand.type === result.type)
|
|
178
|
+
continue;
|
|
179
|
+
objectCoresOf(graph, operand.type, disqualified);
|
|
180
|
+
disqualifyCallable(operand.type);
|
|
181
|
+
}
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (operation.family === 'property') {
|
|
185
|
+
if (operation.internalMethod === 'get' || operation.internalMethod === 'has-property')
|
|
186
|
+
continue;
|
|
187
|
+
if (operation.internalMethod === 'own-property-keys')
|
|
188
|
+
continue;
|
|
189
|
+
const receiver = operation.operands.find((operand) => operand.role === 'receiver');
|
|
190
|
+
if (!receiver)
|
|
191
|
+
continue;
|
|
192
|
+
// `define-own-property` is how an object LITERAL installs its own fields,
|
|
193
|
+
// so every record in the program carries one and reading it as a mutation
|
|
194
|
+
// disqualifies all of them. The write that matters is one aimed at an
|
|
195
|
+
// object that already exists; a definition on the allocation's own result
|
|
196
|
+
// is the construction itself.
|
|
197
|
+
if (operation.internalMethod === 'define-own-property' && namesFreshObject(receiver))
|
|
198
|
+
continue;
|
|
199
|
+
objectCoresOf(graph, receiver.type, disqualified);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
// A call the compiler does not itself compile can RETAIN what it was
|
|
203
|
+
// handed -- `gea::jsx::reactiveChild` keeps a pointer to the object and a
|
|
204
|
+
// member-pointer into it, so a by-value copy would leave it observing
|
|
205
|
+
// storage that has gone -- and no signature here says which host does.
|
|
206
|
+
// Only a call whose target is exactly one function of this program is
|
|
207
|
+
// admitted, because that function's own body compiles against the same
|
|
208
|
+
// carrier and its copy is the value the language already promises.
|
|
209
|
+
if (operation.family === 'invocation') {
|
|
210
|
+
const target = operation.target;
|
|
211
|
+
if (target.kind === 'exact' && target.target.kind === 'function')
|
|
212
|
+
continue;
|
|
213
|
+
const receiver = operation.operands.find((operand) => operand.role === 'receiver');
|
|
214
|
+
const carried = receiver ? typeArgumentsOf(graph, receiver.type) : new Set();
|
|
215
|
+
for (const operand of operation.operands) {
|
|
216
|
+
// A container's own method handed one of its ELEMENTS is not an
|
|
217
|
+
// escape: the element type is what the container stores, so the copy
|
|
218
|
+
// the call makes is the copy the container was always going to hold.
|
|
219
|
+
// `ring.push({ x, y, z })` is the whole shape of a value record's use.
|
|
220
|
+
if (operand.role === 'argument' && carried.has(operand.type))
|
|
221
|
+
continue;
|
|
222
|
+
objectCoresOf(graph, operand.type, disqualified);
|
|
223
|
+
}
|
|
224
|
+
for (const result of operation.results)
|
|
225
|
+
objectCoresOf(graph, result.type, disqualified);
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
// An identity test, and every boundary an object can leave this compiler's
|
|
229
|
+
// view through: a dynamic-language operation and a protocol step can both
|
|
230
|
+
// retain what they were handed, and a retained copy is a second object.
|
|
231
|
+
const identityTest = operation.family === 'computation' && operation.form === 'equality';
|
|
232
|
+
if (!identityTest && operation.family !== 'dynamic-language' && operation.family !== 'boundary' && operation.family !== 'protocol')
|
|
233
|
+
continue;
|
|
234
|
+
for (const operand of operation.operands) {
|
|
235
|
+
objectCoresOf(graph, operand.type, disqualified);
|
|
236
|
+
disqualifyCallable(operand.type);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// An object held in a CLASS's state is not a private local. This compiler's
|
|
240
|
+
// reactive layer binds a component's field, and the ELEMENTS of a reactive
|
|
241
|
+
// array with it, by reference -- `gea::jsx::reactiveChild` takes a
|
|
242
|
+
// `const gea::Ref<Owner>&` and a member pointer INTO the object, so a
|
|
243
|
+
// by-value copy would leave it observing storage that has gone.
|
|
244
|
+
// `examples/reactive-nested-probe`'s `RailItem` is exactly that: a flat,
|
|
245
|
+
// never-written interface that is also `RailStore.items`' element type.
|
|
246
|
+
//
|
|
247
|
+
// A class is identified by having a CONSTRUCTOR shape, which is what keeps
|
|
248
|
+
// this from reading every interface: `Array<Point>`'s own body declares
|
|
249
|
+
// `pop(): Point | undefined`, so walking interfaces would disqualify the
|
|
250
|
+
// element type of every array in every program.
|
|
251
|
+
const classDeclarations = new Set();
|
|
252
|
+
for (const type of graph.structuralTypes.values())
|
|
253
|
+
if (type.shape.kind === 'class-constructor')
|
|
254
|
+
classDeclarations.add(type.shape.declaration);
|
|
255
|
+
for (const type of graph.structuralTypes.values()) {
|
|
256
|
+
const shape = type.shape;
|
|
257
|
+
if (shape.kind !== 'class-instance' && shape.kind !== 'declared')
|
|
258
|
+
continue;
|
|
259
|
+
if (!classDeclarations.has(shape.declaration) || shape.body === null)
|
|
260
|
+
continue;
|
|
261
|
+
const body = graph.structuralTypes.get(shape.body)?.shape;
|
|
262
|
+
if (body?.kind !== 'object')
|
|
263
|
+
continue;
|
|
264
|
+
for (const member of body.members) {
|
|
265
|
+
objectCoresOf(graph, member.type, disqualified);
|
|
266
|
+
disqualifyCallable(member.type);
|
|
267
|
+
for (const argument of typeArgumentsOf(graph, member.type))
|
|
268
|
+
objectCoresOf(graph, argument, disqualified);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// A record disqualified above can itself have METHODS -- a member whose
|
|
272
|
+
// type is a call signature -- and once the record escapes (dynamically, by
|
|
273
|
+
// identity, by mutation, whatever this file already proved), those methods
|
|
274
|
+
// are exactly as callable from outside this compiler's view as the record's
|
|
275
|
+
// fields are readable, so their own return/parameter records need the same
|
|
276
|
+
// proof. This is a separate propagation from the two loops above because a
|
|
277
|
+
// record's disqualification and its method's callable TYPE are two
|
|
278
|
+
// different structural ids, connected only through `StructuralMember` --
|
|
279
|
+
// and it runs to a fixed point because disqualifying a NEWLY found nested
|
|
280
|
+
// record can itself have methods that still need the same treatment.
|
|
281
|
+
let disqualifiedMethodsChanged = true;
|
|
282
|
+
while (disqualifiedMethodsChanged) {
|
|
283
|
+
disqualifiedMethodsChanged = false;
|
|
284
|
+
for (const id of [...disqualified]) {
|
|
285
|
+
const shape = graph.structuralTypes.get(id)?.shape;
|
|
286
|
+
if (shape?.kind !== 'object')
|
|
287
|
+
continue;
|
|
288
|
+
for (const member of shape.members) {
|
|
289
|
+
const before = disqualified.size;
|
|
290
|
+
disqualifyCallable(member.type);
|
|
291
|
+
if (disqualified.size > before)
|
|
292
|
+
disqualifiedMethodsChanged = true;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
const value = new Set();
|
|
297
|
+
for (const [id, type] of graph.structuralTypes) {
|
|
298
|
+
if (type.shape.kind !== 'object')
|
|
299
|
+
continue;
|
|
300
|
+
if (disqualified.has(id))
|
|
301
|
+
continue;
|
|
302
|
+
if (!isFlatData(graph, type.shape))
|
|
303
|
+
continue;
|
|
304
|
+
value.add(id);
|
|
305
|
+
}
|
|
306
|
+
return value;
|
|
307
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SemanticResultId } from '../identity/ids.js';
|
|
2
|
+
import type { SealedRepresentationPlan } from './plan.js';
|
|
3
|
+
/**
|
|
4
|
+
* Fail-closed guards over a sealed plan.
|
|
5
|
+
*
|
|
6
|
+
* A guard firing here is always correct: the defect is in whatever produced the
|
|
7
|
+
* inconsistent plan. These are deliberately not warnings and deliberately not
|
|
8
|
+
* relaxable, because every one of them describes a state that compiles into a
|
|
9
|
+
* silently wrong program rather than a loud failure.
|
|
10
|
+
*/
|
|
11
|
+
export interface RepresentationViolation {
|
|
12
|
+
readonly guard: string;
|
|
13
|
+
readonly result: SemanticResultId | null;
|
|
14
|
+
readonly message: string;
|
|
15
|
+
}
|
|
16
|
+
/** Run every guard and return the complete violation set, never just the first. */
|
|
17
|
+
export declare const verifyRepresentationPlan: (plan: SealedRepresentationPlan) => readonly RepresentationViolation[];
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { dynamicReasons, recursiveCarrierOf, representationKey, walkRepresentation as walk } from './model.js';
|
|
2
|
+
/**
|
|
3
|
+
* `unresolved` is lattice bottom. Reaching materialization with it means a
|
|
4
|
+
* carrier was never selected, and materializing anyway yields a default-
|
|
5
|
+
* constructed slot -- `undefined` where a value was meant to be.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Every carrier reachable from any selection, once per carrier OBJECT, with
|
|
9
|
+
* the first result whose selection reached it.
|
|
10
|
+
*
|
|
11
|
+
* The guards below ask per-node questions, and a node shared between
|
|
12
|
+
* selections -- the derive memo hands every reader of one structural type the
|
|
13
|
+
* same object -- has one answer. Walking each selection's own tree in full
|
|
14
|
+
* asked it once per path instead: on the tsc self-compile, union carriers
|
|
15
|
+
* whose arms embed records whose fields embed unions made that walk 80% of
|
|
16
|
+
* a representations stage that was still running after twenty minutes
|
|
17
|
+
* (preflight15, profiled in place), for a plan whose distinct carriers number
|
|
18
|
+
* in the tens of thousands. One DAG walk per plan, shared by every guard.
|
|
19
|
+
*/
|
|
20
|
+
const carriersByPlan = new WeakMap();
|
|
21
|
+
const reachableCarriers = (plan) => {
|
|
22
|
+
const remembered = carriersByPlan.get(plan);
|
|
23
|
+
if (remembered)
|
|
24
|
+
return remembered;
|
|
25
|
+
const visited = new Set();
|
|
26
|
+
const reached = new Map();
|
|
27
|
+
for (const [result, representation] of plan.selected) {
|
|
28
|
+
for (const found of walk(representation, visited))
|
|
29
|
+
reached.set(found, result);
|
|
30
|
+
}
|
|
31
|
+
carriersByPlan.set(plan, reached);
|
|
32
|
+
return reached;
|
|
33
|
+
};
|
|
34
|
+
const unresolvedGuard = (plan) => {
|
|
35
|
+
const violations = [];
|
|
36
|
+
for (const [found, result] of reachableCarriers(plan)) {
|
|
37
|
+
if (found.kind !== 'unresolved')
|
|
38
|
+
continue;
|
|
39
|
+
violations.push({
|
|
40
|
+
guard: 'unresolved-reaches-materialization',
|
|
41
|
+
result,
|
|
42
|
+
message: `result ${result} selected a carrier containing unresolved(${found.reason})`
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return violations;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* The boxing guard.
|
|
49
|
+
*
|
|
50
|
+
* `dynamic` is legitimate at exactly four boundaries. Any other appearance is a
|
|
51
|
+
* statically typed value that lost its type, which is the defect this compiler
|
|
52
|
+
* exists to not have.
|
|
53
|
+
*/
|
|
54
|
+
const boxingGuard = (plan) => {
|
|
55
|
+
const violations = [];
|
|
56
|
+
const permitted = new Set(dynamicReasons);
|
|
57
|
+
for (const [found, result] of reachableCarriers(plan)) {
|
|
58
|
+
if (found.kind !== 'dynamic')
|
|
59
|
+
continue;
|
|
60
|
+
if (permitted.has(found.reason))
|
|
61
|
+
continue;
|
|
62
|
+
violations.push({
|
|
63
|
+
guard: 'boxed-without-declared-reason',
|
|
64
|
+
result,
|
|
65
|
+
message: `result ${result} selected dynamic carrier with undeclared reason "${found.reason}"`
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return violations;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* One JavaScript-observable Array must not be an `array-object` at one endpoint
|
|
72
|
+
* and a bare buffer at another. A dense buffer has no hole semantics, no index
|
|
73
|
+
* key domain, and no `length` rules, so publishing one where an Array is
|
|
74
|
+
* observable loses behavior that the program can see.
|
|
75
|
+
*/
|
|
76
|
+
const arrayCarrierSplitGuard = (plan) => {
|
|
77
|
+
const violations = [];
|
|
78
|
+
for (const [found, result] of reachableCarriers(plan)) {
|
|
79
|
+
if (found.kind !== 'dense-buffer')
|
|
80
|
+
continue;
|
|
81
|
+
violations.push({
|
|
82
|
+
guard: 'dense-buffer-in-observable-position',
|
|
83
|
+
result,
|
|
84
|
+
message: `result ${result} selected dense-buffer(${representationKey(found.element)}); ` +
|
|
85
|
+
'a dense buffer is compiler-private storage and is never a published semantic result'
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return violations;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* A proxy carries target, handler, and revoked state. A target-only carrier
|
|
92
|
+
* cannot perform trap lookup, so every operation on it silently becomes an
|
|
93
|
+
* operation on the target -- the traps stop running and nothing reports it.
|
|
94
|
+
*/
|
|
95
|
+
const proxyCompletenessGuard = (plan) => {
|
|
96
|
+
const violations = [];
|
|
97
|
+
for (const [found, result] of reachableCarriers(plan)) {
|
|
98
|
+
if (found.kind !== 'proxy-object')
|
|
99
|
+
continue;
|
|
100
|
+
if (found.handler.kind !== 'unresolved')
|
|
101
|
+
continue;
|
|
102
|
+
violations.push({
|
|
103
|
+
guard: 'proxy-without-handler',
|
|
104
|
+
result,
|
|
105
|
+
message: `result ${result} selected a proxy carrier whose handler is unresolved`
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return violations;
|
|
109
|
+
};
|
|
110
|
+
/** A tagged union must name its arms uniquely; duplicates resolve by position. */
|
|
111
|
+
const taggedUnionGuard = (plan) => {
|
|
112
|
+
const violations = [];
|
|
113
|
+
for (const [found, result] of reachableCarriers(plan)) {
|
|
114
|
+
if (found.kind !== 'tagged-union')
|
|
115
|
+
continue;
|
|
116
|
+
const tags = found.arms.map((arm) => arm.tag);
|
|
117
|
+
if (new Set(tags).size === tags.length)
|
|
118
|
+
continue;
|
|
119
|
+
violations.push({
|
|
120
|
+
guard: 'tagged-union-duplicate-tag',
|
|
121
|
+
result,
|
|
122
|
+
message: `result ${result} selected a tagged union with duplicate arm tags: ${tags.join(', ')}`
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return violations;
|
|
126
|
+
};
|
|
127
|
+
/** The one carrier kind a fixpoint of this container may be published as. */
|
|
128
|
+
const recursiveCarrierKindOf = (container) => container === 'callable' ? 'function-value-dispatch' : container;
|
|
129
|
+
/**
|
|
130
|
+
* The one ownership a fixpoint of this container may be published with.
|
|
131
|
+
*
|
|
132
|
+
* A container's wrapper IS a heap object reached through a pointer, so both
|
|
133
|
+
* halves of its equation must be refcounted or the back edge would embed the
|
|
134
|
+
* definition by value. A callable wrapper is the opposite: `gea::CallableObject`
|
|
135
|
+
* stores a pointer and a capture, never its parameter types, so the struct is
|
|
136
|
+
* held by value and a refcount would be a second, unshared identity.
|
|
137
|
+
*/
|
|
138
|
+
const recursiveOwnershipOf = (container) => (container === 'callable' ? 'owned' : 'shared-refcount');
|
|
139
|
+
/**
|
|
140
|
+
* A recursive native carrier is one named wrapper plus one or more typed
|
|
141
|
+
* references to it. The reference is intentionally a `native-record-ref`
|
|
142
|
+
* leaf, so this checks the equation by its sealed structural identity rather
|
|
143
|
+
* than trying to rediscover it by expanding a graph edge.
|
|
144
|
+
*/
|
|
145
|
+
const recursiveCarrierGuard = (plan) => {
|
|
146
|
+
const violations = [];
|
|
147
|
+
const definitions = new Map();
|
|
148
|
+
const references = [];
|
|
149
|
+
for (const [carrier, result] of reachableCarriers(plan)) {
|
|
150
|
+
const recursive = recursiveCarrierOf(carrier);
|
|
151
|
+
if (!recursive)
|
|
152
|
+
continue;
|
|
153
|
+
if (recursive.role === 'definition') {
|
|
154
|
+
const published = carrier.kind === 'function-value-dispatch'
|
|
155
|
+
? 'owned'
|
|
156
|
+
: carrier.kind === 'array-object' || carrier.kind === 'keyed-collection' || carrier.kind === 'dictionary'
|
|
157
|
+
? carrier.ownership
|
|
158
|
+
: null;
|
|
159
|
+
if (published === null ||
|
|
160
|
+
carrier.kind !== recursiveCarrierKindOf(recursive.container) ||
|
|
161
|
+
published !== recursiveOwnershipOf(recursive.container)) {
|
|
162
|
+
violations.push({
|
|
163
|
+
guard: 'recursive-native-carrier-definition',
|
|
164
|
+
result,
|
|
165
|
+
message: `result ${result} publishes malformed recursive native definition ${recursive.type}`
|
|
166
|
+
});
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
const existing = definitions.get(recursive.type);
|
|
170
|
+
if (existing && (existing.container !== recursive.container || existing.ownership !== published)) {
|
|
171
|
+
violations.push({
|
|
172
|
+
guard: 'recursive-native-carrier-definition',
|
|
173
|
+
result,
|
|
174
|
+
message: `recursive native definition ${recursive.type} disagrees about its container or ownership`
|
|
175
|
+
});
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
definitions.set(recursive.type, { container: recursive.container, ownership: published });
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
references.push({ carrier, result });
|
|
182
|
+
}
|
|
183
|
+
for (const { carrier, result } of references) {
|
|
184
|
+
const recursive = recursiveCarrierOf(carrier);
|
|
185
|
+
if (!recursive)
|
|
186
|
+
continue;
|
|
187
|
+
const definition = definitions.get(recursive.type);
|
|
188
|
+
const privateMarker = `recursive-container:${recursive.type}`;
|
|
189
|
+
if (carrier.kind !== 'native-record-ref' ||
|
|
190
|
+
carrier.native !== privateMarker ||
|
|
191
|
+
carrier.ownership !== recursiveOwnershipOf(recursive.container) ||
|
|
192
|
+
!definition ||
|
|
193
|
+
definition.container !== recursive.container ||
|
|
194
|
+
definition.ownership !== carrier.ownership) {
|
|
195
|
+
violations.push({
|
|
196
|
+
guard: 'recursive-native-carrier-reference',
|
|
197
|
+
result,
|
|
198
|
+
message: `result ${result} publishes recursive reference ${recursive.type} without its matching native wrapper definition`
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return violations;
|
|
203
|
+
};
|
|
204
|
+
/** An uncommitted conflict must never be observable as a selection. */
|
|
205
|
+
const conflictGuard = (plan) => plan.conflicts.map((conflict) => ({
|
|
206
|
+
guard: 'unresolved-representation-conflict',
|
|
207
|
+
result: conflict.result,
|
|
208
|
+
message: `result ${conflict.result} in component ${conflict.component} has conflicting exact carriers: ` +
|
|
209
|
+
`${conflict.left.producer} published ${representationKey(conflict.left.representation)} while ` +
|
|
210
|
+
`${conflict.right.producer} published ${representationKey(conflict.right.representation)}`
|
|
211
|
+
}));
|
|
212
|
+
/** Run every guard and return the complete violation set, never just the first. */
|
|
213
|
+
export const verifyRepresentationPlan = (plan) => [
|
|
214
|
+
...conflictGuard(plan),
|
|
215
|
+
...unresolvedGuard(plan),
|
|
216
|
+
...boxingGuard(plan),
|
|
217
|
+
...arrayCarrierSplitGuard(plan),
|
|
218
|
+
...proxyCompletenessGuard(plan),
|
|
219
|
+
...taggedUnionGuard(plan),
|
|
220
|
+
...recursiveCarrierGuard(plan)
|
|
221
|
+
].sort((left, right) => left.guard === right.guard ? String(left.result).localeCompare(String(right.result)) : left.guard.localeCompare(right.guard));
|