@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,133 @@
|
|
|
1
|
+
import type { CallOperation, ConstructOperation, IrOperand } from '../../../ir/model.js';
|
|
2
|
+
import type { Representation } from '../../../representation/model.js';
|
|
3
|
+
import type { IrValueId } from '../../../identity/ids.js';
|
|
4
|
+
import { type EmitContext, type PrototypeMethodRead } from '../emit-context.js';
|
|
5
|
+
/**
|
|
6
|
+
* `Date.prototype` and the `Date` constructor.
|
|
7
|
+
*
|
|
8
|
+
* The C++ half is `gea::runtime::Date` (`runtime/gea_runtime.h`), ported from
|
|
9
|
+
* v1 geatsc's own `targets/cpp/runtime/date.h` + `date.cpp`. This file is the
|
|
10
|
+
* compiler half: which members are claimed, what each one's call renders to,
|
|
11
|
+
* and -- just as important -- what each unclaimed member's refusal says.
|
|
12
|
+
*
|
|
13
|
+
* ## Why the spelling lives here and not in a plugin package
|
|
14
|
+
*
|
|
15
|
+
* `Date` is an ECMAScript builtin declared by `lib.es5.d.ts`, not a gea host
|
|
16
|
+
* protocol. Nothing installs it; the language has it. So its C++ spelling is
|
|
17
|
+
* the backend's own -- the same place `Promise<T>`, the eight TypedArray views
|
|
18
|
+
* and the four keyed collections keep theirs -- and never the gea plugin's
|
|
19
|
+
* `nativeTypes` table, which is the authority for what a HOST implements.
|
|
20
|
+
*
|
|
21
|
+
* ## Why a Date is a `native-record-ref` and not a `native-handle`
|
|
22
|
+
*
|
|
23
|
+
* `representation/derive.ts` already selected `native-record-ref` for the
|
|
24
|
+
* `Date` interface before this port existed (measured: `native-record-ref(
|
|
25
|
+
* type|3,shared-refcount,)` on a two-line `new Date(0)` probe); all the
|
|
26
|
+
* `DateDeclarationPolicy` adds is the `native` field, which names
|
|
27
|
+
* `gea::runtime::Date` as the struct so `records.ts` emits none of its own.
|
|
28
|
+
* A `native-handle` would be wrong for a reason the model states out loud:
|
|
29
|
+
* `types.ts`'s `carriesAbsence` calls every handle a carrier with an empty
|
|
30
|
+
* state, so `representation/optional.ts` collapses `T | null` onto the handle
|
|
31
|
+
* itself -- and a Date has no empty value for `null` to be spelled as.
|
|
32
|
+
*
|
|
33
|
+
* ## Deferral, exactly as String/Array/Map do it
|
|
34
|
+
*
|
|
35
|
+
* `lib.es5.d.ts` gives an interface method no `this` parameter, so there is no
|
|
36
|
+
* receiver-carrying calling convention a first-class method value could be
|
|
37
|
+
* built from (`emit-prototype-string.ts`'s own comment states this). The
|
|
38
|
+
* `[[Get]]` therefore records which member was reached off which receiver and
|
|
39
|
+
* renders nothing; the call that follows renders the whole fused expression.
|
|
40
|
+
* `datePrototypeMethods` is the one authority for which keys may defer, so a
|
|
41
|
+
* member that defers is always a member `dateCallText` can render.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* The C++ type a Date is carried in.
|
|
45
|
+
*
|
|
46
|
+
* One constant, read by three places that must not disagree: `compiler.ts`
|
|
47
|
+
* installs it as the `DateDeclarationPolicy`'s answer, `types.ts` spells it
|
|
48
|
+
* from the carrier's own `native` field, and `isDateCarrier` below recognizes
|
|
49
|
+
* it again at every member access and construction.
|
|
50
|
+
*/
|
|
51
|
+
export declare const cppDateType = "gea::runtime::Date";
|
|
52
|
+
/** Whether a carrier is a Date -- the `native-record-ref` whose stated native type is `gea::runtime::Date`. */
|
|
53
|
+
export declare const isDateCarrier: (representation: Representation) => representation is Extract<Representation, {
|
|
54
|
+
kind: "native-record-ref";
|
|
55
|
+
}>;
|
|
56
|
+
/** Every zero-argument getter, each named exactly as `gea::runtime::Date` spells it. */
|
|
57
|
+
export declare const dateGetters: readonly string[];
|
|
58
|
+
/** The zero-argument string forms. `toLocale*` are not here: they take arguments this backend refuses rather than ignores. */
|
|
59
|
+
export declare const dateStringForms: readonly string[];
|
|
60
|
+
/** Each setter, with the maximum number of arguments `lib.es5.d.ts` declares for it. */
|
|
61
|
+
export declare const dateSetters: ReadonlyMap<string, number>;
|
|
62
|
+
/**
|
|
63
|
+
* The keys `dateMemberText` may defer -- one authority for "is this method
|
|
64
|
+
* implemented", exactly as `stringPrototypeMethods` is for its family.
|
|
65
|
+
*
|
|
66
|
+
* `toJSON` is deferred even though its ordinary carrier refuses: the refusal
|
|
67
|
+
* is a property of the CALL's published result, so it has to be reached at the
|
|
68
|
+
* call to be stated accurately, and refusing at the access would say "not
|
|
69
|
+
* implemented" about something that is.
|
|
70
|
+
*/
|
|
71
|
+
export declare const datePrototypeMethods: ReadonlySet<string>;
|
|
72
|
+
/**
|
|
73
|
+
* `Date.prototype` members this backend states no rendering for, each with the
|
|
74
|
+
* reason -- "not built yet" and "cannot be built without X" are different
|
|
75
|
+
* answers, and only the second tells you what to build.
|
|
76
|
+
*/
|
|
77
|
+
export declare const dateMemberRefusals: ReadonlyMap<string, string>;
|
|
78
|
+
/**
|
|
79
|
+
* A `[[Get]]` off a Date receiver: defer a claimed method, refuse anything
|
|
80
|
+
* else by name.
|
|
81
|
+
*
|
|
82
|
+
* A NON-constant key answers `null` rather than refusing, so the access falls
|
|
83
|
+
* through to `emit-dynamic-properties.ts`'s native sidecar -- `d[k]` on a Date
|
|
84
|
+
* keeps the native carrier and reads the expando table keyed on this object's
|
|
85
|
+
* own address, which is the sanctioned answer for a native type that needs
|
|
86
|
+
* arbitrary properties (`gea::runtime::regex::Pattern` is the reference
|
|
87
|
+
* implementation, and `gea::runtime::Date` declares the same
|
|
88
|
+
* `gea_readOwnField`/`gea_writeOwnField`/`gea_ownFieldKeys` protocol). Boxing
|
|
89
|
+
* the Date to make such an access compile is the forbidden shortcut.
|
|
90
|
+
*/
|
|
91
|
+
/** Whether a Date member read is a deferred `Date.prototype` method read. Stated once; the renderer and the prototype-read walk both ask it. */
|
|
92
|
+
export declare const deferredDateMethodClaim: (staticKeyTexts: ReadonlyMap<IrValueId, string>, receiver: IrOperand, key: IrOperand) => PrototypeMethodRead | null;
|
|
93
|
+
export declare const dateMemberText: (ctx: EmitContext, receiver: IrOperand, key: IrOperand, result: string | null) => string | null;
|
|
94
|
+
/** The call text for a deferred `Date.prototype` read. */
|
|
95
|
+
export declare const dateCallText: (ctx: EmitContext, member: string, receiverText: string, operation: CallOperation) => string;
|
|
96
|
+
/**
|
|
97
|
+
* `new Date(...)` -- ECMA-262 21.4.2.1.
|
|
98
|
+
*
|
|
99
|
+
* The fourth member of `emit-callable.ts`'s `emitTypedArrayConstruct` /
|
|
100
|
+
* `emitArrayConstruct` / `emitKeyedCollectionConstruct` family, and here for
|
|
101
|
+
* the identical structural reason: `DateConstructor`'s checker overload set is
|
|
102
|
+
* `new ()`, `new (value: number | string)`, `new (value: number | string |
|
|
103
|
+
* Date)` and `new (year, monthIndex, ...)`, which have no single physical
|
|
104
|
+
* frame, so `representation/host-abi.ts`'s `widestSubsumingAbi` correctly
|
|
105
|
+
* refuses to join them and `derive.ts` leaves `.construct` null. This reads
|
|
106
|
+
* the construction's own arguments instead.
|
|
107
|
+
*
|
|
108
|
+
* Four forms render, one per constructor `gea::runtime::Date` declares:
|
|
109
|
+
* zero arguments (now), one number (a time value), one string (parsed), and
|
|
110
|
+
* two-to-seven numbers (local calendar components). `new Date(someDate)` --
|
|
111
|
+
* the copy overload -- is refused BY NAME rather than rendered as a copy: it
|
|
112
|
+
* is `ToPrimitive(value)` per 21.4.2.1 step 4, and a shared_ptr copy would
|
|
113
|
+
* alias the ORIGINAL, so a mutation through one would be observable through
|
|
114
|
+
* the other. That is a silently different program, not a missing one.
|
|
115
|
+
*/
|
|
116
|
+
export declare const emitDateConstruct: (ctx: EmitContext, lines: string[], operation: ConstructOperation, result: Extract<Representation, {
|
|
117
|
+
kind: "native-record-ref";
|
|
118
|
+
}>) => void;
|
|
119
|
+
/**
|
|
120
|
+
* `Date.parse(s)` and `Date.UTC(...)` -- ECMA-262 21.4.3.2 / 21.4.3.4.
|
|
121
|
+
*
|
|
122
|
+
* Registered as the `DateConstructor` protocol's call-site renderer
|
|
123
|
+
* (`emit-host-invoke.ts`'s `hostMemberRenderers`), for the reason that
|
|
124
|
+
* mechanism exists: `Date.UTC` takes one to seven arguments, and the fixed
|
|
125
|
+
* `arity` a `hostMembers` template row states cannot express that.
|
|
126
|
+
*
|
|
127
|
+
* `Date.now()` is deliberately NOT here. It is a real readable
|
|
128
|
+
* `gea::CallableObject<double()>` in `gea_runtime.h`, so its row stays a
|
|
129
|
+
* `property` and its call goes through that callable carrier -- rendering it
|
|
130
|
+
* as a free function here would be a second spelling of a member that already
|
|
131
|
+
* has one.
|
|
132
|
+
*/
|
|
133
|
+
export declare const dateConstructorCallText: (ctx: EmitContext, member: string, operation: CallOperation) => string;
|
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
import { representationKey } from '../../../representation/model.js';
|
|
2
|
+
import { createCppEmitBlockedError, defineValue, operandText } from '../emit-context.js';
|
|
3
|
+
import { cppRecordFieldName, cppTypeOf } from '../types.js';
|
|
4
|
+
import { toNumberText } from '../emit-tonumber.js';
|
|
5
|
+
/**
|
|
6
|
+
* `Date.prototype` and the `Date` constructor.
|
|
7
|
+
*
|
|
8
|
+
* The C++ half is `gea::runtime::Date` (`runtime/gea_runtime.h`), ported from
|
|
9
|
+
* v1 geatsc's own `targets/cpp/runtime/date.h` + `date.cpp`. This file is the
|
|
10
|
+
* compiler half: which members are claimed, what each one's call renders to,
|
|
11
|
+
* and -- just as important -- what each unclaimed member's refusal says.
|
|
12
|
+
*
|
|
13
|
+
* ## Why the spelling lives here and not in a plugin package
|
|
14
|
+
*
|
|
15
|
+
* `Date` is an ECMAScript builtin declared by `lib.es5.d.ts`, not a gea host
|
|
16
|
+
* protocol. Nothing installs it; the language has it. So its C++ spelling is
|
|
17
|
+
* the backend's own -- the same place `Promise<T>`, the eight TypedArray views
|
|
18
|
+
* and the four keyed collections keep theirs -- and never the gea plugin's
|
|
19
|
+
* `nativeTypes` table, which is the authority for what a HOST implements.
|
|
20
|
+
*
|
|
21
|
+
* ## Why a Date is a `native-record-ref` and not a `native-handle`
|
|
22
|
+
*
|
|
23
|
+
* `representation/derive.ts` already selected `native-record-ref` for the
|
|
24
|
+
* `Date` interface before this port existed (measured: `native-record-ref(
|
|
25
|
+
* type|3,shared-refcount,)` on a two-line `new Date(0)` probe); all the
|
|
26
|
+
* `DateDeclarationPolicy` adds is the `native` field, which names
|
|
27
|
+
* `gea::runtime::Date` as the struct so `records.ts` emits none of its own.
|
|
28
|
+
* A `native-handle` would be wrong for a reason the model states out loud:
|
|
29
|
+
* `types.ts`'s `carriesAbsence` calls every handle a carrier with an empty
|
|
30
|
+
* state, so `representation/optional.ts` collapses `T | null` onto the handle
|
|
31
|
+
* itself -- and a Date has no empty value for `null` to be spelled as.
|
|
32
|
+
*
|
|
33
|
+
* ## Deferral, exactly as String/Array/Map do it
|
|
34
|
+
*
|
|
35
|
+
* `lib.es5.d.ts` gives an interface method no `this` parameter, so there is no
|
|
36
|
+
* receiver-carrying calling convention a first-class method value could be
|
|
37
|
+
* built from (`emit-prototype-string.ts`'s own comment states this). The
|
|
38
|
+
* `[[Get]]` therefore records which member was reached off which receiver and
|
|
39
|
+
* renders nothing; the call that follows renders the whole fused expression.
|
|
40
|
+
* `datePrototypeMethods` is the one authority for which keys may defer, so a
|
|
41
|
+
* member that defers is always a member `dateCallText` can render.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* The C++ type a Date is carried in.
|
|
45
|
+
*
|
|
46
|
+
* One constant, read by three places that must not disagree: `compiler.ts`
|
|
47
|
+
* installs it as the `DateDeclarationPolicy`'s answer, `types.ts` spells it
|
|
48
|
+
* from the carrier's own `native` field, and `isDateCarrier` below recognizes
|
|
49
|
+
* it again at every member access and construction.
|
|
50
|
+
*/
|
|
51
|
+
export const cppDateType = 'gea::runtime::Date';
|
|
52
|
+
/** Whether a carrier is a Date -- the `native-record-ref` whose stated native type is `gea::runtime::Date`. */
|
|
53
|
+
export const isDateCarrier = (representation) => representation.kind === 'native-record-ref' && representation.native === cppDateType;
|
|
54
|
+
/**
|
|
55
|
+
* Every argument of every Date member is a `number` -- ECMA-262 21.4.4 runs
|
|
56
|
+
* each one through ToNumber, and `lib.es5.d.ts` declares each `number`. An
|
|
57
|
+
* argument carrying anything else is refused by name rather than converted:
|
|
58
|
+
* the conversion this backend would have to render is ToNumber of a value
|
|
59
|
+
* whose carrier says it is not one, and answering NaN for it silently would
|
|
60
|
+
* turn a wrong argument into an Invalid Date instead of a diagnostic.
|
|
61
|
+
*/
|
|
62
|
+
const numericArgumentText = (ctx, argument, member, position) => {
|
|
63
|
+
const carrier = argument.representation;
|
|
64
|
+
if (carrier.kind === 'scalar' && carrier.domain === 'number')
|
|
65
|
+
return operandText(ctx, argument);
|
|
66
|
+
const converted = toNumberText(operandText(ctx, argument), carrier) ?? recordToNumberText(ctx, operandText(ctx, argument), carrier);
|
|
67
|
+
if (converted === null) {
|
|
68
|
+
throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"Date.prototype.${member}" argument ${position} carries "${representationKey(carrier)}", not a number scalar; ` +
|
|
69
|
+
'ECMA-262 21.4.4 applies ToNumber to it, and this backend states no such conversion here');
|
|
70
|
+
}
|
|
71
|
+
return converted;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* ToNumber of a compiler-laid-out record -- ECMA-262 7.1.4 step 2 through
|
|
75
|
+
* ToPrimitive with hint number (7.1.1.1): `valueOf` is called first when the
|
|
76
|
+
* record carries one, `toString` otherwise, and the primitive it returns is
|
|
77
|
+
* converted. A record whose method is not a zero-argument callable, or that
|
|
78
|
+
* carries neither, is `null` here: the former has a frame this cannot call
|
|
79
|
+
* without arguments, and the latter reaches `Object.prototype.toString`'s
|
|
80
|
+
* `"[object Object]"` -- NaN, but by way of a prototype chain this record
|
|
81
|
+
* does not carry, so it is refused rather than guessed.
|
|
82
|
+
*/
|
|
83
|
+
const recordToNumberText = (ctx, text, carrier) => {
|
|
84
|
+
// A `record` carries its fields inline; an anchored literal (a
|
|
85
|
+
// `native-record-ref` with no host native -- `{ valueOf: function () {
|
|
86
|
+
// return this.n } }`, anchored because its method reads `this`) names a
|
|
87
|
+
// shape whose layout the sealed table answers, through the same authority
|
|
88
|
+
// the struct bodies come from.
|
|
89
|
+
// (Asked of the deriver directly rather than through `records.ts`, which
|
|
90
|
+
// imports this renderer's own consumers -- a cycle Node resolves as a
|
|
91
|
+
// temporal-dead-zone crash at load.)
|
|
92
|
+
const body = carrier.kind === 'native-record-ref' && carrier.native === null ? ctx.deriver.layoutOf(carrier.shapeId) : null;
|
|
93
|
+
const fields = carrier.kind === 'record'
|
|
94
|
+
? carrier.fields
|
|
95
|
+
: body !== null && (body.kind === 'record' || body.kind === 'record-with-index')
|
|
96
|
+
? body.fields
|
|
97
|
+
: null;
|
|
98
|
+
if (fields === null)
|
|
99
|
+
return null;
|
|
100
|
+
for (const method of ['valueOf', 'toString']) {
|
|
101
|
+
const field = fields.find((candidate) => candidate.key === method && candidate.required);
|
|
102
|
+
if (!field)
|
|
103
|
+
continue;
|
|
104
|
+
const abi = field.value.kind === 'function-value-dispatch' || field.value.kind === 'function' ? field.value.abi : null;
|
|
105
|
+
if (abi === null)
|
|
106
|
+
return null;
|
|
107
|
+
// ToPrimitive calls the method with NO arguments. A convention whose only
|
|
108
|
+
// formal is the rest slot (a body reading `arguments` -- test262's
|
|
109
|
+
// `arg-coercion-order.js` records them) receives an empty pack, spelled as
|
|
110
|
+
// `virtual-methods.ts` spells an omitted rest: a fresh array of the slot's
|
|
111
|
+
// own element carrier. Any positional formal is a frame this cannot fill.
|
|
112
|
+
const rest = abi.restFrom === 0 && abi.parameters.length === 1 ? (abi.parameters[0] ?? null) : null;
|
|
113
|
+
if (rest !== null && rest.value.kind !== 'array-object')
|
|
114
|
+
return null;
|
|
115
|
+
if (rest === null && abi.parameters.length !== 0)
|
|
116
|
+
return null;
|
|
117
|
+
// A method reading `this` declares the receiver, and ToPrimitive calls it
|
|
118
|
+
// ON this very record: the argument is the receiver, so its own carrier
|
|
119
|
+
// must be the one the frame declares. Any other receiver is a frame this
|
|
120
|
+
// site cannot fill.
|
|
121
|
+
if (abi.receiver !== null && representationKey(abi.receiver) !== representationKey(carrier))
|
|
122
|
+
return null;
|
|
123
|
+
const actuals = [
|
|
124
|
+
...(abi.receiver === null ? [] : [text]),
|
|
125
|
+
...(rest === null || rest.value.kind !== 'array-object' ? [] : [`gea::makeRef<gea::ArrayObject<${cppTypeOf(rest.value.element)}>>()`])
|
|
126
|
+
];
|
|
127
|
+
const call = `${text}->${cppRecordFieldName(method)}.call(${actuals.join(', ')})`;
|
|
128
|
+
// A method answering nothing is still CALLED -- for its effects, and for
|
|
129
|
+
// the throw it may be -- and its result is ToNumber(undefined).
|
|
130
|
+
if (abi.result.kind === 'void')
|
|
131
|
+
return `(${call}, gea::host::detail::toNumberUndefined())`;
|
|
132
|
+
return toNumberText(call, abi.result);
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* A member taking no arguments at all -- every getter, and the string forms
|
|
138
|
+
* that are not locale-sensitive.
|
|
139
|
+
*
|
|
140
|
+
* An argument is refused rather than dropped. `d.getFullYear(1)` is legal
|
|
141
|
+
* TypeScript for none of these, so a call that passes one is a call this
|
|
142
|
+
* renderer is not reading correctly, and rendering it as the zero-argument
|
|
143
|
+
* form would hide that.
|
|
144
|
+
*/
|
|
145
|
+
const nullaryText = (_ctx, receiverText, args, member) => {
|
|
146
|
+
if (args.length !== 0) {
|
|
147
|
+
throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"Date.prototype.${member}" takes no arguments; this call passes ${args.length}`);
|
|
148
|
+
}
|
|
149
|
+
return `${receiverText}->${member}()`;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* A setter, whose trailing parameters are optional in `lib.es5.d.ts` and
|
|
153
|
+
* default to "keep the current field" in the C++ (each defaults to NaN, which
|
|
154
|
+
* `Date::setFields` reads as "keep" -- v1's own rule).
|
|
155
|
+
*
|
|
156
|
+
* An omitted trailing optional argument never reaches `operation.arguments`
|
|
157
|
+
* at all, so passing exactly what the call passes is what makes
|
|
158
|
+
* `d.setHours(1)` and `d.setHours(1, 2, 3, 4)` both render correctly. The
|
|
159
|
+
* ZERO-argument form is refused: `d.setDate()` is `ToNumber(undefined)`, which
|
|
160
|
+
* is NaN, which invalidates the date -- v1 renders that by defaulting its
|
|
161
|
+
* first parameter to NaN too, but a program that reaches it has almost
|
|
162
|
+
* certainly lost an argument, and this backend does not have the `undefined`
|
|
163
|
+
* operand to prove the call really meant it.
|
|
164
|
+
*/
|
|
165
|
+
const setterText = (maximum) => (ctx, receiverText, args, member) => {
|
|
166
|
+
if (args.length === 0) {
|
|
167
|
+
throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"Date.prototype.${member}" takes 1 to ${maximum} argument(s); this call passes none` +
|
|
168
|
+
' -- the argument-less form is ToNumber(undefined), which is an Invalid Date rather than this operation');
|
|
169
|
+
}
|
|
170
|
+
// An argument past the last the clause names is evaluated by the caller
|
|
171
|
+
// and never coerced: 21.4.4.23 step 2 onward reads exactly its own
|
|
172
|
+
// operands. Its operand is already a computed value here, so leaving it
|
|
173
|
+
// out of the frame is the whole of "ignored".
|
|
174
|
+
const received = args.slice(0, maximum);
|
|
175
|
+
// Every ToNumber runs in argument order, before the C++ member sees any
|
|
176
|
+
// of them (steps 2..5 of each setter), and a function call's argument
|
|
177
|
+
// evaluation order is unspecified in C++ -- so the conversions are
|
|
178
|
+
// sequenced as named locals. A frame of plain numbers keeps the direct
|
|
179
|
+
// spelling: nothing there can observe an order.
|
|
180
|
+
const numbers = received.map((argument, index) => numericArgumentText(ctx, argument, member, index));
|
|
181
|
+
if (received.every((argument) => argument.representation.kind === 'scalar' && argument.representation.domain === 'number')) {
|
|
182
|
+
return `${receiverText}->${member}(${numbers.join(', ')})`;
|
|
183
|
+
}
|
|
184
|
+
// The time value is read BEFORE any argument is coerced (each setter's
|
|
185
|
+
// step 3 `Let t be dateObject.[[DateValue]]` precedes its ToNumber steps;
|
|
186
|
+
// test262 `date-value-read-before-tonumber-when-date-is-{valid,invalid}.js`):
|
|
187
|
+
// a `valueOf` that calls `setTime` on this very date is observed by the
|
|
188
|
+
// coercion and forgotten by the setter, whose result derives from `t`. So
|
|
189
|
+
// `t` is read first and put back before the member computes from it -- and
|
|
190
|
+
// an invalid `t` returns NaN WITHOUT writing (step 5 precedes the store),
|
|
191
|
+
// so a time value the coercion installed on an Invalid Date stays. The two
|
|
192
|
+
// full-year setters are the exception the language states (21.4.4.21 step
|
|
193
|
+
// 5: "If t is NaN, set t to +0"): they proceed from the value read first,
|
|
194
|
+
// and the member computes +0 from the NaN put back.
|
|
195
|
+
const locals = numbers.map((number, index) => `const double __gea_n${index} = ${number}; `).join('');
|
|
196
|
+
return (`([&]() -> double { const double __gea_t = ${receiverText}->getTime(); ${locals}` +
|
|
197
|
+
`${member === 'setFullYear' || member === 'setUTCFullYear' ? '' : 'if (std::isnan(__gea_t)) return __gea_t; '}${receiverText}->setTime(__gea_t); ` +
|
|
198
|
+
`return ${receiverText}->${member}(${numbers.map((_, index) => `__gea_n${index}`).join(', ')}); })()`);
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* `toLocaleString` / `toLocaleDateString` / `toLocaleTimeString` --
|
|
202
|
+
* ECMA-262 21.4.4.38-40.
|
|
203
|
+
*
|
|
204
|
+
* The zero-argument form renders; a call passing `locales`/`options` refuses
|
|
205
|
+
* BY NAME. This runtime carries no ECMA-402 locale data, so honoring them is
|
|
206
|
+
* impossible, and accepting and ignoring them (which is what v1 does, through
|
|
207
|
+
* a variadic template) answers a different format than the program asked for
|
|
208
|
+
* -- a green result concealing a degraded path.
|
|
209
|
+
*/
|
|
210
|
+
const localeText = (_ctx, receiverText, args, member) => {
|
|
211
|
+
if (args.length !== 0) {
|
|
212
|
+
throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"Date.prototype.${member}" is implemented only in its argument-less form; this call passes ${args.length} ` +
|
|
213
|
+
'(`locales`/`options`), and this runtime carries no ECMA-402 locale data to honor them with -- accepting and ' +
|
|
214
|
+
'ignoring them would answer a different format than the call asked for');
|
|
215
|
+
}
|
|
216
|
+
return `${receiverText}->${member}()`;
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* `Date.prototype.toJSON` -- ECMA-262 21.4.4.37.
|
|
220
|
+
*
|
|
221
|
+
* Step 3 answers **null** when the time value is not finite, and step 4
|
|
222
|
+
* answers the ISO string otherwise -- so the member's real result type is
|
|
223
|
+
* `string | null`. `lib.es5.d.ts` declares it `string`, so the checker
|
|
224
|
+
* publishes a bare `string` carrier for every ordinary call, and `std::string`
|
|
225
|
+
* has no null. Rendering it there would answer `""` or `"null"` for an Invalid
|
|
226
|
+
* Date: a wrong answer rather than a missing one.
|
|
227
|
+
*
|
|
228
|
+
* The refusal is therefore conditional on the CARRIER the checker actually
|
|
229
|
+
* published, not on the member's name: a result carried as an optional over a
|
|
230
|
+
* string renders, because that carrier can hold the absence the clause
|
|
231
|
+
* specifies.
|
|
232
|
+
*
|
|
233
|
+
* MEASURED: with stock `lib.es5.d.ts` that branch is unreachable, and every
|
|
234
|
+
* direct `d.toJSON()` refuses. A `const s: string | null = d.toJSON()`
|
|
235
|
+
* annotation does NOT reach it -- the carrier published for the CALL is the
|
|
236
|
+
* declared `string`, and the annotation applies to the binding downstream of
|
|
237
|
+
* it. The branch is kept for a declaration that publishes the clause's real
|
|
238
|
+
* `string | null`, and is written here rather than left implicit so the
|
|
239
|
+
* refusal above stays a statement about the carrier and not about the member.
|
|
240
|
+
*
|
|
241
|
+
* `JSON.stringify(d)` is unaffected and answers node's bytes exactly: it never
|
|
242
|
+
* reaches this renderer, because the null is expressible in the DOCUMENT --
|
|
243
|
+
* `gea_runtime.h`'s own `gea_json_write` overload writes `null` for a
|
|
244
|
+
* non-finite time value.
|
|
245
|
+
*/
|
|
246
|
+
const toJsonText = (ctx, receiverText, args, result) => {
|
|
247
|
+
if (args.length > 1) {
|
|
248
|
+
throw createCppEmitBlockedError('host-invocation:Date.prototype.toJSON', `"Date.prototype.toJSON" takes at most one key argument; this call passes ${args.length}`);
|
|
249
|
+
}
|
|
250
|
+
if (result.kind === 'optional' && result.payload.kind === 'string') {
|
|
251
|
+
return `(std::isfinite(${receiverText}->getTime()) ? ${cppTypeOf(result)}(${receiverText}->toISOString()) : ${cppTypeOf(result)}())`;
|
|
252
|
+
}
|
|
253
|
+
void ctx;
|
|
254
|
+
throw createCppEmitBlockedError('host-invocation:Date.prototype.toJSON', `"Date.prototype.toJSON" publishes a "${representationKey(result)}" result, and ECMA-262 21.4.4.37 step 3 answers null for a ` +
|
|
255
|
+
'non-finite time value. `lib.es5.d.ts` declares the member `string`, which is a carrier with no null, so rendering it ' +
|
|
256
|
+
'would answer an empty string for an Invalid Date instead of the specified null. A call whose result is carried as an ' +
|
|
257
|
+
'optional over a string renders');
|
|
258
|
+
};
|
|
259
|
+
/** Every zero-argument getter, each named exactly as `gea::runtime::Date` spells it. */
|
|
260
|
+
export const dateGetters = [
|
|
261
|
+
'getTime',
|
|
262
|
+
'valueOf',
|
|
263
|
+
'getFullYear',
|
|
264
|
+
'getMonth',
|
|
265
|
+
'getDate',
|
|
266
|
+
'getDay',
|
|
267
|
+
'getHours',
|
|
268
|
+
'getMinutes',
|
|
269
|
+
'getSeconds',
|
|
270
|
+
'getMilliseconds',
|
|
271
|
+
'getTimezoneOffset',
|
|
272
|
+
'getUTCFullYear',
|
|
273
|
+
'getUTCMonth',
|
|
274
|
+
'getUTCDate',
|
|
275
|
+
'getUTCDay',
|
|
276
|
+
'getUTCHours',
|
|
277
|
+
'getUTCMinutes',
|
|
278
|
+
'getUTCSeconds',
|
|
279
|
+
'getUTCMilliseconds'
|
|
280
|
+
];
|
|
281
|
+
/** The zero-argument string forms. `toLocale*` are not here: they take arguments this backend refuses rather than ignores. */
|
|
282
|
+
export const dateStringForms = ['toISOString', 'toString', 'toDateString', 'toTimeString', 'toUTCString'];
|
|
283
|
+
/** Each setter, with the maximum number of arguments `lib.es5.d.ts` declares for it. */
|
|
284
|
+
export const dateSetters = new Map([
|
|
285
|
+
['setTime', 1],
|
|
286
|
+
['setFullYear', 3],
|
|
287
|
+
['setMonth', 2],
|
|
288
|
+
['setDate', 1],
|
|
289
|
+
['setHours', 4],
|
|
290
|
+
['setMinutes', 3],
|
|
291
|
+
['setSeconds', 2],
|
|
292
|
+
['setMilliseconds', 1],
|
|
293
|
+
['setUTCFullYear', 3],
|
|
294
|
+
['setUTCMonth', 2],
|
|
295
|
+
['setUTCDate', 1],
|
|
296
|
+
['setUTCHours', 4],
|
|
297
|
+
['setUTCMinutes', 3],
|
|
298
|
+
['setUTCSeconds', 2],
|
|
299
|
+
['setUTCMilliseconds', 1]
|
|
300
|
+
]);
|
|
301
|
+
const dateMethods = new Map([
|
|
302
|
+
...dateGetters.map((member) => [member, nullaryText]),
|
|
303
|
+
...dateStringForms.map((member) => [member, nullaryText]),
|
|
304
|
+
...[...dateSetters].map(([member, maximum]) => [member, setterText(maximum)]),
|
|
305
|
+
['toLocaleString', localeText],
|
|
306
|
+
['toLocaleDateString', localeText],
|
|
307
|
+
['toLocaleTimeString', localeText]
|
|
308
|
+
]);
|
|
309
|
+
/**
|
|
310
|
+
* The keys `dateMemberText` may defer -- one authority for "is this method
|
|
311
|
+
* implemented", exactly as `stringPrototypeMethods` is for its family.
|
|
312
|
+
*
|
|
313
|
+
* `toJSON` is deferred even though its ordinary carrier refuses: the refusal
|
|
314
|
+
* is a property of the CALL's published result, so it has to be reached at the
|
|
315
|
+
* call to be stated accurately, and refusing at the access would say "not
|
|
316
|
+
* implemented" about something that is.
|
|
317
|
+
*/
|
|
318
|
+
export const datePrototypeMethods = new Set([...dateMethods.keys(), 'toJSON']);
|
|
319
|
+
/**
|
|
320
|
+
* `Date.prototype` members this backend states no rendering for, each with the
|
|
321
|
+
* reason -- "not built yet" and "cannot be built without X" are different
|
|
322
|
+
* answers, and only the second tells you what to build.
|
|
323
|
+
*/
|
|
324
|
+
export const dateMemberRefusals = new Map([
|
|
325
|
+
[
|
|
326
|
+
'getYear',
|
|
327
|
+
'ECMA-262 B.2.3.1, an Annex B legacy member (the year minus 1900). `gea::runtime::Date` could carry it, but ' +
|
|
328
|
+
'`lib.es5.d.ts` does not declare it on `Date` at all, so no ordinary TypeScript program can reach it and there is ' +
|
|
329
|
+
'nothing here to be right about'
|
|
330
|
+
],
|
|
331
|
+
['setYear', 'ECMA-262 B.2.3.2, the Annex B twin of `getYear` and undeclared in `lib.es5.d.ts` for the same reason'],
|
|
332
|
+
[
|
|
333
|
+
'toGMTString',
|
|
334
|
+
'ECMA-262 B.2.3.3, an Annex B alias of `toUTCString` that `lib.es5.d.ts` does not declare; write `toUTCString`, which is implemented'
|
|
335
|
+
],
|
|
336
|
+
[
|
|
337
|
+
'constructor',
|
|
338
|
+
"reading a Date's constructor yields the `Date` constructor OBJECT, and this backend has no first-class value for a " +
|
|
339
|
+
'native constructor -- `new Date(...)` is rendered at the construction, not through a materialized callable'
|
|
340
|
+
]
|
|
341
|
+
]);
|
|
342
|
+
/**
|
|
343
|
+
* A `[[Get]]` off a Date receiver: defer a claimed method, refuse anything
|
|
344
|
+
* else by name.
|
|
345
|
+
*
|
|
346
|
+
* A NON-constant key answers `null` rather than refusing, so the access falls
|
|
347
|
+
* through to `emit-dynamic-properties.ts`'s native sidecar -- `d[k]` on a Date
|
|
348
|
+
* keeps the native carrier and reads the expando table keyed on this object's
|
|
349
|
+
* own address, which is the sanctioned answer for a native type that needs
|
|
350
|
+
* arbitrary properties (`gea::runtime::regex::Pattern` is the reference
|
|
351
|
+
* implementation, and `gea::runtime::Date` declares the same
|
|
352
|
+
* `gea_readOwnField`/`gea_writeOwnField`/`gea_ownFieldKeys` protocol). Boxing
|
|
353
|
+
* the Date to make such an access compile is the forbidden shortcut.
|
|
354
|
+
*/
|
|
355
|
+
/** Whether a Date member read is a deferred `Date.prototype` method read. Stated once; the renderer and the prototype-read walk both ask it. */
|
|
356
|
+
export const deferredDateMethodClaim = (
|
|
357
|
+
// Every caller passes `ctx.staticKeyTexts`; named for that so nobody hands
|
|
358
|
+
// this the render-widened `ctx.constantTexts` by mistake.
|
|
359
|
+
staticKeyTexts, receiver, key) => {
|
|
360
|
+
if (!isDateCarrier(receiver.representation))
|
|
361
|
+
return null;
|
|
362
|
+
const staticKey = staticKeyTexts.get(key.value);
|
|
363
|
+
if (staticKey === undefined || !datePrototypeMethods.has(staticKey))
|
|
364
|
+
return null;
|
|
365
|
+
return { receiverKind: 'date', member: staticKey, receiver: { kind: 'operand', operand: receiver }, receiverElement: null };
|
|
366
|
+
};
|
|
367
|
+
export const dateMemberText = (ctx, receiver, key, result) => {
|
|
368
|
+
const carrier = receiver.representation;
|
|
369
|
+
if (!isDateCarrier(carrier))
|
|
370
|
+
return null;
|
|
371
|
+
// A claim, not a fold: this decides whether the access is a STATIC member at
|
|
372
|
+
// all (falls through to the dynamic sidecar below when it is not), so it
|
|
373
|
+
// must not see a key text `constantTexts` only holds because the render
|
|
374
|
+
// minted it (e.g. a folded `typeof` result reaching here via `d[typeof x]`).
|
|
375
|
+
const staticKey = ctx.staticKeyTexts.get(key.value);
|
|
376
|
+
if (staticKey === undefined)
|
|
377
|
+
return null;
|
|
378
|
+
if (deferredDateMethodClaim(ctx.staticKeyTexts, receiver, key) === null) {
|
|
379
|
+
const stated = dateMemberRefusals.get(staticKey);
|
|
380
|
+
throw createCppEmitBlockedError(`property-access:${representationKey(carrier)}:get:false`, stated !== undefined
|
|
381
|
+
? `"${staticKey}" is a Date member this backend states no rendering for: ${stated}`
|
|
382
|
+
: `"${staticKey}" is not a member of \`Date.prototype\` this backend implements -- only ` +
|
|
383
|
+
`${[...datePrototypeMethods].sort().join(', ')} are`);
|
|
384
|
+
}
|
|
385
|
+
if (carrier.ownership !== 'shared-refcount') {
|
|
386
|
+
throw createCppEmitBlockedError(`host-invocation:Date.prototype.${staticKey}`, `a Date receiver carries ownership "${carrier.ownership}"; a Date is a MUTABLE object whose setters must be observable ` +
|
|
387
|
+
'through every reference to it, so this backend renders member calls only through the shared identity');
|
|
388
|
+
}
|
|
389
|
+
if (result === null) {
|
|
390
|
+
throw createCppEmitBlockedError(`host-invocation:Date.prototype.${staticKey}`, `"${staticKey}" is a Date.prototype method, and this access publishes no value for its call to consume`);
|
|
391
|
+
}
|
|
392
|
+
// The read itself is recorded by the prototype-read walk, which asked the
|
|
393
|
+
// same claim before this body rendered.
|
|
394
|
+
return '';
|
|
395
|
+
};
|
|
396
|
+
/** The call text for a deferred `Date.prototype` read. */
|
|
397
|
+
export const dateCallText = (ctx, member, receiverText, operation) => {
|
|
398
|
+
if (member === 'toJSON') {
|
|
399
|
+
// A call with no published result cannot be asked what carrier it means to
|
|
400
|
+
// hold the ISO string in, and `toJSON`'s whole refusal is about that
|
|
401
|
+
// carrier (see `toJsonText`), so an unpublished one refuses rather than
|
|
402
|
+
// being guessed at.
|
|
403
|
+
if (!operation.result) {
|
|
404
|
+
throw createCppEmitBlockedError('host-invocation:Date.prototype.toJSON', '"Date.prototype.toJSON" publishes no result, and its rendering is decided by the result carrier');
|
|
405
|
+
}
|
|
406
|
+
return toJsonText(ctx, receiverText, operation.arguments, operation.result.representation);
|
|
407
|
+
}
|
|
408
|
+
const render = dateMethods.get(member);
|
|
409
|
+
if (!render) {
|
|
410
|
+
throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"${member}" was recorded as a deferred Date.prototype read but this file renders no call for it`);
|
|
411
|
+
}
|
|
412
|
+
return render(ctx, receiverText, operation.arguments, member);
|
|
413
|
+
};
|
|
414
|
+
/**
|
|
415
|
+
* `new Date(...)` -- ECMA-262 21.4.2.1.
|
|
416
|
+
*
|
|
417
|
+
* The fourth member of `emit-callable.ts`'s `emitTypedArrayConstruct` /
|
|
418
|
+
* `emitArrayConstruct` / `emitKeyedCollectionConstruct` family, and here for
|
|
419
|
+
* the identical structural reason: `DateConstructor`'s checker overload set is
|
|
420
|
+
* `new ()`, `new (value: number | string)`, `new (value: number | string |
|
|
421
|
+
* Date)` and `new (year, monthIndex, ...)`, which have no single physical
|
|
422
|
+
* frame, so `representation/host-abi.ts`'s `widestSubsumingAbi` correctly
|
|
423
|
+
* refuses to join them and `derive.ts` leaves `.construct` null. This reads
|
|
424
|
+
* the construction's own arguments instead.
|
|
425
|
+
*
|
|
426
|
+
* Four forms render, one per constructor `gea::runtime::Date` declares:
|
|
427
|
+
* zero arguments (now), one number (a time value), one string (parsed), and
|
|
428
|
+
* two-to-seven numbers (local calendar components). `new Date(someDate)` --
|
|
429
|
+
* the copy overload -- is refused BY NAME rather than rendered as a copy: it
|
|
430
|
+
* is `ToPrimitive(value)` per 21.4.2.1 step 4, and a shared_ptr copy would
|
|
431
|
+
* alias the ORIGINAL, so a mutation through one would be observable through
|
|
432
|
+
* the other. That is a silently different program, not a missing one.
|
|
433
|
+
*/
|
|
434
|
+
export const emitDateConstruct = (ctx, lines, operation, result) => {
|
|
435
|
+
if (result.ownership !== 'shared-refcount') {
|
|
436
|
+
throw createCppEmitBlockedError('host-invocation:Date.construct', `a Date allocation carries ownership "${result.ownership}", but this emitter only spells std::make_shared for "shared-refcount"`);
|
|
437
|
+
}
|
|
438
|
+
const name = defineValue(ctx, operation.result);
|
|
439
|
+
const args = operation.arguments;
|
|
440
|
+
if (args.length === 0) {
|
|
441
|
+
lines.push(`${name} = gea::makeRef<${cppDateType}>();`);
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
const first = args[0];
|
|
445
|
+
if (args.length === 1 && first) {
|
|
446
|
+
const carrier = first.representation;
|
|
447
|
+
if (carrier.kind === 'string') {
|
|
448
|
+
lines.push(`${name} = gea::makeRef<${cppDateType}>(${operandText(ctx, first)});`);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
if (carrier.kind === 'scalar' && carrier.domain === 'number') {
|
|
452
|
+
lines.push(`${name} = gea::makeRef<${cppDateType}>(${operandText(ctx, first)});`);
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
throw createCppEmitBlockedError('host-invocation:Date.construct', `constructs a Date from a single "${representationKey(carrier)}" argument; ECMA-262 21.4.2.1 step 4 applies ` +
|
|
456
|
+
'ToPrimitive to it, and only a number (a time value) and a string (parsed) are rendered here -- `new Date(otherDate)` ' +
|
|
457
|
+
'in particular is refused rather than rendered as a pointer copy, which would ALIAS the original instead of copying it');
|
|
458
|
+
}
|
|
459
|
+
if (args.length > 7) {
|
|
460
|
+
throw createCppEmitBlockedError('host-invocation:Date.construct', `constructs a Date from ${args.length} arguments; ECMA-262 21.4.2.1 declares at most seven (year, monthIndex, date, hours, minutes, seconds, ms)`);
|
|
461
|
+
}
|
|
462
|
+
const components = args.map((argument, index) => {
|
|
463
|
+
const carrier = argument.representation;
|
|
464
|
+
if (carrier.kind !== 'scalar' || carrier.domain !== 'number') {
|
|
465
|
+
throw createCppEmitBlockedError('host-invocation:Date.construct', `constructs a Date whose component ${index} carries "${representationKey(carrier)}", not a number scalar; ` +
|
|
466
|
+
'the calendar-component form of ECMA-262 21.4.2.1 applies ToNumber to each, and this backend states no such conversion here');
|
|
467
|
+
}
|
|
468
|
+
return operandText(ctx, argument);
|
|
469
|
+
});
|
|
470
|
+
lines.push(`${name} = gea::makeRef<${cppDateType}>(${components.join(', ')});`);
|
|
471
|
+
};
|
|
472
|
+
/**
|
|
473
|
+
* `Date.parse(s)` and `Date.UTC(...)` -- ECMA-262 21.4.3.2 / 21.4.3.4.
|
|
474
|
+
*
|
|
475
|
+
* Registered as the `DateConstructor` protocol's call-site renderer
|
|
476
|
+
* (`emit-host-invoke.ts`'s `hostMemberRenderers`), for the reason that
|
|
477
|
+
* mechanism exists: `Date.UTC` takes one to seven arguments, and the fixed
|
|
478
|
+
* `arity` a `hostMembers` template row states cannot express that.
|
|
479
|
+
*
|
|
480
|
+
* `Date.now()` is deliberately NOT here. It is a real readable
|
|
481
|
+
* `gea::CallableObject<double()>` in `gea_runtime.h`, so its row stays a
|
|
482
|
+
* `property` and its call goes through that callable carrier -- rendering it
|
|
483
|
+
* as a free function here would be a second spelling of a member that already
|
|
484
|
+
* has one.
|
|
485
|
+
*/
|
|
486
|
+
export const dateConstructorCallText = (ctx, member, operation) => {
|
|
487
|
+
if (member === 'parse') {
|
|
488
|
+
const source = operation.arguments[0];
|
|
489
|
+
if (operation.arguments.length !== 1 || !source) {
|
|
490
|
+
throw createCppEmitBlockedError('host-member-call:DateConstructor.parse', `"Date.parse" takes one string argument (ECMA-262 21.4.3.2); this call passes ${operation.arguments.length}`);
|
|
491
|
+
}
|
|
492
|
+
if (source.representation.kind !== 'string') {
|
|
493
|
+
throw createCppEmitBlockedError('host-member-call:DateConstructor.parse', `"Date.parse" argument 0 carries "${representationKey(source.representation)}", not a string; 21.4.3.2 applies ToString to it, ` +
|
|
494
|
+
'and this backend states no such conversion here');
|
|
495
|
+
}
|
|
496
|
+
return `${cppDateType}::parse(${operandText(ctx, source)})`;
|
|
497
|
+
}
|
|
498
|
+
if (member === 'UTC') {
|
|
499
|
+
const args = operation.arguments;
|
|
500
|
+
if (args.length === 0 || args.length > 7) {
|
|
501
|
+
throw createCppEmitBlockedError('host-member-call:DateConstructor.UTC', `"Date.UTC" takes one to seven arguments (ECMA-262 21.4.3.4); this call passes ${args.length}`);
|
|
502
|
+
}
|
|
503
|
+
const components = args.map((argument, index) => {
|
|
504
|
+
const carrier = argument.representation;
|
|
505
|
+
if (carrier.kind !== 'scalar' || carrier.domain !== 'number') {
|
|
506
|
+
throw createCppEmitBlockedError('host-member-call:DateConstructor.UTC', `"Date.UTC" argument ${index} carries "${representationKey(carrier)}", not a number scalar; 21.4.3.4 applies ToNumber to each, ` +
|
|
507
|
+
'and this backend states no such conversion here');
|
|
508
|
+
}
|
|
509
|
+
return operandText(ctx, argument);
|
|
510
|
+
});
|
|
511
|
+
return `${cppDateType}::UTC(${components.join(', ')})`;
|
|
512
|
+
}
|
|
513
|
+
throw createCppEmitBlockedError(`host-member-call:DateConstructor.${member}`, `"DateConstructor.${member}" is claimed with a call-site spelling, and only "parse" and "UTC" have one here ` +
|
|
514
|
+
'-- `now` is a readable callable and renders through its own carrier');
|
|
515
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IrOperand } from '../../../ir/model.js';
|
|
2
|
+
import type { IrValueId } from '../../../identity/ids.js';
|
|
3
|
+
import type { EmitContext, PrototypeMethodRead } from '../emit-context.js';
|
|
4
|
+
export declare const deferredNativeErrorMethodClaim: (staticKeyTexts: ReadonlyMap<IrValueId, string>, receiver: IrOperand, key: IrOperand) => PrototypeMethodRead | null;
|
|
5
|
+
/**
|
|
6
|
+
* The read half: an Error's `toString` produces no C++ of its own and fuses
|
|
7
|
+
* with the call that follows, exactly as a Date's or a string's method read
|
|
8
|
+
* does. A claimed read that publishes no value has no call to fuse WITH, so
|
|
9
|
+
* it refuses by name rather than rendering nothing into a cell nobody wrote.
|
|
10
|
+
*/
|
|
11
|
+
export declare const nativeErrorMemberText: (ctx: EmitContext, receiver: IrOperand, key: IrOperand, result: IrValueId | null) => string | null;
|
|
12
|
+
/** The call half, fused with the read above. */
|
|
13
|
+
export declare const nativeErrorCallText: (member: string, receiverText: string) => string;
|