@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,42 @@
|
|
|
1
|
+
import type { IrOperand, IrResult } from '../../../ir/model.js';
|
|
2
|
+
import { type EmitContext } from '../emit-context.js';
|
|
3
|
+
/**
|
|
4
|
+
* `String.prototype`, as this backend renders it.
|
|
5
|
+
*
|
|
6
|
+
* The mechanism -- a deferred `[[Get]]` fused with the call that follows it --
|
|
7
|
+
* is `emit-prototype-invoke.ts`'s, and its header states why a String method
|
|
8
|
+
* cannot be materialized as a first-class value. What lives here is only the
|
|
9
|
+
* table: which members are claimed, at which arities, over which argument
|
|
10
|
+
* carriers, and which are refused BY NAME with what missing.
|
|
11
|
+
*
|
|
12
|
+
* Every runtime function named below is `gea::runtime::string`'s, which is a
|
|
13
|
+
* port of v1 geatsc's own `src/targets/cpp/runtime/string.cpp` -- the shipping
|
|
14
|
+
* implementation, not a re-derivation. That port is also what settles the
|
|
15
|
+
* index space: v1 indexes in UTF-16 CODE UNITS over UTF-8 storage, which is
|
|
16
|
+
* what ECMA-262 specifies and what node answers, and `.length` moved with it
|
|
17
|
+
* (`emit-carrier-members.ts`).
|
|
18
|
+
*/
|
|
19
|
+
/** A native scalar primitive may preserve its refined result locally. The
|
|
20
|
+
* primitive producer publishes expression and storage together; ordinary
|
|
21
|
+
* Number ABI positions still receive its exact implicit double conversion. */
|
|
22
|
+
export interface NativeScalarCall {
|
|
23
|
+
readonly expression: string;
|
|
24
|
+
readonly resultStorage: 'gea::runtime::string::CodeUnit';
|
|
25
|
+
}
|
|
26
|
+
/** The one signature every member's renderer has. `result` is read only by the two members whose ECMA-262 result is `undefined` out of range. */
|
|
27
|
+
export type StringCallRenderer = (ctx: EmitContext, receiverText: string, args: readonly IrOperand[], result: IrResult | null, metadata?: string) => string | NativeScalarCall;
|
|
28
|
+
/** `emit-carrier-members.ts`'s `stringMemberText` defers exactly these keys off a `string` receiver -- one authority for "is this method implemented", never two lists that could drift. */
|
|
29
|
+
export declare const stringMethods: ReadonlyMap<string, StringCallRenderer>;
|
|
30
|
+
export declare const stringPrototypeMethods: ReadonlySet<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Members this backend states a REASON for not implementing, rather than
|
|
33
|
+
* letting them fall into the generic "here is the list of what is implemented"
|
|
34
|
+
* refusal.
|
|
35
|
+
*
|
|
36
|
+
* A member is here when the gap is a specific missing thing a reader would
|
|
37
|
+
* otherwise have to guess at -- a Unicode table, a regular-expression engine,
|
|
38
|
+
* a locale database. The distinction matters: "not built yet" and "cannot be
|
|
39
|
+
* built without X" are different answers, and only the second one tells you
|
|
40
|
+
* what to build.
|
|
41
|
+
*/
|
|
42
|
+
export declare const stringMemberRefusals: ReadonlyMap<string, string>;
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { representationKey } from '../../../representation/model.js';
|
|
2
|
+
import { createCppEmitBlockedError, operandText } from '../emit-context.js';
|
|
3
|
+
import { toStringText } from '../emit-tostring.js';
|
|
4
|
+
import { matchAllRefusal, regexpMatchText, regexpReplaceText, regexpSearchText, regexpSplitText } from './emit-prototype-regexp.js';
|
|
5
|
+
const stringMethodShapes = new Map([
|
|
6
|
+
['substring', { clause: '22.1.3.24', arities: [1, 2], carriers: ['number', 'number'] }],
|
|
7
|
+
['substr', { clause: 'B.2.3.1', arities: [1, 2], carriers: ['number', 'number'] }],
|
|
8
|
+
['slice', { clause: '22.1.3.22', arities: [1, 2], carriers: ['number', 'number'] }],
|
|
9
|
+
['trim', { clause: '22.1.3.32', arities: [0], carriers: [] }],
|
|
10
|
+
['trimStart', { clause: '22.1.3.34', arities: [0], carriers: [] }],
|
|
11
|
+
['trimEnd', { clause: '22.1.3.33', arities: [0], carriers: [] }],
|
|
12
|
+
['toLowerCase', { clause: '22.1.3.29', arities: [0], carriers: [] }],
|
|
13
|
+
['toUpperCase', { clause: '22.1.3.31', arities: [0], carriers: [] }],
|
|
14
|
+
['charCodeAt', { clause: '22.1.3.3', arities: [1], carriers: ['number'] }],
|
|
15
|
+
['charAt', { clause: '22.1.3.2', arities: [1], carriers: ['number'] }],
|
|
16
|
+
['indexOf', { clause: '22.1.3.9', arities: [1, 2], carriers: ['string', 'number'] }],
|
|
17
|
+
['lastIndexOf', { clause: '22.1.3.10', arities: [1, 2], carriers: ['string', 'number'] }],
|
|
18
|
+
['includes', { clause: '22.1.3.8', arities: [1, 2], carriers: ['string', 'number'] }],
|
|
19
|
+
['startsWith', { clause: '22.1.3.23', arities: [1, 2], carriers: ['string', 'number'] }],
|
|
20
|
+
['endsWith', { clause: '22.1.3.7', arities: [1, 2], carriers: ['string', 'number'] }],
|
|
21
|
+
['padStart', { clause: '22.1.3.16', arities: [1, 2], carriers: ['number', 'string'] }],
|
|
22
|
+
['padEnd', { clause: '22.1.3.15', arities: [1, 2], carriers: ['number', 'string'] }],
|
|
23
|
+
['repeat', { clause: '22.1.3.17', arities: [1], carriers: ['number'] }],
|
|
24
|
+
['localeCompare', { clause: '22.1.3.12', arities: [1], carriers: ['string'] }],
|
|
25
|
+
// The three members `lib.es5.d.ts` declares over `string | RegExp`. These
|
|
26
|
+
// rows are the STRING form only; the pattern form is rendered by
|
|
27
|
+
// `emit-prototype-regexp.ts` and asked first (see `shapedStringMethodText`).
|
|
28
|
+
['split', { clause: '22.1.3.21', arities: [1], carriers: ['string'] }],
|
|
29
|
+
['replace', { clause: '22.1.3.18', arities: [2], carriers: ['string', 'string'] }],
|
|
30
|
+
['replaceAll', { clause: '22.1.3.20', arities: [2], carriers: ['string', 'string'] }]
|
|
31
|
+
]);
|
|
32
|
+
const carrierMatches = (operand, wanted) => wanted === 'string'
|
|
33
|
+
? operand.representation.kind === 'string'
|
|
34
|
+
: (operand.representation.kind === 'scalar' && operand.representation.domain === 'number') || isOptionalNumber(operand.representation);
|
|
35
|
+
/**
|
|
36
|
+
* Whether a carrier is `T | undefined` over a number -- ECMA-262's OWN
|
|
37
|
+
* spelling for "this parameter was not supplied", not a caller's mistake.
|
|
38
|
+
* `String.prototype.slice`/`substring`'s numeric parameters are declared
|
|
39
|
+
* optional in `lib.es5.d.ts`, so a call that forwards an already-optional
|
|
40
|
+
* local (`s.slice(maybeStart)`) hands this renderer `optional(scalar(number),
|
|
41
|
+
* undefined)` rather than a bare number -- the value genuinely may be absent
|
|
42
|
+
* at RUNTIME, which an omitted argument (a different arity, handled by the
|
|
43
|
+
* overload set above) cannot express. `numericDefaultText` below is what
|
|
44
|
+
* turns the flag back into ECMA-262's own default for the position.
|
|
45
|
+
*/
|
|
46
|
+
const isOptionalNumber = (representation) => representation.kind === 'optional' &&
|
|
47
|
+
representation.absence === 'undefined' &&
|
|
48
|
+
representation.payload.kind === 'scalar' &&
|
|
49
|
+
representation.payload.domain === 'number';
|
|
50
|
+
/**
|
|
51
|
+
* The C++ text for a `number`-shaped argument, materializing an absent
|
|
52
|
+
* `optional` into the ECMA-262 default ToIntegerOrInfinity(undefined) already
|
|
53
|
+
* gives its position -- 0 for a leading index (22.1.3.22 step 4, 22.1.3.24
|
|
54
|
+
* step 4) and `+Infinity` for a trailing one (22.1.3.22 step 3: "If end is
|
|
55
|
+
* undefined, let relativeEnd be len"). `+Infinity` is not a guess: it is the
|
|
56
|
+
* exact sentinel the runtime's own single-argument `slice` overload
|
|
57
|
+
* (gea_runtime.h) already passes for a genuinely OMITTED end, so a present-
|
|
58
|
+
* but-undefined end renders through the identical downstream clamp to `len`
|
|
59
|
+
* rather than a second, possibly-disagreeing spelling of the same default.
|
|
60
|
+
*/
|
|
61
|
+
const numericArgumentText = (ctx, operand, position) => {
|
|
62
|
+
const text = operandText(ctx, operand);
|
|
63
|
+
if (!isOptionalNumber(operand.representation))
|
|
64
|
+
return text;
|
|
65
|
+
const fallback = position === 0 ? '0.0' : 'std::numeric_limits<double>::infinity()';
|
|
66
|
+
return `(${text}.has_value() ? *${text} : ${fallback})`;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* A carrier the runtime overload does not take is refused by name here rather
|
|
70
|
+
* than handed to C++ to reject: the specification COERCES it (ToString /
|
|
71
|
+
* ToIntegerOrInfinity of an arbitrary value), and coercion of an arbitrary
|
|
72
|
+
* value is exactly what this backend has no box for.
|
|
73
|
+
*
|
|
74
|
+
* The check reads the ARGUMENT OPERAND's own resolved carrier, never the
|
|
75
|
+
* declared ABI parameter's. `lib.es5.d.ts` declares `split(separator: string |
|
|
76
|
+
* RegExp)` and `replace(searchValue: string | RegExp, ...)`, so the declared
|
|
77
|
+
* parameter is a `tagged-union` at every call site including the ones that
|
|
78
|
+
* pass a plain string -- the checker's ABI states what is LEGAL to pass, not
|
|
79
|
+
* what this call passes. Reading the operand is what lets a string separator
|
|
80
|
+
* render natively while a RegExp one refuses by name instead of being forced
|
|
81
|
+
* through a carrier this file does not implement.
|
|
82
|
+
*/
|
|
83
|
+
const shapedStringMethodText = (member, shape) => (ctx, receiverText, args, result, metadata) => {
|
|
84
|
+
// The three members `lib.es5.d.ts` declares over `string | RegExp` are
|
|
85
|
+
// asked of `emit-prototype-regexp.ts` first, and it answers `null` for a
|
|
86
|
+
// string argument so the shaped rendering below is reached unchanged. This
|
|
87
|
+
// is what replaced the union refusal that used to stand here: a RegExp
|
|
88
|
+
// member of the declared union is now rendered, not named as missing.
|
|
89
|
+
const byPattern = member === 'split'
|
|
90
|
+
? regexpSplitText(ctx, receiverText, args, result)
|
|
91
|
+
: member === 'replace' || member === 'replaceAll'
|
|
92
|
+
? regexpReplaceText(member, ctx, receiverText, args)
|
|
93
|
+
: null;
|
|
94
|
+
if (byPattern !== null)
|
|
95
|
+
return byPattern;
|
|
96
|
+
if (!shape.arities.includes(args.length)) {
|
|
97
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}" is spelled for ${shape.arities.join(' or ')} argument(s) (ECMA-262 ${shape.clause}); this call passes ${args.length}`);
|
|
98
|
+
}
|
|
99
|
+
const rendered = [];
|
|
100
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
101
|
+
const argument = args[index];
|
|
102
|
+
const wanted = shape.carriers[index];
|
|
103
|
+
// ReplaceValue is specified as `callable ? callback : ToString(value)`.
|
|
104
|
+
// The checker overload describes its common string case, while the
|
|
105
|
+
// operand still records the concrete non-callable value this call uses.
|
|
106
|
+
// Reuse the language's one ToString table so numbers and other proven
|
|
107
|
+
// carriers reach GetSubstitution without a dynamic box.
|
|
108
|
+
const replacementText = argument && wanted === 'string' && (member === 'replace' || member === 'replaceAll') && index === 1
|
|
109
|
+
? toStringText(operandText(ctx, argument), argument.representation, ctx.classes, ctx.deriver)
|
|
110
|
+
: null;
|
|
111
|
+
if (!argument || !wanted || (!carrierMatches(argument, wanted) && replacementText === null)) {
|
|
112
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}" argument ${index} carries ` +
|
|
113
|
+
`"${argument ? representationKey(argument.representation) : 'nothing'}", and this backend spells it only for a ${wanted ?? 'declared'} carrier` +
|
|
114
|
+
(wanted === 'string' && argument && argument.representation.kind === 'tagged-union'
|
|
115
|
+
? ' -- the declared parameter is a union, and this call passes an operand carried as the union itself rather than as one resolved arm, ' +
|
|
116
|
+
'so neither the string spelling nor the RegExp one above can be selected'
|
|
117
|
+
: ''));
|
|
118
|
+
}
|
|
119
|
+
rendered.push(wanted === 'number' ? numericArgumentText(ctx, argument, index) : (replacementText ?? operandText(ctx, argument)));
|
|
120
|
+
}
|
|
121
|
+
if (member === 'charCodeAt' && metadata !== undefined) {
|
|
122
|
+
return {
|
|
123
|
+
expression: `gea::runtime::string::charCodeAtWithMetadata(${[receiverText, ...rendered, `${metadata}_units`, `${metadata}_basic_latin`, `${metadata}.cursor`].join(', ')})`,
|
|
124
|
+
resultStorage: 'gea::runtime::string::CodeUnit'
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return `gea::runtime::string::${shape.spelling ?? member}(${[receiverText, ...rendered].join(', ')})`;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* `at` and `codePointAt` -- the two String members whose ECMA-262 result is
|
|
131
|
+
* `undefined` when the index is out of range (22.1.3.1 step 7, 22.1.3.4 step
|
|
132
|
+
* 5), rather than the empty string (`charAt`) or NaN (`charCodeAt`).
|
|
133
|
+
*
|
|
134
|
+
* `undefined` is a real value here, not an absence to shrug at, so the runtime
|
|
135
|
+
* returns a `gea::Optional<T>` and this checks that the plan agrees before
|
|
136
|
+
* rendering: an `Optional`-producing expression assigned into a bare `T` does
|
|
137
|
+
* not compile, and an `Optional` silently unwrapped would answer the payload
|
|
138
|
+
* type's zero for an out-of-range read. If the plan gave the result a
|
|
139
|
+
* non-optional carrier, the disagreement is upstream and is refused by name
|
|
140
|
+
* rather than papered over at the C++ boundary.
|
|
141
|
+
*/
|
|
142
|
+
const optionalResultMethodText = (member, clause, payload) => (ctx, receiverText, args, result) => {
|
|
143
|
+
const index = args[0];
|
|
144
|
+
if (args.length !== 1 || !index) {
|
|
145
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}" is spelled for its one index argument (ECMA-262 ${clause}); this call passes ${args.length}`);
|
|
146
|
+
}
|
|
147
|
+
if (!carrierMatches(index, 'number')) {
|
|
148
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}"'s index argument carries a "${representationKey(index.representation)}" carrier, not a number scalar`);
|
|
149
|
+
}
|
|
150
|
+
// A call with NO result at all passes: `s.at(0);` in statement position
|
|
151
|
+
// discards the value and `emitCall` renders it as a bare expression
|
|
152
|
+
// statement, so there is no carrier to disagree with.
|
|
153
|
+
const carrier = result?.representation;
|
|
154
|
+
const payloadMatches = carrier === undefined ||
|
|
155
|
+
(carrier.kind === 'optional' &&
|
|
156
|
+
(payload === 'string'
|
|
157
|
+
? carrier.payload.kind === 'string'
|
|
158
|
+
: carrier.payload.kind === 'scalar' && carrier.payload.domain === 'number'));
|
|
159
|
+
if (!payloadMatches) {
|
|
160
|
+
throw createCppEmitBlockedError(`conversion:optional(${payload})->${carrier ? representationKey(carrier) : 'nothing'}`, `"String.prototype.${member}" answers \`undefined\` for an out-of-range index (ECMA-262 ${clause}), so this backend renders it as an ` +
|
|
161
|
+
`optional ${payload}; this call's result carries "${carrier ? representationKey(carrier) : 'nothing'}", and narrowing the absence away here would ` +
|
|
162
|
+
"answer the payload type's zero for a read the program can observe as absent");
|
|
163
|
+
}
|
|
164
|
+
return `gea::runtime::string::${member}(${receiverText}, ${operandText(ctx, index)})`;
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* ECMA-262 22.1.3.5 `String.prototype.concat(...strings)`.
|
|
168
|
+
*
|
|
169
|
+
* `concat`'s checker signature is `(...strings: string[]): string` -- a rest
|
|
170
|
+
* parameter -- so `ir/lower.ts`'s `packRestArguments` has already packed every
|
|
171
|
+
* call argument into one `array-object` before this runs, exactly as it has
|
|
172
|
+
* for `Array.prototype.push`. So the rendering takes the packed array rather
|
|
173
|
+
* than a C++ argument per source argument, and the runtime overload mirrors
|
|
174
|
+
* that: v1 spells this as a brace-init list because v1's emitter still has the
|
|
175
|
+
* physical arguments at this point; this backend does not, and inventing them
|
|
176
|
+
* back would mean unpacking a runtime array at compile time.
|
|
177
|
+
*
|
|
178
|
+
* The packed element carrier is checked rather than assumed: a non-string
|
|
179
|
+
* element would be a value the specification ToStrings, and ToString of an
|
|
180
|
+
* arbitrary value is what this backend has no box for.
|
|
181
|
+
*/
|
|
182
|
+
const concatText = (ctx, receiverText, args) => {
|
|
183
|
+
const packed = args[0];
|
|
184
|
+
if (args.length !== 1 || !packed) {
|
|
185
|
+
throw createCppEmitBlockedError('runtime-helper:element:concat:string', '"String.prototype.concat" expects its rest argument already packed into one array-object by ir/lower.ts\'s packRestArguments; ' +
|
|
186
|
+
`this call arrives with ${args.length} operand(s)`);
|
|
187
|
+
}
|
|
188
|
+
if (packed.representation.kind !== 'array-object' || packed.representation.element.kind !== 'string') {
|
|
189
|
+
throw createCppEmitBlockedError('runtime-helper:element:concat:string', `"String.prototype.concat"'s packed rest argument carries "${representationKey(packed.representation)}"; this backend spells it only for an ` +
|
|
190
|
+
'array-object of strings, because ECMA-262 22.1.3.5 ToStrings every other argument and ToString of an arbitrary value has no box here');
|
|
191
|
+
}
|
|
192
|
+
return `gea::runtime::string::concat(${receiverText}, ${operandText(ctx, packed)})`;
|
|
193
|
+
};
|
|
194
|
+
/** Primitive String `toString`/`valueOf` both return the receiver unchanged. */
|
|
195
|
+
const identityText = (member) => (_ctx, receiverText, args) => {
|
|
196
|
+
if (args.length !== 0) {
|
|
197
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}" takes no arguments; this call passes ${args.length}`);
|
|
198
|
+
}
|
|
199
|
+
return receiverText;
|
|
200
|
+
};
|
|
201
|
+
/** `emit-carrier-members.ts`'s `stringMemberText` defers exactly these keys off a `string` receiver -- one authority for "is this method implemented", never two lists that could drift. */
|
|
202
|
+
export const stringMethods = new Map([
|
|
203
|
+
['concat', concatText],
|
|
204
|
+
['toString', identityText('toString')],
|
|
205
|
+
['valueOf', identityText('valueOf')],
|
|
206
|
+
// The two members that take a regular expression and NOTHING else: ECMA-262
|
|
207
|
+
// 22.1.3.11 and 22.1.3.13 both `RegExpCreate` a non-RegExp argument first,
|
|
208
|
+
// so there is no string-shaped form to fall back to and these do not go
|
|
209
|
+
// through `shapedStringMethodText` at all.
|
|
210
|
+
['match', (ctx, receiverText, args, result) => regexpMatchText(ctx, receiverText, args, result)],
|
|
211
|
+
['search', (ctx, receiverText, args) => regexpSearchText(ctx, receiverText, args)],
|
|
212
|
+
['at', optionalResultMethodText('at', '22.1.3.1', 'string')],
|
|
213
|
+
['codePointAt', optionalResultMethodText('codePointAt', '22.1.3.4', 'number')],
|
|
214
|
+
...[...stringMethodShapes].map(([member, shape]) => [member, shapedStringMethodText(member, shape)])
|
|
215
|
+
]);
|
|
216
|
+
export const stringPrototypeMethods = new Set(stringMethods.keys());
|
|
217
|
+
/**
|
|
218
|
+
* Members this backend states a REASON for not implementing, rather than
|
|
219
|
+
* letting them fall into the generic "here is the list of what is implemented"
|
|
220
|
+
* refusal.
|
|
221
|
+
*
|
|
222
|
+
* A member is here when the gap is a specific missing thing a reader would
|
|
223
|
+
* otherwise have to guess at -- a Unicode table, a regular-expression engine,
|
|
224
|
+
* a locale database. The distinction matters: "not built yet" and "cannot be
|
|
225
|
+
* built without X" are different answers, and only the second one tells you
|
|
226
|
+
* what to build.
|
|
227
|
+
*/
|
|
228
|
+
export const stringMemberRefusals = new Map([
|
|
229
|
+
[
|
|
230
|
+
'normalize',
|
|
231
|
+
"ECMA-262 22.1.3.13 normalize(form) applies a Unicode Normalization Form (NFC/NFD/NFKC/NFKD), which needs the Unicode Character Database's " +
|
|
232
|
+
'canonical-decomposition and combining-class tables. Neither this runtime nor v1 carries them, and normalizing without them would return a ' +
|
|
233
|
+
'string that is not normalized while claiming it is -- so this is refused rather than approximated by an identity function that happens to be ' +
|
|
234
|
+
'correct for ASCII'
|
|
235
|
+
],
|
|
236
|
+
['matchAll', matchAllRefusal()],
|
|
237
|
+
[
|
|
238
|
+
'toLocaleLowerCase',
|
|
239
|
+
'ECMA-262 22.1.3.30 / ECMA-402 is the LOCALE-SENSITIVE case conversion (a Turkish locale maps I to a dotless lowercase form, which toLowerCase ' +
|
|
240
|
+
'explicitly must not do). There is no locale database here, and rendering it as toLowerCase would silently answer the locale-independent ' +
|
|
241
|
+
'mapping for a call that asked for the other one'
|
|
242
|
+
],
|
|
243
|
+
[
|
|
244
|
+
'toLocaleUpperCase',
|
|
245
|
+
'ECMA-262 22.1.3.31 / ECMA-402 is the LOCALE-SENSITIVE case conversion; see toLocaleLowerCase -- there is no locale database here'
|
|
246
|
+
],
|
|
247
|
+
[
|
|
248
|
+
'localeCompare$options',
|
|
249
|
+
'ECMA-402 localeCompare(that, locales, options) selects a collation; this runtime has no ICU and no collation table, so only the one-argument ' +
|
|
250
|
+
'form is rendered, and even that one is a code-unit ordering rather than a collation (see gea::runtime::string::localeCompare)'
|
|
251
|
+
]
|
|
252
|
+
]);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IrBody } from '../../../ir/model.js';
|
|
2
|
+
import type { IrValueId } from '../../../identity/ids.js';
|
|
3
|
+
import type { EmitContext, PrototypeMethodRead } from '../emit-context.js';
|
|
4
|
+
/**
|
|
5
|
+
* Every deferred prototype-method read in one body, settled before the body
|
|
6
|
+
* renders a line.
|
|
7
|
+
*
|
|
8
|
+
* This composes; it decides nothing. Each carrier's own resolver already IS
|
|
9
|
+
* the authority for what a deferred read on that carrier is, so the claim was
|
|
10
|
+
* lifted out of the resolver as a function and there are exactly two callers
|
|
11
|
+
* of it: this walk, which records the fact, and the resolver, which spells the
|
|
12
|
+
* answer. Nothing here re-tests a predicate that lives in a resolver, and a
|
|
13
|
+
* new carrier is reachable only by adding its claim to both ends -- which is
|
|
14
|
+
* the whole point (invariant 5: no write during render).
|
|
15
|
+
*
|
|
16
|
+
* The order is `emitGet`'s own ladder order, so a receiver two claims could
|
|
17
|
+
* both answer resolves the way the printer resolves it. The claims are keyed
|
|
18
|
+
* on disjoint carrier kinds almost everywhere; where they are not -- the four
|
|
19
|
+
* `Object.prototype` reflection claims -- the ladder is what separates them.
|
|
20
|
+
*
|
|
21
|
+
* `hostMemberReads` is asked first because `declaredHostMethodRead` preempts
|
|
22
|
+
* every branch below it: a read the host tables already claimed is a host
|
|
23
|
+
* member, never a prototype method.
|
|
24
|
+
*/
|
|
25
|
+
export declare const prototypeMethodReadsOf: (ctx: EmitContext, body: IrBody) => ReadonlyMap<IrValueId, PrototypeMethodRead>;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { allOperationsOf } from '../../../ir/model.js';
|
|
2
|
+
import { deferredArrayMethodClaim, deferredDictionaryMethodClaim, deferredIteratorMethodClaim, deferredKeyedCollectionMethodClaim, deferredPromiseMethodClaim, deferredScalarMethodClaim, deferredStringMethodClaim, deferredTypedArrayMethodClaim } from '../emit-carrier-members.js';
|
|
3
|
+
import { deferredArrayBufferMethodClaim, deferredDataViewMethodClaim } from '../emit-buffers.js';
|
|
4
|
+
import { deferredTypedArrayUnionMethodClaim, deferredUnionToStringClaim } from '../emit-union-properties.js';
|
|
5
|
+
import { isDeclaredStringPrototypeKey } from '../emit-carrier-members.js';
|
|
6
|
+
import { objectPrototypeMemberNames } from '../../../representation/record-fields.js';
|
|
7
|
+
import { deferredCallableShapeMethodClaim } from '../emit-dynamic-properties.js';
|
|
8
|
+
import { deferredDynamicObjectMethodClaim, deferredObjectShapeMethodClaim } from '../host/object-protocol.js';
|
|
9
|
+
import { deferredIntrinsicReflectionClaim } from '../host/emit-host-properties.js';
|
|
10
|
+
import { deferredDateMethodClaim } from './emit-prototype-date.js';
|
|
11
|
+
import { deferredNativeErrorMethodClaim } from './emit-prototype-error.js';
|
|
12
|
+
import { deferredRegexpMethodClaim } from './emit-prototype-regexp.js';
|
|
13
|
+
/**
|
|
14
|
+
* Every deferred prototype-method read in one body, settled before the body
|
|
15
|
+
* renders a line.
|
|
16
|
+
*
|
|
17
|
+
* This composes; it decides nothing. Each carrier's own resolver already IS
|
|
18
|
+
* the authority for what a deferred read on that carrier is, so the claim was
|
|
19
|
+
* lifted out of the resolver as a function and there are exactly two callers
|
|
20
|
+
* of it: this walk, which records the fact, and the resolver, which spells the
|
|
21
|
+
* answer. Nothing here re-tests a predicate that lives in a resolver, and a
|
|
22
|
+
* new carrier is reachable only by adding its claim to both ends -- which is
|
|
23
|
+
* the whole point (invariant 5: no write during render).
|
|
24
|
+
*
|
|
25
|
+
* The order is `emitGet`'s own ladder order, so a receiver two claims could
|
|
26
|
+
* both answer resolves the way the printer resolves it. The claims are keyed
|
|
27
|
+
* on disjoint carrier kinds almost everywhere; where they are not -- the four
|
|
28
|
+
* `Object.prototype` reflection claims -- the ladder is what separates them.
|
|
29
|
+
*
|
|
30
|
+
* `hostMemberReads` is asked first because `declaredHostMethodRead` preempts
|
|
31
|
+
* every branch below it: a read the host tables already claimed is a host
|
|
32
|
+
* member, never a prototype method.
|
|
33
|
+
*/
|
|
34
|
+
export const prototypeMethodReadsOf = (ctx, body) => {
|
|
35
|
+
const reads = new Map();
|
|
36
|
+
// `emitGet` re-enters itself with the proven-present view of an optional
|
|
37
|
+
// receiver, so that view -- not the optional -- is the operand every claim
|
|
38
|
+
// below sees at render time. `unwrapPresentValue` is the render-side twin of
|
|
39
|
+
// this line; it additionally MINTS the unwrap, which is a spelling, not a
|
|
40
|
+
// fact.
|
|
41
|
+
const presentView = (receiver) => receiver.representation.kind === 'optional'
|
|
42
|
+
? { value: `${receiver.value}:present`, representation: receiver.representation.payload }
|
|
43
|
+
: receiver;
|
|
44
|
+
for (const block of body.blocks.values()) {
|
|
45
|
+
for (const operation of allOperationsOf(block)) {
|
|
46
|
+
if (operation.kind !== 'get')
|
|
47
|
+
continue;
|
|
48
|
+
if (ctx.hostMemberReads.has(operation.result.id))
|
|
49
|
+
continue;
|
|
50
|
+
const receiver = presentView(operation.receiver);
|
|
51
|
+
const claim = claimOf(ctx, receiver, operation) ?? mixedUnionClaimOf(ctx, receiver, operation);
|
|
52
|
+
if (claim !== null)
|
|
53
|
+
reads.set(operation.result.id, claim);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return reads;
|
|
57
|
+
};
|
|
58
|
+
/** The ladder itself, over one receiver operand -- asked of a whole value and, by `mixedUnionClaimOf`, of one arm of one. */
|
|
59
|
+
const claimOf = (ctx, receiver, operation) => {
|
|
60
|
+
const key = operation.key;
|
|
61
|
+
const texts = ctx.staticKeyTexts;
|
|
62
|
+
return (deferredTypedArrayUnionMethodClaim(texts, receiver, key) ??
|
|
63
|
+
deferredUnionToStringClaim(ctx, receiver, key) ??
|
|
64
|
+
deferredArrayMethodClaim(texts, receiver, key) ??
|
|
65
|
+
deferredTypedArrayMethodClaim(texts, receiver, key) ??
|
|
66
|
+
deferredArrayBufferMethodClaim(texts, receiver, key) ??
|
|
67
|
+
deferredDataViewMethodClaim(texts, receiver, key) ??
|
|
68
|
+
deferredStringMethodClaim(texts, receiver, key) ??
|
|
69
|
+
deferredScalarMethodClaim(texts, receiver, key) ??
|
|
70
|
+
deferredRegexpMethodClaim(texts, receiver, key) ??
|
|
71
|
+
deferredPromiseMethodClaim(texts, receiver, key) ??
|
|
72
|
+
deferredIteratorMethodClaim(texts, receiver, key) ??
|
|
73
|
+
deferredKeyedCollectionMethodClaim(texts, receiver, key) ??
|
|
74
|
+
deferredDateMethodClaim(texts, receiver, key) ??
|
|
75
|
+
deferredNativeErrorMethodClaim(texts, receiver, key) ??
|
|
76
|
+
deferredIntrinsicReflectionClaim(ctx.hosts, texts, receiver, key) ??
|
|
77
|
+
deferredDictionaryMethodClaim(texts, receiver, key) ??
|
|
78
|
+
deferredObjectShapeMethodClaim(ctx, { ...operation, receiver }) ??
|
|
79
|
+
deferredCallableShapeMethodClaim(texts, receiver, key) ??
|
|
80
|
+
deferredDynamicObjectMethodClaim(texts, receiver, key));
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* A prototype-method read off a HETEROGENEOUS tagged union.
|
|
84
|
+
*
|
|
85
|
+
* `deferredTypedArrayUnionMethodClaim` above claims a union whose every arm
|
|
86
|
+
* means the same thing by the member. This claims the other kind:
|
|
87
|
+
* `(query(t, k) as string[]).join` reads `join` off `string | string[] |
|
|
88
|
+
* Record<string, string> | Record<string, string[]>`, where exactly one arm
|
|
89
|
+
* has an `Array.prototype.join` and the rest have nothing callable of that
|
|
90
|
+
* name at all. Each arm that answers keeps its OWN recorded read -- asked of
|
|
91
|
+
* the same ladder, so no arm is answered by a second copy of a rule -- and the
|
|
92
|
+
* arms that cannot answer are recorded as `null`.
|
|
93
|
+
*
|
|
94
|
+
* `null` is admitted only where the arm PROVABLY has no callable member of
|
|
95
|
+
* that name (`armHasNoCallableMember`), never merely because this backend
|
|
96
|
+
* renders nothing for it: the difference between "the language answers
|
|
97
|
+
* undefined here" and "this member is not implemented yet" is the difference
|
|
98
|
+
* between the TypeError JavaScript throws and a wrong answer, so an arm this
|
|
99
|
+
* cannot prove refuses the whole claim and the read keeps its named refusal.
|
|
100
|
+
*
|
|
101
|
+
* Claimed only at a call fusion, which is what makes the throw exact: a read
|
|
102
|
+
* that is not called can observe the `undefined`, and this claim is consulted
|
|
103
|
+
* only through `prototypeMethodCallText`.
|
|
104
|
+
*/
|
|
105
|
+
const mixedUnionClaimOf = (ctx, receiver, operation) => {
|
|
106
|
+
const carrier = receiver.representation;
|
|
107
|
+
if (carrier.kind !== 'tagged-union')
|
|
108
|
+
return null;
|
|
109
|
+
const member = ctx.staticKeyTexts.get(operation.key.value);
|
|
110
|
+
if (member === undefined || objectPrototypeMemberNames.has(member))
|
|
111
|
+
return null;
|
|
112
|
+
const arms = [];
|
|
113
|
+
let answered = 0;
|
|
114
|
+
for (const arm of carrier.arms) {
|
|
115
|
+
const armClaim = claimOf(ctx, { value: receiver.value, representation: arm.value }, operation);
|
|
116
|
+
if (armClaim !== null) {
|
|
117
|
+
arms.push(armClaim);
|
|
118
|
+
answered += 1;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (!armHasNoCallableMember(arm.value, member))
|
|
122
|
+
return null;
|
|
123
|
+
arms.push(null);
|
|
124
|
+
}
|
|
125
|
+
if (answered === 0)
|
|
126
|
+
return null;
|
|
127
|
+
return {
|
|
128
|
+
receiverKind: 'mixed-union',
|
|
129
|
+
member,
|
|
130
|
+
receiver: { kind: 'operand', operand: receiver },
|
|
131
|
+
receiverElement: null,
|
|
132
|
+
mixedUnionCarrier: carrier,
|
|
133
|
+
mixedUnionArms: arms
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Whether this arm PROVABLY holds no callable under this name.
|
|
138
|
+
*
|
|
139
|
+
* Only three shapes can be proven here, and each is proven from a table this
|
|
140
|
+
* backend already owns rather than from the absence of a renderer:
|
|
141
|
+
*
|
|
142
|
+
* - a `string` arm: `String.prototype`'s own member set is the modelled one
|
|
143
|
+
* (`isDeclaredStringPrototypeKey`), so a name outside it reads `undefined`;
|
|
144
|
+
* - a `dictionary` arm: the read is an ENTRY, whose carrier is the table's own
|
|
145
|
+
* value carrier, and a value carrier that can never be callable can never be
|
|
146
|
+
* called -- a number-keyed table additionally has no such key at all;
|
|
147
|
+
* - `null`/`undefined` arms, which throw on the property read itself and are
|
|
148
|
+
* already rendered that way by `armRuntimeFieldText`.
|
|
149
|
+
*
|
|
150
|
+
* Everything else -- a record, a class, a dynamic value, a callable, anything
|
|
151
|
+
* with a sidecar -- can hold a callable this backend has simply not rendered,
|
|
152
|
+
* and answers `false`.
|
|
153
|
+
*/
|
|
154
|
+
const armHasNoCallableMember = (arm, member) => {
|
|
155
|
+
if (arm.kind === 'string')
|
|
156
|
+
return !isDeclaredStringPrototypeKey(member);
|
|
157
|
+
// A dictionary can genuinely HOLD this key -- `Record<string, string>` admits
|
|
158
|
+
// a "join" entry -- so absence is not what is proven here. What is proven is
|
|
159
|
+
// that whatever it holds is not callable, and JavaScript's answer to calling
|
|
160
|
+
// a non-callable is the same TypeError as calling an absent one.
|
|
161
|
+
if (arm.kind === 'dictionary')
|
|
162
|
+
return arm.key === 'number' || !mayBeCallable(arm.value);
|
|
163
|
+
return false;
|
|
164
|
+
};
|
|
165
|
+
const mayBeCallable = (representation) => {
|
|
166
|
+
// A union is callable if ANY arm is, and an optional if its payload is:
|
|
167
|
+
// `Record<string, string | string[]>` holds neither a function nor a
|
|
168
|
+
// container of one, and answering that needs the carrier looked THROUGH
|
|
169
|
+
// rather than judged by its top kind.
|
|
170
|
+
if (representation.kind === 'tagged-union')
|
|
171
|
+
return representation.arms.some((arm) => mayBeCallable(arm.value));
|
|
172
|
+
if (representation.kind === 'optional')
|
|
173
|
+
return mayBeCallable(representation.payload);
|
|
174
|
+
return (representation.kind === 'dynamic' ||
|
|
175
|
+
representation.kind === 'function' ||
|
|
176
|
+
representation.kind === 'function-family' ||
|
|
177
|
+
representation.kind === 'function-value-family' ||
|
|
178
|
+
representation.kind === 'function-value-dispatch' ||
|
|
179
|
+
representation.kind === 'function-and-constructor' ||
|
|
180
|
+
representation.kind === 'generic-function-set' ||
|
|
181
|
+
representation.kind === 'callable-identity');
|
|
182
|
+
};
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId, RegionId } from '../../identity/ids.js';
|
|
2
|
+
import type { ClassLayout } from '../../projection/classes.js';
|
|
3
|
+
import type { IrBody } from '../../ir/model.js';
|
|
4
|
+
import type { ReactiveCellPlan } from './host/host-members.js';
|
|
5
|
+
/**
|
|
6
|
+
* Which reactive fields one body READS, and through which receiver.
|
|
7
|
+
*
|
|
8
|
+
* A JSX slot whose value is computed -- `class={done ? 'a' : 'b'}` -- reaches
|
|
9
|
+
* the emitter as a call of a thunk (`plugins/gea/reactive-slots.ts`), and the
|
|
10
|
+
* caller has to subscribe that thunk to every field the expression depends on.
|
|
11
|
+
* The caller cannot see inside the callee's body, and the two are emitted
|
|
12
|
+
* independently and in no guaranteed order, so the answer is computed here,
|
|
13
|
+
* once, over the whole IR before any body is rendered.
|
|
14
|
+
*
|
|
15
|
+
* `source` is what the caller needs in order to NAME the owning object, and
|
|
16
|
+
* there are exactly two shapes a slot expression uses:
|
|
17
|
+
*
|
|
18
|
+
* - `binding` -- a module-scope store (`todo.done1`). Its cell is a global
|
|
19
|
+
* with a stable C++ name, reachable from any body, which is what makes
|
|
20
|
+
* subscribing from the caller possible at all.
|
|
21
|
+
* - `receiver` -- the component's own field (`this.count`). The thunk's
|
|
22
|
+
* receiver and the enclosing template's receiver are the same object, so
|
|
23
|
+
* the caller subscribes through its own.
|
|
24
|
+
*
|
|
25
|
+
* Any other receiver -- a parameter, a local, a field of a field -- is NOT
|
|
26
|
+
* recorded. The caller has no expression for such an object, and inventing one
|
|
27
|
+
* would subscribe the wrong instance; the slot keeps its once-only behaviour
|
|
28
|
+
* and is a stated gap rather than a binding to the wrong owner.
|
|
29
|
+
*
|
|
30
|
+
* TRANSITIVE through a call whose callee this IR closed (`CallOperation.
|
|
31
|
+
* closedCallee`), and it has to be. A GETTER is spelled exactly like a field --
|
|
32
|
+
* `{reader.pageNumberLabel}` beside `{reader.openLabel}` -- but lowers to a
|
|
33
|
+
* call, so a body-only reading found no dependency, `emit-jsx.ts` fell through
|
|
34
|
+
* to the once-only `leafText`, and the slot froze at whatever it read on the
|
|
35
|
+
* first render. The e-reader's page counter said "1 / 1" for a fourteen-hundred
|
|
36
|
+
* page book, for the life of the program.
|
|
37
|
+
*
|
|
38
|
+
* What made the old reading "honest" was NAMEABILITY, not locality, and that is
|
|
39
|
+
* preserved: a callee dependency on a module-scope store is kept as it stands
|
|
40
|
+
* (a global cell is reachable from any frame), while one on the callee's own
|
|
41
|
+
* `this` is re-pointed through the receiver THIS call passes -- and dropped
|
|
42
|
+
* when that receiver is not a shape the caller can name, which is the same test
|
|
43
|
+
* the direct pass applies to its own reads. So the widening still never
|
|
44
|
+
* subscribes to the wrong object; it only stops missing the right one.
|
|
45
|
+
*
|
|
46
|
+
* Over-subscribing is the failure this trades INTO, and for a VALUE slot it is
|
|
47
|
+
* benign: a slot that re-renders when a field its callee read changes without
|
|
48
|
+
* changing the slot's value re-renders to the same text, and every apply there
|
|
49
|
+
* is idempotent. For a NODE slot it is not -- re-running takes the subtree
|
|
50
|
+
* down and builds it again, which repaints -- so that census is narrowed; see
|
|
51
|
+
* `ReactiveDependencyCensus` below.
|
|
52
|
+
*/
|
|
53
|
+
export interface ReactiveDependency {
|
|
54
|
+
/** The struct that DECLARES the field, which is what a member pointer must name. */
|
|
55
|
+
readonly struct: string;
|
|
56
|
+
readonly key: string;
|
|
57
|
+
/**
|
|
58
|
+
* `true` when the subscription goes through the field's COMPANION revision
|
|
59
|
+
* cell rather than the field itself -- an array field, whose own carrier
|
|
60
|
+
* cannot be a cell. See `records.ts`'s `cppReactiveRevisionFieldName`.
|
|
61
|
+
*/
|
|
62
|
+
readonly revision: boolean;
|
|
63
|
+
readonly source: {
|
|
64
|
+
readonly kind: 'receiver';
|
|
65
|
+
} | {
|
|
66
|
+
readonly kind: 'binding';
|
|
67
|
+
readonly declaration: DeclarationId;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The two dependency censuses, one per kind of thing a subscription re-runs.
|
|
72
|
+
*
|
|
73
|
+
* `all` is the whole-program reading described at the top of this file: every
|
|
74
|
+
* cell a body reads, transitively through the calls it closed. It is what a
|
|
75
|
+
* VALUE slot wants -- a text, a prop, a style member, a class entry -- because
|
|
76
|
+
* re-running one of those writes the same value again when nothing moved, and
|
|
77
|
+
* over-subscribing there costs a comparison.
|
|
78
|
+
*
|
|
79
|
+
* `node` is the same census with one term narrowed, and it exists because for
|
|
80
|
+
* a NODE child the trade `all` makes is not benign. Re-running a node binding
|
|
81
|
+
* takes the subtree down and builds it again, which is a structural change to
|
|
82
|
+
* the tree, which repaints the viewport. An App whose single ternary child
|
|
83
|
+
* picks one of seven screens subscribes, under `all`, to every cell every
|
|
84
|
+
* screen reads -- so tapping a footswitch inside the chain screen rebuilt all
|
|
85
|
+
* 44 of its nodes and repainted 502x410 pixels, although the condition that
|
|
86
|
+
* selects the screen never moved.
|
|
87
|
+
*
|
|
88
|
+
* The narrowing is two rules, and both are about what is ALREADY bound
|
|
89
|
+
* somewhere else.
|
|
90
|
+
*
|
|
91
|
+
* - A body's OWN reads are all kept. A component invocation's props record is
|
|
92
|
+
* built in the thunk, so `<Row value={store.x}/>` reads `x` here, and a
|
|
93
|
+
* prop that changes really does mean a different subtree.
|
|
94
|
+
* - A dependency carried in FROM a callee is kept only when it selects
|
|
95
|
+
* control flow in that callee -- it reaches a branch condition there, so it
|
|
96
|
+
* can change which node the callee returns -- and only when the callee is
|
|
97
|
+
* not itself a lifted JSX slot (`CallEdge.lifted`). A read that merely
|
|
98
|
+
* flows into the callee's own JSX is dropped, and so is a branch inside a
|
|
99
|
+
* slot the callee binds on its own node: in both cases the position that
|
|
100
|
+
* changes has a subscription of its own, and re-running the outer binding
|
|
101
|
+
* rebuilds everything above it to reach a node that would have updated
|
|
102
|
+
* itself.
|
|
103
|
+
*
|
|
104
|
+
* What survives the second rule is the one shape with no binding of its own: a
|
|
105
|
+
* component whose BODY branches on a cell to choose which root it returns.
|
|
106
|
+
*/
|
|
107
|
+
export interface ReactiveDependencyCensus {
|
|
108
|
+
readonly all: ReadonlyMap<FunctionId | RegionId, readonly ReactiveDependency[]>;
|
|
109
|
+
readonly node: ReadonlyMap<FunctionId | RegionId, readonly ReactiveDependency[]>;
|
|
110
|
+
}
|
|
111
|
+
export declare const reactiveDependenciesOfBodies: (bodies: readonly IrBody[], classes: ReadonlyMap<DeclarationId, ClassLayout>, reactive: ReactiveCellPlan) => ReactiveDependencyCensus;
|
|
112
|
+
/**
|
|
113
|
+
* Which RECORD fields a JSX site actually binds, keyed by struct name.
|
|
114
|
+
*
|
|
115
|
+
* The elements of a reactive array are only worth celling when a rendered row
|
|
116
|
+
* reads them -- `records.ts` cells exactly this set. Celling every element
|
|
117
|
+
* record of every array field instead is not merely wasteful, it is wrong:
|
|
118
|
+
* `Signal<T>` is not the field's declared carrier, so a struct that is also
|
|
119
|
+
* read by something carrier-sensitive stops compiling. `gea-bench` holds both
|
|
120
|
+
* `rows` (rendered) and `items` (parsed out of JSON), and celling `Item.id`
|
|
121
|
+
* made `gea_json_read(reader, out.id)` an error -- a real defect found by the
|
|
122
|
+
* corpus, not a hypothetical.
|
|
123
|
+
*
|
|
124
|
+
* Two shapes reach a JSX slot, and both are recorded:
|
|
125
|
+
*
|
|
126
|
+
* - a DIRECT read -- `id={cell.id}` -- whose `get` result is the operand of
|
|
127
|
+
* an `element-prop`/`element-child`, possibly through the record that a
|
|
128
|
+
* `style={{...}}` object is built up as.
|
|
129
|
+
* - a THUNK read -- `width={cell.filled ? a : b}`, which
|
|
130
|
+
* `plugins/gea/reactive-slots.ts` rewrites to an immediately-called arrow.
|
|
131
|
+
* The operand is then the CALL, and the fields live in the callee's own
|
|
132
|
+
* body, which is a separate `IrBody`. The callee is recognised by its
|
|
133
|
+
* `allocate-callable` defining the callee operand -- the shape only an
|
|
134
|
+
* IIFE has -- and its body is swept in a second pass.
|
|
135
|
+
*
|
|
136
|
+
* Deliberately computed WITHOUT consulting `ReactiveCellPlan.celled`: that map
|
|
137
|
+
* is derived from this one, so asking it here would be a cycle. This answers
|
|
138
|
+
* the prior question -- what does the program bind -- and celling follows.
|
|
139
|
+
*/
|
|
140
|
+
export declare const reactiveBoundRecordFields: (bodies: readonly IrBody[]) => ReadonlyMap<string, ReadonlySet<string>>;
|