@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,573 @@
|
|
|
1
|
+
import { typedArrayMemberTemplateOf, typedArraySetSourceAccepted, typedArraySetSourceOf } from '../../representation/host-templates.js';
|
|
2
|
+
import { createCppEmitBlockedError, defineValue, operandText, wellKnownSymbolMemberOf } from './emit-context.js';
|
|
3
|
+
import { cppScalarType, cppStringLiteral, cppTypeOf } from './types.js';
|
|
4
|
+
const typedArrayTagNames = {
|
|
5
|
+
int8: 'Int8Array',
|
|
6
|
+
uint8: 'Uint8Array',
|
|
7
|
+
'uint8-clamped': 'Uint8ClampedArray',
|
|
8
|
+
int16: 'Int16Array',
|
|
9
|
+
uint16: 'Uint16Array',
|
|
10
|
+
int32: 'Int32Array',
|
|
11
|
+
uint32: 'Uint32Array',
|
|
12
|
+
float32: 'Float32Array',
|
|
13
|
+
float64: 'Float64Array'
|
|
14
|
+
};
|
|
15
|
+
/** Builtin `@@toStringTag` values carried directly by the binary-view family. */
|
|
16
|
+
export const binaryToStringTagText = (representation) => {
|
|
17
|
+
if (representation.kind === 'typed-array')
|
|
18
|
+
return cppStringLiteral(typedArrayTagNames[representation.element]);
|
|
19
|
+
if (representation.kind === 'array-buffer')
|
|
20
|
+
return cppStringLiteral('ArrayBuffer');
|
|
21
|
+
if (representation.kind === 'shared-array-buffer')
|
|
22
|
+
return cppStringLiteral('SharedArrayBuffer');
|
|
23
|
+
if (representation.kind === 'data-view')
|
|
24
|
+
return cppStringLiteral('DataView');
|
|
25
|
+
return null;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* The `ArrayBuffer`/`DataView` half of the binary family: their constructions,
|
|
29
|
+
* their member reads, and the calls those reads fuse with -- plus the
|
|
30
|
+
* buffer-shaped members of a typed array (`buffer`/`byteLength`/`byteOffset`,
|
|
31
|
+
* `set`/`subarray`/`slice`/`fill`), which belong here rather than with the
|
|
32
|
+
* indexed access in `emit-carrier-members.ts` because every one of them is
|
|
33
|
+
* about the underlying BLOCK rather than about an element.
|
|
34
|
+
*
|
|
35
|
+
* A file of its own, and not a section of `emit-callable.ts` or
|
|
36
|
+
* `emit-prototype-array.ts`: those two are already large, and what this holds
|
|
37
|
+
* is one subject -- ECMA-262 25.1/25.3 plus 23.2's non-indexed surface --
|
|
38
|
+
* whose members and refusals belong beside each other. Each refusal states
|
|
39
|
+
* what is missing and why, because "not built" and "cannot be built without
|
|
40
|
+
* X" are different answers.
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* `new ArrayBuffer(byteLength)` -- ECMA-262 25.1.4.1.
|
|
44
|
+
*
|
|
45
|
+
* Here, beside `emitTypedArrayConstruct` in spirit and for the identical
|
|
46
|
+
* structural reason (`emit-callable.ts`'s own comment states it in full): the
|
|
47
|
+
* checker's overload set for `ArrayBufferConstructor` is
|
|
48
|
+
* `new (byteLength?: number, options?: ArrayBufferOptions)`, whose second
|
|
49
|
+
* parameter is an options bag this compiler derives no carrier for, so
|
|
50
|
+
* `representation/host-abi.ts` cannot join a single physical frame and
|
|
51
|
+
* `.construct` is correctly `null`. This reads the construction's own
|
|
52
|
+
* already-resolved argument instead.
|
|
53
|
+
*
|
|
54
|
+
* The `maxByteLength` option -- ECMAScript 2024's RESIZABLE buffers -- is
|
|
55
|
+
* refused by name rather than ignored. Ignoring it would produce a
|
|
56
|
+
* fixed-length buffer whose later `resize` silently did nothing, which is the
|
|
57
|
+
* kind of quiet divergence this whole family exists to avoid; `gea::ArrayBuffer`
|
|
58
|
+
* is a `std::vector`, so resizing is implementable, but a resize INVALIDATES
|
|
59
|
+
* every view's cached base pointer and nothing here republishes those.
|
|
60
|
+
*/
|
|
61
|
+
/**
|
|
62
|
+
* The two carriers `core-globals.ts`'s `coreNativeTypes` states for the
|
|
63
|
+
* Encoding Standard's classes, named here so the construct path and that table
|
|
64
|
+
* cannot drift apart on the spelling.
|
|
65
|
+
*/
|
|
66
|
+
const textEncoderCarrier = 'gea::runtime::textcodec::TextEncoder';
|
|
67
|
+
const textDecoderCarrier = 'gea::runtime::textcodec::TextDecoder';
|
|
68
|
+
/**
|
|
69
|
+
* The three ambient constructor PROTOCOL NAMES `emitArrayBufferConstruct`,
|
|
70
|
+
* `emitSharedArrayBufferConstruct` and `emitDataViewConstruct` below render.
|
|
71
|
+
*
|
|
72
|
+
* Each dispatches structurally, off the construct operation's own already-
|
|
73
|
+
* resolved result carrier (`result.kind === 'array-buffer'` / `'shared-array-
|
|
74
|
+
* buffer'` / `'data-view'` in `emit-callable.ts`'s `emitConstruct`), never off
|
|
75
|
+
* this name -- so, exactly like the keyed-collection family's own such table,
|
|
76
|
+
* this is not read by the renderers; it is their restatement of which ambient
|
|
77
|
+
* names their own comments already document, exported for
|
|
78
|
+
* `host/native-protocols.ts` to derive a native-boundary claim from.
|
|
79
|
+
*/
|
|
80
|
+
export const cppBinaryBufferFamilyConstructorProtocols = [
|
|
81
|
+
'ArrayBufferConstructor',
|
|
82
|
+
'SharedArrayBufferConstructor',
|
|
83
|
+
'DataViewConstructor'
|
|
84
|
+
];
|
|
85
|
+
export const emitArrayBufferConstruct = (ctx, lines, operation, result) => {
|
|
86
|
+
if (result.ownership !== 'shared-refcount') {
|
|
87
|
+
throw createCppEmitBlockedError('call-abi:construct:array-buffer', `an ArrayBuffer allocation carries ownership "${result.ownership}", but this emitter only spells std::make_shared for "shared-refcount"`);
|
|
88
|
+
}
|
|
89
|
+
const name = defineValue(ctx, operation.result);
|
|
90
|
+
const argument = operation.arguments[0];
|
|
91
|
+
if (!argument) {
|
|
92
|
+
lines.push(`${name} = gea::makeRef<gea::ArrayBuffer>();`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (operation.arguments.length > 1) {
|
|
96
|
+
throw createCppEmitBlockedError('call-abi:construct:array-buffer', `constructs an ArrayBuffer from ${operation.arguments.length} arguments; the second is ECMAScript 2024's ` +
|
|
97
|
+
'`{ maxByteLength }` resizable-buffer option, which is refused rather than ignored -- a resize reallocates the ' +
|
|
98
|
+
"block and every view's cached base pointer would dangle, and nothing here republishes those");
|
|
99
|
+
}
|
|
100
|
+
const carrier = argument.representation;
|
|
101
|
+
if (carrier.kind !== 'scalar' || carrier.domain !== 'number') {
|
|
102
|
+
throw createCppEmitBlockedError('call-abi:construct:array-buffer', `constructs an ArrayBuffer from a "${carrier.kind}" argument; ECMA-262 25.1.4.1 takes a byte length (a number) and nothing else`);
|
|
103
|
+
}
|
|
104
|
+
lines.push(`${name} = gea::makeRef<gea::ArrayBuffer>(gea::detail::typedArrayLengthIndex(${operandText(ctx, argument)}), std::uint8_t{0});`);
|
|
105
|
+
};
|
|
106
|
+
/** `new SharedArrayBuffer(byteLength)`, ECMA-262 25.2.3.1. */
|
|
107
|
+
export const emitSharedArrayBufferConstruct = (ctx, lines, operation, result) => {
|
|
108
|
+
if (result.ownership !== 'shared-refcount') {
|
|
109
|
+
throw createCppEmitBlockedError('call-abi:construct:shared-array-buffer', `a SharedArrayBuffer allocation carries ownership "${result.ownership}", not shared-refcount`);
|
|
110
|
+
}
|
|
111
|
+
if (operation.arguments.length !== 1) {
|
|
112
|
+
throw createCppEmitBlockedError('call-abi:construct:shared-array-buffer', `constructs a SharedArrayBuffer from ${operation.arguments.length} arguments; only its required byteLength form is implemented`);
|
|
113
|
+
}
|
|
114
|
+
const argument = operation.arguments[0];
|
|
115
|
+
if (!argument || argument.representation.kind !== 'scalar' || argument.representation.domain !== 'number') {
|
|
116
|
+
throw createCppEmitBlockedError('call-abi:construct:shared-array-buffer', 'constructs a SharedArrayBuffer from a non-number byte length');
|
|
117
|
+
}
|
|
118
|
+
lines.push(`${defineValue(ctx, operation.result)} = gea::makeRef<gea::SharedArrayBuffer>(gea::detail::typedArrayLengthIndex(${operandText(ctx, argument)}));`);
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* `new DataView(buffer, byteOffset?, byteLength?)` -- ECMA-262 25.3.2.1.
|
|
122
|
+
*
|
|
123
|
+
* Three parameters of one shape, so unlike its siblings this one COULD have
|
|
124
|
+
* joined an ABI; it is rendered here anyway, beside the buffer family it
|
|
125
|
+
* belongs to, because the absent-argument rule is the specification's rather
|
|
126
|
+
* than C++'s: an omitted `byteLength` means "to the end of the buffer", which
|
|
127
|
+
* the runtime spells as a NaN (v1's own convention, kept), while an omitted
|
|
128
|
+
* `byteOffset` means zero. A C++ default argument cannot express the first
|
|
129
|
+
* without repeating the buffer's length at the call site.
|
|
130
|
+
*/
|
|
131
|
+
export const emitDataViewConstruct = (ctx, lines, operation, result) => {
|
|
132
|
+
if (result.ownership !== 'shared-refcount') {
|
|
133
|
+
throw createCppEmitBlockedError('call-abi:construct:data-view', `a DataView allocation carries ownership "${result.ownership}", but this emitter only spells std::make_shared for "shared-refcount"`);
|
|
134
|
+
}
|
|
135
|
+
const buffer = operation.arguments[0];
|
|
136
|
+
if (!buffer || buffer.representation.kind !== 'array-buffer') {
|
|
137
|
+
throw createCppEmitBlockedError('call-abi:construct:data-view', `constructs a DataView over a "${buffer?.representation.kind ?? 'missing'}" argument; ECMA-262 25.3.2.1 takes an ` +
|
|
138
|
+
'ArrayBuffer, and a SharedArrayBuffer -- the other type its signature admits -- has a concurrent memory model ' +
|
|
139
|
+
'this backend has no threads to honor');
|
|
140
|
+
}
|
|
141
|
+
if (operation.arguments.length > 3) {
|
|
142
|
+
throw createCppEmitBlockedError('call-abi:construct:data-view', `constructs a DataView from ${operation.arguments.length} arguments; ECMA-262 25.3.2.1 declares three`);
|
|
143
|
+
}
|
|
144
|
+
const name = defineValue(ctx, operation.result);
|
|
145
|
+
const offset = operation.arguments[1];
|
|
146
|
+
const length = operation.arguments[2];
|
|
147
|
+
const offsetText = offset ? numberArgumentText(ctx, offset, 'byteOffset') : '0.0';
|
|
148
|
+
// An omitted `byteLength` is the buffer's remaining bytes, which the runtime
|
|
149
|
+
// reads a NaN as -- see `gea::DataView`'s constructor. Spelled here rather
|
|
150
|
+
// than defaulted in C++ so the two absences stay distinguishable.
|
|
151
|
+
const lengthText = length ? numberArgumentText(ctx, length, 'byteLength') : 'std::numeric_limits<double>::quiet_NaN()';
|
|
152
|
+
lines.push(`${name} = gea::makeRef<gea::DataView>(${operandText(ctx, buffer)}, ${offsetText}, ${lengthText});`);
|
|
153
|
+
};
|
|
154
|
+
/** One numeric constructor argument, refused by name when the program carries it as anything but a number. */
|
|
155
|
+
const numberArgumentText = (ctx, argument, role) => {
|
|
156
|
+
const carrier = argument.representation;
|
|
157
|
+
if (carrier.kind !== 'scalar' || carrier.domain !== 'number') {
|
|
158
|
+
throw createCppEmitBlockedError('call-abi:construct:data-view', `passes a "${carrier.kind}" as a DataView ${role}, which ECMA-262 25.3.2.1 declares a number`);
|
|
159
|
+
}
|
|
160
|
+
return operandText(ctx, argument);
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* `new Uint8Array(buffer, byteOffset?, length?)` -- ECMA-262 23.2.5.1's third
|
|
164
|
+
* overload, the one that ALIASES rather than copies.
|
|
165
|
+
*
|
|
166
|
+
* Kept here with the rest of the buffer family rather than inside
|
|
167
|
+
* `emitTypedArrayConstruct`, because what it is about is the block: the result
|
|
168
|
+
* shares `buffer`'s bytes, so a write through either view is seen by the
|
|
169
|
+
* other, which is the whole reason `gea::TypedArray` stores a shared byte
|
|
170
|
+
* vector instead of a `vector<T>` of its own.
|
|
171
|
+
*
|
|
172
|
+
* A `byteOffset` that is not a multiple of the element width, or a length that
|
|
173
|
+
* would run past the block, is a RangeError in the specification and a named
|
|
174
|
+
* abort in `TypedArray::fromBuffer` -- this renders the call and the runtime
|
|
175
|
+
* checks it, rather than this re-deriving the check from constants it may not
|
|
176
|
+
* have.
|
|
177
|
+
*/
|
|
178
|
+
export const emitTypedArrayBufferConstruct = (ctx, lines, operation, target) => {
|
|
179
|
+
const buffer = operation.arguments[0];
|
|
180
|
+
if (!buffer)
|
|
181
|
+
throw createCppEmitBlockedError('call-abi:construct:typed-array', 'constructs a typed array view over no buffer');
|
|
182
|
+
const name = defineValue(ctx, operation.result);
|
|
183
|
+
if (operation.arguments.length > 3) {
|
|
184
|
+
throw createCppEmitBlockedError('call-abi:construct:typed-array', `constructs a typed array from ${operation.arguments.length} arguments; ECMA-262 23.2.5.1's buffer overload declares three`);
|
|
185
|
+
}
|
|
186
|
+
const offset = operation.arguments[1];
|
|
187
|
+
const length = operation.arguments[2];
|
|
188
|
+
const offsetText = offset ? `gea::detail::typedArrayLengthIndex(${numberArgumentText(ctx, offset, 'byteOffset')})` : '0';
|
|
189
|
+
// Absent length means "the rest of the block", which the runtime cannot
|
|
190
|
+
// guess from a `0` -- so it is computed here from the buffer the call
|
|
191
|
+
// already names: every remaining byte, divided by this view's element width.
|
|
192
|
+
const lengthText = length
|
|
193
|
+
? `gea::detail::typedArrayLengthIndex(${numberArgumentText(ctx, length, 'length')})`
|
|
194
|
+
: `(${operandText(ctx, buffer)}->size() - ${offsetText}) / sizeof(${target}::value_type)`;
|
|
195
|
+
const block = operandText(ctx, buffer);
|
|
196
|
+
if (buffer.representation.kind === 'shared-array-buffer') {
|
|
197
|
+
lines.push(`${name} = gea::makeRef<${target}>(${target}::fromSharedBuffer(${block}, ${offsetText}, ${lengthText}));`);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
lines.push(`${name} = gea::makeRef<${target}>(${target}::fromBuffer(${block}, ${offsetText}, ${lengthText}));`);
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* ECMA-262 25.1's own members. `byteLength` is the only readable data
|
|
204
|
+
* property; `slice` is the only method with a rendering, and it defers to fuse
|
|
205
|
+
* with its call the way every other prototype method in this backend does.
|
|
206
|
+
*
|
|
207
|
+
* What refuses, by name and with the reason: `resize`/`transfer`/
|
|
208
|
+
* `transferToFixedLength`/`resizable`/`maxByteLength`/`detached`
|
|
209
|
+
* (ECMAScript 2024 -- resizing or detaching the block dangles every view's
|
|
210
|
+
* cached base pointer, and nothing here republishes those) and
|
|
211
|
+
* `ArrayBuffer.isView` (a static, not an instance member, and this backend has
|
|
212
|
+
* no brand test that could answer it without a runtime tag every carrier would
|
|
213
|
+
* have to pay for).
|
|
214
|
+
*/
|
|
215
|
+
export const arrayBufferMemberRefusals = new Map([
|
|
216
|
+
[
|
|
217
|
+
'resize',
|
|
218
|
+
'ECMAScript 2024 resizable buffers reallocate the block, which dangles the cached base pointer every view over it holds; ' +
|
|
219
|
+
'nothing here republishes those, so a resize would corrupt every existing view rather than fail'
|
|
220
|
+
],
|
|
221
|
+
[
|
|
222
|
+
'resizable',
|
|
223
|
+
'a resizable ArrayBuffer is not constructible here (see "resize"), so answering this would always be a constant false dressed as a query'
|
|
224
|
+
],
|
|
225
|
+
['maxByteLength', 'a resizable ArrayBuffer is not constructible here (see "resize")'],
|
|
226
|
+
[
|
|
227
|
+
'transfer',
|
|
228
|
+
'transferring an ArrayBuffer DETACHES the source, after which every view over it must throw on access; this runtime has no detached state and no throw at that boundary'
|
|
229
|
+
],
|
|
230
|
+
['transferToFixedLength', 'the same detachment this backend cannot represent -- see "transfer"'],
|
|
231
|
+
['detached', 'nothing here can detach a buffer (see "transfer"), so this would always be a constant false dressed as a query']
|
|
232
|
+
]);
|
|
233
|
+
/** `ArrayBuffer.prototype` methods that defer at the `[[Get]]` and fuse with the call that follows. */
|
|
234
|
+
export const arrayBufferPrototypeMethods = new Set(['slice']);
|
|
235
|
+
/**
|
|
236
|
+
* The ArrayBuffer reading of a property access, or `null` when the receiver is
|
|
237
|
+
* not one.
|
|
238
|
+
*
|
|
239
|
+
* A computed key refuses rather than indexing: ECMA-262 25.1 gives an
|
|
240
|
+
* ArrayBuffer no exotic `[[Get]]` at all, so `b[0]` really is `undefined` and
|
|
241
|
+
* answering it with a byte would be a wrong answer, not a missing one.
|
|
242
|
+
*/
|
|
243
|
+
/** Whether an ArrayBuffer member read is a deferred prototype method read. Stated once; the renderer and the prototype-read walk both ask it. */
|
|
244
|
+
export const deferredArrayBufferMethodClaim = (staticKeyTexts, receiver, key) => {
|
|
245
|
+
if (receiver.representation.kind !== 'array-buffer')
|
|
246
|
+
return null;
|
|
247
|
+
const staticKey = staticKeyTexts.get(key.value);
|
|
248
|
+
if (staticKey === undefined || staticKey === 'byteLength')
|
|
249
|
+
return null;
|
|
250
|
+
if (!arrayBufferPrototypeMethods.has(staticKey))
|
|
251
|
+
return null;
|
|
252
|
+
return { receiverKind: 'array-buffer', member: staticKey, receiver: { kind: 'operand', operand: receiver }, receiverElement: null };
|
|
253
|
+
};
|
|
254
|
+
export const arrayBufferAccessText = (ctx, receiver, key, result) => {
|
|
255
|
+
if (receiver.representation.kind !== 'array-buffer')
|
|
256
|
+
return null;
|
|
257
|
+
const receiverText = operandText(ctx, receiver);
|
|
258
|
+
// Whether this key IS static, and what it names, decides which member is
|
|
259
|
+
// being read (byteLength, a deferred method, or a refusal by name) versus
|
|
260
|
+
// the final computed-key refusal below -- a claim, not a spelling, so it
|
|
261
|
+
// reads the pre-render map rather than `constantTexts`'s render-time accretion.
|
|
262
|
+
const staticKey = ctx.staticKeyTexts.get(key.value);
|
|
263
|
+
if (staticKey === 'byteLength')
|
|
264
|
+
return `static_cast<double>(${receiverText}->size())`;
|
|
265
|
+
if (wellKnownSymbolMemberOf(ctx, key) === 'toStringTag')
|
|
266
|
+
return cppStringLiteral('ArrayBuffer');
|
|
267
|
+
if (staticKey !== undefined) {
|
|
268
|
+
if (deferredArrayBufferMethodClaim(ctx.staticKeyTexts, receiver, key) !== null) {
|
|
269
|
+
if (result === null) {
|
|
270
|
+
throw createCppEmitBlockedError('property-access:array-buffer:get:false', `"${staticKey}" is an ArrayBuffer.prototype method, and this access publishes no value for its call to consume`);
|
|
271
|
+
}
|
|
272
|
+
return '';
|
|
273
|
+
}
|
|
274
|
+
const stated = arrayBufferMemberRefusals.get(staticKey);
|
|
275
|
+
throw createCppEmitBlockedError('property-access:array-buffer:get:false', stated !== undefined
|
|
276
|
+
? `"${staticKey}" is an ArrayBuffer member this backend states no rendering for: ${stated}`
|
|
277
|
+
: `an ArrayBuffer property "${staticKey}" is an ordinary property, and ECMA-262 25.1 gives an ArrayBuffer no property table beyond ` +
|
|
278
|
+
'byteLength and slice');
|
|
279
|
+
}
|
|
280
|
+
throw createCppEmitBlockedError('property-access:array-buffer:get:true', 'an ArrayBuffer has no indexed access at all (ECMA-262 25.1 defines no exotic [[Get]] for one), so a computed key on ' +
|
|
281
|
+
'it is `undefined` rather than a byte, and this backend refuses it instead of answering the byte');
|
|
282
|
+
};
|
|
283
|
+
/** SharedArrayBuffer has fixed geometry but intentionally no ArrayBuffer-only slice/transfer surface. */
|
|
284
|
+
export const sharedArrayBufferAccessText = (ctx, receiver, key) => {
|
|
285
|
+
if (receiver.representation.kind !== 'shared-array-buffer')
|
|
286
|
+
return null;
|
|
287
|
+
// Same static-key claim as `arrayBufferAccessText` above: the pre-render
|
|
288
|
+
// map, so a render-time-folded text is never mistaken for a static member name.
|
|
289
|
+
const staticKey = ctx.staticKeyTexts.get(key.value);
|
|
290
|
+
const receiverText = operandText(ctx, receiver);
|
|
291
|
+
if (staticKey === 'byteLength')
|
|
292
|
+
return `static_cast<double>(${receiverText}->size())`;
|
|
293
|
+
if (wellKnownSymbolMemberOf(ctx, key) === 'toStringTag')
|
|
294
|
+
return cppStringLiteral('SharedArrayBuffer');
|
|
295
|
+
if (staticKey !== undefined) {
|
|
296
|
+
throw createCppEmitBlockedError('property-access:shared-array-buffer:get:false', `SharedArrayBuffer.${staticKey} is not implemented; only byteLength is admitted`);
|
|
297
|
+
}
|
|
298
|
+
throw createCppEmitBlockedError('property-access:shared-array-buffer:get:true', 'SharedArrayBuffer has no indexed access');
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* ECMA-262 25.3's `DataView` members: the three geometry accessors, and the
|
|
302
|
+
* sixteen typed accessors this backend renders.
|
|
303
|
+
*
|
|
304
|
+
* `getBigInt64`/`getBigUint64`/`setBigInt64`/`setBigUint64` are deliberately
|
|
305
|
+
* absent and refuse by name. v1 implements all four and returns/accepts a
|
|
306
|
+
* `double`, which loses precision above 2^53 -- silently, which is exactly the
|
|
307
|
+
* failure a BigInt exists to prevent. This backend has no BigInt carrier at
|
|
308
|
+
* all, so refusing is the honest answer.
|
|
309
|
+
*/
|
|
310
|
+
const dataViewAccessors = new Map([
|
|
311
|
+
['getInt8', { spelling: 'getInt8', endian: false, write: false }],
|
|
312
|
+
['getUint8', { spelling: 'getUint8', endian: false, write: false }],
|
|
313
|
+
['getInt16', { spelling: 'getInt16', endian: true, write: false }],
|
|
314
|
+
['getUint16', { spelling: 'getUint16', endian: true, write: false }],
|
|
315
|
+
['getInt32', { spelling: 'getInt32', endian: true, write: false }],
|
|
316
|
+
['getUint32', { spelling: 'getUint32', endian: true, write: false }],
|
|
317
|
+
['getFloat32', { spelling: 'getFloat32', endian: true, write: false }],
|
|
318
|
+
['getFloat64', { spelling: 'getFloat64', endian: true, write: false }],
|
|
319
|
+
['setInt8', { spelling: 'setInt8', endian: false, write: true }],
|
|
320
|
+
['setUint8', { spelling: 'setUint8', endian: false, write: true }],
|
|
321
|
+
['setInt16', { spelling: 'setInt16', endian: true, write: true }],
|
|
322
|
+
['setUint16', { spelling: 'setUint16', endian: true, write: true }],
|
|
323
|
+
['setInt32', { spelling: 'setInt32', endian: true, write: true }],
|
|
324
|
+
['setUint32', { spelling: 'setUint32', endian: true, write: true }],
|
|
325
|
+
['setFloat32', { spelling: 'setFloat32', endian: true, write: true }],
|
|
326
|
+
['setFloat64', { spelling: 'setFloat64', endian: true, write: true }]
|
|
327
|
+
]);
|
|
328
|
+
const bigIntAccessorRefusal = 'its element is a BigInt, and this backend has no BigInt carrier; v1 answers this one with a `double`, which silently ' +
|
|
329
|
+
'rounds every value above 2^53 -- exactly what a BigInt exists to prevent -- so it is refused here rather than ported';
|
|
330
|
+
export const dataViewMemberRefusals = new Map([
|
|
331
|
+
['getBigInt64', bigIntAccessorRefusal],
|
|
332
|
+
['getBigUint64', bigIntAccessorRefusal],
|
|
333
|
+
['setBigInt64', bigIntAccessorRefusal],
|
|
334
|
+
['setBigUint64', bigIntAccessorRefusal]
|
|
335
|
+
]);
|
|
336
|
+
/** `DataView.prototype` methods that defer at the `[[Get]]` and fuse with the call that follows. */
|
|
337
|
+
export const dataViewPrototypeMethods = new Set([...dataViewAccessors.keys()]);
|
|
338
|
+
/** Whether a DataView member read is a deferred prototype method read. Stated once; the renderer and the prototype-read walk both ask it. */
|
|
339
|
+
export const deferredDataViewMethodClaim = (staticKeyTexts, receiver, key) => {
|
|
340
|
+
if (receiver.representation.kind !== 'data-view')
|
|
341
|
+
return null;
|
|
342
|
+
const staticKey = staticKeyTexts.get(key.value);
|
|
343
|
+
if (staticKey === undefined || staticKey === 'byteLength' || staticKey === 'byteOffset' || staticKey === 'buffer')
|
|
344
|
+
return null;
|
|
345
|
+
if (!dataViewPrototypeMethods.has(staticKey))
|
|
346
|
+
return null;
|
|
347
|
+
return { receiverKind: 'data-view', member: staticKey, receiver: { kind: 'operand', operand: receiver }, receiverElement: null };
|
|
348
|
+
};
|
|
349
|
+
/** The DataView reading of a property access, or `null` when the receiver is not one. */
|
|
350
|
+
export const dataViewAccessText = (ctx, receiver, key, result) => {
|
|
351
|
+
if (receiver.representation.kind !== 'data-view')
|
|
352
|
+
return null;
|
|
353
|
+
const receiverText = operandText(ctx, receiver);
|
|
354
|
+
// Same static-key claim as `arrayBufferAccessText` above: the pre-render
|
|
355
|
+
// map, so a render-time-folded text is never mistaken for a static member name.
|
|
356
|
+
const staticKey = ctx.staticKeyTexts.get(key.value);
|
|
357
|
+
if (wellKnownSymbolMemberOf(ctx, key) === 'toStringTag')
|
|
358
|
+
return cppStringLiteral('DataView');
|
|
359
|
+
if (staticKey === 'byteLength')
|
|
360
|
+
return `${receiverText}->byteLength()`;
|
|
361
|
+
if (staticKey === 'byteOffset')
|
|
362
|
+
return `${receiverText}->byteOffset()`;
|
|
363
|
+
if (staticKey === 'buffer')
|
|
364
|
+
return `${receiverText}->buffer()`;
|
|
365
|
+
if (staticKey !== undefined) {
|
|
366
|
+
if (deferredDataViewMethodClaim(ctx.staticKeyTexts, receiver, key) !== null) {
|
|
367
|
+
if (result === null) {
|
|
368
|
+
throw createCppEmitBlockedError('property-access:data-view:get:false', `"${staticKey}" is a DataView.prototype method, and this access publishes no value for its call to consume`);
|
|
369
|
+
}
|
|
370
|
+
return '';
|
|
371
|
+
}
|
|
372
|
+
const stated = dataViewMemberRefusals.get(staticKey);
|
|
373
|
+
throw createCppEmitBlockedError('property-access:data-view:get:false', stated !== undefined
|
|
374
|
+
? `"${staticKey}" is a DataView member this backend states no rendering for: ${stated}`
|
|
375
|
+
: `a DataView property "${staticKey}" is an ordinary property, and ECMA-262 25.3 gives a DataView no property table beyond ` +
|
|
376
|
+
'buffer, byteLength, byteOffset and its typed accessors');
|
|
377
|
+
}
|
|
378
|
+
throw createCppEmitBlockedError('property-access:data-view:get:true', 'a DataView has no indexed access (ECMA-262 25.3 defines no exotic [[Get]] for one); every read goes through a named ' +
|
|
379
|
+
'accessor whose width and byte order it states');
|
|
380
|
+
};
|
|
381
|
+
/**
|
|
382
|
+
* The DataView call, fused with its deferred `[[Get]]`.
|
|
383
|
+
*
|
|
384
|
+
* `littleEndian` is the point of this family and is passed EXPLICITLY at every
|
|
385
|
+
* width that has one, never left to a C++ default: ECMA-262 25.3.1.1 defaults
|
|
386
|
+
* it to `false` (BIG-endian), which is the opposite of every machine this
|
|
387
|
+
* runs on, so an omission that silently became the host's own order would read
|
|
388
|
+
* different numbers from the same bytes on different targets.
|
|
389
|
+
*/
|
|
390
|
+
export const dataViewCallText = (ctx, member, receiver, args) => {
|
|
391
|
+
const accessor = dataViewAccessors.get(member);
|
|
392
|
+
if (!accessor) {
|
|
393
|
+
throw createCppEmitBlockedError(`host-member-call:DataView.${member}`, `"${member}" was recorded as a deferred DataView read but this file renders no call for it`);
|
|
394
|
+
}
|
|
395
|
+
const fixed = accessor.write ? 2 : 1;
|
|
396
|
+
const offsetAndValue = args.slice(0, fixed).map((argument) => operandText(ctx, argument));
|
|
397
|
+
if (offsetAndValue.length < fixed) {
|
|
398
|
+
throw createCppEmitBlockedError(`host-member-call:DataView.${member}`, `DataView.prototype.${member} needs ${fixed} argument(s) and this call passes ${offsetAndValue.length}`);
|
|
399
|
+
}
|
|
400
|
+
if (!accessor.endian) {
|
|
401
|
+
if (args.length > fixed) {
|
|
402
|
+
throw createCppEmitBlockedError(`host-member-call:DataView.${member}`, `DataView.prototype.${member} is single-byte and takes no littleEndian argument, but this call passes one`);
|
|
403
|
+
}
|
|
404
|
+
return `${receiver}->${accessor.spelling}(${offsetAndValue.join(', ')})`;
|
|
405
|
+
}
|
|
406
|
+
const endian = args[fixed];
|
|
407
|
+
// ECMA-262 25.3.1.1 step 6: `ToBoolean(isLittleEndian)`, with an omitted
|
|
408
|
+
// argument reading `false`. Rendered as the literal so the emitted call
|
|
409
|
+
// states the order it means.
|
|
410
|
+
const endianText = endian === undefined ? 'false' : booleanArgumentText(ctx, endian, member);
|
|
411
|
+
return `${receiver}->${accessor.spelling}(${[...offsetAndValue, endianText].join(', ')})`;
|
|
412
|
+
};
|
|
413
|
+
const booleanArgumentText = (ctx, argument, member) => {
|
|
414
|
+
const carrier = argument.representation;
|
|
415
|
+
if (carrier.kind === 'scalar' && carrier.domain === 'boolean')
|
|
416
|
+
return operandText(ctx, argument);
|
|
417
|
+
throw createCppEmitBlockedError(`host-member-call:DataView.${member}`, `DataView.prototype.${member} received its littleEndian argument as "${carrier.kind}"; ECMA-262 25.3.1.1 applies ToBoolean ` +
|
|
418
|
+
'to it, and this backend installs that conversion for a boolean carrier only');
|
|
419
|
+
};
|
|
420
|
+
/**
|
|
421
|
+
* A typed array's BUFFER-shaped members: geometry accessors, element width, and the
|
|
422
|
+
* four methods that operate on ranges of the block rather than on one element.
|
|
423
|
+
*
|
|
424
|
+
* Split from `typedArrayAccessText`'s indexed reading (emit-carrier-members.ts)
|
|
425
|
+
* on that same line: an index is about an element and these are about the
|
|
426
|
+
* block, and the block is what this file is about.
|
|
427
|
+
*/
|
|
428
|
+
export const typedArrayBufferMembers = new Set(['buffer', 'byteLength', 'byteOffset', 'BYTES_PER_ELEMENT']);
|
|
429
|
+
/** `%TypedArray%.prototype` methods this file renders, which defer at the `[[Get]]` and fuse with the call. */
|
|
430
|
+
export const typedArrayPrototypeMethods = new Set(['set', 'subarray', 'slice', 'fill', 'toString']);
|
|
431
|
+
/** The buffer-shaped reading of a typed-array property, or `null` when the key is not one of them. */
|
|
432
|
+
export const typedArrayBufferMemberText = (receiverText, representation, key) => {
|
|
433
|
+
if (key === 'buffer')
|
|
434
|
+
return representation.buffer === 'shared-array-buffer' ? `${receiverText}->sharedBuffer()` : `${receiverText}->buffer()`;
|
|
435
|
+
if (key === 'byteLength')
|
|
436
|
+
return `${receiverText}->byteLength()`;
|
|
437
|
+
if (key === 'byteOffset')
|
|
438
|
+
return `${receiverText}->byteOffset()`;
|
|
439
|
+
// The same storage spelling drives TypedArray<T> and this immutable element
|
|
440
|
+
// width. Reading an empty/subarray view must not divide byteLength by length.
|
|
441
|
+
// Both concrete receivers and selected union arms use this member authority.
|
|
442
|
+
if (key === 'BYTES_PER_ELEMENT')
|
|
443
|
+
return `static_cast<double>(sizeof(${typedArrayElementSpelling(representation)}))`;
|
|
444
|
+
return null;
|
|
445
|
+
};
|
|
446
|
+
/**
|
|
447
|
+
* The typed-array range call, fused with its deferred `[[Get]]`.
|
|
448
|
+
*
|
|
449
|
+
* An omitted `end` is rendered as the receiver's own `length()` rather than
|
|
450
|
+
* defaulted in the runtime, because only this call site knows whether an
|
|
451
|
+
* absence was `end` or `start` -- the runtime's relative-index fold reads a
|
|
452
|
+
* `NaN` as 0, which is right for a start and wrong for an end.
|
|
453
|
+
*
|
|
454
|
+
* `fill` is spelled as a comma expression: ECMA-262 23.2.3.9 returns the view
|
|
455
|
+
* itself, and the runtime's `fill` is `void` because a `shared_ptr`-owned
|
|
456
|
+
* object cannot hand out its own owner. The receiver's text is already here,
|
|
457
|
+
* so `(a->fill(...), a)` is the same value with nothing to own.
|
|
458
|
+
*/
|
|
459
|
+
export const typedArrayCallText = (ctx, member, receiver, element, args) => {
|
|
460
|
+
const rangeStart = (index) => (args[index] === undefined ? '0.0' : operandText(ctx, args[index]));
|
|
461
|
+
const rangeEnd = (index) => args[index] === undefined ? `${receiver}->length()` : operandText(ctx, args[index]);
|
|
462
|
+
// ECMA-262 23.2.3.32: `%TypedArray%.prototype.toString` IS
|
|
463
|
+
// `Array.prototype.toString`, which is `join()` with the default separator
|
|
464
|
+
// -- a comma between elements and nothing else. The runtime's own
|
|
465
|
+
// `join(Ref<TypedArray<E>>)` overload is that algorithm, written beside the
|
|
466
|
+
// Array one so a typed array and an Array cannot answer differently; this
|
|
467
|
+
// only routes the explicit member to it.
|
|
468
|
+
//
|
|
469
|
+
// Node's `Buffer` overrides `toString` to DECODE its bytes, which is a
|
|
470
|
+
// different function on a different type. A receiver whose declared type is
|
|
471
|
+
// a Buffer reaches that class's own member; a receiver declared
|
|
472
|
+
// `Uint8Array` -- which is what `@hono/node-server`'s `websocket-types.ts`
|
|
473
|
+
// declares its close `reason` as -- gets the specification's answer, and
|
|
474
|
+
// this renders the type the program actually stated.
|
|
475
|
+
if (member === 'toString') {
|
|
476
|
+
if (args.length !== 0) {
|
|
477
|
+
throw createCppEmitBlockedError('host-member-call:TypedArray.toString', `%TypedArray%.prototype.toString takes no arguments and this call passes ${args.length}`);
|
|
478
|
+
}
|
|
479
|
+
return `gea::runtime::array::join(${receiver})`;
|
|
480
|
+
}
|
|
481
|
+
if (member === 'subarray' || member === 'slice') {
|
|
482
|
+
return `${receiver}->${member}(${rangeStart(0)}, ${rangeEnd(1)})`;
|
|
483
|
+
}
|
|
484
|
+
if (member === 'fill') {
|
|
485
|
+
const value = args[0];
|
|
486
|
+
if (!value)
|
|
487
|
+
throw createCppEmitBlockedError('host-member-call:TypedArray.fill', 'TypedArray.prototype.fill needs a value argument and this call passes none');
|
|
488
|
+
return `(${receiver}->fill(${operandText(ctx, value)}, ${rangeStart(1)}, ${rangeEnd(2)}), ${receiver})`;
|
|
489
|
+
}
|
|
490
|
+
// `set`'s template, and which sources it copies from, are stated once in
|
|
491
|
+
// `representation/host-templates.ts` -- the IR's frame for this call reads
|
|
492
|
+
// the same predicates, so the two cannot describe different C++.
|
|
493
|
+
if (typedArrayMemberTemplateOf(member) !== 'typed-array-set')
|
|
494
|
+
throw createCppEmitBlockedError('host-member-call:TypedArray.set', `TypedArray.prototype.${member} was deferred to a typed-array call, and no template here renders it`);
|
|
495
|
+
const source = args[0];
|
|
496
|
+
if (!source)
|
|
497
|
+
throw createCppEmitBlockedError('host-member-call:TypedArray.set', 'TypedArray.prototype.set needs a source argument and this call passes none');
|
|
498
|
+
const offset = args[1] === undefined ? '0.0' : operandText(ctx, args[1]);
|
|
499
|
+
const carrier = source.representation;
|
|
500
|
+
// Two sources, two ECMA-262 algorithms (23.2.3.26 steps 5 and 6), and the
|
|
501
|
+
// difference is real: a typed-array source is read through its own element
|
|
502
|
+
// type, while an Array source may hold HOLES that read as `undefined`.
|
|
503
|
+
const single = typedArraySetSourceOf(carrier);
|
|
504
|
+
if (single === 'typed-array') {
|
|
505
|
+
return `(${receiver}->setFrom(*${operandText(ctx, source)}, ${offset}), gea::Undefined{})`;
|
|
506
|
+
}
|
|
507
|
+
if (single === 'number-array') {
|
|
508
|
+
return `(${receiver}->setFromArray(${operandText(ctx, source)}, ${offset}), gea::Undefined{})`;
|
|
509
|
+
}
|
|
510
|
+
if (carrier.kind === 'tagged-union' && typedArraySetSourceAccepted(carrier)) {
|
|
511
|
+
const sourceText = operandText(ctx, source);
|
|
512
|
+
const branches = carrier.arms.map((arm, index) => {
|
|
513
|
+
const value = `${sourceText}.get<${index}>()`;
|
|
514
|
+
if (typedArraySetSourceOf(arm.value) === 'typed-array')
|
|
515
|
+
return `(${receiver}->setFrom(*${value}, ${offset}), gea::Undefined{})`;
|
|
516
|
+
return `(${receiver}->setFromArray(${value}, ${offset}), gea::Undefined{})`;
|
|
517
|
+
});
|
|
518
|
+
return branches.reduceRight((rest, branch, index) => (index === branches.length - 1 ? branch : `${sourceText}.is<${index}>() ? ${branch} : (${rest})`), '');
|
|
519
|
+
}
|
|
520
|
+
throw createCppEmitBlockedError('host-member-call:TypedArray.set', `TypedArray.prototype.set of element "${element}" received a "${carrier.kind}" source; ECMA-262 23.2.3.26 takes a typed ` +
|
|
521
|
+
'array or an array-like of numbers, and any other array-like needs the generic length-and-index protocol this backend does not lower');
|
|
522
|
+
};
|
|
523
|
+
/** The element spelling a deferred typed-array read carries to its call, so `set`'s refusal can name it. */
|
|
524
|
+
export const typedArrayElementSpelling = (representation) => cppScalarType(representation.element);
|
|
525
|
+
/** The pointee a typed-array construction allocates -- shared by both construct paths so the two cannot spell it differently. */
|
|
526
|
+
export const typedArrayTargetSpelling = (representation) => cppTypeOf({ ...representation, ownership: 'owned' });
|
|
527
|
+
/**
|
|
528
|
+
* `new TextEncoder()` / `new TextDecoder([label])`, or `null` when this
|
|
529
|
+
* construction is not one of the two.
|
|
530
|
+
*
|
|
531
|
+
* Rendered here rather than through the host CONSTRUCTOR table
|
|
532
|
+
* (`ctx.hosts.constructors`) for a reason the table's own shape states: its
|
|
533
|
+
* fixed-arity rows are checked against the checker's PADDED frame, and
|
|
534
|
+
* `new (label?: string, options?: TextDecoderOptions)` pads to two arguments
|
|
535
|
+
* for every call site including `new TextDecoder()`. A `'pass-through'` row
|
|
536
|
+
* would take any count and hand the options bag to C++, where the failure is
|
|
537
|
+
* a template error rather than a refusal naming what is missing. Counting the
|
|
538
|
+
* arguments the program actually WROTE is the only way both to accept the two
|
|
539
|
+
* real forms and to refuse the third by name, which is the same reason
|
|
540
|
+
* `ArrayBuffer` and `DataView` above are rendered here and not stated as rows.
|
|
541
|
+
*/
|
|
542
|
+
export const emitTextCodecConstruct = (ctx, lines, operation) => {
|
|
543
|
+
const result = operation.result.representation;
|
|
544
|
+
if (result.kind !== 'native-handle')
|
|
545
|
+
return false;
|
|
546
|
+
const spelling = result.native;
|
|
547
|
+
if (spelling !== textEncoderCarrier && spelling !== textDecoderCarrier)
|
|
548
|
+
return false;
|
|
549
|
+
const count = operation.arguments.length;
|
|
550
|
+
if (spelling === textEncoderCarrier) {
|
|
551
|
+
// Encoding Standard 6.1: `new TextEncoder()` takes nothing, and the
|
|
552
|
+
// checker's own signature says so, so any argument at all is a program
|
|
553
|
+
// this backend has no reading of rather than one to silently discard.
|
|
554
|
+
if (count !== 0) {
|
|
555
|
+
throw createCppEmitBlockedError(`host-invocation:${textEncoderCarrier}`, `constructs a TextEncoder from ${count} argument(s); the Encoding Standard's constructor takes none`);
|
|
556
|
+
}
|
|
557
|
+
lines.push(`${defineValue(ctx, operation.result)} = ${textEncoderCarrier}{};`);
|
|
558
|
+
return true;
|
|
559
|
+
}
|
|
560
|
+
if (count > 1) {
|
|
561
|
+
throw createCppEmitBlockedError(`host-invocation:${textDecoderCarrier}`, `constructs a TextDecoder from ${count} arguments; the second is the ` +
|
|
562
|
+
'`{ fatal, ignoreBOM }` options bag, and reading it needs either the boxed dynamic carrier this compiler forbids or a ' +
|
|
563
|
+
'compile-time probe of a program-generated struct declared after the runtime header -- so it is refused rather than ' +
|
|
564
|
+
'ignored, which would silently decode malformed input the opposite way');
|
|
565
|
+
}
|
|
566
|
+
const label = operation.arguments[0];
|
|
567
|
+
// The label is validated, not stored: `TextDecoder::create` accepts exactly
|
|
568
|
+
// the Encoding Standard's three utf-8 labels and aborts by name on any
|
|
569
|
+
// other, which is where the specification raises a RangeError.
|
|
570
|
+
const argument = label === undefined ? '' : operandText(ctx, label);
|
|
571
|
+
lines.push(`${defineValue(ctx, operation.result)} = ${textDecoderCarrier}::create(${argument});`);
|
|
572
|
+
return true;
|
|
573
|
+
};
|