@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,112 @@
|
|
|
1
|
+
import { componentId, nodeOfOperation, operationOfResult } from '../identity/ids.js';
|
|
2
|
+
import { partitionAuthorityComponents } from '../semantics/model/graph.js';
|
|
3
|
+
import { createDiagnosticSink } from './model.js';
|
|
4
|
+
/**
|
|
5
|
+
* The component a blocked census candidate belongs to.
|
|
6
|
+
*
|
|
7
|
+
* A candidate that never became an operation never joined a component, so there
|
|
8
|
+
* is no real one to name. The synthetic id is per family and says so; deriving a
|
|
9
|
+
* plausible-looking real component would let a reader join these rows against
|
|
10
|
+
* the graph and get an answer that is wrong.
|
|
11
|
+
*/
|
|
12
|
+
const censusComponent = (family) => componentId(`op|census|${family}|0`);
|
|
13
|
+
const componentIndexOf = (graph) => {
|
|
14
|
+
const index = new Map();
|
|
15
|
+
for (const members of partitionAuthorityComponents(graph)) {
|
|
16
|
+
const representative = members[0];
|
|
17
|
+
if (!representative)
|
|
18
|
+
continue;
|
|
19
|
+
const id = componentId(representative);
|
|
20
|
+
for (const member of members)
|
|
21
|
+
index.set(member, id);
|
|
22
|
+
}
|
|
23
|
+
return index;
|
|
24
|
+
};
|
|
25
|
+
const censusDiagnostics = (graph, locate) => [...graph.coverage.values()].flatMap((report) => report.blockers.map((blocker) => ({
|
|
26
|
+
id: `census/${report.family}/${blocker.source}/${blocker.reason}`,
|
|
27
|
+
// A withheld member states that it was withheld, so it is derived from
|
|
28
|
+
// the blocked member of its component rather than a defect of its own.
|
|
29
|
+
severity: blocker.reason.startsWith('withheld:') ? 'derived' : 'root',
|
|
30
|
+
component: censusComponent(report.family),
|
|
31
|
+
operation: null,
|
|
32
|
+
missingPrimitive: blocker.missingPrimitive,
|
|
33
|
+
// The candidate is named in the message because the component is
|
|
34
|
+
// synthetic and identical for every row of a family; without it, thirteen
|
|
35
|
+
// distinct blocked candidates print as thirteen identical lines.
|
|
36
|
+
message: `${blocker.reason} (candidate ${blocker.source})`,
|
|
37
|
+
location: locate(blocker.source),
|
|
38
|
+
causedBy: []
|
|
39
|
+
})));
|
|
40
|
+
const representationDiagnostics = (publication, components, locate) => publication.violations.map((violation) => {
|
|
41
|
+
const operation = violation.result ? operationOfResult(violation.result) : null;
|
|
42
|
+
return {
|
|
43
|
+
id: `representation/${violation.guard}/${violation.result ?? 'plan'}`,
|
|
44
|
+
severity: 'root',
|
|
45
|
+
component: (operation ? components.get(operation) : null) ?? censusComponent('reference'),
|
|
46
|
+
operation,
|
|
47
|
+
missingPrimitive: null,
|
|
48
|
+
message: violation.message,
|
|
49
|
+
location: operation ? locate(nodeOfOperation(operation)) : null,
|
|
50
|
+
causedBy: []
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
const preflightDiagnostics = (report, locate) => {
|
|
54
|
+
// Optional rows are excluded here, not merely de-emphasized. An optional
|
|
55
|
+
// obligation names a fast path the mandatory generic one already covers, so
|
|
56
|
+
// an unbuilt devirtualization is not a defect in the program or the backend
|
|
57
|
+
// -- and a report that fails a build over one trains its reader to ignore it.
|
|
58
|
+
const rows = report.obligations.filter((obligation) => !obligation.optional && obligation.status !== 'satisfied');
|
|
59
|
+
// A blocked row is explained by the failing rows of its own component, so the
|
|
60
|
+
// roots are collected per component before the derived rows cite them.
|
|
61
|
+
const rootsByComponent = new Map();
|
|
62
|
+
for (const obligation of rows) {
|
|
63
|
+
if (obligation.status === 'blocked-by-upstream')
|
|
64
|
+
continue;
|
|
65
|
+
const bucket = rootsByComponent.get(obligation.component) ?? [];
|
|
66
|
+
bucket.push(`preflight/${obligation.id}`);
|
|
67
|
+
rootsByComponent.set(obligation.component, bucket);
|
|
68
|
+
}
|
|
69
|
+
return rows.map((obligation) => {
|
|
70
|
+
const derived = obligation.status === 'blocked-by-upstream';
|
|
71
|
+
const operation = operationOfResult(obligation.derivesFrom);
|
|
72
|
+
return {
|
|
73
|
+
id: `preflight/${obligation.id}`,
|
|
74
|
+
severity: derived ? 'derived' : obligation.status === 'unsupported' ? 'unsupported' : 'root',
|
|
75
|
+
component: obligation.component,
|
|
76
|
+
operation,
|
|
77
|
+
missingPrimitive: null,
|
|
78
|
+
message: `${obligation.kind} obligation ${obligation.predicate.id} is ${obligation.status}: ` +
|
|
79
|
+
`expected ${obligation.predicate.expected}, found ${obligation.predicate.actual}`,
|
|
80
|
+
location: locate(nodeOfOperation(operation)),
|
|
81
|
+
causedBy: derived ? [...(rootsByComponent.get(obligation.component) ?? [])].sort() : []
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Collect every layer's failures into one deterministically ordered report.
|
|
87
|
+
*
|
|
88
|
+
* Optional preflight obligations are deliberately absent: an unavailable fast
|
|
89
|
+
* path is not a defect, and reporting one as a failure would train a reader to
|
|
90
|
+
* ignore the report.
|
|
91
|
+
*/
|
|
92
|
+
export const sweepDiagnostics = (input) => {
|
|
93
|
+
const components = componentIndexOf(input.graph);
|
|
94
|
+
const locate = input.locationOfNode ?? (() => null);
|
|
95
|
+
const sink = createDiagnosticSink();
|
|
96
|
+
for (const evidence of input.frontend)
|
|
97
|
+
sink.report({ ...evidence, severity: 'root', causedBy: [] });
|
|
98
|
+
for (const diagnostic of censusDiagnostics(input.graph, locate))
|
|
99
|
+
sink.report(diagnostic);
|
|
100
|
+
for (const diagnostic of representationDiagnostics(input.representations, components, locate))
|
|
101
|
+
sink.report(diagnostic);
|
|
102
|
+
// Everything above is the plan's own verdict; everything below is
|
|
103
|
+
// preflight's plan-level census (carriers, call paths, native boundaries).
|
|
104
|
+
// Lowering runs on the first alone (`DiagnosticReport.planClean`); the
|
|
105
|
+
// site-level capabilities are certified off the IR afterwards and are
|
|
106
|
+
// `CompileResult.refusals`, not diagnostics.
|
|
107
|
+
const planClean = sink.cleanSoFar();
|
|
108
|
+
if (input.preflight)
|
|
109
|
+
for (const diagnostic of preflightDiagnostics(input.preflight, locate))
|
|
110
|
+
sink.report(diagnostic);
|
|
111
|
+
return sink.finish([...new Set(components.values())], planClean);
|
|
112
|
+
};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical identities.
|
|
3
|
+
*
|
|
4
|
+
* Every later fact in the compiler is keyed by one of these. A source offset,
|
|
5
|
+
* file name, declaration spelling, or rendered C++ string is never an identity
|
|
6
|
+
* here: those are display evidence, and admitting them as identity is what lets
|
|
7
|
+
* two spellings of one operation acquire two answers.
|
|
8
|
+
*
|
|
9
|
+
* The identities are opaque strings at runtime and distinct types at compile
|
|
10
|
+
* time, so a `DeclarationId` cannot be passed where an `OperationId` belongs
|
|
11
|
+
* even though both are strings once erased.
|
|
12
|
+
*/
|
|
13
|
+
declare const brand: unique symbol;
|
|
14
|
+
/** A string identity that only its own minting function can produce. */
|
|
15
|
+
type Branded<Name extends string> = string & {
|
|
16
|
+
readonly [brand]: Name;
|
|
17
|
+
};
|
|
18
|
+
/** A syntactic position in the source universe, used for joins and display. */
|
|
19
|
+
export type NodeId = Branded<'NodeId'>;
|
|
20
|
+
/** A checker declaration, stable across every reference that resolves to it. */
|
|
21
|
+
export type DeclarationId = Branded<'DeclarationId'>;
|
|
22
|
+
/** A source function, distinct from the physical bodies it may be lowered into. */
|
|
23
|
+
export type FunctionId = Branded<'FunctionId'>;
|
|
24
|
+
/** A non-function execution context: module body, initializer, static block. */
|
|
25
|
+
export type RegionId = Branded<'RegionId'>;
|
|
26
|
+
/** A canonical structural shape, target-neutral and free of C++ spelling. */
|
|
27
|
+
export type StructuralTypeId = Branded<'StructuralTypeId'>;
|
|
28
|
+
/** One normalized ECMAScript operation. */
|
|
29
|
+
export type OperationId = Branded<'OperationId'>;
|
|
30
|
+
/** One published semantic result: an operation plus the role it fills. */
|
|
31
|
+
export type SemanticResultId = Branded<'SemanticResultId'>;
|
|
32
|
+
/** One authority-connected component of the semantic graph. */
|
|
33
|
+
export type ComponentId = Branded<'ComponentId'>;
|
|
34
|
+
/** An SSA value in typed IR. */
|
|
35
|
+
export type IrValueId = Branded<'IrValueId'>;
|
|
36
|
+
/** A physical function body: one owner plus one ABI variant. */
|
|
37
|
+
export type PhysicalBodyId = Branded<'PhysicalBodyId'>;
|
|
38
|
+
/**
|
|
39
|
+
* The families a normalized operation can belong to. This list is the semantic
|
|
40
|
+
* vocabulary of the frontend; a new family is an architecture decision, never a
|
|
41
|
+
* convenience for one source shape.
|
|
42
|
+
*/
|
|
43
|
+
export declare const operationFamilies: readonly ["invocation", "property", "binding", "allocation", "class-lifecycle", "computation", "control", "reference", "declaration-lifecycle", "destructuring", "protocol", "boundary", "dynamic-language", "element"];
|
|
44
|
+
export type OperationFamily = (typeof operationFamilies)[number];
|
|
45
|
+
/**
|
|
46
|
+
* The role a value plays in its operation's result. One operation may publish
|
|
47
|
+
* more than one result -- an optional call publishes both its call result and
|
|
48
|
+
* its short-circuit path -- and each is a separate authority coordinate.
|
|
49
|
+
*/
|
|
50
|
+
export declare const resultRoles: readonly ["value", "completion", "reference", "iterator-record", "short-circuit"];
|
|
51
|
+
export type ResultRole = (typeof resultRoles)[number];
|
|
52
|
+
/** Identity of a source position. Callers pass the checker's own coordinates. */
|
|
53
|
+
export declare const nodeId: (fileIdentity: string, kind: string, ordinal: number, specialization?: string) => NodeId;
|
|
54
|
+
/**
|
|
55
|
+
* The same identity with its monomorphization suffix removed -- the ROOT copy's
|
|
56
|
+
* id, which is the one a source position is indexed under.
|
|
57
|
+
*
|
|
58
|
+
* A copy has no source text of its own: `identity<number>` and
|
|
59
|
+
* `identity<string>` are two functions cut from one body, and only that body is
|
|
60
|
+
* in a file. So anything that maps an identity back to a `ts.Node` -- which is
|
|
61
|
+
* every diagnostic that wants to say `file:line:column` -- has to ask about the
|
|
62
|
+
* root when the copy misses, or a monomorphized program reports its refusals
|
|
63
|
+
* with no location at all. That was the state: an unmet obligation inside any
|
|
64
|
+
* generic printed its component id and nothing else.
|
|
65
|
+
*
|
|
66
|
+
* Only the LAST segment is trimmed. `@` cannot appear in a file identity (they
|
|
67
|
+
* are `f<index>`) or in a syntax-kind name, and the suffix is a chain of
|
|
68
|
+
* ordinals appended after the node's own ordinal, so the first `@` past the
|
|
69
|
+
* final `|` starts the specialization and nothing else can.
|
|
70
|
+
*/
|
|
71
|
+
export declare const withoutSpecialization: <Id extends NodeId | DeclarationId>(id: Id) => Id;
|
|
72
|
+
/**
|
|
73
|
+
* The (file, ordinal) coordinate a NodeId and a DeclarationId of the same node
|
|
74
|
+
* share, with the syntax-kind name -- present only in a NodeId -- and any
|
|
75
|
+
* monomorphization suffix both dropped.
|
|
76
|
+
*
|
|
77
|
+
* `identities.ts`'s ordinal walk assigns one ordinal per node per file
|
|
78
|
+
* regardless of syntax kind, so kind is never needed to tell two ordinals
|
|
79
|
+
* apart; it exists only to keep a NodeId's own spelling self-describing. Two
|
|
80
|
+
* callers that resolve a source position -- `locationOfNode`, keyed by a
|
|
81
|
+
* NodeId, and a caller holding only a DeclarationId or FunctionId -- are
|
|
82
|
+
* asking the same question, and this is what lets both resolve through the
|
|
83
|
+
* ONE index frontend.ts builds, rather than a second index being built to
|
|
84
|
+
* answer the DeclarationId-shaped question in a different currency.
|
|
85
|
+
*/
|
|
86
|
+
export declare const positionKeyOfNode: (id: NodeId) => string;
|
|
87
|
+
/** `positionKeyOfNode`'s twin for a DeclarationId, which never carries a kind segment to drop. */
|
|
88
|
+
export declare const positionKeyOfDeclaration: (id: DeclarationId) => string;
|
|
89
|
+
/** Identity of a declaration, keyed by the file and declaration ordinal, and by which monomorphized copy it belongs to. */
|
|
90
|
+
export declare const declarationId: (fileIdentity: string, ordinal: number, specialization?: string) => DeclarationId;
|
|
91
|
+
/** Identity of a source function. */
|
|
92
|
+
export declare const functionId: (declaration: DeclarationId) => FunctionId;
|
|
93
|
+
/**
|
|
94
|
+
* The declaration a source-function identity was minted from.
|
|
95
|
+
*
|
|
96
|
+
* Kept beside `functionId` because this file owns the spelling. Consumers
|
|
97
|
+
* must not strip the `fn|` prefix themselves and thereby become a second
|
|
98
|
+
* authority over identity structure.
|
|
99
|
+
*/
|
|
100
|
+
export declare const declarationOfFunction: (id: FunctionId) => DeclarationId;
|
|
101
|
+
/** The root source function shared by all monomorphized copies of one declaration. */
|
|
102
|
+
export declare const withoutFunctionSpecialization: (id: FunctionId) => FunctionId;
|
|
103
|
+
/** Identity of a non-function execution region. */
|
|
104
|
+
export declare const regionId: (owner: DeclarationId | NodeId, role: string) => RegionId;
|
|
105
|
+
/**
|
|
106
|
+
* Identity of a normalized operation.
|
|
107
|
+
*
|
|
108
|
+
* One AST node can normalize to several operations -- compound assignment is a
|
|
109
|
+
* property get, a computation, and a property set -- so the ordinal separates
|
|
110
|
+
* them. Two source spellings that mean the same thing must reach the same
|
|
111
|
+
* family and ordinal, and therefore the same identity.
|
|
112
|
+
*/
|
|
113
|
+
export declare const operationId: (source: NodeId, family: OperationFamily, ordinal: number) => OperationId;
|
|
114
|
+
/** Identity of one published result of one operation. */
|
|
115
|
+
export declare const semanticResultId: (operation: OperationId, role: ResultRole) => SemanticResultId;
|
|
116
|
+
/** Identity of an authority-connected component, keyed by its lowest member. */
|
|
117
|
+
export declare const componentId: (representative: OperationId) => ComponentId;
|
|
118
|
+
/** Identity of a typed-IR SSA value inside one physical body. */
|
|
119
|
+
export declare const irValueId: (body: PhysicalBodyId, ordinal: number) => IrValueId;
|
|
120
|
+
/** Identity of a physical body: the owner it lowers and the ABI variant chosen. */
|
|
121
|
+
export declare const physicalBodyId: (owner: FunctionId | RegionId, variantKey: string) => PhysicalBodyId;
|
|
122
|
+
/**
|
|
123
|
+
* The operation an already-minted result belongs to.
|
|
124
|
+
*
|
|
125
|
+
* A result is `result|<operation>|<role>` by construction (`semanticResultId`),
|
|
126
|
+
* so the operation is everything between the fixed prefix and the last
|
|
127
|
+
* separator -- one substring, taken directly.
|
|
128
|
+
*
|
|
129
|
+
* It was a `split('|')` + `slice` + `join('|')`, which is the same answer built
|
|
130
|
+
* by allocating an array of every segment and then a fresh string from most of
|
|
131
|
+
* them. That is invisible per call and decisive in aggregate: this runs at least
|
|
132
|
+
* once per graph EDGE (`model/graph.ts`), and a large program has hundreds of
|
|
133
|
+
* thousands, which put `String.prototype.split` at 38% of the whole corpus run's
|
|
134
|
+
* samples. A role never contains the separator -- the roles are a closed set
|
|
135
|
+
* (`resultRoles`) -- so `lastIndexOf` finds exactly the boundary the join
|
|
136
|
+
* reconstructed, and an operation that contains separators of its own is
|
|
137
|
+
* carried through untouched rather than taken apart and put back together.
|
|
138
|
+
*/
|
|
139
|
+
export declare const operationOfResult: (result: SemanticResultId) => OperationId;
|
|
140
|
+
/**
|
|
141
|
+
* The source node one operation normalized from.
|
|
142
|
+
*
|
|
143
|
+
* The inverse of `operationId`'s own join, and here for the same reason
|
|
144
|
+
* `operationOfResult` is: this file mints the spelling, so this file is the
|
|
145
|
+
* only place allowed to read it back. Exact rather than heuristic -- `encode`
|
|
146
|
+
* escapes every `|` inside a part, so an operation identity has precisely two
|
|
147
|
+
* separators after its node's, and stripping them cannot cut into the node.
|
|
148
|
+
*
|
|
149
|
+
* A DIAGNOSTIC's reason to exist: a report that names a component and no file
|
|
150
|
+
* cannot tell a reader which module failed to compile, and 334 unmet
|
|
151
|
+
* obligations printed as component ids were 334 rows nobody could act on.
|
|
152
|
+
*/
|
|
153
|
+
export declare const nodeOfOperation: (operation: OperationId) => NodeId;
|
|
154
|
+
/**
|
|
155
|
+
* Whether an owner identity names a non-function execution region.
|
|
156
|
+
*
|
|
157
|
+
* The one question a consumer may ask about an owner's *shape*, and it lives
|
|
158
|
+
* here for the same reason `operationOfResult` does: this file mints the
|
|
159
|
+
* spelling, so this file is the only place allowed to read it back. A caller
|
|
160
|
+
* that tested the prefix itself would become a second authority over a
|
|
161
|
+
* structure only `regionId` defines.
|
|
162
|
+
*/
|
|
163
|
+
export declare const isRegionId: (owner: FunctionId | RegionId) => owner is RegionId;
|
|
164
|
+
/**
|
|
165
|
+
* The file identity a declaration, function or region was minted in.
|
|
166
|
+
*
|
|
167
|
+
* Read back here for the same reason `operationOfResult` and `isRegionId` are:
|
|
168
|
+
* this file writes `decl|<file>|...`, `fn|decl|<file>|...` and
|
|
169
|
+
* `region|<decl or node>|<file>|...`, so this file is the only place allowed to
|
|
170
|
+
* take the file segment back out. The identity is an INDEX (`f12`), never a
|
|
171
|
+
* path -- a consumer that wants to display it asks the frontend's
|
|
172
|
+
* `sourceFileNames`, which is display evidence and nothing else. The one
|
|
173
|
+
* consumer today is the per-file translation-unit layout, which groups bodies
|
|
174
|
+
* by the file that declared them and needs no other fact about that file.
|
|
175
|
+
*/
|
|
176
|
+
export declare const fileIdentityOf: (owner: FunctionId | RegionId | DeclarationId) => string;
|
|
177
|
+
/** The role an already-minted result fills. */
|
|
178
|
+
export declare const roleOfResult: (result: SemanticResultId) => ResultRole;
|
|
179
|
+
export {};
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical identities.
|
|
3
|
+
*
|
|
4
|
+
* Every later fact in the compiler is keyed by one of these. A source offset,
|
|
5
|
+
* file name, declaration spelling, or rendered C++ string is never an identity
|
|
6
|
+
* here: those are display evidence, and admitting them as identity is what lets
|
|
7
|
+
* two spellings of one operation acquire two answers.
|
|
8
|
+
*
|
|
9
|
+
* The identities are opaque strings at runtime and distinct types at compile
|
|
10
|
+
* time, so a `DeclarationId` cannot be passed where an `OperationId` belongs
|
|
11
|
+
* even though both are strings once erased.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* The families a normalized operation can belong to. This list is the semantic
|
|
15
|
+
* vocabulary of the frontend; a new family is an architecture decision, never a
|
|
16
|
+
* convenience for one source shape.
|
|
17
|
+
*/
|
|
18
|
+
export const operationFamilies = [
|
|
19
|
+
'invocation',
|
|
20
|
+
'property',
|
|
21
|
+
'binding',
|
|
22
|
+
'allocation',
|
|
23
|
+
'class-lifecycle',
|
|
24
|
+
'computation',
|
|
25
|
+
'control',
|
|
26
|
+
'reference',
|
|
27
|
+
'declaration-lifecycle',
|
|
28
|
+
'destructuring',
|
|
29
|
+
'protocol',
|
|
30
|
+
'boundary',
|
|
31
|
+
'dynamic-language',
|
|
32
|
+
'element'
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* The role a value plays in its operation's result. One operation may publish
|
|
36
|
+
* more than one result -- an optional call publishes both its call result and
|
|
37
|
+
* its short-circuit path -- and each is a separate authority coordinate.
|
|
38
|
+
*/
|
|
39
|
+
export const resultRoles = ['value', 'completion', 'reference', 'iterator-record', 'short-circuit'];
|
|
40
|
+
const encode = (part) => part.replace(/[|]/g, '%7C');
|
|
41
|
+
/** Identity of a source position. Callers pass the checker's own coordinates. */
|
|
42
|
+
export const nodeId = (fileIdentity, kind, ordinal, specialization = '') => `node|${encode(fileIdentity)}|${encode(kind)}|${ordinal}${specializationSuffix(specialization)}`;
|
|
43
|
+
/**
|
|
44
|
+
* The suffix that separates one monomorphized copy of a body from another.
|
|
45
|
+
*
|
|
46
|
+
* A generic body exists once per instantiation, so the copies need distinct
|
|
47
|
+
* identities -- `identity<number>` and `identity<string>` are two functions with
|
|
48
|
+
* two ABIs, and one identity for both would make every later stage answer one
|
|
49
|
+
* question for two programs.
|
|
50
|
+
*
|
|
51
|
+
* The suffix is a chain of ORDINALS, never the spelling of a type argument:
|
|
52
|
+
* `@0` is the first instantiation the deterministic walk reached, exactly as a
|
|
53
|
+
* node is identified by its position in that same walk. It nests, because a
|
|
54
|
+
* generic inside a generic is copied once per pair. An empty specialization
|
|
55
|
+
* adds nothing at all, which keeps every identity in a program with no generics
|
|
56
|
+
* byte-identical to what it was before monomorphization existed.
|
|
57
|
+
*/
|
|
58
|
+
const specializationSuffix = (specialization) => (specialization === '' ? '' : `@${encode(specialization)}`);
|
|
59
|
+
/**
|
|
60
|
+
* The same identity with its monomorphization suffix removed -- the ROOT copy's
|
|
61
|
+
* id, which is the one a source position is indexed under.
|
|
62
|
+
*
|
|
63
|
+
* A copy has no source text of its own: `identity<number>` and
|
|
64
|
+
* `identity<string>` are two functions cut from one body, and only that body is
|
|
65
|
+
* in a file. So anything that maps an identity back to a `ts.Node` -- which is
|
|
66
|
+
* every diagnostic that wants to say `file:line:column` -- has to ask about the
|
|
67
|
+
* root when the copy misses, or a monomorphized program reports its refusals
|
|
68
|
+
* with no location at all. That was the state: an unmet obligation inside any
|
|
69
|
+
* generic printed its component id and nothing else.
|
|
70
|
+
*
|
|
71
|
+
* Only the LAST segment is trimmed. `@` cannot appear in a file identity (they
|
|
72
|
+
* are `f<index>`) or in a syntax-kind name, and the suffix is a chain of
|
|
73
|
+
* ordinals appended after the node's own ordinal, so the first `@` past the
|
|
74
|
+
* final `|` starts the specialization and nothing else can.
|
|
75
|
+
*/
|
|
76
|
+
export const withoutSpecialization = (id) => {
|
|
77
|
+
const lastSeparator = id.lastIndexOf('|');
|
|
78
|
+
const at = id.indexOf('@', lastSeparator + 1);
|
|
79
|
+
return (at < 0 ? id : id.slice(0, at));
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* The (file, ordinal) coordinate a NodeId and a DeclarationId of the same node
|
|
83
|
+
* share, with the syntax-kind name -- present only in a NodeId -- and any
|
|
84
|
+
* monomorphization suffix both dropped.
|
|
85
|
+
*
|
|
86
|
+
* `identities.ts`'s ordinal walk assigns one ordinal per node per file
|
|
87
|
+
* regardless of syntax kind, so kind is never needed to tell two ordinals
|
|
88
|
+
* apart; it exists only to keep a NodeId's own spelling self-describing. Two
|
|
89
|
+
* callers that resolve a source position -- `locationOfNode`, keyed by a
|
|
90
|
+
* NodeId, and a caller holding only a DeclarationId or FunctionId -- are
|
|
91
|
+
* asking the same question, and this is what lets both resolve through the
|
|
92
|
+
* ONE index frontend.ts builds, rather than a second index being built to
|
|
93
|
+
* answer the DeclarationId-shaped question in a different currency.
|
|
94
|
+
*/
|
|
95
|
+
export const positionKeyOfNode = (id) => {
|
|
96
|
+
const parts = withoutSpecialization(id).split('|');
|
|
97
|
+
return `${parts[1]}|${parts[3]}`;
|
|
98
|
+
};
|
|
99
|
+
/** `positionKeyOfNode`'s twin for a DeclarationId, which never carries a kind segment to drop. */
|
|
100
|
+
export const positionKeyOfDeclaration = (id) => {
|
|
101
|
+
const parts = withoutSpecialization(id).split('|');
|
|
102
|
+
return `${parts[1]}|${parts[2]}`;
|
|
103
|
+
};
|
|
104
|
+
/** Identity of a declaration, keyed by the file and declaration ordinal, and by which monomorphized copy it belongs to. */
|
|
105
|
+
export const declarationId = (fileIdentity, ordinal, specialization = '') => `decl|${encode(fileIdentity)}|${ordinal}${specializationSuffix(specialization)}`;
|
|
106
|
+
/** Identity of a source function. */
|
|
107
|
+
export const functionId = (declaration) => `fn|${declaration}`;
|
|
108
|
+
/**
|
|
109
|
+
* The declaration a source-function identity was minted from.
|
|
110
|
+
*
|
|
111
|
+
* Kept beside `functionId` because this file owns the spelling. Consumers
|
|
112
|
+
* must not strip the `fn|` prefix themselves and thereby become a second
|
|
113
|
+
* authority over identity structure.
|
|
114
|
+
*/
|
|
115
|
+
export const declarationOfFunction = (id) => id.slice('fn|'.length);
|
|
116
|
+
/** The root source function shared by all monomorphized copies of one declaration. */
|
|
117
|
+
export const withoutFunctionSpecialization = (id) => functionId(withoutSpecialization(declarationOfFunction(id)));
|
|
118
|
+
/** Identity of a non-function execution region. */
|
|
119
|
+
export const regionId = (owner, role) => `region|${owner}|${encode(role)}`;
|
|
120
|
+
/**
|
|
121
|
+
* Identity of a normalized operation.
|
|
122
|
+
*
|
|
123
|
+
* One AST node can normalize to several operations -- compound assignment is a
|
|
124
|
+
* property get, a computation, and a property set -- so the ordinal separates
|
|
125
|
+
* them. Two source spellings that mean the same thing must reach the same
|
|
126
|
+
* family and ordinal, and therefore the same identity.
|
|
127
|
+
*/
|
|
128
|
+
export const operationId = (source, family, ordinal) => `op|${source}|${family}|${ordinal}`;
|
|
129
|
+
/** Identity of one published result of one operation. */
|
|
130
|
+
export const semanticResultId = (operation, role) => `result|${operation}|${role}`;
|
|
131
|
+
/** The fixed prefix `semanticResultId` writes, so readers strip exactly what it wrote. */
|
|
132
|
+
const resultPrefixLength = 'result|'.length;
|
|
133
|
+
/** Identity of an authority-connected component, keyed by its lowest member. */
|
|
134
|
+
export const componentId = (representative) => `component|${representative}`;
|
|
135
|
+
/** Identity of a typed-IR SSA value inside one physical body. */
|
|
136
|
+
export const irValueId = (body, ordinal) => `ssa|${body}|${ordinal}`;
|
|
137
|
+
/** Identity of a physical body: the owner it lowers and the ABI variant chosen. */
|
|
138
|
+
export const physicalBodyId = (owner, variantKey) => `body|${owner}|${encode(variantKey)}`;
|
|
139
|
+
/**
|
|
140
|
+
* The operation an already-minted result belongs to.
|
|
141
|
+
*
|
|
142
|
+
* A result is `result|<operation>|<role>` by construction (`semanticResultId`),
|
|
143
|
+
* so the operation is everything between the fixed prefix and the last
|
|
144
|
+
* separator -- one substring, taken directly.
|
|
145
|
+
*
|
|
146
|
+
* It was a `split('|')` + `slice` + `join('|')`, which is the same answer built
|
|
147
|
+
* by allocating an array of every segment and then a fresh string from most of
|
|
148
|
+
* them. That is invisible per call and decisive in aggregate: this runs at least
|
|
149
|
+
* once per graph EDGE (`model/graph.ts`), and a large program has hundreds of
|
|
150
|
+
* thousands, which put `String.prototype.split` at 38% of the whole corpus run's
|
|
151
|
+
* samples. A role never contains the separator -- the roles are a closed set
|
|
152
|
+
* (`resultRoles`) -- so `lastIndexOf` finds exactly the boundary the join
|
|
153
|
+
* reconstructed, and an operation that contains separators of its own is
|
|
154
|
+
* carried through untouched rather than taken apart and put back together.
|
|
155
|
+
*/
|
|
156
|
+
export const operationOfResult = (result) => result.slice(resultPrefixLength, result.lastIndexOf('|'));
|
|
157
|
+
/**
|
|
158
|
+
* The source node one operation normalized from.
|
|
159
|
+
*
|
|
160
|
+
* The inverse of `operationId`'s own join, and here for the same reason
|
|
161
|
+
* `operationOfResult` is: this file mints the spelling, so this file is the
|
|
162
|
+
* only place allowed to read it back. Exact rather than heuristic -- `encode`
|
|
163
|
+
* escapes every `|` inside a part, so an operation identity has precisely two
|
|
164
|
+
* separators after its node's, and stripping them cannot cut into the node.
|
|
165
|
+
*
|
|
166
|
+
* A DIAGNOSTIC's reason to exist: a report that names a component and no file
|
|
167
|
+
* cannot tell a reader which module failed to compile, and 334 unmet
|
|
168
|
+
* obligations printed as component ids were 334 rows nobody could act on.
|
|
169
|
+
*/
|
|
170
|
+
export const nodeOfOperation = (operation) => {
|
|
171
|
+
const last = operation.lastIndexOf('|');
|
|
172
|
+
const family = operation.lastIndexOf('|', last - 1);
|
|
173
|
+
return operation.slice('op|'.length, family);
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Whether an owner identity names a non-function execution region.
|
|
177
|
+
*
|
|
178
|
+
* The one question a consumer may ask about an owner's *shape*, and it lives
|
|
179
|
+
* here for the same reason `operationOfResult` does: this file mints the
|
|
180
|
+
* spelling, so this file is the only place allowed to read it back. A caller
|
|
181
|
+
* that tested the prefix itself would become a second authority over a
|
|
182
|
+
* structure only `regionId` defines.
|
|
183
|
+
*/
|
|
184
|
+
export const isRegionId = (owner) => owner.startsWith('region|');
|
|
185
|
+
const decode = (part) => part.replace(/%7C/g, '|');
|
|
186
|
+
/**
|
|
187
|
+
* The file identity a declaration, function or region was minted in.
|
|
188
|
+
*
|
|
189
|
+
* Read back here for the same reason `operationOfResult` and `isRegionId` are:
|
|
190
|
+
* this file writes `decl|<file>|...`, `fn|decl|<file>|...` and
|
|
191
|
+
* `region|<decl or node>|<file>|...`, so this file is the only place allowed to
|
|
192
|
+
* take the file segment back out. The identity is an INDEX (`f12`), never a
|
|
193
|
+
* path -- a consumer that wants to display it asks the frontend's
|
|
194
|
+
* `sourceFileNames`, which is display evidence and nothing else. The one
|
|
195
|
+
* consumer today is the per-file translation-unit layout, which groups bodies
|
|
196
|
+
* by the file that declared them and needs no other fact about that file.
|
|
197
|
+
*/
|
|
198
|
+
export const fileIdentityOf = (owner) => {
|
|
199
|
+
const parts = owner.split('|');
|
|
200
|
+
const segment = parts[0] === 'decl' ? parts[1] : parts[2];
|
|
201
|
+
if (segment === undefined)
|
|
202
|
+
throw new Error(`identity ${owner} carries no file segment`);
|
|
203
|
+
return decode(segment);
|
|
204
|
+
};
|
|
205
|
+
/** The role an already-minted result fills. */
|
|
206
|
+
export const roleOfResult = (result) => {
|
|
207
|
+
const role = result.slice(result.lastIndexOf('|') + 1);
|
|
208
|
+
const known = resultRoles.find((candidate) => candidate === role);
|
|
209
|
+
if (!known)
|
|
210
|
+
throw new Error(`semantic result ${result} does not carry a known result role`);
|
|
211
|
+
return known;
|
|
212
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { DeclarationId, PhysicalBodyId } from '../identity/ids.js';
|
|
2
|
+
import type { ClassLayout } from '../projection/classes.js';
|
|
3
|
+
import type { Representation } from '../representation/model.js';
|
|
4
|
+
import type { GetOperation, IrBody } from './model.js';
|
|
5
|
+
import type { ReflectionExposure } from './reflection-demand.js';
|
|
6
|
+
/**
|
|
7
|
+
* A union read whose class arm has no such member at all.
|
|
8
|
+
*
|
|
9
|
+
* three asks `scene.background` -- a `Texture | Color` there -- for
|
|
10
|
+
* `isCubeTexture`, `mapping` and `colorSpace`; `Color` declares none of them.
|
|
11
|
+
* The reflection census used to require EVERY surface of the receiver to
|
|
12
|
+
* declare the key, so the lacking arm promoted both classes to a full dynamic
|
|
13
|
+
* protocol and the emitter read the `Color` arm through its expando table.
|
|
14
|
+
*
|
|
15
|
+
* In the language, reading a key an object neither owns nor inherits is
|
|
16
|
+
* `undefined`. For a class instance the inherited half is closed by its
|
|
17
|
+
* layouts: no class on the arm's chain declares the key, and neither does any
|
|
18
|
+
* class below it (a `class-ref` arm holds subclass instances too), and the key
|
|
19
|
+
* is not an `Object.prototype` member. The own half is what the reflection
|
|
20
|
+
* census exists to decide: every way a program can give an instance an own
|
|
21
|
+
* property its class does not declare -- a named or computed write, a
|
|
22
|
+
* definition, a spread target, an escape to `dynamic` or to an unknown call --
|
|
23
|
+
* promotes that class to a full protocol on its own. So the census does not
|
|
24
|
+
* promote for this read (`absentClassArmRead`), and once the exposure is
|
|
25
|
+
* closed, an arm whose class it still left without one provably answers
|
|
26
|
+
* `undefined` (`finalizeAbsentClassArms`). Where the class did end up full, the
|
|
27
|
+
* arm keeps the expando lookup, which is exact there.
|
|
28
|
+
*
|
|
29
|
+
* The result must hold that `undefined` natively, and its other values must be
|
|
30
|
+
* primitive: the fallback expando read hands back a box, and only a primitive
|
|
31
|
+
* payload unboxes without an object protocol the census did not publish.
|
|
32
|
+
*/
|
|
33
|
+
/** Whether a `class-ref(declaration)` value can own or inherit `key` by any declaration in the program. */
|
|
34
|
+
export declare const classFamilyLacksKey: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => boolean;
|
|
35
|
+
/** The census half: `surface` is a class arm of the union `receiver` that answers this read with `undefined`. */
|
|
36
|
+
export declare const absentClassArmRead: (receiver: Representation, surface: Representation, key: string, result: Representation, classes: ReadonlyMap<DeclarationId, ClassLayout>) => surface is Extract<Representation, {
|
|
37
|
+
kind: "class-ref";
|
|
38
|
+
}>;
|
|
39
|
+
/** Certification's re-check of a published stamp against the same proof and the closed exposure. */
|
|
40
|
+
export declare const absentClassArmsHold: (operation: GetOperation, key: string | null, classes: ReadonlyMap<DeclarationId, ClassLayout>, exposure: ReflectionExposure | undefined) => boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Stamp every union read with the class arms the CLOSED exposure proves absent.
|
|
43
|
+
* Runs after `closePhysicalClassReflection`: closure only ever adds a full
|
|
44
|
+
* protocol (to a full class's ancestors), and a subclass that could hold the
|
|
45
|
+
* key as an expando makes its ancestor full there, so the closed verdict on the
|
|
46
|
+
* arm's own class already covers every instance the arm can hold.
|
|
47
|
+
*/
|
|
48
|
+
export declare const finalizeAbsentClassArms: (bodies: ReadonlyMap<PhysicalBodyId, IrBody>, exposure: ReflectionExposure, classes: ReadonlyMap<DeclarationId, ClassLayout>) => ReadonlyMap<PhysicalBodyId, IrBody>;
|