@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,602 @@
|
|
|
1
|
+
import { representationKey } from '../../../representation/model.js';
|
|
2
|
+
import { createCppEmitBlockedError, operandText } from '../emit-context.js';
|
|
3
|
+
import { alignedValueText } from '../emit-narrowing.js';
|
|
4
|
+
import { toStringRefusal, toStringText } from '../emit-tostring.js';
|
|
5
|
+
import { cppConstantLiteral, cppTypeOf } from '../types.js';
|
|
6
|
+
const elementKey = (element) => representationKey(element);
|
|
7
|
+
/** A `number` scalar -- the carrier every index, count and position argument below must have. */
|
|
8
|
+
const isNumber = (operand) => operand.representation.kind === 'scalar' && operand.representation.domain === 'number';
|
|
9
|
+
/**
|
|
10
|
+
* The arity gate, written once. An omitted trailing optional argument never
|
|
11
|
+
* reaches `operation.arguments` at all, so the arities listed here are
|
|
12
|
+
* PHYSICAL arities and each one selects its own runtime overload, which
|
|
13
|
+
* supplies the spec's default at its own definition rather than having one
|
|
14
|
+
* synthesized here.
|
|
15
|
+
*/
|
|
16
|
+
const requireArity = (member, clause, arities, args) => {
|
|
17
|
+
if (arities.includes(args.length))
|
|
18
|
+
return;
|
|
19
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}`, `"Array.prototype.${member}" is spelled for ${arities.join(' or ')} argument(s) (ECMA-262 ${clause}); this call passes ${args.length}`);
|
|
20
|
+
};
|
|
21
|
+
const requireNumber = (member, ordinal, args) => {
|
|
22
|
+
const argument = args[ordinal];
|
|
23
|
+
if (argument && isNumber(argument))
|
|
24
|
+
return;
|
|
25
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}`, `"Array.prototype.${member}" argument ${ordinal} carries "${argument ? representationKey(argument.representation) : 'nothing'}", not a number scalar -- ` +
|
|
26
|
+
'the specification ToIntegerOrInfinity-coerces it, and coercion of an arbitrary value has no box here');
|
|
27
|
+
};
|
|
28
|
+
const requireElement = (member, ordinal, element, args) => {
|
|
29
|
+
const argument = args[ordinal];
|
|
30
|
+
if (argument && elementKey(argument.representation) === elementKey(element))
|
|
31
|
+
return;
|
|
32
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(element)}`, `"Array.prototype.${member}" argument ${ordinal} carries "${argument ? representationKey(argument.representation) : 'nothing'}", which is not the ` +
|
|
33
|
+
`receiver's own element carrier "${elementKey(element)}"`);
|
|
34
|
+
};
|
|
35
|
+
/** A plain `gea::runtime::array::<member>(receiver, ...args)`, with each argument's carrier already gated by the caller. */
|
|
36
|
+
const call = (ctx, member, receiverText, args) => `gea::runtime::array::${member}(${[receiverText, ...args.map((argument) => operandText(ctx, argument))].join(', ')})`;
|
|
37
|
+
/**
|
|
38
|
+
* The mutating bulk pair, ECMA-262 23.1.3.23 `push` and 23.1.3.37 `unshift`.
|
|
39
|
+
*
|
|
40
|
+
* Both take a rest parameter, so `ir/lower.ts`'s `packRestArguments` has
|
|
41
|
+
* already packed every call argument into one `array-object` before this runs
|
|
42
|
+
* -- a three-argument `a.push(x, y, z)` arrives here as `args.length === 1`.
|
|
43
|
+
* That is what makes the rendering a two-step bulk write rather than a
|
|
44
|
+
* comma-chain of one call per argument: `appendRange`/`prependRange`
|
|
45
|
+
* (gea_runtime.h) already are "insert every slot of one `ArrayObject` into
|
|
46
|
+
* another, in order, holes and all", which for a rest pack is exactly the
|
|
47
|
+
* spec's own loop. The observable end state is identical for a plain array
|
|
48
|
+
* with no exotic `length`/index setters, which is the only receiver an
|
|
49
|
+
* `array-object` carrier ever is. The final `Set(O, "length", len)` and
|
|
50
|
+
* `Return len` are the same `->length()` read `.length` already uses.
|
|
51
|
+
*
|
|
52
|
+
* A comma expression: C++ sequences the bulk write fully before `length()`
|
|
53
|
+
* reads it, so this is one expression whose value is the new length -- exactly
|
|
54
|
+
* the shape `emitCall` renders either as a bare statement or as an assignment.
|
|
55
|
+
*/
|
|
56
|
+
/**
|
|
57
|
+
* The one `arrayMethods` entry `emit-arrays.ts`'s counted-loop census also has
|
|
58
|
+
* to recognize, by name, before this table has run at all -- see that file's
|
|
59
|
+
* `pushLookups`. Named here rather than left a bare `'push'` literal in both
|
|
60
|
+
* files so the two cannot silently name two different methods: this is a
|
|
61
|
+
* bulk APPEND specifically (ECMA-262 23.1.3.23), not `unshift`'s bulk prepend,
|
|
62
|
+
* because the loop rewrite it feeds only ever turns a counted push into a
|
|
63
|
+
* range append -- a counted `unshift` would have to run its bound in reverse,
|
|
64
|
+
* which nothing here builds.
|
|
65
|
+
*/
|
|
66
|
+
export const arrayBulkAppendMethodName = 'push';
|
|
67
|
+
const bulkInsertText = (member, clause, spelling) => (ctx, receiverText, element, args) => {
|
|
68
|
+
const packed = args[0];
|
|
69
|
+
if (args.length !== 1 || !packed) {
|
|
70
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(element)}`, `"Array.prototype.${member}" (ECMA-262 ${clause}) expects its rest argument already packed into one array-object by ir/lower.ts's ` +
|
|
71
|
+
`packRestArguments; this call arrives with ${args.length} operand(s)`);
|
|
72
|
+
}
|
|
73
|
+
if (packed.representation.kind !== 'array-object') {
|
|
74
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(element)}`, `"Array.prototype.${member}"'s packed rest argument carries a "${packed.representation.kind}" carrier, not "array-object"`);
|
|
75
|
+
}
|
|
76
|
+
// The pack the lowering built exists only to be drained back out here, and
|
|
77
|
+
// where the census withheld it (`EmitContext.pendingPacks`) its elements are
|
|
78
|
+
// written straight into the receiver instead -- one allocation and one
|
|
79
|
+
// `ArrayObject` per call saved, which in a loop is one per iteration. The
|
|
80
|
+
// runtime's own variadic form also names the receiver once, which the
|
|
81
|
+
// comma-expression below cannot: a receiver expression that is itself a
|
|
82
|
+
// fresh object would otherwise be built twice, and the length read would
|
|
83
|
+
// report the wrong one.
|
|
84
|
+
const withheld = ctx.pendingPacks.get(packed.value);
|
|
85
|
+
const packedElement = packed.representation.element;
|
|
86
|
+
if (elementKey(packedElement) === elementKey(element)) {
|
|
87
|
+
if (withheld)
|
|
88
|
+
return `gea::runtime::array::${member}(${[receiverText, ...withheld.elements].join(', ')})`;
|
|
89
|
+
return `(${receiverText}->${spelling}(*${operandText(ctx, packed)}, 0), ${receiverText}->length())`;
|
|
90
|
+
}
|
|
91
|
+
// Two element carriers that disagree are usually a real miscompile risk --
|
|
92
|
+
// the header's own rule, and the reason this stayed a bare refusal. But
|
|
93
|
+
// one disagreement is a spelling of the SAME shape: hono's pattern router
|
|
94
|
+
// pushes `[pattern, method, handlerTuple]` into a `Route<T>[]` whose
|
|
95
|
+
// innermost tuple interned under a second shape id with a byte-identical
|
|
96
|
+
// field list, and `recastedRecordText`'s own recast is exactly what
|
|
97
|
+
// reconciles that pair everywhere else. It is applied per element rather
|
|
98
|
+
// than to the pack, because a bulk `appendRange` copies one `ArrayObject`
|
|
99
|
+
// instantiation into another and there is no such copy to make -- only a
|
|
100
|
+
// withheld pack, whose elements are still separate expressions, has
|
|
101
|
+
// anything to convert. `convertedValueText` is the one authority for
|
|
102
|
+
// whether a pair converts at all; a pair it refuses still refuses here.
|
|
103
|
+
const converted = withheld?.elements.map((text) => alignedValueText(ctx, 'prototype/emit-prototype-array.ts:174', packedElement, element, text)) ?? null;
|
|
104
|
+
if (converted !== null && converted.every((text) => text !== null)) {
|
|
105
|
+
return `gea::runtime::array::${member}(${[receiverText, ...converted].join(', ')})`;
|
|
106
|
+
}
|
|
107
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(element)}`, `"Array.prototype.${member}"'s packed rest argument carries element "${elementKey(packedElement)}", which does not match the ` +
|
|
108
|
+
`receiver's own element "${elementKey(element)}"`);
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* The callback-taking family: `map`, `filter`, `forEach`, `find`, `findIndex`,
|
|
112
|
+
* `some`, `every`, `flatMap`.
|
|
113
|
+
*
|
|
114
|
+
* One argument only. The spec's second parameter is `thisArg`, which binds
|
|
115
|
+
* `this` inside the callback -- and a `CallableObject` carries its own
|
|
116
|
+
* environment rather than a rebindable receiver, so there is nothing here to
|
|
117
|
+
* bind it to. Refused by name rather than silently ignored: dropping it would
|
|
118
|
+
* run the callback with the wrong `this`, which is a wrong answer and not a
|
|
119
|
+
* missing feature.
|
|
120
|
+
*
|
|
121
|
+
* The result's element type is the callback's own return type, deduced in the
|
|
122
|
+
* runtime template rather than spelled here: the emitter would have to
|
|
123
|
+
* re-derive it from the plan's carrier for the call's result, which is a
|
|
124
|
+
* second authority for a fact the C++ type system already holds exactly.
|
|
125
|
+
*/
|
|
126
|
+
const callbackMethodText = (member, clause) => (ctx, receiverText, _element, args) => {
|
|
127
|
+
const callback = args[0];
|
|
128
|
+
if (args.length !== 1 || !callback) {
|
|
129
|
+
throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(_element)}`, `"Array.prototype.${member}" is spelled for its one callback argument (ECMA-262 ${clause}); this call passes ${args.length}` +
|
|
130
|
+
(args.length > 1 ? `, and ECMA-262 ${clause}'s second parameter is a thisArg a CallableObject has nothing to bind` : ''));
|
|
131
|
+
}
|
|
132
|
+
return `gea::runtime::array::${member}(${receiverText}, ${elementAdaptedCallbackText(ctx, member, clause, _element, callback)})`;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* The callback, as the runtime's per-element call can invoke it.
|
|
136
|
+
*
|
|
137
|
+
* `gea::runtime::array`'s `mapCall` (and its siblings) hand the callable the
|
|
138
|
+
* element AS the element's own C++ type, at whichever arity the callable takes.
|
|
139
|
+
* That is exact while the callback's first parameter IS the element carrier. A
|
|
140
|
+
* callback declared WIDER than the element -- `nums.map(label)` with `label:
|
|
141
|
+
* (x: number | string) => string`, or hono's `matchResult[0].map(([[, route]])
|
|
142
|
+
* => route)`, whose parameter is the union of the two arms' tuple elements
|
|
143
|
+
* while each arm's array holds exactly one of them -- is a call whose argument
|
|
144
|
+
* needs the conversion any direct call renders at its call site, except that
|
|
145
|
+
* this call site is inside the runtime template. C++ does not perform it:
|
|
146
|
+
* `gea::TaggedUnion` has no converting constructor (arm injection is
|
|
147
|
+
* `ofArm<i>`, spelled by the emitter), so `is_invocable` fails at every arity
|
|
148
|
+
* and the template falls through to its last resort and does not compile --
|
|
149
|
+
* an error at the C++ step, after certification, about a program this backend
|
|
150
|
+
* had already accepted.
|
|
151
|
+
*
|
|
152
|
+
* So the conversion is rendered here, at the one boundary the emitter owns: a
|
|
153
|
+
* lambda of EXACTLY the callback's own arity that converts the element into
|
|
154
|
+
* the first parameter's carrier through `alignedValueText` -- the one authority
|
|
155
|
+
* on which pairs convert -- and forwards the index and the array untouched.
|
|
156
|
+
* Exactly the arity, never a variadic forwarder: `mapCall` picks its call by
|
|
157
|
+
* `is_invocable`, and a lambda that accepted anything would be picked at the
|
|
158
|
+
* three-argument arity and then fail to call a one-parameter callback inside
|
|
159
|
+
* its own body. The callable is init-captured by value so an rvalue callback
|
|
160
|
+
* expression is evaluated once, not once per element.
|
|
161
|
+
*
|
|
162
|
+
* Untouched when the first parameter already carries the element -- the text
|
|
163
|
+
* is exactly what it was, so nothing that emitted before moves -- and untouched
|
|
164
|
+
* for a callable that is not a `function-value-dispatch` or that declares a
|
|
165
|
+
* receiver, which the runtime passes `Undefined{}` for ahead of the element.
|
|
166
|
+
* Refused BY NAME when the pair has no conversion, when the index or array
|
|
167
|
+
* parameter is not the one the runtime hands over, or when the callback is
|
|
168
|
+
* variadic: a refusal at emission is the fail-closed answer the C++ error was
|
|
169
|
+
* standing in for.
|
|
170
|
+
*/
|
|
171
|
+
const elementAdaptedCallbackText = (ctx, member, clause, element, callback) => {
|
|
172
|
+
const text = operandText(ctx, callback);
|
|
173
|
+
const carrier = callback.representation;
|
|
174
|
+
if (carrier.kind !== 'function-value-dispatch' || carrier.abi.receiver !== null)
|
|
175
|
+
return text;
|
|
176
|
+
const [first, index, array, ...beyond] = carrier.abi.parameters;
|
|
177
|
+
if (!first || representationKey(first.value) === representationKey(element))
|
|
178
|
+
return text;
|
|
179
|
+
const refuse = (detail) => {
|
|
180
|
+
throw createCppEmitBlockedError(`runtime-helper:callback:${member}:${elementKey(element)}`, `"Array.prototype.${member}" (ECMA-262 ${clause}) hands its callback the receiver's element "${elementKey(element)}" and the callback's ` +
|
|
181
|
+
`first parameter carries "${representationKey(first.value)}"; ${detail}`);
|
|
182
|
+
};
|
|
183
|
+
if (carrier.abi.restFrom !== null || beyond.length > 0)
|
|
184
|
+
refuse('a callback with more parameters than element, index and array has no runtime call shape');
|
|
185
|
+
const converted = alignedValueText(ctx, 'prototype/emit-prototype-array.ts:elementAdaptedCallbackText', element, first.value, '__gea_element');
|
|
186
|
+
if (converted === null)
|
|
187
|
+
refuse('no installed conversion reconciles them');
|
|
188
|
+
if (index && representationKey(index.value) !== 'scalar(number)')
|
|
189
|
+
refuse(`its index parameter carries "${representationKey(index.value)}", and the runtime passes a number`);
|
|
190
|
+
if (array && (array.value.kind !== 'array-object' || representationKey(array.value.element) !== representationKey(element)))
|
|
191
|
+
refuse(`its array parameter carries "${representationKey(array.value)}", and the runtime passes the receiver itself`);
|
|
192
|
+
const formals = [`const ${cppTypeOf(element)}& __gea_element`];
|
|
193
|
+
const actuals = [converted];
|
|
194
|
+
if (index) {
|
|
195
|
+
formals.push('double __gea_index');
|
|
196
|
+
actuals.push('__gea_index');
|
|
197
|
+
}
|
|
198
|
+
if (array) {
|
|
199
|
+
formals.push(`const ${cppTypeOf(array.value)}& __gea_array`);
|
|
200
|
+
actuals.push('__gea_array');
|
|
201
|
+
}
|
|
202
|
+
return `[__gea_fn = ${text}](${formals.join(', ')}) { return __gea_fn(${actuals.join(', ')}); }`;
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* `find` and `at` -- and, with them, `pop` and `shift`: the members whose
|
|
206
|
+
* ECMA-262 result is `undefined` when there is nothing there (23.1.3.9 step 6,
|
|
207
|
+
* 23.1.3.1 step 6, 23.1.3.22 step 3.a, 23.1.3.26 step 3.a).
|
|
208
|
+
*
|
|
209
|
+
* `undefined` is a real value, not an absence to shrug at, so the runtime
|
|
210
|
+
* answers `gea::Optional<E>` and this reconciles that actual result with the
|
|
211
|
+
* plan's carrier through the ordinary conversion table. A dynamic result is
|
|
212
|
+
* therefore boxed per state, including an Undefined box for the absent arm;
|
|
213
|
+
* a concrete carrier that cannot preserve absence is refused.
|
|
214
|
+
*
|
|
215
|
+
* A call with NO result at all is a different thing and passes: `arr.pop();`
|
|
216
|
+
* in statement position discards the value, and `emitCall` renders it as a
|
|
217
|
+
* bare expression statement. The mutation is the point there, the `Optional`
|
|
218
|
+
* is constructed and dropped, and there is no carrier to disagree with.
|
|
219
|
+
*/
|
|
220
|
+
const optionalElementResultText = (ctx, member, clause, element, result, text) => {
|
|
221
|
+
if (result === null)
|
|
222
|
+
return text;
|
|
223
|
+
const carrier = result.representation;
|
|
224
|
+
const produced = { kind: 'optional', payload: element, absence: 'undefined' };
|
|
225
|
+
const converted = alignedValueText(ctx, 'prototype/emit-prototype-array.ts:242', produced, carrier, text);
|
|
226
|
+
if (converted !== null)
|
|
227
|
+
return converted;
|
|
228
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(produced)}->${representationKey(carrier)}`, `"Array.prototype.${member}" answers \`undefined\` when there is no such element (ECMA-262 ${clause}), so this backend renders it as an optional ` +
|
|
229
|
+
`"${elementKey(element)}"; this call's result carries "${representationKey(carrier)}", and no installed conversion preserves both states`);
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* ECMA-262 23.1.3.31 splice(start, deleteCount, ...items)` -- the member that
|
|
233
|
+
* both mutates in place AND returns the removed elements, which is what makes
|
|
234
|
+
* it the one no "returns the receiver" shortcut can fake.
|
|
235
|
+
*
|
|
236
|
+
* Three physical arities, because `lib.es5.d.ts` declares two overloads and
|
|
237
|
+
* the rest pack only exists in one of them: `splice(start)` (the spec's
|
|
238
|
+
* "deleteCount absent" branch, everything from `start` onward),
|
|
239
|
+
* `splice(start, deleteCount)`, and `splice(start, deleteCount, ...items)`
|
|
240
|
+
* where the third operand is the packed rest.
|
|
241
|
+
*/
|
|
242
|
+
const spliceText = (ctx, receiverText, element, args) => {
|
|
243
|
+
requireArity('splice', '23.1.3.30', [1, 2, 3], args);
|
|
244
|
+
requireNumber('splice', 0, args);
|
|
245
|
+
if (args.length >= 2)
|
|
246
|
+
requireNumber('splice', 1, args);
|
|
247
|
+
if (args.length === 3) {
|
|
248
|
+
const packed = args[2];
|
|
249
|
+
if (!packed || packed.representation.kind !== 'array-object' || elementKey(packed.representation.element) !== elementKey(element)) {
|
|
250
|
+
throw createCppEmitBlockedError(`runtime-helper:element:splice:${elementKey(element)}`, `"Array.prototype.splice"'s packed rest argument carries "${packed ? representationKey(packed.representation) : 'nothing'}", not an array-object of ` +
|
|
251
|
+
`the receiver's own element "${elementKey(element)}"`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return call(ctx, 'splice', receiverText, args);
|
|
255
|
+
};
|
|
256
|
+
/**
|
|
257
|
+
* ECMA-262 23.1.3.30 sort(comparefn)`.
|
|
258
|
+
*
|
|
259
|
+
* Two renderings, because the two forms are two different operations rather
|
|
260
|
+
* than one with a default. With a comparator, the ordering is the program's.
|
|
261
|
+
* WITHOUT one, step 3's default compares `ToString(x)` against `ToString(y)`
|
|
262
|
+
* by code unit -- a genuinely STRING comparison, which is why `[10, 9].sort()`
|
|
263
|
+
* is `[10, 9]`. That default needs a ToString for the element carrier, and
|
|
264
|
+
* this runtime has one only for a string or a scalar; every other element is
|
|
265
|
+
* refused by name here rather than left to fail as a C++ overload error, which
|
|
266
|
+
* would name a template and not the member.
|
|
267
|
+
*/
|
|
268
|
+
const sortText = (ctx, receiverText, element, args) => {
|
|
269
|
+
requireArity('sort', '23.1.3.30', [0, 1], args);
|
|
270
|
+
if (args.length === 1)
|
|
271
|
+
return call(ctx, 'sort', receiverText, args);
|
|
272
|
+
if (element.kind !== 'string' && element.kind !== 'scalar') {
|
|
273
|
+
throw createCppEmitBlockedError(`runtime-helper:element:sort:${elementKey(element)}`, `"Array.prototype.sort" with no comparator uses ECMA-262 23.1.3.30 step 3's default, which compares ToString(x) against ToString(y); this ` +
|
|
274
|
+
`receiver's element carries "${elementKey(element)}", and this runtime states a ToString only for a string or a scalar -- pass a comparator, ` +
|
|
275
|
+
'or the ToString of that carrier is the gap to close');
|
|
276
|
+
}
|
|
277
|
+
return `gea::runtime::array::sortDefault(${receiverText})`;
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* ECMA-262 23.1.3.18 join(separator)`. The same ToString requirement `sort`'s
|
|
281
|
+
* default has, for the same reason: step 3.d ToStrings every element that is
|
|
282
|
+
* not a hole, `undefined` or `null`.
|
|
283
|
+
*
|
|
284
|
+
* Unlike `sort`, this one does not refuse a non-string/scalar element outright:
|
|
285
|
+
* `gea::runtime::array::join` (the fast path below) calls a single free
|
|
286
|
+
* `gea::host::detail::toString` overload set, which only covers string and
|
|
287
|
+
* scalar -- but the COMPILER's own `toStringText` (emit-tostring.ts) already
|
|
288
|
+
* converts far more (`optional`, `tagged-union` of convertible arms, ...), for
|
|
289
|
+
* the identical ECMA-262 ToString this member needs. The gap is that an
|
|
290
|
+
* `optional`'s ToString needs to know which absence (`null` vs `undefined`) it
|
|
291
|
+
* holds -- a STATIC fact `toStringText` reads off the carrier -- and a runtime
|
|
292
|
+
* template instantiated once per element TYPE has no per-call-site way to
|
|
293
|
+
* carry that. So an element carrier the fast path cannot take is rendered as
|
|
294
|
+
* an inline loop instead, applying `toStringText`'s already-composed
|
|
295
|
+
* conversion text to each element read out of the SAME `ArrayObject` accessors
|
|
296
|
+
* (`size`/`present`/`at`) the fast path itself uses -- one ToString, reached
|
|
297
|
+
* two ways, rather than a second one invented for the loop.
|
|
298
|
+
*
|
|
299
|
+
* `[typeof d.value, d.writable, d.enumerable, d.configurable].join('/')`
|
|
300
|
+
* (`test/runtime/static-intrinsic-reflection.runtime.js`'s own `describe`) is
|
|
301
|
+
* exactly this: TypeScript's ambient `PropertyDescriptor.writable` etc. are
|
|
302
|
+
* `boolean | undefined`, so the array literal's element unifies to
|
|
303
|
+
* `optional(tagged-union(scalar(boolean), string), undefined)`.
|
|
304
|
+
*/
|
|
305
|
+
const joinText = (ctx, receiverText, element, args) => {
|
|
306
|
+
requireArity('join', '23.1.3.18', [0, 1], args);
|
|
307
|
+
const separator = args[0];
|
|
308
|
+
if (separator && separator.representation.kind !== 'string') {
|
|
309
|
+
throw createCppEmitBlockedError(`runtime-helper:element:join:${elementKey(element)}`, `"Array.prototype.join"'s separator carries a "${representationKey(separator.representation)}" carrier, not a string`);
|
|
310
|
+
}
|
|
311
|
+
if (element.kind === 'string' || element.kind === 'scalar')
|
|
312
|
+
return call(ctx, 'join', receiverText, args);
|
|
313
|
+
// `nullishJoinsEmpty`: step 3.d's own rule, not the general ToString every
|
|
314
|
+
// other caller of this table needs -- see `toStringText`'s own header.
|
|
315
|
+
const converted = toStringText('__gea_join_src->at(__gea_join_i)', element, ctx.classes, ctx.deriver, false, true);
|
|
316
|
+
if (converted === null) {
|
|
317
|
+
throw createCppEmitBlockedError(`runtime-helper:element:join:${elementKey(element)}`, `"Array.prototype.join" ToStrings every element (ECMA-262 23.1.3.18 step 3.d); this receiver's element carries "${elementKey(element)}", and ` +
|
|
318
|
+
`neither this runtime's fast join path nor its inline ToString fallback converts it: ${toStringRefusal(element, ctx.classes, ctx.deriver)}`);
|
|
319
|
+
}
|
|
320
|
+
const separatorText = separator ? operandText(ctx, separator) : cppConstantLiteral(',', 'string', { kind: 'string' });
|
|
321
|
+
return ('([&]() -> std::string { ' +
|
|
322
|
+
`const auto& __gea_join_src = ${receiverText}; std::string __gea_join_result; ` +
|
|
323
|
+
'for (std::size_t __gea_join_i = 0; __gea_join_i < __gea_join_src->size(); ++__gea_join_i) { ' +
|
|
324
|
+
`if (__gea_join_i != 0) __gea_join_result += ${separatorText}; ` +
|
|
325
|
+
`if (__gea_join_src->present(__gea_join_i)) __gea_join_result += ${converted}; ` +
|
|
326
|
+
'} return __gea_join_result; })()');
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* ECMA-262 23.1.3.2 concat(...items)`.
|
|
330
|
+
*
|
|
331
|
+
* The rest pack's element decides which half of step 5's IsConcatSpreadable
|
|
332
|
+
* test applies, and it is a compile-time fact: a packed element that is itself
|
|
333
|
+
* an `array-object` of the receiver's element SPREADS, one that IS the
|
|
334
|
+
* receiver's element is appended whole. A packed element that is neither --
|
|
335
|
+
* the `(T | ConcatArray<T>)[]` overload's own union, reached when a single
|
|
336
|
+
* call mixes the two -- is refused by name, because deciding between the two
|
|
337
|
+
* would mean reading a runtime tag and the two arms produce different lengths.
|
|
338
|
+
*/
|
|
339
|
+
const concatText = (ctx, receiverText, element, args) => {
|
|
340
|
+
const packed = args[0];
|
|
341
|
+
if (args.length !== 1 || !packed) {
|
|
342
|
+
throw createCppEmitBlockedError(`runtime-helper:element:concat:${elementKey(element)}`, '"Array.prototype.concat" expects its rest argument already packed into one array-object by ir/lower.ts\'s packRestArguments; ' +
|
|
343
|
+
`this call arrives with ${args.length} operand(s)`);
|
|
344
|
+
}
|
|
345
|
+
const carrier = packed.representation;
|
|
346
|
+
const spreads = carrier.kind === 'array-object' &&
|
|
347
|
+
carrier.element.kind === 'array-object' &&
|
|
348
|
+
elementKey(carrier.element.element) === elementKey(element);
|
|
349
|
+
const appends = carrier.kind === 'array-object' && elementKey(carrier.element) === elementKey(element);
|
|
350
|
+
if (!spreads && !appends) {
|
|
351
|
+
throw createCppEmitBlockedError(`runtime-helper:element:concat:${elementKey(element)}`, `"Array.prototype.concat"'s packed rest argument carries "${representationKey(carrier)}"; this backend renders it only when every item is the ` +
|
|
352
|
+
`receiver's own element "${elementKey(element)}" (appended whole) or an array-object of it (spread) -- a mixed ` +
|
|
353
|
+
'`(T | ConcatArray<T>)[]` pack would need a runtime tag test, and its two arms produce different lengths');
|
|
354
|
+
}
|
|
355
|
+
return call(ctx, 'concat', receiverText, args);
|
|
356
|
+
};
|
|
357
|
+
/**
|
|
358
|
+
* ECMA-262 23.1.3.13 flat(depth)`, at depth 1 only.
|
|
359
|
+
*
|
|
360
|
+
* A deeper flatten changes the RESULT'S ELEMENT TYPE by an amount that depends
|
|
361
|
+
* on the depth argument's VALUE, and a value is not a type: there is no single
|
|
362
|
+
* C++ result carrier for `flat(n)`. `flat()` and the literal `flat(1)` are the
|
|
363
|
+
* one depth this backend can spell, and every other depth is refused by name
|
|
364
|
+
* rather than silently flattened once.
|
|
365
|
+
*/
|
|
366
|
+
const flatText = (ctx, receiverText, element, args) => {
|
|
367
|
+
requireArity('flat', '23.1.3.14', [0, 1], args);
|
|
368
|
+
const depth = args[0];
|
|
369
|
+
if (depth) {
|
|
370
|
+
const constant = ctx.constantTexts.get(depth.value);
|
|
371
|
+
if (constant !== '1') {
|
|
372
|
+
throw createCppEmitBlockedError(`runtime-helper:element:flat:${elementKey(element)}`, `"Array.prototype.flat" is rendered at depth 1 only (its own default); this call's depth is ` +
|
|
373
|
+
`${constant === undefined ? 'not a compile-time constant' : `the constant ${constant}`}, and a depth other than 1 changes the result's element ` +
|
|
374
|
+
"type by an amount that depends on the argument's value, which no single C++ carrier can spell");
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// The ownership check is not pedantry: `gea::runtime::array::flat` takes the
|
|
378
|
+
// inner array as a `shared_ptr<ArrayObject<Inner>>`, which is what an
|
|
379
|
+
// `array-object` carrier spells only at `shared-refcount`. Any other
|
|
380
|
+
// ownership would miss the template and surface as a C++ overload error
|
|
381
|
+
// naming a template instead of this member.
|
|
382
|
+
if (element.kind === 'array-object' && element.ownership === 'shared-refcount') {
|
|
383
|
+
return `gea::runtime::array::flat(${receiverText})`;
|
|
384
|
+
}
|
|
385
|
+
// A per-slot `T | T[]` union -- `(string | string[])[]`'s own tagged union
|
|
386
|
+
// when the checker cannot prove every element the same arm -- is the OTHER
|
|
387
|
+
// shape `flat()` actually has to handle: ECMA-262's own FlattenIntoArray
|
|
388
|
+
// tests `IsArray` per element at runtime regardless, so a two-arm union of
|
|
389
|
+
// exactly [leaf, array-object(leaf)] is not a harder case, just a
|
|
390
|
+
// differently-shaped one. `gea::runtime::array::flat`'s sibling overload
|
|
391
|
+
// (gea_runtime.h) renders it; anything else -- three arms, the array arm
|
|
392
|
+
// not `shared-refcount`, the two arms not agreeing on the leaf type --
|
|
393
|
+
// still refuses below rather than guessing.
|
|
394
|
+
if (element.kind === 'tagged-union' &&
|
|
395
|
+
element.arms.length === 2 &&
|
|
396
|
+
element.arms[1]?.value.kind === 'array-object' &&
|
|
397
|
+
element.arms[1].value.ownership === 'shared-refcount' &&
|
|
398
|
+
elementKey(element.arms[1].value.element) === elementKey(element.arms[0].value)) {
|
|
399
|
+
return `gea::runtime::array::flat(${receiverText})`;
|
|
400
|
+
}
|
|
401
|
+
throw createCppEmitBlockedError(`runtime-helper:element:flat:${elementKey(element)}`, `"Array.prototype.flat" flattens one level of nested arrays; this receiver's element carries "${elementKey(element)}", which is neither a ` +
|
|
402
|
+
'shared-refcount array-object nor a two-arm [leaf, array-object(leaf)] union, so there is nothing this backend can flatten');
|
|
403
|
+
};
|
|
404
|
+
/** The ranged, index-argument members: every argument is a position and the runtime overload for this arity supplies the spec's own default for the rest. */
|
|
405
|
+
const rangedMethodText = (member, clause, arities, elementOrdinal) => (ctx, receiverText, element, args) => {
|
|
406
|
+
requireArity(member, clause, arities, args);
|
|
407
|
+
for (let ordinal = 0; ordinal < args.length; ordinal += 1) {
|
|
408
|
+
if (ordinal === elementOrdinal)
|
|
409
|
+
requireElement(member, ordinal, element, args);
|
|
410
|
+
else
|
|
411
|
+
requireNumber(member, ordinal, args);
|
|
412
|
+
}
|
|
413
|
+
return call(ctx, member, receiverText, args);
|
|
414
|
+
};
|
|
415
|
+
/** The reducers: `reduce(cb)` and `reduce(cb, initialValue)` are two physical arities and two runtime overloads; the no-initial form's empty-array TypeError lives in the runtime. */
|
|
416
|
+
const reduceText = (member, clause) => (ctx, receiverText, _element, args) => {
|
|
417
|
+
requireArity(member, clause, [1, 2], args);
|
|
418
|
+
return call(ctx, member, receiverText, args);
|
|
419
|
+
};
|
|
420
|
+
/** `pop`/`shift`: no arguments at all, and an optional element for a result -- the receiver is the whole call. */
|
|
421
|
+
const optionalNullaryText = (member, clause) => (ctx, receiverText, element, args, result) => {
|
|
422
|
+
requireArity(member, clause, [0], args);
|
|
423
|
+
return optionalElementResultText(ctx, member, clause, element, result, `gea::runtime::array::${member}(${receiverText})`);
|
|
424
|
+
};
|
|
425
|
+
/**
|
|
426
|
+
* `filter` under a TYPE-GUARD predicate, whose result element is NARROWER than
|
|
427
|
+
* the receiver's.
|
|
428
|
+
*
|
|
429
|
+
* `Array.prototype.filter` has two declarations in `lib.es5.d.ts`: the ordinary
|
|
430
|
+
* one keeps the element, and `filter<S extends T>(predicate: (v: T) => v is S):
|
|
431
|
+
* S[]` states that every value the guard kept is an `S`. hono's
|
|
432
|
+
* `utils/html.ts` selects the second -- `res.filter<string>(Boolean as any)`
|
|
433
|
+
* over a `(string | undefined)[]` -- and the checker publishes the call's
|
|
434
|
+
* result as `string[]`.
|
|
435
|
+
*
|
|
436
|
+
* The runtime template cannot answer that: its `kept` array is built from the
|
|
437
|
+
* receiver's own `E`, so it hands back `(string | undefined)[]` and the store
|
|
438
|
+
* into the narrowed cell has no conversion -- and none may be installed, for
|
|
439
|
+
* the reason `conversions.ts` states beside the refusal: a conversion between
|
|
440
|
+
* two `array-object` carriers with different elements can only ALLOCATE, which
|
|
441
|
+
* silently detaches a mutable array from every other name for it.
|
|
442
|
+
*
|
|
443
|
+
* `filter` is the one method where that objection does not apply, because the
|
|
444
|
+
* array in question is one `filter` itself MINTS -- nothing else can hold it
|
|
445
|
+
* yet, so choosing its element is a choice this call owns rather than a recast
|
|
446
|
+
* of somebody's array. So the narrowing happens as each kept element is
|
|
447
|
+
* appended, through the one conversion authority, and the runtime overload
|
|
448
|
+
* takes the projection that performs it.
|
|
449
|
+
*/
|
|
450
|
+
const filterText = (ctx, receiverText, element, args, result) => {
|
|
451
|
+
const plain = callbackMethodText('filter', '23.1.3.8');
|
|
452
|
+
const kept = result?.representation;
|
|
453
|
+
if (!kept || kept.kind !== 'array-object' || representationKey(kept.element) === representationKey(element)) {
|
|
454
|
+
return plain(ctx, receiverText, element, args, result);
|
|
455
|
+
}
|
|
456
|
+
const callback = args[0];
|
|
457
|
+
if (args.length !== 1 || !callback)
|
|
458
|
+
return plain(ctx, receiverText, element, args, result);
|
|
459
|
+
const projected = alignedValueText(ctx, 'prototype/emit-prototype-array.ts:filterText', element, kept.element, '__gea_kept');
|
|
460
|
+
if (projected === null) {
|
|
461
|
+
throw createCppEmitBlockedError(`runtime-helper:element:filter:${elementKey(element)}`, `"Array.prototype.filter" (ECMA-262 23.1.3.8) publishes "${representationKey(kept.element)}" elements over a receiver ` +
|
|
462
|
+
`carrying "${elementKey(element)}", and no installed conversion narrows one into the other`);
|
|
463
|
+
}
|
|
464
|
+
const keptType = cppTypeOf(kept.element);
|
|
465
|
+
const predicate = elementAdaptedCallbackText(ctx, 'filter', '23.1.3.8', element, callback);
|
|
466
|
+
return (`gea::runtime::array::filterNarrowed<${keptType}>(${receiverText}, ${predicate}, ` +
|
|
467
|
+
`+[](const ${cppTypeOf(element)}& __gea_kept) -> ${keptType} { return ${projected}; })`);
|
|
468
|
+
};
|
|
469
|
+
const findText = (ctx, receiverText, element, args, result) => {
|
|
470
|
+
const text = callbackMethodText('find', '23.1.3.9')(ctx, receiverText, element, args, result);
|
|
471
|
+
return optionalElementResultText(ctx, 'find', '23.1.3.9', element, result, text);
|
|
472
|
+
};
|
|
473
|
+
const atText = (ctx, receiverText, element, args, result) => {
|
|
474
|
+
requireArity('at', '23.1.3.1', [1], args);
|
|
475
|
+
requireNumber('at', 0, args);
|
|
476
|
+
return optionalElementResultText(ctx, 'at', '23.1.3.1', element, result, call(ctx, 'at', receiverText, args));
|
|
477
|
+
};
|
|
478
|
+
/** `emit-carrier-members.ts`'s `arrayAccessText` defers exactly these keys off an `array-object` receiver -- one authority for "is this method implemented". */
|
|
479
|
+
export const arrayMethods = new Map([
|
|
480
|
+
[arrayBulkAppendMethodName, bulkInsertText(arrayBulkAppendMethodName, '23.1.3.23', 'appendRange')],
|
|
481
|
+
['unshift', bulkInsertText('unshift', '23.1.3.37', 'prependRange')],
|
|
482
|
+
['map', callbackMethodText('map', '23.1.3.21')],
|
|
483
|
+
['filter', filterText],
|
|
484
|
+
['forEach', callbackMethodText('forEach', '23.1.3.15')],
|
|
485
|
+
['findIndex', callbackMethodText('findIndex', '23.1.3.10')],
|
|
486
|
+
['some', callbackMethodText('some', '23.1.3.29')],
|
|
487
|
+
['every', callbackMethodText('every', '23.1.3.6')],
|
|
488
|
+
['flatMap', callbackMethodText('flatMap', '23.1.3.14')],
|
|
489
|
+
['find', findText],
|
|
490
|
+
['at', atText],
|
|
491
|
+
['pop', optionalNullaryText('pop', '23.1.3.22')],
|
|
492
|
+
['shift', optionalNullaryText('shift', '23.1.3.27')],
|
|
493
|
+
['reduce', reduceText('reduce', '23.1.3.24')],
|
|
494
|
+
['reduceRight', reduceText('reduceRight', '23.1.3.25')],
|
|
495
|
+
['splice', spliceText],
|
|
496
|
+
['sort', sortText],
|
|
497
|
+
['join', joinText],
|
|
498
|
+
// ECMA-262 23.1.3.36 `toString()`: `Let func be ? Get(array, "join"). If
|
|
499
|
+
// IsCallable(func) is false, set func to %Object.prototype.toString%.
|
|
500
|
+
// Return ? Call(func, array).` Every array this backend carries has a real
|
|
501
|
+
// `join` (it is implemented above, unconditionally), so step 3's fallback
|
|
502
|
+
// never applies and this is exactly `join()` with no arguments -- the same
|
|
503
|
+
// fact `test/runtime/static-intrinsic-reflection.runtime.js`'s own
|
|
504
|
+
// `typeof Array.prototype.join` line depends on `join` existing for.
|
|
505
|
+
//
|
|
506
|
+
// Borrowed Object.prototype.toString calls are authenticated ObjectTag
|
|
507
|
+
// computations and never enter this Array-specific algorithm.
|
|
508
|
+
['toString', (ctx, receiverText, element) => joinText(ctx, receiverText, element, [], null)],
|
|
509
|
+
['concat', concatText],
|
|
510
|
+
['flat', flatText],
|
|
511
|
+
['slice', rangedMethodText('slice', '23.1.3.28', [0, 1, 2], null)],
|
|
512
|
+
['indexOf', rangedMethodText('indexOf', '23.1.3.17', [1, 2], 0)],
|
|
513
|
+
['lastIndexOf', rangedMethodText('lastIndexOf', '23.1.3.20', [1, 2], 0)],
|
|
514
|
+
['includes', rangedMethodText('includes', '23.1.3.16', [1, 2], 0)],
|
|
515
|
+
['fill', rangedMethodText('fill', '23.1.3.7', [1, 2, 3], 0)],
|
|
516
|
+
['reverse', rangedMethodText('reverse', '23.1.3.26', [0], null)]
|
|
517
|
+
]);
|
|
518
|
+
export const arrayPrototypeMethods = new Set(arrayMethods.keys());
|
|
519
|
+
/**
|
|
520
|
+
* Members this backend states a REASON for not implementing, rather than
|
|
521
|
+
* letting them fall into the generic "here is the list of what is implemented"
|
|
522
|
+
* refusal. "Not built yet" and "cannot be built without X" are different
|
|
523
|
+
* answers, and only the second tells you what to build.
|
|
524
|
+
*/
|
|
525
|
+
/**
|
|
526
|
+
* Names an Array INHERITS -- from `Array.prototype` or, past it,
|
|
527
|
+
* `Object.prototype` -- that this backend renders nothing for.
|
|
528
|
+
*
|
|
529
|
+
* Kept apart from `arrayMemberRefusals` above, which is about members
|
|
530
|
+
* `Array.prototype` itself declares and this backend has simply not built.
|
|
531
|
+
* These are the reason `arrayAccessText` may not treat "not an index, not
|
|
532
|
+
* `length`, not an extension field, not a method" as "an ordinary own
|
|
533
|
+
* property, ask the expando sidecar": the sidecar answers OWN properties, and
|
|
534
|
+
* for every name here the language answers from the PROTOTYPE CHAIN instead.
|
|
535
|
+
* Handing one to the sidecar would find nothing and publish `undefined` --
|
|
536
|
+
* turning a compile-time refusal into a silently wrong answer, which is the
|
|
537
|
+
* one trade this backend never makes.
|
|
538
|
+
*/
|
|
539
|
+
export const arrayInheritedMemberRefusals = new Set([
|
|
540
|
+
'constructor',
|
|
541
|
+
'hasOwnProperty',
|
|
542
|
+
'isPrototypeOf',
|
|
543
|
+
'propertyIsEnumerable',
|
|
544
|
+
'valueOf',
|
|
545
|
+
'__proto__',
|
|
546
|
+
'__defineGetter__',
|
|
547
|
+
'__defineSetter__',
|
|
548
|
+
'__lookupGetter__',
|
|
549
|
+
'__lookupSetter__'
|
|
550
|
+
]);
|
|
551
|
+
export const arrayMemberRefusals = new Map([
|
|
552
|
+
[
|
|
553
|
+
'keys',
|
|
554
|
+
'ECMA-262 23.1.3.19 keys() returns an ITERATOR object, which is a first-class value this backend does not mint -- emit-iterator.ts lowers only the ' +
|
|
555
|
+
'fused for-of cursor, never a standalone iterator'
|
|
556
|
+
],
|
|
557
|
+
['values', 'ECMA-262 23.1.3.38 values() returns an ITERATOR object; see keys()'],
|
|
558
|
+
['entries', 'ECMA-262 23.1.3.5 entries() returns an ITERATOR of [index, value] pairs; see keys()'],
|
|
559
|
+
[
|
|
560
|
+
'findLast',
|
|
561
|
+
'ECMA-262 23.1.3.11 findLast(predicate) is `find` walked from the end and is simply unbuilt here, not blocked -- the same optional-element result ' +
|
|
562
|
+
'carrier `find` uses would carry it'
|
|
563
|
+
],
|
|
564
|
+
[
|
|
565
|
+
'findLastIndex',
|
|
566
|
+
'ECMA-262 23.1.3.12 findLastIndex(predicate) is `findIndex` walked from the end and is simply unbuilt here, not blocked'
|
|
567
|
+
],
|
|
568
|
+
[
|
|
569
|
+
'copyWithin',
|
|
570
|
+
"ECMA-262 23.1.3.4 copyWithin(target, start, end) is unbuilt here, not blocked -- it is `fill`'s ranged shape over a self-copy"
|
|
571
|
+
],
|
|
572
|
+
[
|
|
573
|
+
'toSorted',
|
|
574
|
+
'ECMA-262 23.1.3.34 toSorted / toReversed / toSpliced / with are the ES2023 non-mutating twins; each needs the same copy-then-mutate shape ' +
|
|
575
|
+
'`slice` already has and is unbuilt here, not blocked'
|
|
576
|
+
],
|
|
577
|
+
[
|
|
578
|
+
'toLocaleString',
|
|
579
|
+
"ECMA-262 23.1.3.32 toLocaleString calls each element's own toLocaleString, which is locale-sensitive; there is no locale database here"
|
|
580
|
+
]
|
|
581
|
+
]);
|
|
582
|
+
/**
|
|
583
|
+
* The Array.prototype members that MUTATE their receiver (ECMA-262 23.1.3).
|
|
584
|
+
*
|
|
585
|
+
* Read by `emitCall` to tick a reactive array's revision cell after a call that
|
|
586
|
+
* changed its contents. It is a property of the language, not of this
|
|
587
|
+
* backend's rendering of it -- `slice` and `concat` build a new array and
|
|
588
|
+
* change nothing, `splice` and `sort` change the receiver in place -- so it is
|
|
589
|
+
* stated once here beside the renderings rather than re-derived from what each
|
|
590
|
+
* one happens to emit.
|
|
591
|
+
*/
|
|
592
|
+
export const mutatingArrayMembers = new Set([
|
|
593
|
+
'push',
|
|
594
|
+
'pop',
|
|
595
|
+
'shift',
|
|
596
|
+
'unshift',
|
|
597
|
+
'splice',
|
|
598
|
+
'sort',
|
|
599
|
+
'reverse',
|
|
600
|
+
'fill',
|
|
601
|
+
'copyWithin'
|
|
602
|
+
]);
|