@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,66 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
const isJavaScriptFile = (fileName) => fileName.endsWith('.js') || fileName.endsWith('.mjs') || fileName.endsWith('.cjs');
|
|
3
|
+
/** `Symbol.<name>` -- a well-known symbol read straight off the global `Symbol`. */
|
|
4
|
+
const isWellKnownSymbolKey = (key) => ts.isPropertyAccessExpression(key) && ts.isIdentifier(key.expression) && key.expression.text === 'Symbol';
|
|
5
|
+
/**
|
|
6
|
+
* The identifier a member chain is rooted at, walking property reads only:
|
|
7
|
+
* `o` for `o`, `o.x` and `o.x.y`; `null` for a chain that passes through a
|
|
8
|
+
* call, an element read, `this`, or anything else this transform does not
|
|
9
|
+
* claim to understand.
|
|
10
|
+
*/
|
|
11
|
+
const chainRootOf = (holder) => {
|
|
12
|
+
let node = holder;
|
|
13
|
+
while (ts.isPropertyAccessExpression(node))
|
|
14
|
+
node = node.expression;
|
|
15
|
+
return ts.isIdentifier(node) ? node : null;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Every identifier this file declares with an object-literal initialiser, by
|
|
19
|
+
* name -- collected once per file so each candidate costs one set lookup.
|
|
20
|
+
* Scoping is deliberately ignored: a same-named shadow with a non-literal
|
|
21
|
+
* initialiser would at worst parenthesise a function on a holder the checker
|
|
22
|
+
* could have bound, and a parenthesised function is still a correct program.
|
|
23
|
+
*/
|
|
24
|
+
const objectLiteralDeclarationsIn = (file) => {
|
|
25
|
+
const names = new Set();
|
|
26
|
+
const visit = (node) => {
|
|
27
|
+
if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer && ts.isObjectLiteralExpression(node.initializer))
|
|
28
|
+
names.add(node.name.text);
|
|
29
|
+
ts.forEachChild(node, visit);
|
|
30
|
+
};
|
|
31
|
+
visit(file);
|
|
32
|
+
return names;
|
|
33
|
+
};
|
|
34
|
+
const candidatesIn = (file) => {
|
|
35
|
+
const holders = objectLiteralDeclarationsIn(file);
|
|
36
|
+
if (holders.size === 0)
|
|
37
|
+
return [];
|
|
38
|
+
const found = [];
|
|
39
|
+
const visit = (node) => {
|
|
40
|
+
if (ts.isBinaryExpression(node) &&
|
|
41
|
+
node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
42
|
+
ts.isElementAccessExpression(node.left) &&
|
|
43
|
+
isWellKnownSymbolKey(node.left.argumentExpression) &&
|
|
44
|
+
(ts.isFunctionExpression(node.right) || ts.isArrowFunction(node.right))) {
|
|
45
|
+
const root = chainRootOf(node.left.expression);
|
|
46
|
+
if (root && holders.has(root.text))
|
|
47
|
+
found.push({ start: node.right.getStart(file), end: node.right.end });
|
|
48
|
+
}
|
|
49
|
+
ts.forEachChild(node, visit);
|
|
50
|
+
};
|
|
51
|
+
ts.forEachChild(file, visit);
|
|
52
|
+
return found;
|
|
53
|
+
};
|
|
54
|
+
export const symbolKeyedExpandoSourceTransform = (input) => {
|
|
55
|
+
if (!isJavaScriptFile(input.fileName) || !input.text.includes('[Symbol.'))
|
|
56
|
+
return null;
|
|
57
|
+
const file = ts.createSourceFile(input.fileName, input.text, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS);
|
|
58
|
+
const candidates = candidatesIn(file);
|
|
59
|
+
if (candidates.length === 0)
|
|
60
|
+
return null;
|
|
61
|
+
let rewritten = input.text;
|
|
62
|
+
for (const candidate of [...candidates].reverse()) {
|
|
63
|
+
rewritten = `${rewritten.slice(0, candidate.start)}(${rewritten.slice(candidate.start, candidate.end)})${rewritten.slice(candidate.end)}`;
|
|
64
|
+
}
|
|
65
|
+
return rewritten;
|
|
66
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/** `this.constructor` -- the literal receiver, never an alias or a plain object. */
|
|
3
|
+
const isThisConstructorAccess = (node) => ts.isPropertyAccessExpression(node) && node.expression.kind === ts.SyntaxKind.ThisKeyword && node.name.text === 'constructor';
|
|
4
|
+
/**
|
|
5
|
+
* The nearest function that actually BINDS `this` for `node`, skipping
|
|
6
|
+
* arrow functions (which inherit `this` from their enclosing scope rather
|
|
7
|
+
* than rebinding it) -- `null` when `node` sits at the top level of a file
|
|
8
|
+
* with no such function at all.
|
|
9
|
+
*/
|
|
10
|
+
const thisBindingBoundary = (node) => {
|
|
11
|
+
let n = node.parent;
|
|
12
|
+
while (n) {
|
|
13
|
+
if (ts.isArrowFunction(n)) {
|
|
14
|
+
n = n.parent;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
if (ts.isMethodDeclaration(n) ||
|
|
18
|
+
ts.isGetAccessor(n) ||
|
|
19
|
+
ts.isSetAccessor(n) ||
|
|
20
|
+
ts.isConstructorDeclaration(n) ||
|
|
21
|
+
ts.isFunctionDeclaration(n) ||
|
|
22
|
+
ts.isFunctionExpression(n))
|
|
23
|
+
return n;
|
|
24
|
+
n = n.parent;
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Whether `node`'s `this` is a class instance: its nearest `this`-binding
|
|
30
|
+
* function is a method/accessor/constructor declared directly on a class,
|
|
31
|
+
* never a plain `function` (whose `this` a caller could bind to anything)
|
|
32
|
+
* and never one with no class parent at all (an object-literal method, a
|
|
33
|
+
* free function).
|
|
34
|
+
*/
|
|
35
|
+
const isClassInstanceThis = (node) => {
|
|
36
|
+
const boundary = thisBindingBoundary(node);
|
|
37
|
+
if (!boundary)
|
|
38
|
+
return false;
|
|
39
|
+
if (ts.isFunctionDeclaration(boundary) || ts.isFunctionExpression(boundary))
|
|
40
|
+
return false;
|
|
41
|
+
return boundary.parent !== undefined && ts.isClassLike(boundary.parent);
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Whether `file` anywhere assigns to a `.constructor` property -- the one
|
|
45
|
+
* case that would make `this.constructor` not denote the class's own
|
|
46
|
+
* constructor at runtime. Scanned whole-file, conservatively: a single
|
|
47
|
+
* reassignment anywhere disqualifies every occurrence in the file, rather
|
|
48
|
+
* than this transform trying to prove which classes it can and cannot reach.
|
|
49
|
+
*/
|
|
50
|
+
const fileReassignsConstructor = (file) => {
|
|
51
|
+
let found = false;
|
|
52
|
+
const visit = (node) => {
|
|
53
|
+
if (found)
|
|
54
|
+
return;
|
|
55
|
+
if (ts.isBinaryExpression(node) &&
|
|
56
|
+
node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
57
|
+
ts.isPropertyAccessExpression(node.left) &&
|
|
58
|
+
node.left.name.text === 'constructor') {
|
|
59
|
+
found = true;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
ts.forEachChild(node, visit);
|
|
63
|
+
};
|
|
64
|
+
visit(file);
|
|
65
|
+
return found;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* How to spell the cast, in a language the file is actually written in.
|
|
69
|
+
*
|
|
70
|
+
* `x as T` is TypeScript syntax. Splicing it into a `.js` file makes the
|
|
71
|
+
* checker report "Type assertion expressions can only be used in TypeScript
|
|
72
|
+
* files" for every rewritten site -- it recovers and still infers the type, so
|
|
73
|
+
* the measurement looked clean, but the transform was writing source the
|
|
74
|
+
* language does not have. JavaScript's own spelling for the same assertion is
|
|
75
|
+
* a parenthesised JSDoc type cast, which `checkJs` reads with identical
|
|
76
|
+
* meaning and no diagnostic. Every three.js file this transform touches is
|
|
77
|
+
* `.js`; a TypeScript class reaches the same rule through `as`.
|
|
78
|
+
*/
|
|
79
|
+
const castTo = (fileName, expression, type) => fileName.endsWith('.ts') || fileName.endsWith('.tsx') ? `(${expression} as ${type})` : `(/** @type {${type}} */ (${expression}))`;
|
|
80
|
+
const candidatesIn = (file) => {
|
|
81
|
+
const found = [];
|
|
82
|
+
const visit = (node) => {
|
|
83
|
+
if (ts.isNewExpression(node) && isThisConstructorAccess(node.expression) && isClassInstanceThis(node)) {
|
|
84
|
+
found.push({
|
|
85
|
+
calleeStart: node.expression.getStart(file),
|
|
86
|
+
calleeEnd: node.expression.end,
|
|
87
|
+
replacement: castTo(file.fileName, node.expression.getText(file), 'new (...args: any[]) => this')
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
ts.forEachChild(node, visit);
|
|
91
|
+
};
|
|
92
|
+
ts.forEachChild(file, visit);
|
|
93
|
+
return found;
|
|
94
|
+
};
|
|
95
|
+
const scriptKindOf = (fileName) => {
|
|
96
|
+
if (fileName.endsWith('.tsx'))
|
|
97
|
+
return ts.ScriptKind.TSX;
|
|
98
|
+
if (fileName.endsWith('.jsx'))
|
|
99
|
+
return ts.ScriptKind.JSX;
|
|
100
|
+
if (fileName.endsWith('.js') || fileName.endsWith('.mjs') || fileName.endsWith('.cjs'))
|
|
101
|
+
return ts.ScriptKind.JS;
|
|
102
|
+
return ts.ScriptKind.TS;
|
|
103
|
+
};
|
|
104
|
+
export const thisConstructorSourceTransform = (input) => {
|
|
105
|
+
// A file that never spells `.constructor` cannot contain the idiom -- one
|
|
106
|
+
// substring test is what a file this transform has nothing to do with costs.
|
|
107
|
+
if (!input.text.includes('.constructor'))
|
|
108
|
+
return null;
|
|
109
|
+
const file = ts.createSourceFile(input.fileName, input.text, ts.ScriptTarget.Latest, true, scriptKindOf(input.fileName));
|
|
110
|
+
if (fileReassignsConstructor(file))
|
|
111
|
+
return null;
|
|
112
|
+
const candidates = candidatesIn(file);
|
|
113
|
+
if (candidates.length === 0)
|
|
114
|
+
return null;
|
|
115
|
+
let rewritten = input.text;
|
|
116
|
+
// Spliced from the end so every earlier candidate's range is still the
|
|
117
|
+
// range it was measured at -- see the module comment.
|
|
118
|
+
for (const candidate of [...candidates].reverse()) {
|
|
119
|
+
rewritten = rewritten.slice(0, candidate.calleeStart) + candidate.replacement + rewritten.slice(candidate.calleeEnd);
|
|
120
|
+
}
|
|
121
|
+
return rewritten;
|
|
122
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { DeclarationId } from '../identity/ids.js';
|
|
3
|
+
import type { IdentityTable } from './normalize/identities.js';
|
|
4
|
+
/**
|
|
5
|
+
* The classes no evaluation can produce an instance of: the constructor's own
|
|
6
|
+
* body cannot complete normally -- it has no `return`, and one of its
|
|
7
|
+
* top-level statements throws or calls a function whose declared result is
|
|
8
|
+
* `never` -- or a class it extends is such a class, since every derived
|
|
9
|
+
* construction runs its base's.
|
|
10
|
+
*
|
|
11
|
+
* A host target states capabilities it does not have this way: node-compat's
|
|
12
|
+
* `Http2ServerRequest` extends the HTTP/1 `IncomingMessage` so the library's
|
|
13
|
+
* `IncomingMessage | Http2ServerRequest` unions resolve, and its constructor
|
|
14
|
+
* calls `nodeNotImplemented`, declared `never`. `x instanceof
|
|
15
|
+
* Http2ServerRequest` is then false for every value the program can hold,
|
|
16
|
+
* whatever carries it (`projection/instance-test.ts`).
|
|
17
|
+
*
|
|
18
|
+
* `never` is the checker's statement of a function's result, which the
|
|
19
|
+
* program's own compiled body has to honour: a body that returns normally
|
|
20
|
+
* where `never` was declared does not typecheck.
|
|
21
|
+
*/
|
|
22
|
+
export declare const uninstantiableClassesOf: (checker: ts.TypeChecker, identities: IdentityTable, files: readonly ts.SourceFile[]) => ReadonlySet<DeclarationId>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/** Whether `body` can complete normally at all: no `return` anywhere, and a top-level statement that never completes. */
|
|
3
|
+
const bodyNeverCompletes = (checker, body) => {
|
|
4
|
+
let returns = false;
|
|
5
|
+
const visit = (node) => {
|
|
6
|
+
if (returns || ts.isFunctionLike(node) || ts.isClassLike(node))
|
|
7
|
+
return;
|
|
8
|
+
if (ts.isReturnStatement(node)) {
|
|
9
|
+
returns = true;
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
ts.forEachChild(node, visit);
|
|
13
|
+
};
|
|
14
|
+
visit(body);
|
|
15
|
+
if (returns)
|
|
16
|
+
return false;
|
|
17
|
+
return body.statements.some((statement) => {
|
|
18
|
+
if (ts.isThrowStatement(statement))
|
|
19
|
+
return true;
|
|
20
|
+
if (!ts.isExpressionStatement(statement) || !ts.isCallExpression(statement.expression))
|
|
21
|
+
return false;
|
|
22
|
+
const signature = checker.getResolvedSignature(statement.expression);
|
|
23
|
+
return signature !== undefined && (checker.getReturnTypeOfSignature(signature).flags & ts.TypeFlags.Never) !== 0;
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The classes no evaluation can produce an instance of: the constructor's own
|
|
28
|
+
* body cannot complete normally -- it has no `return`, and one of its
|
|
29
|
+
* top-level statements throws or calls a function whose declared result is
|
|
30
|
+
* `never` -- or a class it extends is such a class, since every derived
|
|
31
|
+
* construction runs its base's.
|
|
32
|
+
*
|
|
33
|
+
* A host target states capabilities it does not have this way: node-compat's
|
|
34
|
+
* `Http2ServerRequest` extends the HTTP/1 `IncomingMessage` so the library's
|
|
35
|
+
* `IncomingMessage | Http2ServerRequest` unions resolve, and its constructor
|
|
36
|
+
* calls `nodeNotImplemented`, declared `never`. `x instanceof
|
|
37
|
+
* Http2ServerRequest` is then false for every value the program can hold,
|
|
38
|
+
* whatever carries it (`projection/instance-test.ts`).
|
|
39
|
+
*
|
|
40
|
+
* `never` is the checker's statement of a function's result, which the
|
|
41
|
+
* program's own compiled body has to honour: a body that returns normally
|
|
42
|
+
* where `never` was declared does not typecheck.
|
|
43
|
+
*/
|
|
44
|
+
export const uninstantiableClassesOf = (checker, identities, files) => {
|
|
45
|
+
const answers = new Map();
|
|
46
|
+
const uninstantiable = (node) => {
|
|
47
|
+
const known = answers.get(node);
|
|
48
|
+
if (known !== undefined)
|
|
49
|
+
return known;
|
|
50
|
+
answers.set(node, false);
|
|
51
|
+
const constructor = node.members.find((member) => ts.isConstructorDeclaration(member) && !!member.body);
|
|
52
|
+
let answer = constructor?.body !== undefined && bodyNeverCompletes(checker, constructor.body);
|
|
53
|
+
const heritage = node.heritageClauses?.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types[0];
|
|
54
|
+
if (!answer && heritage) {
|
|
55
|
+
const symbol = checker.getSymbolAtLocation(heritage.expression);
|
|
56
|
+
const resolved = symbol && (symbol.flags & ts.SymbolFlags.Alias) !== 0 ? checker.getAliasedSymbol(symbol) : symbol;
|
|
57
|
+
const bases = (resolved?.declarations ?? []).filter((declaration) => ts.isClassLike(declaration));
|
|
58
|
+
answer = bases.length === 1 && !bases[0].getSourceFile().isDeclarationFile && uninstantiable(bases[0]);
|
|
59
|
+
}
|
|
60
|
+
answers.set(node, answer);
|
|
61
|
+
return answer;
|
|
62
|
+
};
|
|
63
|
+
const found = new Set();
|
|
64
|
+
for (const file of files) {
|
|
65
|
+
if (file.isDeclarationFile)
|
|
66
|
+
continue;
|
|
67
|
+
const visit = (node) => {
|
|
68
|
+
if (ts.isClassLike(node) && uninstantiable(node))
|
|
69
|
+
found.add(identities.declarationIdOf(node));
|
|
70
|
+
ts.forEachChild(node, visit);
|
|
71
|
+
};
|
|
72
|
+
visit(file);
|
|
73
|
+
}
|
|
74
|
+
return found;
|
|
75
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { createCppDocumentBuilder, emptyCppFacts, render } from './document.js';
|
|
3
|
+
const bucketOf = (name) => {
|
|
4
|
+
let hash = 2166136261;
|
|
5
|
+
for (let index = 0; index < name.length; index++)
|
|
6
|
+
hash = Math.imul(hash ^ name.charCodeAt(index), 16777619);
|
|
7
|
+
return (hash >>> 0) % 16;
|
|
8
|
+
};
|
|
9
|
+
/** Fixed buckets keep an edit from repacking unrelated compilation units. */
|
|
10
|
+
export const balanceCppUnits = (units, stem) => {
|
|
11
|
+
const result = [];
|
|
12
|
+
const buckets = new Map();
|
|
13
|
+
for (const unit of units) {
|
|
14
|
+
if (unit.role !== 'module' || Buffer.byteLength(unit.source, 'utf8') > 16 * 1024) {
|
|
15
|
+
result.push(unit);
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const bucket = bucketOf(unit.fileName);
|
|
19
|
+
const group = buckets.get(bucket) ?? [];
|
|
20
|
+
group.push(unit);
|
|
21
|
+
buckets.set(bucket, group);
|
|
22
|
+
}
|
|
23
|
+
for (const [bucket, members] of [...buckets].sort(([left], [right]) => left - right)) {
|
|
24
|
+
let group = [];
|
|
25
|
+
let bytes = 0;
|
|
26
|
+
let part = 0;
|
|
27
|
+
const publish = () => {
|
|
28
|
+
if (group.length === 0)
|
|
29
|
+
return;
|
|
30
|
+
if (group.length === 1)
|
|
31
|
+
result.push(group[0]);
|
|
32
|
+
else {
|
|
33
|
+
const builder = createCppDocumentBuilder();
|
|
34
|
+
for (const unit of group)
|
|
35
|
+
builder.append({ text: unit.source, facts: emptyCppFacts });
|
|
36
|
+
result.push({
|
|
37
|
+
role: 'module',
|
|
38
|
+
fileName: `${stem}.group-${bucket.toString(16).padStart(2, '0')}-${part}.cpp`,
|
|
39
|
+
sourceFile: null,
|
|
40
|
+
sourceFiles: group.flatMap((unit) => (unit.sourceFile === null ? [] : [unit.sourceFile])),
|
|
41
|
+
source: render(builder.seal())
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
part++;
|
|
45
|
+
group = [];
|
|
46
|
+
bytes = 0;
|
|
47
|
+
};
|
|
48
|
+
for (const unit of members.sort((left, right) => left.fileName.localeCompare(right.fileName))) {
|
|
49
|
+
const size = Buffer.byteLength(unit.source, 'utf8');
|
|
50
|
+
if (group.length >= 16 || bytes + size > 64 * 1024)
|
|
51
|
+
publish();
|
|
52
|
+
group.push(unit);
|
|
53
|
+
bytes += size;
|
|
54
|
+
}
|
|
55
|
+
publish();
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { FunctionId, IrValueId } from '../../identity/ids.js';
|
|
2
|
+
import { type PrivateBorrowCell } from '../../ir/borrowed-call-arguments.js';
|
|
3
|
+
import type { IrBody, IrOperand } from '../../ir/model.js';
|
|
4
|
+
import { type CallableAbi } from '../../representation/model.js';
|
|
5
|
+
/** The original body name remains an owning entry wrapper. This additional
|
|
6
|
+
* entry is internal and may be selected only with stable-actual evidence.
|
|
7
|
+
* No callable's public ABI or thunk identity names the borrowed body. */
|
|
8
|
+
export interface StableBorrowEntry {
|
|
9
|
+
readonly owner: FunctionId;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly abi: CallableAbi;
|
|
12
|
+
readonly formals: ReadonlySet<number>;
|
|
13
|
+
}
|
|
14
|
+
export declare const stableBorrowEntryOf: (body: IrBody, owner: FunctionId, privateCell: PrivateBorrowCell, originalBorrowed: ReadonlySet<number>, dyingArguments: ReadonlySet<IrValueId>, bodyCallsUnsafeKnownCallee: boolean, admission: {
|
|
15
|
+
readonly captureFree: boolean;
|
|
16
|
+
readonly synchronous: boolean;
|
|
17
|
+
readonly singleBody: boolean;
|
|
18
|
+
readonly unchangedNumericAbi: boolean;
|
|
19
|
+
}) => StableBorrowEntry | null;
|
|
20
|
+
/** A private caller slot survives arbitrary program re-entry. All extra
|
|
21
|
+
* reference formals must bind such slots; otherwise use the existing owning
|
|
22
|
+
* entry, whose snapshots bind the borrowed implementation safely.
|
|
23
|
+
*
|
|
24
|
+
* Reject mixed move/borrow evaluation: C++ may evaluate an owning sibling's
|
|
25
|
+
* std::move before another argument binds a reference to the same slot.
|
|
26
|
+
* Conservatively reject ANY potentially moving reference sibling rather than
|
|
27
|
+
* claiming an alias distinction the emitter's deferred expressions may erase.
|
|
28
|
+
* Scalars cannot move a string/handle slot. Binding a borrowed formal does
|
|
29
|
+
* not itself move from its argument. */
|
|
30
|
+
export declare const stableBorrowEntryAccepts: (entry: StableBorrowEntry, actuals: readonly IrOperand[], stable: ReadonlySet<IrValueId>, dyingArguments: ReadonlySet<IrValueId>) => boolean;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { readonlyBorrowFormalsOf } from '../../ir/borrowed-call-arguments.js';
|
|
2
|
+
import { passingOf, representationKey } from '../../representation/model.js';
|
|
3
|
+
import { cppBodyName } from './types.js';
|
|
4
|
+
export const stableBorrowEntryOf = (body, owner, privateCell, originalBorrowed, dyingArguments, bodyCallsUnsafeKnownCallee, admission) => {
|
|
5
|
+
const abi = body.abi;
|
|
6
|
+
if (body.sourceOwner !== owner ||
|
|
7
|
+
!admission.captureFree ||
|
|
8
|
+
!admission.synchronous ||
|
|
9
|
+
!admission.singleBody ||
|
|
10
|
+
!admission.unchangedNumericAbi)
|
|
11
|
+
return null;
|
|
12
|
+
// A receiver is not disqualifying: `signatureOf`/`bodyFormalsOf` already
|
|
13
|
+
// spell a method's `this` from `borrowsReceiver`, independently of the
|
|
14
|
+
// `formals` this function returns, so a method's OWN non-receiver formals
|
|
15
|
+
// are exactly as eligible for the extra reference entry as a free
|
|
16
|
+
// function's. `readonlyBorrowFormalsOf` below never inspects `abi.receiver`
|
|
17
|
+
// either -- it only walks `parameter` operations, which never include the
|
|
18
|
+
// receiver. `restFrom` stays excluded: a rest parameter's actual is an
|
|
19
|
+
// Array the caller built for this call alone, never a stable binding.
|
|
20
|
+
if (!abi || abi.restFrom !== null)
|
|
21
|
+
return null;
|
|
22
|
+
// A body that calls a RESOLVABLE callee never proven effect-safe can have
|
|
23
|
+
// that callee write through one of this body's own other parameters --
|
|
24
|
+
// `snapshot(text, holder) { middle(holder); return text }`, where `middle`
|
|
25
|
+
// writes `holder.text`. `readonlyBorrowFormalsOf` looks at binding writes
|
|
26
|
+
// only and cannot see a transitive one, so the disqualification is asked
|
|
27
|
+
// here, of the whole-program fact that already knows the call graph.
|
|
28
|
+
//
|
|
29
|
+
// Deliberately restricted to a KNOWN callee. An opaque one -- a callback
|
|
30
|
+
// arriving as a parameter value, with no resolvable target -- is a hazard
|
|
31
|
+
// for the CALLER to rule out against the actual it supplies
|
|
32
|
+
// (`stableBorrowEntryAccepts` below), and disqualifying the entry here
|
|
33
|
+
// instead would withdraw the fast path from every higher-order body whose
|
|
34
|
+
// callers can prove their actuals stable.
|
|
35
|
+
if (bodyCallsUnsafeKnownCallee)
|
|
36
|
+
return null;
|
|
37
|
+
const readonly = readonlyBorrowFormalsOf(body, privateCell, dyingArguments);
|
|
38
|
+
const formals = new Set([...readonly].filter((ordinal) => abi.parameters[ordinal]?.passing === 'const-ref'));
|
|
39
|
+
if (![...formals].some((ordinal) => !originalBorrowed.has(ordinal)))
|
|
40
|
+
return null;
|
|
41
|
+
// Never revoke an established, stronger effect-based borrow proof.
|
|
42
|
+
for (const ordinal of originalBorrowed)
|
|
43
|
+
formals.add(ordinal);
|
|
44
|
+
return { owner, name: `${cppBodyName(owner)}_stable_borrow`, abi, formals };
|
|
45
|
+
};
|
|
46
|
+
/** A private caller slot survives arbitrary program re-entry. All extra
|
|
47
|
+
* reference formals must bind such slots; otherwise use the existing owning
|
|
48
|
+
* entry, whose snapshots bind the borrowed implementation safely.
|
|
49
|
+
*
|
|
50
|
+
* Reject mixed move/borrow evaluation: C++ may evaluate an owning sibling's
|
|
51
|
+
* std::move before another argument binds a reference to the same slot.
|
|
52
|
+
* Conservatively reject ANY potentially moving reference sibling rather than
|
|
53
|
+
* claiming an alias distinction the emitter's deferred expressions may erase.
|
|
54
|
+
* Scalars cannot move a string/handle slot. Binding a borrowed formal does
|
|
55
|
+
* not itself move from its argument. */
|
|
56
|
+
export const stableBorrowEntryAccepts = (entry, actuals, stable, dyingArguments) => {
|
|
57
|
+
for (const ordinal of entry.formals) {
|
|
58
|
+
const actual = actuals[ordinal];
|
|
59
|
+
const formal = entry.abi.parameters[ordinal];
|
|
60
|
+
if (!actual || !formal || !stable.has(actual.value))
|
|
61
|
+
return false;
|
|
62
|
+
// Conversion expressions can expose a different physical lifetime. Admit
|
|
63
|
+
// only the exact carried input; other calls retain their owning adapter.
|
|
64
|
+
if (representationKey(actual.representation) !== representationKey(formal.value))
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return actuals.every((actual, ordinal) => entry.formals.has(ordinal) || !dyingArguments.has(actual.value) || passingOf(actual.representation) !== 'const-ref');
|
|
68
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId } from '../../identity/ids.js';
|
|
2
|
+
import type { IrBody } from '../../ir/model.js';
|
|
3
|
+
import type { BindingPlacement } from '../../projection/bindings.js';
|
|
4
|
+
import type { CaptureIndex } from './emit-context.js';
|
|
5
|
+
/**
|
|
6
|
+
* Every capturing function's environment, computed once for the whole
|
|
7
|
+
* translation unit.
|
|
8
|
+
*
|
|
9
|
+
* The walk that used to live here -- which declaration each body reads or
|
|
10
|
+
* writes whose cell some other frame owns, the transitive closure over
|
|
11
|
+
* allocation edges, which cells are reassigned/self-referential/captured
|
|
12
|
+
* before their owning write, and which of those must therefore be boxed --
|
|
13
|
+
* is now `ir/captures.ts`'s `computeCaptureFacts`, run once over the whole
|
|
14
|
+
* program and published onto each body as `IrBody.facts`
|
|
15
|
+
* (a program fact; the target is a printer and computes none of its own). This function reads those
|
|
16
|
+
* facts back off the bodies it is handed instead of recomputing them: it
|
|
17
|
+
* only reunites the whole-program `boxed`/`requiresEarlyBox` sets (published
|
|
18
|
+
* per OWNING body, per `IrBodyFacts.boxed`'s doc comment) and turns each
|
|
19
|
+
* capturing body's own `capturedDeclarations`/`capturedReceiver` into the
|
|
20
|
+
* `CaptureAdmission` the emitter reads.
|
|
21
|
+
*
|
|
22
|
+
* Only a function that is actually allocated as a value (`allocate-callable`
|
|
23
|
+
* somewhere in the program names it -- `IrBodyFacts.allocatedAsValue`) gets
|
|
24
|
+
* an entry: a method's own body can read a cell owned by an enclosing frame
|
|
25
|
+
* in principle, but a method is never itself wrapped in a `CallableObject`
|
|
26
|
+
* with an environment slot to populate -- it is called directly, by name --
|
|
27
|
+
* so there is nowhere for such a capture to be transported *from*. That case
|
|
28
|
+
* has no admission here and falls through to `bindingReference`'s
|
|
29
|
+
* pre-existing "capture path... not installed" refusal, which is the
|
|
30
|
+
* correct, honest answer for it today.
|
|
31
|
+
*
|
|
32
|
+
* ...with one exception, and it is an exception because the transport EXISTS
|
|
33
|
+
* for it: a record's ACCESSOR body. `get current() { return n + 1 }` written
|
|
34
|
+
* inside a function reads that function's local, and the object the accessor
|
|
35
|
+
* is reached through is allocated in that very frame -- so the object can
|
|
36
|
+
* carry the environment, one `gea::PackedEnvironment` member per capturing
|
|
37
|
+
* half (`cppRecordAccessorEnvironmentName`), populated at the allocation and
|
|
38
|
+
* handed back at every call. `capturingAccessors` names those bodies;
|
|
39
|
+
* admitting one that captures NOTHING would add an environment formal no
|
|
40
|
+
* caller supplies, so the capture set is what qualifies it, not the fact that
|
|
41
|
+
* it is an accessor.
|
|
42
|
+
*/
|
|
43
|
+
export declare const buildCaptureIndex: (bodies: readonly IrBody[], placements: ReadonlyMap<DeclarationId, BindingPlacement>, capturingAccessors?: ReadonlySet<FunctionId>) => CaptureIndex;
|
|
44
|
+
/**
|
|
45
|
+
* Module-level function cells whose call can be spelled by NAME.
|
|
46
|
+
*
|
|
47
|
+
* `function makeAdder(base) {...}` becomes a cell holding a `CallableObject`,
|
|
48
|
+
* and every call to it -- from any body in the unit -- goes through that
|
|
49
|
+
* carrier's function pointer. For a callable whose identity is a runtime fact
|
|
50
|
+
* that indirection is the whole point; for a `function` declaration nothing
|
|
51
|
+
* ever reassigns it is pure loss, and it is the expensive kind: an indirect
|
|
52
|
+
* call is not inlinable, so the body stays opaque and every optimization that
|
|
53
|
+
* would have followed it -- constant propagation into it, and the
|
|
54
|
+
* devirtualization of a closure it RETURNS -- is lost with it. `closure`'s
|
|
55
|
+
* hot loop is two such calls and nothing else.
|
|
56
|
+
*
|
|
57
|
+
* Written exactly once is the whole condition, and it is the same arithmetic
|
|
58
|
+
* `buildCaptureIndex` uses for a reassignment: a declaration the program ever
|
|
59
|
+
* writes again has more than one `binding-write`, because the initializer and
|
|
60
|
+
* every later assignment lower to the same operation. A cell written once with
|
|
61
|
+
* a callable that captures nothing therefore holds that one body forever, and
|
|
62
|
+
* naming it is not an optimization the program could observe -- the carrier is
|
|
63
|
+
* still built wherever anything stores one.
|
|
64
|
+
*
|
|
65
|
+
* Deliberately NOT extended to a captured closure: its body reads state out of
|
|
66
|
+
* the environment pointer, which only the carrier has.
|
|
67
|
+
*/
|
|
68
|
+
export declare const buildDirectCallableIndex: (bodies: readonly IrBody[], captures: CaptureIndex, placements: ReadonlyMap<DeclarationId, BindingPlacement>) => ReadonlyMap<DeclarationId, FunctionId>;
|