@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,335 @@
|
|
|
1
|
+
import { dominatorTreeOf, isVisible } from './dominance.js';
|
|
2
|
+
const captureFactsOf = (body, placements) => {
|
|
3
|
+
const direct = [];
|
|
4
|
+
const allocates = [];
|
|
5
|
+
let ownReceiverUse = null;
|
|
6
|
+
const seen = new Set();
|
|
7
|
+
for (const blockId of body.blockOrder) {
|
|
8
|
+
const block = body.blocks.get(blockId);
|
|
9
|
+
if (!block)
|
|
10
|
+
continue;
|
|
11
|
+
for (const operation of block.operations) {
|
|
12
|
+
if (operation.kind === 'allocate-callable') {
|
|
13
|
+
allocates.push(operation.functionId);
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (operation.kind === 'receiver') {
|
|
17
|
+
if (ownReceiverUse === null)
|
|
18
|
+
ownReceiverUse = operation.result.representation;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (operation.kind !== 'binding-read' && operation.kind !== 'binding-write')
|
|
22
|
+
continue;
|
|
23
|
+
const declaration = operation.declaration;
|
|
24
|
+
if (seen.has(declaration))
|
|
25
|
+
continue;
|
|
26
|
+
const placement = placements.get(declaration);
|
|
27
|
+
// No placement, `region`, or `external` storage are not this body's
|
|
28
|
+
// problem: `bindingReference` resolves all three without ever consulting
|
|
29
|
+
// a `CaptureIndex` (a missing declaration refuses by name, `region`
|
|
30
|
+
// storage is a file-scope global, `external` storage is host-defined).
|
|
31
|
+
// Only `local` storage owned by some *other* frame is the case this
|
|
32
|
+
// index exists for.
|
|
33
|
+
if (!placement || placement.storage.kind !== 'local' || placement.storage.owner === body.sourceOwner)
|
|
34
|
+
continue;
|
|
35
|
+
seen.add(declaration);
|
|
36
|
+
direct.push(declaration);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return { direct, allocates, declaresOwnReceiver: body.abi !== null && body.abi.receiver !== null, ownReceiverUse };
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Every cell each body's environment has to carry -- its own captures AND the
|
|
43
|
+
* captures of every closure it allocates.
|
|
44
|
+
*
|
|
45
|
+
* A closure's environment is built in the frame that allocates it, one field
|
|
46
|
+
* per slot, each field read through `bindingReference` *in that frame*
|
|
47
|
+
* (`emitAllocateCallable`). So when `outer` allocates `inner`, and `inner`
|
|
48
|
+
* reads a cell that neither of them owns, `outer` has to be able to read it
|
|
49
|
+
* too -- and it can only do that out of its own environment. A layout built
|
|
50
|
+
* from one body's own reads alone leaves that cell out of `outer`'s
|
|
51
|
+
* environment, and the allocation of `inner` then refuses with "a cell owned by
|
|
52
|
+
* another callable frame ... not installed": a refusal naming the innermost
|
|
53
|
+
* frame for a gap one level up.
|
|
54
|
+
*
|
|
55
|
+
* A cell `outer` itself owns is deliberately NOT propagated: `outer` reads it
|
|
56
|
+
* as an ordinary local, so it needs no slot. That subtraction is also what
|
|
57
|
+
* makes the fixpoint terminate on a recursive nesting -- the set can only
|
|
58
|
+
* shrink as it moves outward.
|
|
59
|
+
*
|
|
60
|
+
* The receiver rides the identical relay: `receiverNeeds` seeds each body
|
|
61
|
+
* with the representation its OWN operations name (`null` for a body that
|
|
62
|
+
* declares its own receiver, since that body reads `this` as an ordinary
|
|
63
|
+
* parameter and needs no capture of it), then the same loop below inherits a
|
|
64
|
+
* nested closure's receiver need into whichever frame allocates it, stopping
|
|
65
|
+
* at the first frame that declares its own -- the receiver's counterpart to
|
|
66
|
+
* `ownsCell` above. Without this, a relay frame that never itself names
|
|
67
|
+
* `this` -- one that merely allocates a deeper closure which does -- gets no
|
|
68
|
+
* `receiver` in its own layout, and `emitAllocateCallable` then has nothing
|
|
69
|
+
* to read `this` out of when it builds that deeper closure's environment.
|
|
70
|
+
*/
|
|
71
|
+
const transitiveCaptures = (facts, placements) => {
|
|
72
|
+
const needs = new Map();
|
|
73
|
+
const receiverNeeds = new Map();
|
|
74
|
+
for (const [owner, body] of facts) {
|
|
75
|
+
needs.set(owner, [...body.direct]);
|
|
76
|
+
receiverNeeds.set(owner, body.declaresOwnReceiver ? null : body.ownReceiverUse);
|
|
77
|
+
}
|
|
78
|
+
const ownsCell = (owner, declaration) => {
|
|
79
|
+
const placement = placements.get(declaration);
|
|
80
|
+
return placement?.storage.kind === 'local' && placement.storage.owner === owner;
|
|
81
|
+
};
|
|
82
|
+
let changed = true;
|
|
83
|
+
while (changed) {
|
|
84
|
+
changed = false;
|
|
85
|
+
for (const [owner, body] of facts) {
|
|
86
|
+
const current = needs.get(owner);
|
|
87
|
+
if (!current)
|
|
88
|
+
continue;
|
|
89
|
+
const held = new Set(current);
|
|
90
|
+
const ownerDeclaresReceiver = body.declaresOwnReceiver;
|
|
91
|
+
for (const nested of body.allocates) {
|
|
92
|
+
for (const declaration of needs.get(nested) ?? []) {
|
|
93
|
+
if (held.has(declaration) || ownsCell(owner, declaration))
|
|
94
|
+
continue;
|
|
95
|
+
held.add(declaration);
|
|
96
|
+
current.push(declaration);
|
|
97
|
+
changed = true;
|
|
98
|
+
}
|
|
99
|
+
if (!ownerDeclaresReceiver && receiverNeeds.get(owner) === null) {
|
|
100
|
+
const nestedReceiver = receiverNeeds.get(nested);
|
|
101
|
+
if (nestedReceiver !== null && nestedReceiver !== undefined) {
|
|
102
|
+
receiverNeeds.set(owner, nestedReceiver);
|
|
103
|
+
changed = true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { needs, receiverNeeds };
|
|
110
|
+
};
|
|
111
|
+
const computeCaptureFacts = (bodies, placements, capturingAccessors) => {
|
|
112
|
+
const allocatedFunctionIds = new Set();
|
|
113
|
+
// `binding-write` fires once for a `const`/`let` declaration's own
|
|
114
|
+
// initializer *and* once per later reassignment (`ir/lower.ts`'s
|
|
115
|
+
// `lowerBinding` lowers `BindingOperation.action` `'write'` and
|
|
116
|
+
// `'initialize'` to the same IR kind, so the IR alone cannot tell them
|
|
117
|
+
// apart by kind). What distinguishes a reassignment from the one
|
|
118
|
+
// initializing write every declaration gets is arithmetic, not kind: a
|
|
119
|
+
// declaration this program ever reassigns has *more than one* write: the
|
|
120
|
+
// initializer plus at least one more. Counting is therefore the fact this
|
|
121
|
+
// module needs, not membership.
|
|
122
|
+
const writeCounts = new Map();
|
|
123
|
+
// The value each cell is written with, and which function each callable
|
|
124
|
+
// allocation names. Together they answer whether a cell holds a closure this
|
|
125
|
+
// program allocates, which is the fact `closureInitialized` below needs. A
|
|
126
|
+
// cell written more than once overwrites its entry, which never matters:
|
|
127
|
+
// `reassigned` refuses every such cell before the answer is consulted.
|
|
128
|
+
const writtenValues = new Map();
|
|
129
|
+
const allocatedFunctionOfValue = new Map();
|
|
130
|
+
for (const body of bodies) {
|
|
131
|
+
for (const blockId of body.blockOrder) {
|
|
132
|
+
const block = body.blocks.get(blockId);
|
|
133
|
+
if (!block)
|
|
134
|
+
continue;
|
|
135
|
+
for (const operation of block.operations) {
|
|
136
|
+
if (operation.kind === 'allocate-callable') {
|
|
137
|
+
allocatedFunctionIds.add(operation.functionId);
|
|
138
|
+
// An SSA id embeds the physical body it belongs to
|
|
139
|
+
// (`identity/ids.ts`'s `irValueId`), so one whole-program map over
|
|
140
|
+
// every body walked here is unambiguous without keying by body.
|
|
141
|
+
allocatedFunctionOfValue.set(operation.result.id, operation.functionId);
|
|
142
|
+
}
|
|
143
|
+
else if (operation.kind === 'binding-write') {
|
|
144
|
+
writeCounts.set(operation.declaration, (writeCounts.get(operation.declaration) ?? 0) + 1);
|
|
145
|
+
writtenValues.set(operation.declaration, operation.value.value);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const reassigned = new Set();
|
|
151
|
+
for (const [declaration, count] of writeCounts) {
|
|
152
|
+
if (count > 1)
|
|
153
|
+
reassigned.add(declaration);
|
|
154
|
+
}
|
|
155
|
+
// Which cells hold a closure, and whose. Read off the write's own value
|
|
156
|
+
// rather than off the declaration's syntax, so a function declaration's
|
|
157
|
+
// hoisted cell and a named function expression's funcEnv cell -- the two
|
|
158
|
+
// forms in the language that name themselves -- are one case here.
|
|
159
|
+
const closureInitialized = new Map();
|
|
160
|
+
for (const [declaration, value] of writtenValues) {
|
|
161
|
+
const allocated = allocatedFunctionOfValue.get(value);
|
|
162
|
+
if (allocated !== undefined)
|
|
163
|
+
closureInitialized.set(declaration, allocated);
|
|
164
|
+
}
|
|
165
|
+
// Every body's facts, then the closure over them: a body that is never
|
|
166
|
+
// allocated as a callable still contributes, because a method's body may
|
|
167
|
+
// allocate a closure whose captures the enclosing frames have to carry.
|
|
168
|
+
const facts = new Map();
|
|
169
|
+
for (const body of bodies)
|
|
170
|
+
facts.set(body.sourceOwner, captureFactsOf(body, placements));
|
|
171
|
+
const { needs: captured, receiverNeeds } = transitiveCaptures(facts, placements);
|
|
172
|
+
// A closure can legally be created before a captured `let` receives its
|
|
173
|
+
// first value. The cell still exists at that point and initially holds
|
|
174
|
+
// `undefined`; subsequent writes must be visible through the closure's
|
|
175
|
+
// environment. Lowering omits a storage-free `let x;` initializer, so the
|
|
176
|
+
// program may contain only the later write. Counting that as a single write
|
|
177
|
+
// makes it look immutable even though copying it into the environment would
|
|
178
|
+
// either name no C++ local at all or preserve the initial value forever.
|
|
179
|
+
//
|
|
180
|
+
// Decide this from the same IR operations that build the capture index. For
|
|
181
|
+
// every allocation, an owning-frame write must be visible at that exact
|
|
182
|
+
// point before a value capture is safe. Dominance handles branch joins; the
|
|
183
|
+
// same-block position handles ordinary declaration order. Anything else
|
|
184
|
+
// needs the shared heap cell, just like a reassigned capture.
|
|
185
|
+
const capturedBeforeInitialization = new Set();
|
|
186
|
+
for (const body of bodies) {
|
|
187
|
+
const writes = new Map();
|
|
188
|
+
const allocations = [];
|
|
189
|
+
for (const blockId of body.blockOrder) {
|
|
190
|
+
const block = body.blocks.get(blockId);
|
|
191
|
+
if (!block)
|
|
192
|
+
continue;
|
|
193
|
+
block.operations.forEach((operation, position) => {
|
|
194
|
+
if (operation.kind === 'binding-write') {
|
|
195
|
+
const sites = writes.get(operation.declaration) ?? [];
|
|
196
|
+
sites.push({ block: blockId, position });
|
|
197
|
+
writes.set(operation.declaration, sites);
|
|
198
|
+
}
|
|
199
|
+
else if (operation.kind === 'allocate-callable') {
|
|
200
|
+
allocations.push({ functionId: operation.functionId, block: blockId, position });
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
if (allocations.length === 0)
|
|
205
|
+
continue;
|
|
206
|
+
const dominance = dominatorTreeOf(body);
|
|
207
|
+
for (const allocation of allocations) {
|
|
208
|
+
for (const declaration of captured.get(allocation.functionId) ?? []) {
|
|
209
|
+
const placement = placements.get(declaration);
|
|
210
|
+
if (placement?.storage.kind !== 'local' || placement.storage.owner !== body.sourceOwner)
|
|
211
|
+
continue;
|
|
212
|
+
const initialized = (writes.get(declaration) ?? []).some((site) => isVisible(site, allocation.block, allocation.position, dominance));
|
|
213
|
+
if (!initialized)
|
|
214
|
+
capturedBeforeInitialization.add(declaration);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Every declaration this program must share by aliasing rather than by
|
|
219
|
+
// copying, decided once, whole-program, before any one body's admission
|
|
220
|
+
// runs -- see `IrBodyFacts.boxed`. Walked over every OWNER an allocated
|
|
221
|
+
// closure needs the declaration through (the direct capturer AND every
|
|
222
|
+
// frame that merely relays it to a deeper closure), not only the frame that
|
|
223
|
+
// directly reads or writes it: a relay frame that copied the raw value
|
|
224
|
+
// instead of the box would hand the closure it relays to a stale alias of
|
|
225
|
+
// its own, so the moment ANY owner along the chain needs the box, every
|
|
226
|
+
// owner touching the same declaration must agree it is boxed. `reassigned`
|
|
227
|
+
// is already owner-independent (the declaration is unsafe to copy full
|
|
228
|
+
// stop), and `closureInitialized.get(declaration) === owner` is checked
|
|
229
|
+
// per owner because self-reference is specifically "this owner's own
|
|
230
|
+
// closure holds this cell" -- but because the result lands in one flat,
|
|
231
|
+
// declaration-keyed set, a relay owner picks up a self-reference reason
|
|
232
|
+
// found through a DIFFERENT owner just as it would a `reassigned` one.
|
|
233
|
+
const boxed = new Set();
|
|
234
|
+
for (const [owner, declarations] of captured) {
|
|
235
|
+
// A record ACCESSOR is never allocated as a value -- it is reached by name
|
|
236
|
+
// off the shape -- and yet it does receive an environment, carried by the
|
|
237
|
+
// object itself (`targets/cpp/captures.ts`). So it needs the same boxing
|
|
238
|
+
// decision an allocated closure gets: without it the environment holds a
|
|
239
|
+
// COPY of the cell, and a setter's write is invisible to the next read of
|
|
240
|
+
// the getter beside it, which is a silently wrong answer rather than a
|
|
241
|
+
// refusal.
|
|
242
|
+
if (!allocatedFunctionIds.has(owner) && !capturingAccessors.has(owner))
|
|
243
|
+
continue;
|
|
244
|
+
for (const declaration of declarations) {
|
|
245
|
+
if (reassigned.has(declaration) || closureInitialized.get(declaration) === owner || capturedBeforeInitialization.has(declaration)) {
|
|
246
|
+
boxed.add(declaration);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// A body reads `this` when its own operations do, and also when a closure
|
|
251
|
+
// it allocates does without declaring a receiver of its own: an arrow's
|
|
252
|
+
// `this` is the enclosing method's, reached through the capture the index
|
|
253
|
+
// above already installs. Asking only the body's own operations would call
|
|
254
|
+
// `m() { return () => this.x }` receiver-free and hand its arrow nothing.
|
|
255
|
+
// Memoized against the allocation graph's own cycles (a body can allocate a
|
|
256
|
+
// closure that allocates it back), where an unfinished answer is `false`:
|
|
257
|
+
// the receiver-reading evidence is elsewhere in the cycle, or nowhere.
|
|
258
|
+
const receiverReaders = new Map();
|
|
259
|
+
const readsReceiver = (owner) => {
|
|
260
|
+
const known = receiverReaders.get(owner);
|
|
261
|
+
if (known !== undefined)
|
|
262
|
+
return known;
|
|
263
|
+
receiverReaders.set(owner, false);
|
|
264
|
+
const body = facts.get(owner);
|
|
265
|
+
const reads = body !== undefined &&
|
|
266
|
+
(body.ownReceiverUse !== null ||
|
|
267
|
+
body.allocates.some((nested) => facts.get(nested)?.declaresOwnReceiver === false && readsReceiver(nested)));
|
|
268
|
+
receiverReaders.set(owner, reads);
|
|
269
|
+
return reads;
|
|
270
|
+
};
|
|
271
|
+
return { needs: captured, receiverNeeds, allocatedFunctionIds, boxed, earlyBox: capturedBeforeInitialization, readsReceiver };
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* Runs `computeCaptureFacts` once over the whole program and attaches its
|
|
275
|
+
* answer to every body as `IrBody.facts`, the way `ir/generator-split.ts`
|
|
276
|
+
* rewrites bodies rather than handing back a side index the caller has to
|
|
277
|
+
* remember to thread everywhere it is needed.
|
|
278
|
+
*
|
|
279
|
+
* Called after `splitGeneratorBodies` and after `shakeProgram` -- the SAME
|
|
280
|
+
* body set `targets/cpp/translation-unit.ts` renders from -- because a body
|
|
281
|
+
* `shakeProgram` removes as dead must not still contribute a relay edge to
|
|
282
|
+
* `transitiveCaptures`'s fixpoint: computing this any earlier would let a
|
|
283
|
+
* capture route through a callable the emitted program never allocates,
|
|
284
|
+
* widening some surviving owner's environment past what the target's old,
|
|
285
|
+
* post-shake recomputation ever produced for it.
|
|
286
|
+
*/
|
|
287
|
+
export const publishCaptureFacts = (bodies, placements,
|
|
288
|
+
/**
|
|
289
|
+
* The accessor bodies a reachable record shape names
|
|
290
|
+
* (`projection/fields.ts`'s `recordAccessorBodiesOf`). An accessor is the one
|
|
291
|
+
* body kind that receives an environment without ever being allocated as a
|
|
292
|
+
* value, so it is the one kind this walk cannot recognise from the
|
|
293
|
+
* operations alone -- the shape names it, nothing allocates it.
|
|
294
|
+
*/
|
|
295
|
+
capturingAccessors = new Set()) => {
|
|
296
|
+
const bodyList = [...bodies.values()];
|
|
297
|
+
const facts = computeCaptureFacts(bodyList, placements, capturingAccessors);
|
|
298
|
+
// `boxed`/`earlyBox` are whole-program, declaration-keyed sets; regrouping
|
|
299
|
+
// them by the declaration's OWNING frame here, once, is what lets
|
|
300
|
+
// `IrBodyFacts.boxed` stay a per-body set without every reader repeating
|
|
301
|
+
// this same lookup against `placements`.
|
|
302
|
+
const boxedByOwner = new Map();
|
|
303
|
+
for (const declaration of facts.boxed) {
|
|
304
|
+
const placement = placements.get(declaration);
|
|
305
|
+
if (placement?.storage.kind !== 'local')
|
|
306
|
+
continue;
|
|
307
|
+
const owned = boxedByOwner.get(placement.storage.owner) ?? new Set();
|
|
308
|
+
owned.add(declaration);
|
|
309
|
+
boxedByOwner.set(placement.storage.owner, owned);
|
|
310
|
+
}
|
|
311
|
+
const earlyBoxByOwner = new Map();
|
|
312
|
+
for (const declaration of facts.earlyBox) {
|
|
313
|
+
const placement = placements.get(declaration);
|
|
314
|
+
if (placement?.storage.kind !== 'local')
|
|
315
|
+
continue;
|
|
316
|
+
const owned = earlyBoxByOwner.get(placement.storage.owner) ?? new Set();
|
|
317
|
+
owned.add(declaration);
|
|
318
|
+
earlyBoxByOwner.set(placement.storage.owner, owned);
|
|
319
|
+
}
|
|
320
|
+
const empty = new Set();
|
|
321
|
+
const published = new Map();
|
|
322
|
+
for (const body of bodyList) {
|
|
323
|
+
const owner = body.sourceOwner;
|
|
324
|
+
const bodyFacts = {
|
|
325
|
+
capturedDeclarations: facts.needs.get(owner) ?? [],
|
|
326
|
+
capturedReceiver: facts.receiverNeeds.get(owner) ?? null,
|
|
327
|
+
allocatedAsValue: facts.allocatedFunctionIds.has(owner),
|
|
328
|
+
readsReceiver: facts.readsReceiver(owner),
|
|
329
|
+
boxed: boxedByOwner.get(owner) ?? empty,
|
|
330
|
+
requiresEarlyBox: earlyBoxByOwner.get(owner) ?? empty
|
|
331
|
+
};
|
|
332
|
+
published.set(body.owner, { ...body, facts: bodyFacts });
|
|
333
|
+
}
|
|
334
|
+
return published;
|
|
335
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { TargetRuntimeManifest } from '../preflight/obligations.js';
|
|
2
|
+
import type { SealedRepresentationPlan } from '../representation/plan.js';
|
|
3
|
+
import type { SemanticGraph } from '../semantics/model/graph.js';
|
|
4
|
+
import type { IrCertification } from './certify.js';
|
|
5
|
+
/**
|
|
6
|
+
* The whole-pipeline capability certificate.
|
|
7
|
+
*
|
|
8
|
+
* A clean IR certification is the only thing emission is allowed to trust;
|
|
9
|
+
* the certificate is how that trust travels without re-running the census. It
|
|
10
|
+
* is bound to the exact frozen plan, semantic snapshot, and manifest objects
|
|
11
|
+
* the certification was computed against, plus the certification itself, by
|
|
12
|
+
* hashing each with `node:crypto` -- never by accepting a caller-supplied
|
|
13
|
+
* identity string. A caller cannot forge one by constructing an object with
|
|
14
|
+
* the right shape: the only way to produce a matching `id` is to hand this
|
|
15
|
+
* module the actual subjects and have it hash them itself.
|
|
16
|
+
*
|
|
17
|
+
* Lived in `preflight/` and hashed the preflight report until certification
|
|
18
|
+
* moved onto the lowered IR. The certificate now attests the IR walk,
|
|
19
|
+
* so it hashes the keys that walk demanded -- the census of what this program
|
|
20
|
+
* asks of the target -- rather than a prediction of them.
|
|
21
|
+
*/
|
|
22
|
+
export interface CapabilityCertificateSubjects {
|
|
23
|
+
readonly plan: SealedRepresentationPlan;
|
|
24
|
+
readonly semanticSnapshot: SemanticGraph;
|
|
25
|
+
readonly manifest: TargetRuntimeManifest;
|
|
26
|
+
}
|
|
27
|
+
export interface CapabilityCertificate {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
readonly planDigest: string;
|
|
30
|
+
readonly semanticSnapshotDigest: string;
|
|
31
|
+
readonly manifestDigest: string;
|
|
32
|
+
readonly certificationDigest: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Mints a certificate from a clean certification, or returns `null` for one
|
|
36
|
+
* that refused anything.
|
|
37
|
+
*
|
|
38
|
+
* `null` rather than a throw: minting is a query ("is there a certificate for
|
|
39
|
+
* this state"), and a pipeline stage that does
|
|
40
|
+
* `const certificate = mintCapabilityCertificate(...); if (!certificate) ...`
|
|
41
|
+
* cannot forget the check the way a caught-and-discarded exception can be
|
|
42
|
+
* forgotten. The certificate gates emission only: lowering runs on the plan's
|
|
43
|
+
* own verdict.
|
|
44
|
+
*/
|
|
45
|
+
export declare const mintCapabilityCertificate: (certification: IrCertification, subjects: CapabilityCertificateSubjects) => CapabilityCertificate | null;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
const sha256 = (input) => createHash('sha256').update(input, 'utf8').digest('hex');
|
|
3
|
+
// The same digest as `sha256` over the concatenation, without ever holding
|
|
4
|
+
// the concatenation: the demanded-key list of a large program need not fit in
|
|
5
|
+
// one string.
|
|
6
|
+
const sha256Lines = (lines) => {
|
|
7
|
+
const hash = createHash('sha256');
|
|
8
|
+
for (const line of lines)
|
|
9
|
+
hash.update(line, 'utf8');
|
|
10
|
+
return hash.digest('hex');
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* `Map`/`Set` are not JSON-serializable on their own; this replacer expands
|
|
14
|
+
* them structurally so the plan's `selected`/`evidence` maps and the graph's
|
|
15
|
+
* `operations`/`edges`/`results` tables actually contribute to the digest
|
|
16
|
+
* instead of silently vanishing into `{}`. Functions (`manifest.spellable`)
|
|
17
|
+
* are dropped by `JSON.stringify` as they always were; the predicate's
|
|
18
|
+
* answers are what the demanded keys already record.
|
|
19
|
+
*/
|
|
20
|
+
const canonicalize = (value) => JSON.stringify(value, (_key, val) => {
|
|
21
|
+
if (val instanceof Map)
|
|
22
|
+
return { __map__: [...val.entries()] };
|
|
23
|
+
if (val instanceof Set)
|
|
24
|
+
return { __set__: [...val.values()].sort() };
|
|
25
|
+
return val;
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Mints a certificate from a clean certification, or returns `null` for one
|
|
29
|
+
* that refused anything.
|
|
30
|
+
*
|
|
31
|
+
* `null` rather than a throw: minting is a query ("is there a certificate for
|
|
32
|
+
* this state"), and a pipeline stage that does
|
|
33
|
+
* `const certificate = mintCapabilityCertificate(...); if (!certificate) ...`
|
|
34
|
+
* cannot forget the check the way a caught-and-discarded exception can be
|
|
35
|
+
* forgotten. The certificate gates emission only: lowering runs on the plan's
|
|
36
|
+
* own verdict.
|
|
37
|
+
*/
|
|
38
|
+
export const mintCapabilityCertificate = (certification, subjects) => {
|
|
39
|
+
if (!certification.certified)
|
|
40
|
+
return null;
|
|
41
|
+
const planDigest = sha256(canonicalize(subjects.plan));
|
|
42
|
+
const semanticSnapshotDigest = sha256(canonicalize(subjects.semanticSnapshot));
|
|
43
|
+
const manifestDigest = sha256(canonicalize(subjects.manifest));
|
|
44
|
+
const certificationDigest = sha256Lines(certification.demanded.map((key) => `${key}\n`));
|
|
45
|
+
const id = sha256([planDigest, semanticSnapshotDigest, manifestDigest, certificationDigest].join('|'));
|
|
46
|
+
return Object.freeze({ id, planDigest, semanticSnapshotDigest, manifestDigest, certificationDigest });
|
|
47
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { RepresentationDeriver } from '../../representation/derive.js';
|
|
2
|
+
import { type Representation } from '../../representation/model.js';
|
|
3
|
+
/**
|
|
4
|
+
* The pure `(kind, representation[, receiver][, deriver]) => string`
|
|
5
|
+
* refinements `preflight/runtime-helper-key.ts` used to compute a
|
|
6
|
+
* `protocol:*`/`allocation:regexp-object:*` carrier key from a SEMANTIC
|
|
7
|
+
* operand it first had to resolve through the plan. `ir/certify/runtime-helper.ts`
|
|
8
|
+
* needs the identical spellings for the LOWERED operand, which already
|
|
9
|
+
* carries its representation directly (`IrOperand.representation`) -- so the
|
|
10
|
+
* resolution half (operand -> representation, through the plan or the
|
|
11
|
+
* deriver) stays in `runtime-helper-key.ts`, and only the refinement half
|
|
12
|
+
* moves here, imported by both, so the two censuses cannot spell one carrier
|
|
13
|
+
* two different ways.
|
|
14
|
+
*
|
|
15
|
+
* Every function here takes `kind` as an explicit argument rather than
|
|
16
|
+
* deriving it from `representation.kind` internally, because the two are NOT
|
|
17
|
+
* always the same fact: a semantic operand whose own result exists but was
|
|
18
|
+
* never selected by the plan reports `kind === 'unselected'` while
|
|
19
|
+
* `representation` is `undefined` -- a real, distinct outcome from an
|
|
20
|
+
* operand that does not exist at all (`kind === 'absent'`), and both old
|
|
21
|
+
* skip-paths return `kind` verbatim in that case. Collapsing the two into
|
|
22
|
+
* one `representation?.kind ?? 'absent'` computation would silently turn
|
|
23
|
+
* "unselected" into "absent" and change what the old preflight walk
|
|
24
|
+
* certified. A lowered `IrOperand`'s representation is always resolved, so
|
|
25
|
+
* the IR side simply passes `representation.kind` for both arguments.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* `for`-`in`'s `get-iterator` step, refined the way a `native-record-ref`
|
|
29
|
+
* receiver (host-bound vs. compiler-owned) and a `dictionary`/`optional`
|
|
30
|
+
* receiver's own key domain must be to tell a claimed carrier from an
|
|
31
|
+
* identically-`.kind`ed one this backend cannot walk. See
|
|
32
|
+
* `preflight/runtime-helper-key.ts`'s own (much longer) doc for the full
|
|
33
|
+
* reasoning; this is that function's body, unchanged, parameterized by the
|
|
34
|
+
* representation directly instead of by a semantic operand.
|
|
35
|
+
*/
|
|
36
|
+
export declare const enumerateGetIteratorCarrierKeyOf: (kind: string, representation: Representation | undefined) => string;
|
|
37
|
+
/**
|
|
38
|
+
* Whether a "record"/"record-with-index" carrier declares its OWN
|
|
39
|
+
* `[Symbol.iterator]` (or `[Symbol.asyncIterator]`) field -- see
|
|
40
|
+
* `preflight/runtime-helper-key.ts`'s own doc for the full reasoning
|
|
41
|
+
* (unchanged here; only moved).
|
|
42
|
+
*/
|
|
43
|
+
export declare const recordHasIteratorMethodField: (deriver: RepresentationDeriver, representation: Representation) => boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Whether a `record` is a TUPLE's carrier whose elements a single native
|
|
46
|
+
* cursor can walk -- see `preflight/runtime-helper-key.ts`'s own doc.
|
|
47
|
+
*/
|
|
48
|
+
export declare const isUniformTupleRecord: (representation: Representation) => boolean;
|
|
49
|
+
/**
|
|
50
|
+
* The `iterator`/`async-iterator` protocol's `get-method`/`get-iterator`
|
|
51
|
+
* carrier -- see `preflight/runtime-helper-key.ts`'s own doc for the full
|
|
52
|
+
* reasoning behind the `record(no-iterator-method)`/`record(tuple-values)`
|
|
53
|
+
* split.
|
|
54
|
+
*/
|
|
55
|
+
export declare const iteratorMethodCarrierKeyOf: (kind: string, representation: Representation | undefined, deriver: RepresentationDeriver) => string;
|
|
56
|
+
/**
|
|
57
|
+
* `CopyDataProperties`'s source carrier, refined the way a `dictionary`'s key
|
|
58
|
+
* domain, a `tagged-union`'s per-arm copyability, and an `optional`'s present
|
|
59
|
+
* payload have to be -- see `preflight/runtime-helper-key.ts`'s own (longer)
|
|
60
|
+
* doc for the full reasoning; this is that function's body, parameterized by
|
|
61
|
+
* the two representations directly instead of by a semantic operand pair.
|
|
62
|
+
*/
|
|
63
|
+
export declare const spreadSourceCarrierKeyOf: (kind: string, representation: Representation | undefined, receiver: Representation | undefined, deriver: RepresentationDeriver) => string;
|
|
64
|
+
export type RegexpFlagSupportKey = 'supported-flags' | 'unicode-flags' | 'unicode-ignore-case-flags' | 'unicode-sets-flags';
|
|
65
|
+
/**
|
|
66
|
+
* `u` selects the runtime's scalar-value matcher, while `v` stays unbuilt --
|
|
67
|
+
* see `preflight/runtime-helper-key.ts`'s own doc. Unlike that file's
|
|
68
|
+
* version, `flags` here is always a concrete string: by the time an
|
|
69
|
+
* `AllocateRegExpOperation` exists, lowering has already required its own
|
|
70
|
+
* `pattern-flags` operand to be a constant string (`lower-allocation.ts`'s
|
|
71
|
+
* `textOf`), so there is no `unselected-flags` state left to report.
|
|
72
|
+
*/
|
|
73
|
+
export declare const regexpFlagSupportKeyOf: (flags: string) => RegexpFlagSupportKey;
|