@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,556 @@
|
|
|
1
|
+
import { representationKey } from '../../representation/model.js';
|
|
2
|
+
import { isNativeError } from './error-types.js';
|
|
3
|
+
import { operandText } from './emit-context.js';
|
|
4
|
+
import { recordLayoutPolicyOf } from '../../projection/fields.js';
|
|
5
|
+
import { cppBodyName, cppConstantLiteral, cppRecordFieldName } from './types.js';
|
|
6
|
+
import { memberAccessOperator } from './emit-carrier-members.js';
|
|
7
|
+
import { cppDateType, isDateCarrier } from './prototype/emit-prototype-date.js';
|
|
8
|
+
/**
|
|
9
|
+
* ToString of a value, spelled from the carrier it actually arrived in.
|
|
10
|
+
*
|
|
11
|
+
* Both callers -- an explicit `String(x)` and a template expression's
|
|
12
|
+
* substitution -- run the same abstract operation, so they read the same table
|
|
13
|
+
* rather than two that could disagree about what `String(true)` is.
|
|
14
|
+
*
|
|
15
|
+
* `null` is returned for a carrier this has no conversion for; the caller
|
|
16
|
+
* names the refusal, because what it can say about *why* the value is there
|
|
17
|
+
* differs between a call argument and a substitution.
|
|
18
|
+
*/
|
|
19
|
+
export const toStringText = (text, carrier, classes, deriver,
|
|
20
|
+
/**
|
|
21
|
+
* Whether this is `String(x)` itself rather than the ToString an operator
|
|
22
|
+
* performs. ECMA-262 22.1.1.1 special-cases exactly that call: a symbol
|
|
23
|
+
* argument answers its SymbolDescriptiveString, while ToString of a symbol
|
|
24
|
+
* (`\`${s}\``, `s + ""`) throws a TypeError. The distinction is the caller's
|
|
25
|
+
* to state, so the implicit sites keep refusing a symbol rather than
|
|
26
|
+
* silently printing what only the explicit call may.
|
|
27
|
+
*/
|
|
28
|
+
explicit = false,
|
|
29
|
+
/**
|
|
30
|
+
* `Array.prototype.join`'s own ToString (ECMA-262 23.1.3.18 step 3.d) is the
|
|
31
|
+
* SAME abstract operation with one capability toggled: a `null`/`undefined`
|
|
32
|
+
* element contributes the empty string rather than the text "null"/"undefined"
|
|
33
|
+
* every other caller of this table needs (`String(undefined)`, `\`${x}\``,
|
|
34
|
+
* `"" + x` all print the text). `joinText` (`prototype/emit-prototype-array.ts`)
|
|
35
|
+
* is the only caller that sets this.
|
|
36
|
+
*/
|
|
37
|
+
nullishJoinsEmpty = false) => toStringTextOver(text, carrier, recordLayoutPolicyOf(deriver, classes), explicit, nullishJoinsEmpty);
|
|
38
|
+
/**
|
|
39
|
+
* The `[[Call]]` convention a stored member holds, for the four carriers whose
|
|
40
|
+
* C++ spelling is a `gea::CallableObject` and which therefore expose `.call()`.
|
|
41
|
+
*
|
|
42
|
+
* `function-and-constructor` is deliberately absent: it spells a
|
|
43
|
+
* `CallableConstructorObject`, a different type, and a member that is BOTH is
|
|
44
|
+
* a built-in constructor rather than an ordinary method. A `recursive`
|
|
45
|
+
* dispatch is absent for the same fail-closed reason -- its spelling is the
|
|
46
|
+
* wrapper struct's name, not the callable template.
|
|
47
|
+
*/
|
|
48
|
+
const storedCallAbiOf = (member) => {
|
|
49
|
+
if (member.kind === 'function' || member.kind === 'function-family')
|
|
50
|
+
return member.abi;
|
|
51
|
+
if (member.kind === 'function-value-family')
|
|
52
|
+
return member.optional ? null : member.abi;
|
|
53
|
+
if (member.kind === 'function-value-dispatch')
|
|
54
|
+
return member.recursive ? null : member.abi;
|
|
55
|
+
return null;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* ECMA-262 7.1.1.1 `OrdinaryToPrimitive(O, string)` over a record's OWN
|
|
59
|
+
* `toString` member -- the first of the two method names that algorithm tries.
|
|
60
|
+
*
|
|
61
|
+
* This is the native answer to "a statically typed object needs a dynamic
|
|
62
|
+
* capability": the shape declares `toString`, its carrier states the exact
|
|
63
|
+
* convention, and the call is an ordinary indirect call through the struct
|
|
64
|
+
* member. Boxing the record to reach a dynamic ToString would be the forbidden
|
|
65
|
+
* shortcut, and answering `[object Object]` for a shape that declares the
|
|
66
|
+
* method is the silently-wrong one.
|
|
67
|
+
*
|
|
68
|
+
* The gate is what makes the answer exact rather than probable, and every part
|
|
69
|
+
* of it is load-bearing:
|
|
70
|
+
*
|
|
71
|
+
* - The member must be a REQUIRED data field. An optional one may be absent at
|
|
72
|
+
* run time, and OrdinaryToPrimitive then skips to `valueOf`, which this does
|
|
73
|
+
* not render.
|
|
74
|
+
* - The convention must take no receiver and no arguments. A receiver in the
|
|
75
|
+
* ABI means the compiler proved the body reads `this` and the physical slot
|
|
76
|
+
* expects it first (`captures.ts`'s `readsReceiver`); a leaf that has only
|
|
77
|
+
* an expression for the object, not an operand, cannot bind one, so it
|
|
78
|
+
* refuses instead of calling with the wrong frame.
|
|
79
|
+
* - The result must be `string` or a `scalar`, which is a STATIC proof that it
|
|
80
|
+
* is not an Object -- exactly the test step 3.c of OrdinaryToPrimitive
|
|
81
|
+
* applies at run time before it accepts the value. Any other result carrier
|
|
82
|
+
* would have to fall through to `valueOf`.
|
|
83
|
+
*
|
|
84
|
+
* Anything outside that returns `null`, which keeps the previous refusal
|
|
85
|
+
* rather than substituting a wrong constant.
|
|
86
|
+
*/
|
|
87
|
+
const ownToStringCallText = (text, fields, ownership, layouts, explicit) => {
|
|
88
|
+
const field = fields.find((candidate) => candidate.key === 'toString');
|
|
89
|
+
if (field === undefined || !field.required)
|
|
90
|
+
return null;
|
|
91
|
+
const abi = storedCallAbiOf(field.value);
|
|
92
|
+
if (abi === null || abi.receiver !== null || abi.restFrom !== null || abi.parameters.length !== 0)
|
|
93
|
+
return null;
|
|
94
|
+
if (abi.result.kind !== 'string' && abi.result.kind !== 'scalar')
|
|
95
|
+
return null;
|
|
96
|
+
return toStringTextOver(`(${text}${memberAccessOperator(ownership)}${cppRecordFieldName('toString')}).call()`, abi.result, layouts, explicit);
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* The same table over the one `RecordLayoutPolicy` every reader of record
|
|
100
|
+
* shapes shares (`projection/fields.ts`). The conversion registry's `coercion`
|
|
101
|
+
* entry (`conversions.ts`) decides whether a ToString is INSTALLED for a
|
|
102
|
+
* carrier by asking this very function for a placeholder -- so the census's
|
|
103
|
+
* "is there a conversion" and the printer's "what is its text" cannot
|
|
104
|
+
* disagree: a carrier this returns `null` for is a `never` coercion node, and
|
|
105
|
+
* a carrier it renders is rendered by exactly this text.
|
|
106
|
+
*/
|
|
107
|
+
export const toStringTextOver = (text, carrier, layouts, explicit = false, nullishJoinsEmpty = false) => {
|
|
108
|
+
if (carrier.kind === 'string')
|
|
109
|
+
return text;
|
|
110
|
+
if (carrier.kind === 'symbol')
|
|
111
|
+
return explicit ? `gea::symbolToString(${text})` : null;
|
|
112
|
+
// A Date. ECMA-262 7.1.17 ToString of an object is ToPrimitive with hint
|
|
113
|
+
// string, which for a Date is OrdinaryToPrimitive trying `toString` first --
|
|
114
|
+
// 21.4.4.41, the member `gea::runtime::Date` already implements. So
|
|
115
|
+
// `${d}`, `String(d)` and `"x" + d` all answer exactly `d.toString()`, and
|
|
116
|
+
// this states that once rather than leaving the implicit spellings refused
|
|
117
|
+
// while the explicit one renders. v1 does the same thing, in the same place:
|
|
118
|
+
// its `gea_cpp_to_string(const gea::runtime::Date&)` overload, whose own
|
|
119
|
+
// comment says a Date without it "stringifies to [object Object]".
|
|
120
|
+
//
|
|
121
|
+
// CAVEAT, and it is this backend's only ToString divergence from node: the
|
|
122
|
+
// string carries no " (Zone Name)" suffix -- 21.4.4.41.7 step 8 makes that
|
|
123
|
+
// suffix implementation-defined and permits an empty one, node prints it,
|
|
124
|
+
// and this does not. It is the same divergence `d.toString()` already has
|
|
125
|
+
// (probe `.scratch/probes/date-zonename`), applied to a second spelling of
|
|
126
|
+
// the same operation, not a new one.
|
|
127
|
+
// The Date test lives inside the `native-record-ref` branch below, because
|
|
128
|
+
// that is what a Date IS in this backend and `isDateCarrier`'s type guard
|
|
129
|
+
// narrows the NEGATIVE branch to exclude every native record, not just the
|
|
130
|
+
// non-Date ones -- which made every later branch blind to the kind.
|
|
131
|
+
// ECMA-262 23.1.3.18 `join` step 3.d contributes the EMPTY string for a
|
|
132
|
+
// `null`/`undefined` element -- not the text every other caller of this
|
|
133
|
+
// table needs -- so a `nullishJoinsEmpty` caller gets the join-specific
|
|
134
|
+
// answer for a receiver whose element carrier IS exactly `null`/`undefined`
|
|
135
|
+
// (never any other member `undefined`, e.g. a genuinely missing struct
|
|
136
|
+
// field mid-record, which is not this operation).
|
|
137
|
+
if (carrier.kind === 'null')
|
|
138
|
+
return nullishJoinsEmpty ? cppConstantLiteral('', 'string', { kind: 'string' }) : 'gea::host::detail::toStringNull()';
|
|
139
|
+
if (carrier.kind === 'undefined')
|
|
140
|
+
return nullishJoinsEmpty ? cppConstantLiteral('', 'string', { kind: 'string' }) : 'gea::host::detail::toStringUndefined()';
|
|
141
|
+
if (carrier.kind === 'scalar') {
|
|
142
|
+
// The cast is not cosmetic. `int32`/`uint32` lower to fixed-width integer
|
|
143
|
+
// types, and an integer argument converts to BOTH `double` and `bool` at
|
|
144
|
+
// the same rank -- the overload call would be ambiguous and fail to
|
|
145
|
+
// compile. Naming the domain's own type at the call site is what picks the
|
|
146
|
+
// intended overload rather than leaving it to be resolved by accident.
|
|
147
|
+
if (carrier.domain === 'boolean')
|
|
148
|
+
return `gea::host::detail::toString(static_cast<bool>(${text}))`;
|
|
149
|
+
if (carrier.domain === 'bigint')
|
|
150
|
+
return `(${text}).toString()`;
|
|
151
|
+
return `gea::host::detail::toString(static_cast<double>(${text}))`;
|
|
152
|
+
}
|
|
153
|
+
// A caught exception is the one place a `dynamic` carrier's own runtime tag
|
|
154
|
+
// is read back rather than assumed: `catch (e) { String(e) }` is real,
|
|
155
|
+
// ordinary TypeScript (both `spread.ts` and the Dialer example use exactly
|
|
156
|
+
// this), and `e`'s checker type -- `unknown` -- is one of the four
|
|
157
|
+
// legitimate dynamic boundaries, not a value this emitter boxed on its own
|
|
158
|
+
// initiative. `gea::host::detail::toString(const gea::Value&)`
|
|
159
|
+
// tag-switches, mirroring `toBoolean(const gea::Value&)`.
|
|
160
|
+
if (carrier.kind === 'dynamic')
|
|
161
|
+
return `gea::host::detail::toString(${text})`;
|
|
162
|
+
// An optional DOES know which absence it holds. `Representation`'s own
|
|
163
|
+
// `optional` variant carries `absence: 'null' | 'undefined'` -- it has to,
|
|
164
|
+
// because `x === null` and `x === undefined` are different questions over
|
|
165
|
+
// one `gea::Optional<T>` -- so the two answers the language gives
|
|
166
|
+
// (`String(null)` is "null", `String(undefined)` is "undefined") are both
|
|
167
|
+
// derivable here. This branch previously refused with "the carrier has lost
|
|
168
|
+
// the distinction", and the refusal text it printed
|
|
169
|
+
// (`optional(string,null)`) contained the very tag it claimed was missing.
|
|
170
|
+
//
|
|
171
|
+
// `text` is an SSA value name (`emit-context.ts`'s `nameOfValue` mints
|
|
172
|
+
// `vN`), never an expression with an effect, so naming it twice in one
|
|
173
|
+
// conditional reads one local twice rather than running anything twice.
|
|
174
|
+
if (carrier.kind === 'optional') {
|
|
175
|
+
const present = toStringTextOver(`(*${text})`, carrier.payload, layouts, explicit, nullishJoinsEmpty);
|
|
176
|
+
if (present === null)
|
|
177
|
+
return null;
|
|
178
|
+
const absent = nullishJoinsEmpty
|
|
179
|
+
? cppConstantLiteral('', 'string', { kind: 'string' })
|
|
180
|
+
: carrier.absence === 'null'
|
|
181
|
+
? 'gea::host::detail::toStringNull()'
|
|
182
|
+
: 'gea::host::detail::toStringUndefined()';
|
|
183
|
+
return `(${text}.has_value() ? std::string(${present}) : std::string(${absent}))`;
|
|
184
|
+
}
|
|
185
|
+
// A tagged union is a statically known, finite set of arms with a runtime
|
|
186
|
+
// discriminant, which is exactly what ToString needs: ECMA-262 7.1.17 is
|
|
187
|
+
// applied per arm, and the arm is selected by the discriminant the carrier
|
|
188
|
+
// already stores. `gea::TaggedUnion<Arms...>` exposes `is<I>()` and
|
|
189
|
+
// `get<I>()` over the arm's position -- the same index `arms` is ordered by
|
|
190
|
+
// -- so this is a conditional chain over positions, not a box.
|
|
191
|
+
//
|
|
192
|
+
// The final arm is the `else`, with no test of its own: the discriminant is
|
|
193
|
+
// always one of `0..arity-1`, so testing it would add a branch that can
|
|
194
|
+
// never be taken and leave the chain with no value on the impossible path.
|
|
195
|
+
if (carrier.kind === 'tagged-union') {
|
|
196
|
+
const arms = [];
|
|
197
|
+
for (const [index, arm] of carrier.arms.entries()) {
|
|
198
|
+
const converted = toStringTextOver(`${text}.get<${index}>()`, arm.value, layouts, explicit, nullishJoinsEmpty);
|
|
199
|
+
if (converted === null)
|
|
200
|
+
return null;
|
|
201
|
+
arms.push(`std::string(${converted})`);
|
|
202
|
+
}
|
|
203
|
+
const last = arms[arms.length - 1];
|
|
204
|
+
if (last === undefined)
|
|
205
|
+
return null;
|
|
206
|
+
let chain = last;
|
|
207
|
+
for (let index = arms.length - 2; index >= 0; index -= 1) {
|
|
208
|
+
chain = `${text}.is<${index}>() ? ${arms[index]} : ${chain}`;
|
|
209
|
+
}
|
|
210
|
+
return `(${chain})`;
|
|
211
|
+
}
|
|
212
|
+
// ECMA-262 7.1.17: ToString of an object is ToPrimitive(hint string), which
|
|
213
|
+
// for an ordinary object (`OrdinaryToPrimitive`) tries `toString()` first --
|
|
214
|
+
// the Date case above is exactly that, for the one class this backend wrote
|
|
215
|
+
// by hand. A `class-ref` is a program-declared class this backend PROJECTED
|
|
216
|
+
// from TypeScript, and the identical rule applies, decided at compile time
|
|
217
|
+
// rather than run: a class that installs its own `toString` needs that
|
|
218
|
+
// METHOD actually invoked, which is a real call this leaf has no
|
|
219
|
+
// `EmitContext`/receiver-binding machinery to build (`text` is a receiver
|
|
220
|
+
// expression, not something a bound-method call can be assembled around
|
|
221
|
+
// here) -- refused rather than answered wrong. A class with no own
|
|
222
|
+
// `toString` anywhere up its `extends` chain has a decidable answer with NO
|
|
223
|
+
// call at all: 20.1.3.6's `OrdinaryToPrimitive`-independent tag walk lands
|
|
224
|
+
// on the literal `builtinTag` "Object" for every ordinary object that is
|
|
225
|
+
// not one of the handful of exotic/boxed kinds the spec special-cases by
|
|
226
|
+
// name (Array, Function, Error, Boolean, Number, String, Date, RegExp,
|
|
227
|
+
// Arguments) -- and none of those is ever represented as `class-ref` in
|
|
228
|
+
// this backend (each has its own dedicated representation kind), so a
|
|
229
|
+
// `class-ref` can never BE one. The constant is per the CLASS, not per
|
|
230
|
+
// instance: `class Foo {}; Object.prototype.toString.call(new Foo())` is
|
|
231
|
+
// `"[object Object]"`, not `"[object Foo]"` -- `Symbol.toStringTag` is the
|
|
232
|
+
// only thing that changes the tag, and `declaresOwnToString`'s own comment
|
|
233
|
+
// says why that one is out of reach here too.
|
|
234
|
+
if (carrier.kind === 'class-ref') {
|
|
235
|
+
if (!(layouts.classMethodFor?.(carrier.declaration, 'toString') ?? false))
|
|
236
|
+
return cppConstantLiteral('[object Object]', 'string', { kind: 'string' });
|
|
237
|
+
// The class DOES declare its own `toString`, so 7.1.17 says that method
|
|
238
|
+
// runs -- and a zero-argument instance method nothing overrides is a
|
|
239
|
+
// direct call on its own body, the very same C++ `p.toString()` already
|
|
240
|
+
// emits (`gea_body_<method>(receiver)`), so this is the same call reached
|
|
241
|
+
// by a different spelling rather than a second convention for it. The
|
|
242
|
+
// result goes back through this table because `toString` is declared to
|
|
243
|
+
// return a string in every case that matters and a `scalar` in the ones
|
|
244
|
+
// that do not, and ToString of THAT is what the caller asked for.
|
|
245
|
+
// `classDirectMethodFor` answers `null` for an overridden key, and this
|
|
246
|
+
// keeps refusing there: picking the base's body for a derived instance is
|
|
247
|
+
// the wrong answer, not a missing one.
|
|
248
|
+
const direct = layouts.classDirectMethodFor?.(carrier.declaration, 'toString') ?? null;
|
|
249
|
+
if (direct === null)
|
|
250
|
+
return null;
|
|
251
|
+
return toStringTextOver(`${cppBodyName(direct.callable)}(${text})`, direct.result, layouts, explicit);
|
|
252
|
+
}
|
|
253
|
+
// ECMA-262 25.1.5.15: `ArrayBuffer.prototype` defines a `get
|
|
254
|
+
// [Symbol.toStringTag]` returning the literal "ArrayBuffer", and defines no
|
|
255
|
+
// own `toString`/`valueOf` of its own. So ToPrimitive(hint string) falls
|
|
256
|
+
// through OrdinaryToPrimitive's `toString` lookup to the inherited
|
|
257
|
+
// `Object.prototype.toString`, whose own algorithm (19.1.3.6 step 16) reads
|
|
258
|
+
// that tag back -- giving a fixed, class-INDEPENDENT answer with no method
|
|
259
|
+
// call needed, the same shape the `class-ref` case above resolves at
|
|
260
|
+
// compile time for a class with no own `toString`. `hono`'s `BodyInit`
|
|
261
|
+
// union (`request.ts`'s cached-body arm) is a real caller: `${body}` where
|
|
262
|
+
// `body` narrows to a bare `ArrayBuffer` reaches exactly this.
|
|
263
|
+
if (carrier.kind === 'array-buffer')
|
|
264
|
+
return cppConstantLiteral('[object ArrayBuffer]', 'string', { kind: 'string' });
|
|
265
|
+
if (carrier.kind === 'shared-array-buffer')
|
|
266
|
+
return cppConstantLiteral('[object SharedArrayBuffer]', 'string', { kind: 'string' });
|
|
267
|
+
// ECMA-262 23.1.3.36 gives Array its inherited `toString` through
|
|
268
|
+
// `Array.prototype.join`. The runtime's `array::join` already implements the
|
|
269
|
+
// required comma separator, hole handling and per-element ToString. Admit
|
|
270
|
+
// exactly the element carriers that renderer accepts, so an array whose
|
|
271
|
+
// elements need arbitrary user-code coercion still refuses here instead of
|
|
272
|
+
// being boxed or guessed.
|
|
273
|
+
if (carrier.kind === 'array-object' && (carrier.element.kind === 'string' || carrier.element.kind === 'scalar')) {
|
|
274
|
+
return `gea::runtime::array::join(${text})`;
|
|
275
|
+
}
|
|
276
|
+
// ECMA-262 23.2.3.18 gives TypedArray the same comma-joined ToString shape
|
|
277
|
+
// as Array, without holes or nullish elements. Every typed-array carrier in
|
|
278
|
+
// this backend stores Number elements, so the runtime overload converts each
|
|
279
|
+
// one through Number::toString while preserving the native view.
|
|
280
|
+
if (carrier.kind === 'typed-array')
|
|
281
|
+
return `gea::runtime::array::join(${text})`;
|
|
282
|
+
// A plain object -- an object literal, an interface, a host-declared struct.
|
|
283
|
+
// The `class-ref` case above already argues this exact answer from 20.1.3.6:
|
|
284
|
+
// an ordinary object with no own `toString` anywhere reachable falls through
|
|
285
|
+
// OrdinaryToPrimitive to `Object.prototype.toString`, whose builtinTag walk
|
|
286
|
+
// lands on the literal "Object" for everything that is not one of the nine
|
|
287
|
+
// exotic kinds the spec names -- none of which is ever carried as a record.
|
|
288
|
+
// The guard is the same guard, asked of the record's own members instead of
|
|
289
|
+
// a class's prototype chain: a shape that declares `toString` needs that
|
|
290
|
+
// method invoked, which this leaf cannot build a call for, so it refuses.
|
|
291
|
+
//
|
|
292
|
+
// hono reaches this constantly: `${c.req.raw}` and `console.error(err)` over
|
|
293
|
+
// an interface-typed value are both a ToString of a record.
|
|
294
|
+
if (carrier.kind === 'record' || carrier.kind === 'record-with-index') {
|
|
295
|
+
return carrier.fields.some((field) => field.key === 'toString')
|
|
296
|
+
? ownToStringCallText(text, carrier.fields, carrier.ownership, layouts, explicit)
|
|
297
|
+
: cppConstantLiteral('[object Object]', 'string', { kind: 'string' });
|
|
298
|
+
}
|
|
299
|
+
if (carrier.kind === 'native-record-ref') {
|
|
300
|
+
if (isNativeError(carrier))
|
|
301
|
+
return `(${text})->toString()`;
|
|
302
|
+
// A Date. ECMA-262 7.1.17 ToString of an object is ToPrimitive with hint
|
|
303
|
+
// string, which for a Date is OrdinaryToPrimitive trying `toString` first
|
|
304
|
+
// -- 21.4.4.41, the member `gea::runtime::Date` already implements. So
|
|
305
|
+
// `${d}`, `String(d)` and `"x" + d` all answer exactly `d.toString()`, and
|
|
306
|
+
// this states that once rather than leaving the implicit spellings refused
|
|
307
|
+
// while the explicit one renders. v1 does the same thing, in the same
|
|
308
|
+
// place: its `gea_cpp_to_string(const gea::runtime::Date&)` overload,
|
|
309
|
+
// whose own comment says a Date without it "stringifies to
|
|
310
|
+
// [object Object]".
|
|
311
|
+
//
|
|
312
|
+
// CAVEAT, and it is this backend's only ToString divergence from node: the
|
|
313
|
+
// string carries no " (Zone Name)" suffix -- 21.4.4.41.7 step 8 makes that
|
|
314
|
+
// suffix implementation-defined and permits an empty one, node prints it,
|
|
315
|
+
// and this does not. It is the same divergence `d.toString()` already has,
|
|
316
|
+
// applied to a second spelling of the same operation, not a new one.
|
|
317
|
+
if (carrier.native === cppDateType)
|
|
318
|
+
return `${text}->toString()`;
|
|
319
|
+
const fields = layouts.forShape(carrier.shapeId);
|
|
320
|
+
if (fields === null)
|
|
321
|
+
return null;
|
|
322
|
+
return fields.some((field) => field.key === 'toString')
|
|
323
|
+
? ownToStringCallText(text, fields, carrier.ownership, layouts, explicit)
|
|
324
|
+
: cppConstantLiteral('[object Object]', 'string', { kind: 'string' });
|
|
325
|
+
}
|
|
326
|
+
// ECMA-262 27.2.5.5: `Promise.prototype[Symbol.toStringTag]` is the literal
|
|
327
|
+
// "Promise", and `Promise.prototype` defines no own `toString`/`valueOf`, so
|
|
328
|
+
// ToPrimitive(hint string) falls through to `Object.prototype.toString`,
|
|
329
|
+
// which reads that tag back (20.1.3.6 step 15). Class-independent, no call
|
|
330
|
+
// -- the identical shape as `array-buffer` just above.
|
|
331
|
+
if (carrier.kind === 'promise')
|
|
332
|
+
return cppConstantLiteral('[object Promise]', 'string', { kind: 'string' });
|
|
333
|
+
return null;
|
|
334
|
+
};
|
|
335
|
+
/**
|
|
336
|
+
* ToString over a list of operands, folded with `separator` inserted between
|
|
337
|
+
* every pair -- the one machine behind two different joins: a template
|
|
338
|
+
* literal's own adjacency (`separator: null`, `templateText` below) and
|
|
339
|
+
* `console.log`'s single-space rule (`separator: 'std::string(" ")'`,
|
|
340
|
+
* `consoleArgumentsText` below). Both need the identical per-operand
|
|
341
|
+
* ToString and identical empty/singleton handling; only what sits between
|
|
342
|
+
* pieces differs, so one function states the fold once instead of two copies
|
|
343
|
+
* that could quietly disagree about what an empty operand list means.
|
|
344
|
+
*
|
|
345
|
+
* `null` is returned when an operand's carrier has no ToString, and the
|
|
346
|
+
* caller names which one refused -- what differs between a template
|
|
347
|
+
* substitution and a call argument is what the caller can say about *why*
|
|
348
|
+
* the value is there, not the conversion rule itself.
|
|
349
|
+
*
|
|
350
|
+
* `emit.ts` has two callers today: a template literal's own chunks
|
|
351
|
+
* (`templateText` below, `separator: null`) and the string-concatenation `+`
|
|
352
|
+
* fold (`emit.ts`'s "`+` is string concatenation..." branch, also
|
|
353
|
+
* `separator: null` via `templateText`) -- both pass `operation.operands`
|
|
354
|
+
* directly, which is why one binary-`+`'s two operands and an N-piece
|
|
355
|
+
* template's chunks fold identically here.
|
|
356
|
+
*/
|
|
357
|
+
const joinedToStringText = (ctx, operands, separator) => {
|
|
358
|
+
const pieces = [];
|
|
359
|
+
for (const operand of operands) {
|
|
360
|
+
const converted = toStringText(operandText(ctx, operand), operand.representation, ctx.classes, ctx.deriver);
|
|
361
|
+
if (converted === null)
|
|
362
|
+
return { refused: operand.representation };
|
|
363
|
+
pieces.push(converted);
|
|
364
|
+
}
|
|
365
|
+
// No operands is the empty string: a template with no text and no
|
|
366
|
+
// substitution, or `console.log()` with no arguments, both say nothing.
|
|
367
|
+
const first = pieces[0];
|
|
368
|
+
if (first === undefined)
|
|
369
|
+
return { text: cppConstantLiteral('', 'string', { kind: 'string' }) };
|
|
370
|
+
// The first piece is forced to `std::string` so the fold is string
|
|
371
|
+
// concatenation rather than pointer arithmetic between two `const char *`.
|
|
372
|
+
if (pieces.length === 1)
|
|
373
|
+
return { text: `std::string(${first})` };
|
|
374
|
+
const separated = separator === null ? pieces : pieces.flatMap((piece, index) => (index === 0 ? [piece] : [separator, piece]));
|
|
375
|
+
return { text: `gea::concatStrings({${separated.join(', ')}})` };
|
|
376
|
+
};
|
|
377
|
+
/**
|
|
378
|
+
* The value appended by a proven in-place string update.
|
|
379
|
+
*
|
|
380
|
+
* Rebuilding `oldS + suffix` with `concatStrings` copies `oldS` before
|
|
381
|
+
* assigning the result back. The write emitters remove that first operand;
|
|
382
|
+
* this helper preserves the efficient single-piece spelling, including the
|
|
383
|
+
* `char` overload for one printable ASCII byte.
|
|
384
|
+
*/
|
|
385
|
+
const stringAppendSuffixText = (ctx, operands) => {
|
|
386
|
+
const only = operands.length === 1 ? operands[0] : undefined;
|
|
387
|
+
if (only !== undefined) {
|
|
388
|
+
const text = ctx.constantTexts.get(only.value);
|
|
389
|
+
const code = text?.length === 1 ? text.charCodeAt(0) : 0;
|
|
390
|
+
if (code >= 0x20 && code <= 0x7e && text !== "'" && text !== '\\')
|
|
391
|
+
return `'${text}'`;
|
|
392
|
+
return operandText(ctx, only);
|
|
393
|
+
}
|
|
394
|
+
return `gea::concatStrings({${operands.map((operand) => operandText(ctx, operand)).join(', ')}})`;
|
|
395
|
+
};
|
|
396
|
+
/**
|
|
397
|
+
* Append a suffix without allocating its multi-piece concatenation first.
|
|
398
|
+
* Deferred string-addition subtrees are flattened into their leaves, then the
|
|
399
|
+
* runtime reserves and appends them directly. Its alias path snapshots pieces
|
|
400
|
+
* that view the target, preserving self-append across a possible reallocation.
|
|
401
|
+
*/
|
|
402
|
+
export const stringAppendStatement = (ctx, target, operands) => {
|
|
403
|
+
const leaves = [];
|
|
404
|
+
const collect = (operand) => {
|
|
405
|
+
const origin = ctx.computeOrigins.get(operand.value);
|
|
406
|
+
if (operand.representation.kind === 'string' &&
|
|
407
|
+
ctx.deferredTexts.has(operand.value) &&
|
|
408
|
+
origin?.form === 'binary' &&
|
|
409
|
+
origin.operator === '+' &&
|
|
410
|
+
origin.operands.every((part) => part.representation.kind === 'string')) {
|
|
411
|
+
for (const part of origin.operands)
|
|
412
|
+
collect(part);
|
|
413
|
+
}
|
|
414
|
+
else
|
|
415
|
+
leaves.push(operand);
|
|
416
|
+
};
|
|
417
|
+
for (const operand of operands)
|
|
418
|
+
collect(operand);
|
|
419
|
+
if (leaves.length === 1)
|
|
420
|
+
return `${target} += ${stringAppendSuffixText(ctx, leaves)};`;
|
|
421
|
+
return `gea::appendStrings(${target}, {${leaves.map((operand) => operandText(ctx, operand)).join(', ')}});`;
|
|
422
|
+
};
|
|
423
|
+
/**
|
|
424
|
+
* A template expression, as one concatenation.
|
|
425
|
+
*
|
|
426
|
+
* Lowering already put the operands in the order the language concatenates
|
|
427
|
+
* them -- literal chunk, substitution, literal chunk, ... -- so this only has
|
|
428
|
+
* to run ToString over each and fold with no separator, which is what an
|
|
429
|
+
* empty `separator` in `joinedToStringText` means. The chunks arrive carrying
|
|
430
|
+
* `string` and pass through unchanged, which is why one rule covers both
|
|
431
|
+
* kinds of piece.
|
|
432
|
+
*/
|
|
433
|
+
export const templateText = (ctx, operation) => {
|
|
434
|
+
const leaves = [];
|
|
435
|
+
const collect = (operand) => {
|
|
436
|
+
const origin = ctx.computeOrigins.get(operand.value);
|
|
437
|
+
if (operand.representation.kind === 'string' &&
|
|
438
|
+
ctx.deferredTexts.has(operand.value) &&
|
|
439
|
+
origin?.form === 'binary' &&
|
|
440
|
+
origin.operator === '+' &&
|
|
441
|
+
origin.operands.every((part) => part.representation.kind === 'string')) {
|
|
442
|
+
// Only a single-use, effect-free deferred subtree can lose its temporary.
|
|
443
|
+
// Numeric additions and already-materialized string snapshots stay leaves.
|
|
444
|
+
for (const part of origin.operands)
|
|
445
|
+
collect(part);
|
|
446
|
+
}
|
|
447
|
+
else
|
|
448
|
+
leaves.push(operand);
|
|
449
|
+
};
|
|
450
|
+
for (const operand of operation.operands)
|
|
451
|
+
collect(operand);
|
|
452
|
+
return joinedToStringText(ctx, leaves, null);
|
|
453
|
+
};
|
|
454
|
+
/**
|
|
455
|
+
* `console.log`/`console.error`'s own join rule. ECMA-262 leaves `console`
|
|
456
|
+
* entirely host-defined, but every runtime that implements one (Node, every
|
|
457
|
+
* browser devtools console) stringifies each argument and separates the
|
|
458
|
+
* pieces with exactly one space. v2 has no per-call-site C++ template
|
|
459
|
+
* mechanism in the `host-members.ts` model -- a template there fills one
|
|
460
|
+
* fixed textual shape with pre-rendered strings, it cannot emit a variadic
|
|
461
|
+
* C++ template -- so the join happens here, before the joined text is
|
|
462
|
+
* substituted into the `{args}` slot (`host-members.ts`/`emit-host-invoke.ts`).
|
|
463
|
+
*
|
|
464
|
+
* `operation.arguments` at the call site is guaranteed to be N individual
|
|
465
|
+
* operands here, not one packed `array-object`: `ir/lower.ts`'s
|
|
466
|
+
* `lowerInvocation` skips `packRestArguments` for exactly this callee shape
|
|
467
|
+
* (a method call whose receiver is a `native-handle`) -- see `lower.ts`'s
|
|
468
|
+
* `calleeReceiverIsNativeHandle`.
|
|
469
|
+
*/
|
|
470
|
+
export const consoleArgumentsText = (ctx, operands) => {
|
|
471
|
+
// A Date argument is refused HERE even though `toStringText` renders one,
|
|
472
|
+
// and the two are not in disagreement: they are different operations.
|
|
473
|
+
// `String(d)` and `${d}` are ECMA-262 7.1.17 and answer `d.toString()`;
|
|
474
|
+
// node's `console.log(d)` does not run ToString at all -- it inspects, and
|
|
475
|
+
// `util.inspect` prints a Date as its ISO form. Measured:
|
|
476
|
+
// `console.log(new Date(0))` prints `1970-01-01T00:00:00.000Z`, while
|
|
477
|
+
// `console.log(String(new Date(0)))` prints `Thu Jan 01 1970 ...`. Rendering
|
|
478
|
+
// the ToString here would print the second where node prints the first --
|
|
479
|
+
// a green line with the wrong text in it, which is the one outcome this
|
|
480
|
+
// backend refuses to produce.
|
|
481
|
+
for (const operand of operands) {
|
|
482
|
+
if (carrierWithADate(operand.representation) !== null)
|
|
483
|
+
return { refused: operand.representation };
|
|
484
|
+
}
|
|
485
|
+
return joinedToStringText(ctx, operands, 'std::string(" ")');
|
|
486
|
+
};
|
|
487
|
+
/** The Date inside a carrier -- itself, an optional's payload, or a union arm -- or `null`. */
|
|
488
|
+
const carrierWithADate = (carrier) => {
|
|
489
|
+
if (isDateCarrier(carrier))
|
|
490
|
+
return carrier;
|
|
491
|
+
if (carrier.kind === 'optional')
|
|
492
|
+
return carrierWithADate(carrier.payload);
|
|
493
|
+
if (carrier.kind === 'tagged-union') {
|
|
494
|
+
for (const arm of carrier.arms) {
|
|
495
|
+
const found = carrierWithADate(arm.value);
|
|
496
|
+
if (found !== null)
|
|
497
|
+
return found;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return null;
|
|
501
|
+
};
|
|
502
|
+
/**
|
|
503
|
+
* The carrier that actually has no ToString, which is not always the one the
|
|
504
|
+
* caller was holding.
|
|
505
|
+
*
|
|
506
|
+
* `optional` and `tagged-union` convert by descending into their payload/arms,
|
|
507
|
+
* so when one of those refuses it is because something *inside* it did. Naming
|
|
508
|
+
* the wrapper would say something false about the backend -- "no ToString for
|
|
509
|
+
* an optional" when optionals convert fine and the payload is a `Map` -- so
|
|
510
|
+
* this walks down to the first sub-carrier with no conversion of its own and
|
|
511
|
+
* lets the message name that.
|
|
512
|
+
*/
|
|
513
|
+
const unconvertibleToStringCarrier = (carrier, classes, deriver) => {
|
|
514
|
+
if (carrier.kind === 'optional')
|
|
515
|
+
return unconvertibleToStringCarrier(carrier.payload, classes, deriver);
|
|
516
|
+
if (carrier.kind === 'tagged-union') {
|
|
517
|
+
for (const arm of carrier.arms) {
|
|
518
|
+
if (toStringText('x', arm.value, classes, deriver) === null)
|
|
519
|
+
return unconvertibleToStringCarrier(arm.value, classes, deriver);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
return carrier;
|
|
523
|
+
};
|
|
524
|
+
/** Why a carrier has no ToString, for a refusal message. */
|
|
525
|
+
export const toStringRefusal = (outer, classes, deriver) => {
|
|
526
|
+
// A Date has a ToString and still reaches this function, from exactly one
|
|
527
|
+
// caller: `consoleArgumentsText`, which refuses it on purpose. Saying "not
|
|
528
|
+
// implemented" about a member that IS implemented would send the reader to
|
|
529
|
+
// build something that exists, so the reason it was actually refused for is
|
|
530
|
+
// the one printed.
|
|
531
|
+
const date = carrierWithADate(outer);
|
|
532
|
+
if (date !== null) {
|
|
533
|
+
return (`console.log of a "${representationKey(date)}" carrier is refused: node does not ToString a console argument, it ` +
|
|
534
|
+
'inspects it, and `util.inspect` prints a Date as its ISO form -- `console.log(new Date(0))` is ' +
|
|
535
|
+
'`1970-01-01T00:00:00.000Z`, not the `Thu Jan 01 1970 ...` that ToString answers. Write `String(d)`, `` `${d}` `` or ' +
|
|
536
|
+
'`d.toISOString()` and the intended one renders');
|
|
537
|
+
}
|
|
538
|
+
const carrier = unconvertibleToStringCarrier(outer, classes, deriver);
|
|
539
|
+
const within = representationKey(carrier) === representationKey(outer) ? '' : ` (inside a "${representationKey(outer)}")`;
|
|
540
|
+
// A `class-ref` reaching this message is one that DOES declare its own
|
|
541
|
+
// `toString` (`declaresOwnToString`) -- the one class-ref shape `toStringText`
|
|
542
|
+
// still refuses, since calling that method needs a real bound-method call
|
|
543
|
+
// this leaf cannot build. Every other class-ref converts (the ECMA-262
|
|
544
|
+
// "Object" tag), so it is named specifically rather than folded into the
|
|
545
|
+
// generic list below, which would tell the reader a strictly false thing:
|
|
546
|
+
// that no class ever converts.
|
|
547
|
+
if (carrier.kind === 'class-ref') {
|
|
548
|
+
return (`ToString of a "${representationKey(carrier)}" carrier${within} needs its own declared \`toString\` method actually ` +
|
|
549
|
+
'called, which this backend cannot build here (no bound-method call site to assemble from a bare receiver expression) -- ' +
|
|
550
|
+
'a class with no own `toString` converts to the ECMA-262 "[object Object]" tag instead');
|
|
551
|
+
}
|
|
552
|
+
return carrier.kind === 'scalar' && carrier.domain === 'bigint'
|
|
553
|
+
? `ToString of a bigint${within} needs arbitrary-precision digits, which are not implemented`
|
|
554
|
+
: `ToString of a "${representationKey(carrier)}" carrier${within} is not implemented; only string, number, boolean, ` +
|
|
555
|
+
'null, undefined, a class with no own `toString`, an optional of those and a tagged union of those convert without a box';
|
|
556
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type Representation } from '../../representation/model.js';
|
|
2
|
+
import { type UnionMemberTypeofAnswer } from './emit-context.js';
|
|
3
|
+
/** The string `typeof` yields for one carrier, or `null` when the table has no answer for it. */
|
|
4
|
+
export declare const typeofTextFor: (representation: Representation) => string | null;
|
|
5
|
+
/**
|
|
6
|
+
* The expression that yields `typeof operand`.
|
|
7
|
+
*
|
|
8
|
+
* `quote` is passed in rather than imported so this file states no opinion about
|
|
9
|
+
* how a C++ string literal is spelled; the one authority for that already exists
|
|
10
|
+
* and this asks it.
|
|
11
|
+
*
|
|
12
|
+
* The operand arrives as a THUNK, not as text, because for most carriers this
|
|
13
|
+
* function never asks for it: the answer is settled by the carrier, and
|
|
14
|
+
* rendering the operand to hand it over would demand a value the question does
|
|
15
|
+
* not depend on. That is not a saving -- it is the difference between an
|
|
16
|
+
* answer and a refusal for anything a program can name but not hold. `typeof
|
|
17
|
+
* deviceInfo !== 'undefined'` is the shape that proved it: the host states
|
|
18
|
+
* that namespace exists, the answer is `"object"` before the program runs, and
|
|
19
|
+
* eagerly rendering the operand refused the whole program for using a
|
|
20
|
+
* namespace as a value it never used it as.
|
|
21
|
+
*/
|
|
22
|
+
export declare const typeofExpression: (representation: Representation, operand: () => string, quote: (text: string) => string, dynamic?: (text: string) => string) => string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Whether this backend can answer `typeof` for a carrier.
|
|
25
|
+
*
|
|
26
|
+
* Implemented by asking `typeofExpression` rather than by re-listing the kinds
|
|
27
|
+
* it handles: a second list would be a second authority, and the two would
|
|
28
|
+
* eventually disagree about a nested carrier -- an optional over a boxed value
|
|
29
|
+
* is unanswerable for a reason the outer kind cannot see. The operand text and
|
|
30
|
+
* the quoting are placeholders because only the presence of an answer is being
|
|
31
|
+
* asked about, not its spelling.
|
|
32
|
+
*/
|
|
33
|
+
export declare const typeofIsAnswerable: (representation: Representation) => boolean;
|
|
34
|
+
/** Null signals a string that typeof can never produce, not a fallback tag. */
|
|
35
|
+
export declare const typeofTagLiteral: (text: string) => string | null;
|
|
36
|
+
export declare const typeofTagText: (representation: Representation, operand: () => string) => string;
|
|
37
|
+
/** The string form; see `unionMemberDispatchText`. `std::string` for the reason `typeofText` states. */
|
|
38
|
+
export declare const unionMemberTypeofText: (answers: readonly UnionMemberTypeofAnswer[], operand: string, member: string) => string;
|
|
39
|
+
/** The tag form, for a result only equality tests consume; see `typeofTagText`. */
|
|
40
|
+
export declare const unionMemberTypeofTagText: (answers: readonly UnionMemberTypeofAnswer[], operand: string, member: string) => string;
|
|
41
|
+
/**
|
|
42
|
+
* The C++ expression for `typeof operand`, or a refusal naming the carrier it
|
|
43
|
+
* has no answer for.
|
|
44
|
+
*
|
|
45
|
+
* The refusal is by name and not a fallback, because the fallback would be a
|
|
46
|
+
* guess: a `typeof` that returns the wrong string is a narrowing that silently
|
|
47
|
+
* takes the wrong branch, which is worse than a program that does not build.
|
|
48
|
+
*/
|
|
49
|
+
export declare const typeofText: (representation: Representation, operand: () => string) => string;
|