@geastack/compiler 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +149 -0
- package/dist/cli-analyze.d.ts +1 -0
- package/dist/cli-analyze.js +61 -0
- package/dist/cli-coverage.d.ts +1 -0
- package/dist/cli-coverage.js +329 -0
- package/dist/cli-emit.d.ts +10 -0
- package/dist/cli-emit.js +398 -0
- package/dist/cli-module-graph.d.ts +18 -0
- package/dist/cli-module-graph.js +123 -0
- package/dist/cli-package-source.d.ts +5 -0
- package/dist/cli-package-source.js +116 -0
- package/dist/cli-project.d.ts +2 -0
- package/dist/cli-project.js +60 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +199 -0
- package/dist/compiler.d.ts +228 -0
- package/dist/compiler.js +1029 -0
- package/dist/conversion/algebra.d.ts +218 -0
- package/dist/conversion/algebra.js +155 -0
- package/dist/conversion/build.d.ts +67 -0
- package/dist/conversion/build.js +1378 -0
- package/dist/conversion/derive.d.ts +37 -0
- package/dist/conversion/derive.js +260 -0
- package/dist/conversion/graph-validation.d.ts +8 -0
- package/dist/conversion/graph-validation.js +97 -0
- package/dist/conversion/native-callable-adapter.d.ts +13 -0
- package/dist/conversion/native-callable-adapter.js +53 -0
- package/dist/conversion/native-class-reference.d.ts +12 -0
- package/dist/conversion/native-class-reference.js +39 -0
- package/dist/conversion/native-payload-transport.d.ts +25 -0
- package/dist/conversion/native-payload-transport.js +33 -0
- package/dist/conversion/native-selection.d.ts +49 -0
- package/dist/conversion/native-selection.js +135 -0
- package/dist/conversion/native-sum.d.ts +42 -0
- package/dist/conversion/native-sum.js +115 -0
- package/dist/conversion/nodes.d.ts +55 -0
- package/dist/conversion/nodes.js +91 -0
- package/dist/conversion/operand-view.d.ts +14 -0
- package/dist/conversion/operand-view.js +20 -0
- package/dist/conversion/record-view.d.ts +157 -0
- package/dist/conversion/record-view.js +273 -0
- package/dist/conversion/registry.d.ts +217 -0
- package/dist/conversion/registry.js +1 -0
- package/dist/diagnostics/model.d.ts +76 -0
- package/dist/diagnostics/model.js +60 -0
- package/dist/diagnostics/sweep.d.ts +31 -0
- package/dist/diagnostics/sweep.js +112 -0
- package/dist/identity/ids.d.ts +179 -0
- package/dist/identity/ids.js +212 -0
- package/dist/ir/absent-class-arm.d.ts +48 -0
- package/dist/ir/absent-class-arm.js +157 -0
- package/dist/ir/borrow-effects.d.ts +23 -0
- package/dist/ir/borrow-effects.js +151 -0
- package/dist/ir/borrowed-call-arguments.d.ts +40 -0
- package/dist/ir/borrowed-call-arguments.js +117 -0
- package/dist/ir/build.d.ts +168 -0
- package/dist/ir/build.js +459 -0
- package/dist/ir/call-dispatch.d.ts +38 -0
- package/dist/ir/call-dispatch.js +502 -0
- package/dist/ir/call-entry.d.ts +142 -0
- package/dist/ir/call-entry.js +386 -0
- package/dist/ir/callable-class-flow.d.ts +27 -0
- package/dist/ir/callable-class-flow.js +1386 -0
- package/dist/ir/callable-field-slots.d.ts +22 -0
- package/dist/ir/callable-field-slots.js +166 -0
- package/dist/ir/callable-identity-demand.d.ts +52 -0
- package/dist/ir/callable-identity-demand.js +460 -0
- package/dist/ir/callable-member-candidates.d.ts +9 -0
- package/dist/ir/callable-member-candidates.js +39 -0
- package/dist/ir/callable-records.d.ts +21 -0
- package/dist/ir/callable-records.js +411 -0
- package/dist/ir/captures.d.ts +26 -0
- package/dist/ir/captures.js +335 -0
- package/dist/ir/certificate.d.ts +45 -0
- package/dist/ir/certificate.js +47 -0
- package/dist/ir/certify/carrier-keys.d.ts +73 -0
- package/dist/ir/certify/carrier-keys.js +221 -0
- package/dist/ir/certify/function-source.d.ts +4 -0
- package/dist/ir/certify/function-source.js +28 -0
- package/dist/ir/certify/has-property-key.d.ts +88 -0
- package/dist/ir/certify/has-property-key.js +116 -0
- package/dist/ir/certify/instanceof-key.d.ts +24 -0
- package/dist/ir/certify/instanceof-key.js +35 -0
- package/dist/ir/certify/property-access-keys.d.ts +172 -0
- package/dist/ir/certify/property-access-keys.js +291 -0
- package/dist/ir/certify/property-access.d.ts +3 -0
- package/dist/ir/certify/property-access.js +597 -0
- package/dist/ir/certify/runtime-helper.d.ts +3 -0
- package/dist/ir/certify/runtime-helper.js +326 -0
- package/dist/ir/certify/typeof-operand.d.ts +14 -0
- package/dist/ir/certify/typeof-operand.js +16 -0
- package/dist/ir/certify.d.ts +123 -0
- package/dist/ir/certify.js +481 -0
- package/dist/ir/class-evaluation.d.ts +26 -0
- package/dist/ir/class-evaluation.js +50 -0
- package/dist/ir/class-static-fields.d.ts +60 -0
- package/dist/ir/class-static-fields.js +108 -0
- package/dist/ir/construct-entry.d.ts +26 -0
- package/dist/ir/construct-entry.js +117 -0
- package/dist/ir/dead-values.d.ts +90 -0
- package/dist/ir/dead-values.js +184 -0
- package/dist/ir/deferral.d.ts +99 -0
- package/dist/ir/deferral.js +409 -0
- package/dist/ir/dense-loops.d.ts +230 -0
- package/dist/ir/dense-loops.js +697 -0
- package/dist/ir/dominance.d.ts +82 -0
- package/dist/ir/dominance.js +268 -0
- package/dist/ir/emission-representations.d.ts +71 -0
- package/dist/ir/emission-representations.js +350 -0
- package/dist/ir/facts.d.ts +218 -0
- package/dist/ir/facts.js +181 -0
- package/dist/ir/fixed-data-definition.d.ts +19 -0
- package/dist/ir/fixed-data-definition.js +49 -0
- package/dist/ir/generator-split.d.ts +38 -0
- package/dist/ir/generator-split.js +329 -0
- package/dist/ir/hoist.d.ts +55 -0
- package/dist/ir/hoist.js +375 -0
- package/dist/ir/instantiation.d.ts +61 -0
- package/dist/ir/instantiation.js +137 -0
- package/dist/ir/integer-storage.d.ts +170 -0
- package/dist/ir/integer-storage.js +822 -0
- package/dist/ir/integers.d.ts +161 -0
- package/dist/ir/integers.js +539 -0
- package/dist/ir/integrity-restrictions.d.ts +50 -0
- package/dist/ir/integrity-restrictions.js +118 -0
- package/dist/ir/local-iterators.d.ts +4 -0
- package/dist/ir/local-iterators.js +27 -0
- package/dist/ir/lower-allocation.d.ts +4 -0
- package/dist/ir/lower-allocation.js +325 -0
- package/dist/ir/lower-completion.d.ts +15 -0
- package/dist/ir/lower-completion.js +25 -0
- package/dist/ir/lower-destructuring.d.ts +5 -0
- package/dist/ir/lower-destructuring.js +693 -0
- package/dist/ir/lower-element.d.ts +29 -0
- package/dist/ir/lower-element.js +111 -0
- package/dist/ir/lower-exceptions.d.ts +47 -0
- package/dist/ir/lower-exceptions.js +92 -0
- package/dist/ir/lower-flow.d.ts +137 -0
- package/dist/ir/lower-flow.js +600 -0
- package/dist/ir/lower-graph.d.ts +218 -0
- package/dist/ir/lower-graph.js +687 -0
- package/dist/ir/lower-invocation.d.ts +4 -0
- package/dist/ir/lower-invocation.js +514 -0
- package/dist/ir/lower-narrow.d.ts +53 -0
- package/dist/ir/lower-narrow.js +320 -0
- package/dist/ir/lower-operands.d.ts +272 -0
- package/dist/ir/lower-operands.js +461 -0
- package/dist/ir/lower-property.d.ts +21 -0
- package/dist/ir/lower-property.js +132 -0
- package/dist/ir/lower-protocol.d.ts +11 -0
- package/dist/ir/lower-protocol.js +118 -0
- package/dist/ir/lower-short-circuit.d.ts +41 -0
- package/dist/ir/lower-short-circuit.js +63 -0
- package/dist/ir/lower.d.ts +82 -0
- package/dist/ir/lower.js +1346 -0
- package/dist/ir/model.d.ts +1474 -0
- package/dist/ir/model.js +6 -0
- package/dist/ir/native-absent-property.d.ts +3 -0
- package/dist/ir/native-absent-property.js +13 -0
- package/dist/ir/native-array-transport.d.ts +7 -0
- package/dist/ir/native-array-transport.js +46 -0
- package/dist/ir/native-callable-bind.d.ts +9 -0
- package/dist/ir/native-callable-bind.js +30 -0
- package/dist/ir/native-carrier-predicate.d.ts +34 -0
- package/dist/ir/native-carrier-predicate.js +49 -0
- package/dist/ir/native-class-accessor.d.ts +18 -0
- package/dist/ir/native-class-accessor.js +52 -0
- package/dist/ir/native-class-construction.d.ts +16 -0
- package/dist/ir/native-class-construction.js +71 -0
- package/dist/ir/native-class-initialization.d.ts +15 -0
- package/dist/ir/native-class-initialization.js +56 -0
- package/dist/ir/native-class-origins.d.ts +13 -0
- package/dist/ir/native-class-origins.js +237 -0
- package/dist/ir/native-dictionary-transport.d.ts +6 -0
- package/dist/ir/native-dictionary-transport.js +37 -0
- package/dist/ir/native-enumeration.d.ts +14 -0
- package/dist/ir/native-enumeration.js +26 -0
- package/dist/ir/native-equality.d.ts +10 -0
- package/dist/ir/native-equality.js +18 -0
- package/dist/ir/native-field-owner.d.ts +37 -0
- package/dist/ir/native-field-owner.js +183 -0
- package/dist/ir/native-fixed-layout.d.ts +41 -0
- package/dist/ir/native-fixed-layout.js +232 -0
- package/dist/ir/native-host-construction.d.ts +53 -0
- package/dist/ir/native-host-construction.js +62 -0
- package/dist/ir/native-key-query.d.ts +4 -0
- package/dist/ir/native-key-query.js +38 -0
- package/dist/ir/native-merge-transport.d.ts +25 -0
- package/dist/ir/native-merge-transport.js +71 -0
- package/dist/ir/native-record-index-transport.d.ts +11 -0
- package/dist/ir/native-record-index-transport.js +34 -0
- package/dist/ir/native-record-index.d.ts +12 -0
- package/dist/ir/native-record-index.js +27 -0
- package/dist/ir/native-reflect-field.d.ts +5 -0
- package/dist/ir/native-reflect-field.js +33 -0
- package/dist/ir/native-sequence-transport.d.ts +7 -0
- package/dist/ir/native-sequence-transport.js +53 -0
- package/dist/ir/numeric-intrinsics.d.ts +13 -0
- package/dist/ir/numeric-intrinsics.js +57 -0
- package/dist/ir/object-value-conversions.d.ts +20 -0
- package/dist/ir/object-value-conversions.js +50 -0
- package/dist/ir/physical-class-reflection.d.ts +9 -0
- package/dist/ir/physical-class-reflection.js +57 -0
- package/dist/ir/presence-proof.d.ts +42 -0
- package/dist/ir/presence-proof.js +490 -0
- package/dist/ir/program-facts.d.ts +106 -0
- package/dist/ir/program-facts.js +319 -0
- package/dist/ir/proven-branches.d.ts +16 -0
- package/dist/ir/proven-branches.js +219 -0
- package/dist/ir/queries.d.ts +41 -0
- package/dist/ir/queries.js +213 -0
- package/dist/ir/reflection-demand.d.ts +64 -0
- package/dist/ir/reflection-demand.js +1394 -0
- package/dist/ir/refusal.d.ts +43 -0
- package/dist/ir/refusal.js +28 -0
- package/dist/ir/shake.d.ts +37 -0
- package/dist/ir/shake.js +1078 -0
- package/dist/ir/static-callables.d.ts +11 -0
- package/dist/ir/static-callables.js +163 -0
- package/dist/ir/string-layout-reuse.d.ts +13 -0
- package/dist/ir/string-layout-reuse.js +39 -0
- package/dist/ir/string-length-reuse.d.ts +8 -0
- package/dist/ir/string-length-reuse.js +47 -0
- package/dist/ir/transfer.d.ts +78 -0
- package/dist/ir/transfer.js +270 -0
- package/dist/ir/type-query-results.d.ts +25 -0
- package/dist/ir/type-query-results.js +96 -0
- package/dist/ir/typed-property-access.d.ts +100 -0
- package/dist/ir/typed-property-access.js +161 -0
- package/dist/ir/verify.d.ts +19 -0
- package/dist/ir/verify.js +355 -0
- package/dist/plugins/apple/constructors.d.ts +112 -0
- package/dist/plugins/apple/constructors.js +217 -0
- package/dist/plugins/apple/host.d.ts +181 -0
- package/dist/plugins/apple/host.js +262 -0
- package/dist/plugins/apple/jsx.d.ts +2 -0
- package/dist/plugins/apple/jsx.js +293 -0
- package/dist/plugins/apple/members.d.ts +16 -0
- package/dist/plugins/apple/members.js +190 -0
- package/dist/plugins/apple/plugin.d.ts +2 -0
- package/dist/plugins/apple/plugin.js +156 -0
- package/dist/plugins/gea/component-classes.d.ts +25 -0
- package/dist/plugins/gea/component-classes.js +162 -0
- package/dist/plugins/gea/component-inline.d.ts +13 -0
- package/dist/plugins/gea/component-inline.js +532 -0
- package/dist/plugins/gea/constructors.d.ts +23 -0
- package/dist/plugins/gea/constructors.js +100 -0
- package/dist/plugins/gea/contract.d.ts +150 -0
- package/dist/plugins/gea/contract.js +195 -0
- package/dist/plugins/gea/element-ref.d.ts +31 -0
- package/dist/plugins/gea/element-ref.js +45 -0
- package/dist/plugins/gea/host.d.ts +520 -0
- package/dist/plugins/gea/host.js +762 -0
- package/dist/plugins/gea/lower.d.ts +6 -0
- package/dist/plugins/gea/lower.js +195 -0
- package/dist/plugins/gea/members.d.ts +22 -0
- package/dist/plugins/gea/members.js +221 -0
- package/dist/plugins/gea/plugin.d.ts +22 -0
- package/dist/plugins/gea/plugin.js +307 -0
- package/dist/plugins/gea/prelude.d.ts +78 -0
- package/dist/plugins/gea/prelude.js +153 -0
- package/dist/plugins/gea/producer.d.ts +5 -0
- package/dist/plugins/gea/producer.js +52 -0
- package/dist/plugins/gea/reactive-slots.d.ts +49 -0
- package/dist/plugins/gea/reactive-slots.js +578 -0
- package/dist/plugins/gea/render-bridge.d.ts +6 -0
- package/dist/plugins/gea/render-bridge.js +281 -0
- package/dist/plugins/gea/slots.d.ts +15 -0
- package/dist/plugins/gea/slots.js +36 -0
- package/dist/plugins/gea/template-analysis.d.ts +151 -0
- package/dist/plugins/gea/template-analysis.js +346 -0
- package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
- package/dist/plugins/gea/user-agent-styles.js +94 -0
- package/dist/plugins/installed.d.ts +19 -0
- package/dist/plugins/installed.js +21 -0
- package/dist/plugins/load.d.ts +7 -0
- package/dist/plugins/load.js +207 -0
- package/dist/plugins/model.d.ts +735 -0
- package/dist/plugins/model.js +47 -0
- package/dist/plugins/webgl/host.d.ts +77 -0
- package/dist/plugins/webgl/host.js +162 -0
- package/dist/plugins/webgl/plugin.d.ts +40 -0
- package/dist/plugins/webgl/plugin.js +99 -0
- package/dist/preflight/obligations.d.ts +206 -0
- package/dist/preflight/obligations.js +36 -0
- package/dist/preflight/report.d.ts +20 -0
- package/dist/preflight/report.js +61 -0
- package/dist/preflight/run.d.ts +39 -0
- package/dist/preflight/run.js +403 -0
- package/dist/project-preparation.d.ts +33 -0
- package/dist/project-preparation.js +314 -0
- package/dist/projection/abi.d.ts +82 -0
- package/dist/projection/abi.js +349 -0
- package/dist/projection/apply-arguments.d.ts +12 -0
- package/dist/projection/apply-arguments.js +20 -0
- package/dist/projection/bindings.d.ts +250 -0
- package/dist/projection/bindings.js +340 -0
- package/dist/projection/callee.d.ts +196 -0
- package/dist/projection/callee.js +444 -0
- package/dist/projection/class-property-presence.d.ts +28 -0
- package/dist/projection/class-property-presence.js +58 -0
- package/dist/projection/class-prototype.d.ts +5 -0
- package/dist/projection/class-prototype.js +23 -0
- package/dist/projection/class-storage.d.ts +26 -0
- package/dist/projection/class-storage.js +236 -0
- package/dist/projection/classes.d.ts +283 -0
- package/dist/projection/classes.js +944 -0
- package/dist/projection/coercions.d.ts +20 -0
- package/dist/projection/coercions.js +33 -0
- package/dist/projection/dispatch.d.ts +167 -0
- package/dist/projection/dispatch.js +379 -0
- package/dist/projection/fields.d.ts +123 -0
- package/dist/projection/fields.js +383 -0
- package/dist/projection/instance-test.d.ts +78 -0
- package/dist/projection/instance-test.js +156 -0
- package/dist/projection/slots.d.ts +146 -0
- package/dist/projection/slots.js +663 -0
- package/dist/projection/synthesized-abi.d.ts +61 -0
- package/dist/projection/synthesized-abi.js +94 -0
- package/dist/representation/array-index.d.ts +14 -0
- package/dist/representation/array-index.js +17 -0
- package/dist/representation/callable-object.d.ts +3 -0
- package/dist/representation/callable-object.js +6 -0
- package/dist/representation/collections.d.ts +84 -0
- package/dist/representation/collections.js +139 -0
- package/dist/representation/derive.d.ts +159 -0
- package/dist/representation/derive.js +2546 -0
- package/dist/representation/difference.d.ts +30 -0
- package/dist/representation/difference.js +240 -0
- package/dist/representation/field-descriptor-policy.d.ts +19 -0
- package/dist/representation/field-descriptor-policy.js +39 -0
- package/dist/representation/function-constructor.d.ts +13 -0
- package/dist/representation/function-constructor.js +9 -0
- package/dist/representation/host-abi.d.ts +32 -0
- package/dist/representation/host-abi.js +97 -0
- package/dist/representation/host-templates.d.ts +67 -0
- package/dist/representation/host-templates.js +94 -0
- package/dist/representation/intersection.d.ts +84 -0
- package/dist/representation/intersection.js +149 -0
- package/dist/representation/literal-destination.d.ts +43 -0
- package/dist/representation/literal-destination.js +133 -0
- package/dist/representation/merge.d.ts +18 -0
- package/dist/representation/merge.js +83 -0
- package/dist/representation/model.d.ts +1160 -0
- package/dist/representation/model.js +1019 -0
- package/dist/representation/numeric-index.d.ts +13 -0
- package/dist/representation/numeric-index.js +29 -0
- package/dist/representation/object-shape.d.ts +109 -0
- package/dist/representation/object-shape.js +123 -0
- package/dist/representation/optional.d.ts +12 -0
- package/dist/representation/optional.js +87 -0
- package/dist/representation/plan.d.ts +60 -0
- package/dist/representation/plan.js +78 -0
- package/dist/representation/policies.d.ts +589 -0
- package/dist/representation/policies.js +107 -0
- package/dist/representation/primitive-domain.d.ts +1 -0
- package/dist/representation/primitive-domain.js +1 -0
- package/dist/representation/primitives.d.ts +44 -0
- package/dist/representation/primitives.js +78 -0
- package/dist/representation/publish.d.ts +49 -0
- package/dist/representation/publish.js +648 -0
- package/dist/representation/record-fields.d.ts +96 -0
- package/dist/representation/record-fields.js +116 -0
- package/dist/representation/template-object.d.ts +11 -0
- package/dist/representation/template-object.js +26 -0
- package/dist/representation/union.d.ts +30 -0
- package/dist/representation/union.js +324 -0
- package/dist/representation/value-records.d.ts +3 -0
- package/dist/representation/value-records.js +307 -0
- package/dist/representation/verify.d.ts +17 -0
- package/dist/representation/verify.js +221 -0
- package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
- package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
- package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
- package/dist/semantics/ambient-type-realization-transform.js +168 -0
- package/dist/semantics/ambient.d.ts +24 -0
- package/dist/semantics/ambient.js +119 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
- package/dist/semantics/callable-origins.d.ts +46 -0
- package/dist/semantics/callable-origins.js +354 -0
- package/dist/semantics/class-alias.d.ts +7 -0
- package/dist/semantics/class-alias.js +37 -0
- package/dist/semantics/class-heritage.d.ts +34 -0
- package/dist/semantics/class-heritage.js +104 -0
- package/dist/semantics/commonjs-wrapper.d.ts +69 -0
- package/dist/semantics/commonjs-wrapper.js +231 -0
- package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
- package/dist/semantics/constructor-slot-subclasses.js +112 -0
- package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
- package/dist/semantics/declaration-overlay-transform.js +2157 -0
- package/dist/semantics/define-property-source-transform.d.ts +4 -0
- package/dist/semantics/define-property-source-transform.js +437 -0
- package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
- package/dist/semantics/diagnostic-source-preparation.js +82 -0
- package/dist/semantics/documentation-ranges.d.ts +22 -0
- package/dist/semantics/documentation-ranges.js +36 -0
- package/dist/semantics/dynamic-fallback.d.ts +86 -0
- package/dist/semantics/dynamic-fallback.js +249 -0
- package/dist/semantics/frontend-timing.d.ts +6 -0
- package/dist/semantics/frontend-timing.js +35 -0
- package/dist/semantics/frontend.d.ts +504 -0
- package/dist/semantics/frontend.js +1157 -0
- package/dist/semantics/host-declaration-provenance.d.ts +11 -0
- package/dist/semantics/host-declaration-provenance.js +18 -0
- package/dist/semantics/host-methods.d.ts +24 -0
- package/dist/semantics/host-methods.js +74 -0
- package/dist/semantics/host-protocols.d.ts +429 -0
- package/dist/semantics/host-protocols.js +1501 -0
- package/dist/semantics/inherited-accessor.d.ts +7 -0
- package/dist/semantics/inherited-accessor.js +48 -0
- package/dist/semantics/interface-families.d.ts +70 -0
- package/dist/semantics/interface-families.js +180 -0
- package/dist/semantics/interface-implementors.d.ts +53 -0
- package/dist/semantics/interface-implementors.js +87 -0
- package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
- package/dist/semantics/jsdoc-namepath-transform.js +85 -0
- package/dist/semantics/model/coverage.d.ts +68 -0
- package/dist/semantics/model/coverage.js +73 -0
- package/dist/semantics/model/edges.d.ts +103 -0
- package/dist/semantics/model/edges.js +20 -0
- package/dist/semantics/model/graph.d.ts +55 -0
- package/dist/semantics/model/graph.js +129 -0
- package/dist/semantics/model/operands.d.ts +159 -0
- package/dist/semantics/model/operands.js +26 -0
- package/dist/semantics/model/operations.d.ts +496 -0
- package/dist/semantics/model/operations.js +2 -0
- package/dist/semantics/model/primitive-domain.d.ts +26 -0
- package/dist/semantics/model/primitive-domain.js +38 -0
- package/dist/semantics/model/selected-signature.d.ts +261 -0
- package/dist/semantics/model/selected-signature.js +55 -0
- package/dist/semantics/model/structural-type-table.d.ts +93 -0
- package/dist/semantics/model/structural-type-table.js +237 -0
- package/dist/semantics/model/structural-types.d.ts +367 -0
- package/dist/semantics/model/structural-types.js +200 -0
- package/dist/semantics/module-resolution.d.ts +23 -0
- package/dist/semantics/module-resolution.js +227 -0
- package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
- package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
- package/dist/semantics/node-project.d.ts +13 -0
- package/dist/semantics/node-project.js +107 -0
- package/dist/semantics/node-source-hooks.d.ts +1 -0
- package/dist/semantics/node-source-hooks.js +63 -0
- package/dist/semantics/normalize/absent-globals.d.ts +143 -0
- package/dist/semantics/normalize/absent-globals.js +191 -0
- package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
- package/dist/semantics/normalize/arguments-objects.js +60 -0
- package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
- package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
- package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
- package/dist/semantics/normalize/assignment-patterns.js +147 -0
- package/dist/semantics/normalize/bag-absence.d.ts +8 -0
- package/dist/semantics/normalize/bag-absence.js +42 -0
- package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
- package/dist/semantics/normalize/binding-fixpoint.js +140 -0
- package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
- package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
- package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
- package/dist/semantics/normalize/cells/agreement.js +34 -0
- package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
- package/dist/semantics/normalize/cells/candidates.js +35 -0
- package/dist/semantics/normalize/cells/facts.d.ts +19 -0
- package/dist/semantics/normalize/cells/facts.js +90 -0
- package/dist/semantics/normalize/cells/index.d.ts +10 -0
- package/dist/semantics/normalize/cells/index.js +6 -0
- package/dist/semantics/normalize/cells/model.d.ts +98 -0
- package/dist/semantics/normalize/cells/model.js +2 -0
- package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
- package/dist/semantics/normalize/cells/policies/bag.js +114 -0
- package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
- package/dist/semantics/normalize/cells/policies/collection.js +218 -0
- package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/field.js +40 -0
- package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
- package/dist/semantics/normalize/cells/policies/index.js +58 -0
- package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
- package/dist/semantics/normalize/cells/policies/local.js +37 -0
- package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
- package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
- package/dist/semantics/normalize/cells/policies/return.js +45 -0
- package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
- package/dist/semantics/normalize/cells/policies/shared.js +45 -0
- package/dist/semantics/normalize/cells/policy.d.ts +72 -0
- package/dist/semantics/normalize/cells/policy.js +18 -0
- package/dist/semantics/normalize/cells/registry.d.ts +14 -0
- package/dist/semantics/normalize/cells/registry.js +17 -0
- package/dist/semantics/normalize/census-refusal.d.ts +62 -0
- package/dist/semantics/normalize/census-refusal.js +27 -0
- package/dist/semantics/normalize/census.d.ts +109 -0
- package/dist/semantics/normalize/census.js +667 -0
- package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
- package/dist/semantics/normalize/collection-bindings.js +677 -0
- package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
- package/dist/semantics/normalize/commonjs-module-record.js +289 -0
- package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
- package/dist/semantics/normalize/commonjs-require.js +1527 -0
- package/dist/semantics/normalize/contribution.d.ts +63 -0
- package/dist/semantics/normalize/contribution.js +172 -0
- package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
- package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
- package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
- package/dist/semantics/normalize/derived-expression-type.js +3463 -0
- package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
- package/dist/semantics/normalize/evaluation-order.js +37 -0
- package/dist/semantics/normalize/field-bindings.d.ts +167 -0
- package/dist/semantics/normalize/field-bindings.js +1125 -0
- package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
- package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
- package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
- package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
- package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
- package/dist/semantics/normalize/flow/callable-completions.js +82 -0
- package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
- package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
- package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
- package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
- package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
- package/dist/semantics/normalize/flow/component-solver.js +587 -0
- package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
- package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
- package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
- package/dist/semantics/normalize/flow/export-importers.js +269 -0
- package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
- package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
- package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
- package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
- package/dist/semantics/normalize/flow/model.d.ts +357 -0
- package/dist/semantics/normalize/flow/model.js +177 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
- package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
- package/dist/semantics/normalize/flow/node-path-token.js +53 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
- package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
- package/dist/semantics/normalize/flow/origin-authority.js +2 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
- package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
- package/dist/semantics/normalize/flow/parameter-values.js +251 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
- package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
- package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
- package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
- package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
- package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
- package/dist/semantics/normalize/flow/source-class-data.js +838 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
- package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
- package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
- package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
- package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
- package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
- package/dist/semantics/normalize/flow/source-record-data.js +626 -0
- package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
- package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
- package/dist/semantics/normalize/flow/targets.d.ts +118 -0
- package/dist/semantics/normalize/flow/targets.js +405 -0
- package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
- package/dist/semantics/normalize/flow/value-flow.js +823 -0
- package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
- package/dist/semantics/normalize/flow/value-provenance.js +112 -0
- package/dist/semantics/normalize/gating.d.ts +51 -0
- package/dist/semantics/normalize/gating.js +560 -0
- package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
- package/dist/semantics/normalize/generic-function-choice.js +115 -0
- package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
- package/dist/semantics/normalize/global-host-mutations.js +5989 -0
- package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
- package/dist/semantics/normalize/host-effect-contracts.js +143 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
- package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
- package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
- package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
- package/dist/semantics/normalize/host-mutation-keys.js +183 -0
- package/dist/semantics/normalize/identities.d.ts +172 -0
- package/dist/semantics/normalize/identities.js +426 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
- package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
- package/dist/semantics/normalize/implicit-arguments.js +39 -0
- package/dist/semantics/normalize/instantiation.d.ts +73 -0
- package/dist/semantics/normalize/instantiation.js +399 -0
- package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
- package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
- package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
- package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
- package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
- package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
- package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
- package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
- package/dist/semantics/normalize/keyof.d.ts +32 -0
- package/dist/semantics/normalize/keyof.js +110 -0
- package/dist/semantics/normalize/local-bindings.d.ts +176 -0
- package/dist/semantics/normalize/local-bindings.js +1826 -0
- package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
- package/dist/semantics/normalize/logical-result-type.js +102 -0
- package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
- package/dist/semantics/normalize/namespace-paths.js +108 -0
- package/dist/semantics/normalize/normalize.d.ts +57 -0
- package/dist/semantics/normalize/normalize.js +68 -0
- package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
- package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
- package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
- package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
- package/dist/semantics/normalize/open-type-form.d.ts +10 -0
- package/dist/semantics/normalize/open-type-form.js +32 -0
- package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
- package/dist/semantics/normalize/parameter-bindings.js +3339 -0
- package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
- package/dist/semantics/normalize/parameter-slot.js +491 -0
- package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
- package/dist/semantics/normalize/physical-overload-result.js +99 -0
- package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
- package/dist/semantics/normalize/primitive-property-absence.js +60 -0
- package/dist/semantics/normalize/producer-context.d.ts +376 -0
- package/dist/semantics/normalize/producer-context.js +1 -0
- package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
- package/dist/semantics/normalize/producers/allocations.js +863 -0
- package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
- package/dist/semantics/normalize/producers/binding-kind.js +36 -0
- package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
- package/dist/semantics/normalize/producers/bindings.js +710 -0
- package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
- package/dist/semantics/normalize/producers/boundary.js +123 -0
- package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
- package/dist/semantics/normalize/producers/computations.d.ts +3 -0
- package/dist/semantics/normalize/producers/computations.js +613 -0
- package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
- package/dist/semantics/normalize/producers/control-loops.js +91 -0
- package/dist/semantics/normalize/producers/control.d.ts +30 -0
- package/dist/semantics/normalize/producers/control.js +923 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
- package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
- package/dist/semantics/normalize/producers/destructuring.js +1180 -0
- package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
- package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
- package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
- package/dist/semantics/normalize/producers/erasure.js +90 -0
- package/dist/semantics/normalize/producers/installed.d.ts +3 -0
- package/dist/semantics/normalize/producers/installed.js +55 -0
- package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
- package/dist/semantics/normalize/producers/invocations.js +1796 -0
- package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
- package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
- package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
- package/dist/semantics/normalize/producers/jsx.js +360 -0
- package/dist/semantics/normalize/producers/mint.d.ts +39 -0
- package/dist/semantics/normalize/producers/mint.js +44 -0
- package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
- package/dist/semantics/normalize/producers/nullish.js +27 -0
- package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
- package/dist/semantics/normalize/producers/object-assignment.js +204 -0
- package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
- package/dist/semantics/normalize/producers/object-tag.js +119 -0
- package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
- package/dist/semantics/normalize/producers/optional-chain.js +75 -0
- package/dist/semantics/normalize/producers/properties.d.ts +21 -0
- package/dist/semantics/normalize/producers/properties.js +1053 -0
- package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
- package/dist/semantics/normalize/producers/protocol.js +695 -0
- package/dist/semantics/normalize/producers/references.d.ts +53 -0
- package/dist/semantics/normalize/producers/references.js +1027 -0
- package/dist/semantics/normalize/producers/shared.d.ts +561 -0
- package/dist/semantics/normalize/producers/shared.js +1683 -0
- package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
- package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
- package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
- package/dist/semantics/normalize/producers/tagged-template.js +307 -0
- package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
- package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
- package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
- package/dist/semantics/normalize/property-key-domain.js +150 -0
- package/dist/semantics/normalize/reachability.d.ts +189 -0
- package/dist/semantics/normalize/reachability.js +1057 -0
- package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
- package/dist/semantics/normalize/reassigned-bindings.js +41 -0
- package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
- package/dist/semantics/normalize/record-storage-families.js +109 -0
- package/dist/semantics/normalize/return-bindings.d.ts +260 -0
- package/dist/semantics/normalize/return-bindings.js +1311 -0
- package/dist/semantics/normalize/return-paths.d.ts +2 -0
- package/dist/semantics/normalize/return-paths.js +28 -0
- package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
- package/dist/semantics/normalize/script-global-redefinition.js +75 -0
- package/dist/semantics/normalize/specialization.d.ts +201 -0
- package/dist/semantics/normalize/specialization.js +1824 -0
- package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
- package/dist/semantics/normalize/structural-array-element.js +700 -0
- package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
- package/dist/semantics/normalize/structural-array-read.js +124 -0
- package/dist/semantics/normalize/structural-callable.d.ts +12 -0
- package/dist/semantics/normalize/structural-callable.js +82 -0
- package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
- package/dist/semantics/normalize/structural-creation-order.js +111 -0
- package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
- package/dist/semantics/normalize/structural-declarations.js +968 -0
- package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
- package/dist/semantics/normalize/structural-declared-body.js +147 -0
- package/dist/semantics/normalize/structural-generics.d.ts +56 -0
- package/dist/semantics/normalize/structural-generics.js +120 -0
- package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
- package/dist/semantics/normalize/structural-indexed-access.js +126 -0
- package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
- package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
- package/dist/semantics/normalize/structural-joins.d.ts +44 -0
- package/dist/semantics/normalize/structural-joins.js +143 -0
- package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
- package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
- package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
- package/dist/semantics/normalize/structural-layout-type.js +1468 -0
- package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
- package/dist/semantics/normalize/structural-leaves.js +125 -0
- package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
- package/dist/semantics/normalize/structural-local-union.js +133 -0
- package/dist/semantics/normalize/structural-members.d.ts +26 -0
- package/dist/semantics/normalize/structural-members.js +84 -0
- package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
- package/dist/semantics/normalize/structural-mutable-method.js +109 -0
- package/dist/semantics/normalize/structural-parts.d.ts +131 -0
- package/dist/semantics/normalize/structural-parts.js +737 -0
- package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
- package/dist/semantics/normalize/structural-receiver.js +551 -0
- package/dist/semantics/normalize/structural-rules.d.ts +112 -0
- package/dist/semantics/normalize/structural-rules.js +93 -0
- package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
- package/dist/semantics/normalize/structural-self-reference.js +494 -0
- package/dist/semantics/normalize/structural.d.ts +202 -0
- package/dist/semantics/normalize/structural.js +4218 -0
- package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
- package/dist/semantics/normalize/unreduced-type-form.js +53 -0
- package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
- package/dist/semantics/normalize/unresolvable-names.js +140 -0
- package/dist/semantics/package-sources.d.ts +16 -0
- package/dist/semantics/package-sources.js +365 -0
- package/dist/semantics/program.d.ts +151 -0
- package/dist/semantics/program.js +667 -0
- package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-install-source-transform.js +341 -0
- package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-object-class-source-transform.js +525 -0
- package/dist/semantics/prototype-reparenting.d.ts +50 -0
- package/dist/semantics/prototype-reparenting.js +317 -0
- package/dist/semantics/stable-checker.d.ts +10 -0
- package/dist/semantics/stable-checker.js +148 -0
- package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
- package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
- package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
- package/dist/semantics/this-constructor-source-transform.js +122 -0
- package/dist/semantics/uninstantiable-classes.d.ts +22 -0
- package/dist/semantics/uninstantiable-classes.js +75 -0
- package/dist/targets/cpp/balanced-units.d.ts +3 -0
- package/dist/targets/cpp/balanced-units.js +58 -0
- package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
- package/dist/targets/cpp/borrowed-call-entry.js +68 -0
- package/dist/targets/cpp/captures.d.ts +68 -0
- package/dist/targets/cpp/captures.js +269 -0
- package/dist/targets/cpp/class-layout.d.ts +313 -0
- package/dist/targets/cpp/class-layout.js +483 -0
- package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
- package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
- package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
- package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
- package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
- package/dist/targets/cpp/class-ref-transport.js +32 -0
- package/dist/targets/cpp/conversions.d.ts +3 -0
- package/dist/targets/cpp/conversions.js +2027 -0
- package/dist/targets/cpp/deferral-safety.d.ts +82 -0
- package/dist/targets/cpp/deferral-safety.js +86 -0
- package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
- package/dist/targets/cpp/direct-call-receivers.js +79 -0
- package/dist/targets/cpp/document.d.ts +74 -0
- package/dist/targets/cpp/document.js +106 -0
- package/dist/targets/cpp/emit-allocation.d.ts +60 -0
- package/dist/targets/cpp/emit-allocation.js +573 -0
- package/dist/targets/cpp/emit-arrays.d.ts +119 -0
- package/dist/targets/cpp/emit-arrays.js +1047 -0
- package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
- package/dist/targets/cpp/emit-binding-reference.js +120 -0
- package/dist/targets/cpp/emit-bindings.d.ts +158 -0
- package/dist/targets/cpp/emit-bindings.js +769 -0
- package/dist/targets/cpp/emit-buffers.d.ts +156 -0
- package/dist/targets/cpp/emit-buffers.js +573 -0
- package/dist/targets/cpp/emit-callable.d.ts +230 -0
- package/dist/targets/cpp/emit-callable.js +2154 -0
- package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
- package/dist/targets/cpp/emit-carrier-members.js +1224 -0
- package/dist/targets/cpp/emit-coercion.d.ts +26 -0
- package/dist/targets/cpp/emit-coercion.js +39 -0
- package/dist/targets/cpp/emit-context.d.ts +1882 -0
- package/dist/targets/cpp/emit-context.js +904 -0
- package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
- package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
- package/dist/targets/cpp/emit-equality.d.ts +39 -0
- package/dist/targets/cpp/emit-equality.js +472 -0
- package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
- package/dist/targets/cpp/emit-exceptions.js +513 -0
- package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
- package/dist/targets/cpp/emit-field-owner.js +27 -0
- package/dist/targets/cpp/emit-in.d.ts +31 -0
- package/dist/targets/cpp/emit-in.js +426 -0
- package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
- package/dist/targets/cpp/emit-instanceof.js +601 -0
- package/dist/targets/cpp/emit-integers.d.ts +68 -0
- package/dist/targets/cpp/emit-integers.js +184 -0
- package/dist/targets/cpp/emit-iterator.d.ts +100 -0
- package/dist/targets/cpp/emit-iterator.js +1137 -0
- package/dist/targets/cpp/emit-json.d.ts +73 -0
- package/dist/targets/cpp/emit-json.js +823 -0
- package/dist/targets/cpp/emit-jsx.d.ts +74 -0
- package/dist/targets/cpp/emit-jsx.js +806 -0
- package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
- package/dist/targets/cpp/emit-mixed-binary.js +60 -0
- package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
- package/dist/targets/cpp/emit-namespaces.js +133 -0
- package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
- package/dist/targets/cpp/emit-narrowing.js +3967 -0
- package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
- package/dist/targets/cpp/emit-native-equality.js +14 -0
- package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
- package/dist/targets/cpp/emit-native-selection.js +37 -0
- package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
- package/dist/targets/cpp/emit-object-tag.js +108 -0
- package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
- package/dist/targets/cpp/emit-owned-record.js +15 -0
- package/dist/targets/cpp/emit-presence.d.ts +78 -0
- package/dist/targets/cpp/emit-presence.js +376 -0
- package/dist/targets/cpp/emit-properties.d.ts +105 -0
- package/dist/targets/cpp/emit-properties.js +1640 -0
- package/dist/targets/cpp/emit-record-view.d.ts +20 -0
- package/dist/targets/cpp/emit-record-view.js +354 -0
- package/dist/targets/cpp/emit-return.d.ts +5 -0
- package/dist/targets/cpp/emit-return.js +237 -0
- package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
- package/dist/targets/cpp/emit-sum-widening.js +69 -0
- package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
- package/dist/targets/cpp/emit-tonumber.js +177 -0
- package/dist/targets/cpp/emit-tostring.d.ts +92 -0
- package/dist/targets/cpp/emit-tostring.js +556 -0
- package/dist/targets/cpp/emit-typeof.d.ts +49 -0
- package/dist/targets/cpp/emit-typeof.js +317 -0
- package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
- package/dist/targets/cpp/emit-union-properties.js +1281 -0
- package/dist/targets/cpp/emit.d.ts +45 -0
- package/dist/targets/cpp/emit.js +2225 -0
- package/dist/targets/cpp/error-types.d.ts +4 -0
- package/dist/targets/cpp/error-types.js +11 -0
- package/dist/targets/cpp/function-source-reads.d.ts +72 -0
- package/dist/targets/cpp/function-source-reads.js +148 -0
- package/dist/targets/cpp/host/atomics.d.ts +25 -0
- package/dist/targets/cpp/host/atomics.js +63 -0
- package/dist/targets/cpp/host/core-globals.d.ts +108 -0
- package/dist/targets/cpp/host/core-globals.js +158 -0
- package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
- package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
- package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
- package/dist/targets/cpp/host/emit-host-arity.js +232 -0
- package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
- package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
- package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
- package/dist/targets/cpp/host/emit-host-object.js +2206 -0
- package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
- package/dist/targets/cpp/host/emit-host-properties.js +533 -0
- package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
- package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
- package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
- package/dist/targets/cpp/host/emit-host-value.js +392 -0
- package/dist/targets/cpp/host/host-members.d.ts +505 -0
- package/dist/targets/cpp/host/host-members.js +819 -0
- package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
- package/dist/targets/cpp/host/host-method-aliases.js +76 -0
- package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
- package/dist/targets/cpp/host/native-protocols.js +183 -0
- package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
- package/dist/targets/cpp/host/object-protocol.js +671 -0
- package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
- package/dist/targets/cpp/host-namespace-reads.js +113 -0
- package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
- package/dist/targets/cpp/manifest/capabilities.js +1484 -0
- package/dist/targets/cpp/manifest.d.ts +23 -0
- package/dist/targets/cpp/manifest.js +113 -0
- package/dist/targets/cpp/native-error-base.d.ts +38 -0
- package/dist/targets/cpp/native-error-base.js +74 -0
- package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
- package/dist/targets/cpp/native-narrowing-transport.js +151 -0
- package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
- package/dist/targets/cpp/native-selection-helpers.js +46 -0
- package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
- package/dist/targets/cpp/native-symbol-keys.js +34 -0
- package/dist/targets/cpp/ownership.d.ts +43 -0
- package/dist/targets/cpp/ownership.js +38 -0
- package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
- package/dist/targets/cpp/owning-conversion-input.js +12 -0
- package/dist/targets/cpp/property-read-claims.d.ts +62 -0
- package/dist/targets/cpp/property-read-claims.js +23 -0
- package/dist/targets/cpp/property-store-claims.d.ts +62 -0
- package/dist/targets/cpp/property-store-claims.js +26 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
- package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
- package/dist/targets/cpp/reactive-dependencies.js +432 -0
- package/dist/targets/cpp/reactive-origins.d.ts +44 -0
- package/dist/targets/cpp/reactive-origins.js +82 -0
- package/dist/targets/cpp/records.d.ts +277 -0
- package/dist/targets/cpp/records.js +2427 -0
- package/dist/targets/cpp/recursive-containers.d.ts +43 -0
- package/dist/targets/cpp/recursive-containers.js +144 -0
- package/dist/targets/cpp/regexp-types.d.ts +56 -0
- package/dist/targets/cpp/regexp-types.js +59 -0
- package/dist/targets/cpp/substrate.d.ts +125 -0
- package/dist/targets/cpp/substrate.js +12 -0
- package/dist/targets/cpp/translation-unit.d.ts +219 -0
- package/dist/targets/cpp/translation-unit.js +2063 -0
- package/dist/targets/cpp/types.d.ts +280 -0
- package/dist/targets/cpp/types.js +1135 -0
- package/dist/targets/cpp/virtual-methods.d.ts +95 -0
- package/dist/targets/cpp/virtual-methods.js +264 -0
- package/package.json +95 -0
- package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
- package/src/targets/cpp/runtime/gea_eval.h +1376 -0
- package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
- package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
- package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
import { boxedValueText } from './emit-dynamic-properties.js';
|
|
2
|
+
import { isCanonicalNumberPropertyKeyText, representationKey } from '../../representation/model.js';
|
|
3
|
+
import { completeTemplateObjectCarrier, isCompleteTemplateObjectCarrier, templateObjectCapabilityKeyOf } from '../../representation/template-object.js';
|
|
4
|
+
import { fieldPresenceOf, staticOwnFieldsOf } from '../../representation/record-fields.js';
|
|
5
|
+
import { regexpFlagSupportKeyOf, spreadSourceCarrierKeyOf } from '../../ir/certify/carrier-keys.js';
|
|
6
|
+
import { createCppEmitBlockedError, defineValue, internTemplateObject, operandText } from './emit-context.js';
|
|
7
|
+
import { memberAccessOperator } from './emit-carrier-members.js';
|
|
8
|
+
import { cppArrayExtensionStructName, cppRecordFieldName, cppRecordAccessorEnvironmentName, cppRecordFieldPresenceName, cppRecordStructName, cppStringLiteral, cppTypeOf } from './types.js';
|
|
9
|
+
import { declaredRecordFieldOf, declaredFieldRepresentationOf, recordAccessorsOfShape } from './records.js';
|
|
10
|
+
import { alignedValueText } from './emit-narrowing.js';
|
|
11
|
+
import { cppRegExpNativeTypes } from './regexp-types.js';
|
|
12
|
+
import { armAt, armIs } from './emit-union-properties.js';
|
|
13
|
+
import { packedEnvironmentText } from './emit-callable.js';
|
|
14
|
+
/**
|
|
15
|
+
* How an object literal comes into being.
|
|
16
|
+
*
|
|
17
|
+
* One subject: the allocation itself, and the member writes that follow it.
|
|
18
|
+
* Which of the three shapes a literal takes -- a struct by value, a struct
|
|
19
|
+
* behind a `shared_ptr`, or a keyed container -- is decided by the carrier the
|
|
20
|
+
* deriver already chose, never re-decided here.
|
|
21
|
+
*/
|
|
22
|
+
const emitFieldInits = (ctx, lines, receiverName, representation, ownership, fields) => {
|
|
23
|
+
const accessor = memberAccessOperator(ownership);
|
|
24
|
+
for (const field of fields) {
|
|
25
|
+
const rawValueText = operandText(ctx, field.value);
|
|
26
|
+
// An object literal's OWN inferred carrier for a field can be narrower
|
|
27
|
+
// than the struct it is physically allocated as: a call site that passes
|
|
28
|
+
// `{ src: "x" }` where the parameter declares `src?: string | Uint8Array
|
|
29
|
+
// | ...` allocates that WIDER struct directly, with no intermediate
|
|
30
|
+
// narrow-typed literal ever constructed in between -- so the plain
|
|
31
|
+
// `std::string` this field's own operand carries has to widen into the
|
|
32
|
+
// struct's `Optional<TaggedUnion<...>>` member on this very first write,
|
|
33
|
+
// exactly as `emit-properties.ts`'s `emitFieldStore` already widens a
|
|
34
|
+
// later store into an existing field. Reusing `declaredFieldRepresentationOf`
|
|
35
|
+
// -- the identical authority that store asks -- is what keeps an
|
|
36
|
+
// allocation's first write and a later store from silently disagreeing
|
|
37
|
+
// about whether a field needs one. Without this a `gea::TaggedUnion`
|
|
38
|
+
// field initialized straight from a literal's narrower operand has no
|
|
39
|
+
// implicit conversion clang will accept, and the mismatch was never a
|
|
40
|
+
// narrowing this compiler could see: `AllocateRecordOperation.fields`
|
|
41
|
+
// reads each value's own operand representation, never the receiver's
|
|
42
|
+
// declared one.
|
|
43
|
+
const held = declaredFieldRepresentationOf(ctx.deriver, representation, field.key, ctx.classes);
|
|
44
|
+
const valueText = (held ? alignedValueText(ctx, 'emit-allocation.ts:71', field.value.representation, held, rawValueText) : null) ?? rawValueText;
|
|
45
|
+
// `field.key` is the layout's own key -- `"0"` for a tuple slot -- not a
|
|
46
|
+
// C++ member name. `renderStructDefinition` declared that member through
|
|
47
|
+
// `cppRecordFieldName`, so the initializer has to reach it the same way.
|
|
48
|
+
lines.push(`${receiverName}${accessor}${cppRecordFieldName(field.key)} = ${valueText};`);
|
|
49
|
+
const declared = declaredRecordFieldOf(ctx.deriver, representation, field.key, ctx.classes);
|
|
50
|
+
if (declared && !declared.required) {
|
|
51
|
+
lines.push(`${receiverName}${accessor}${cppRecordFieldPresenceName(field.key)} = true;`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* An object literal whose layout is a DICTIONARY, not a struct.
|
|
57
|
+
*
|
|
58
|
+
* A declared type with an index signature (`{ [key: string]: Style }`, a
|
|
59
|
+
* `Record<K, V>`) derives a `dictionary` carrier rather than a record --
|
|
60
|
+
* `deriveObject` routes it there before it ever considers fields -- so a
|
|
61
|
+
* literal written against one has no struct members to assign. Each member is
|
|
62
|
+
* a keyed store instead, through the container's own `operator[]`, which is
|
|
63
|
+
* exactly the store path `gea::Dictionary`/`gea::NumericDictionary` document
|
|
64
|
+
* (`read` is the non-inserting counterpart, for the read side).
|
|
65
|
+
*
|
|
66
|
+
* Nothing here boxes: the container is `Dictionary<V>` over the value carrier
|
|
67
|
+
* the deriver already chose, and each member's own text is written into it
|
|
68
|
+
* unchanged. A numeric-keyed dictionary takes the key as the number it is --
|
|
69
|
+
* `{ 0: x }` is `dict[0]`, not `dict["0"]` -- because the container is keyed by
|
|
70
|
+
* `double` and quoting it would name a key nothing ever reads.
|
|
71
|
+
*/
|
|
72
|
+
const emitAllocateDictionary = (ctx, lines, operation, representation) => {
|
|
73
|
+
const name = defineValue(ctx, operation.result);
|
|
74
|
+
if (representation.ownership === 'borrowed') {
|
|
75
|
+
throw createCppEmitBlockedError('runtime-helper:allocation:object-literal:dictionary(borrowed)', 'a "dictionary" allocation carries ownership "borrowed", but a borrowed reference names an object some other frame owns; ' +
|
|
76
|
+
'there is nothing for an allocation to borrow from');
|
|
77
|
+
}
|
|
78
|
+
// `cppTypeOf(representation, 'owned')` is the container itself, with the
|
|
79
|
+
// ownership wrapper the carrier would otherwise add stripped off -- exactly
|
|
80
|
+
// what `make_shared` needs as its type argument, read from the one authority
|
|
81
|
+
// that spells `gea::Dictionary`/`gea::NumericDictionary` rather than naming
|
|
82
|
+
// either here.
|
|
83
|
+
const storage = cppTypeOf(representation, 'owned');
|
|
84
|
+
lines.push(representation.ownership === 'shared-refcount' ? `${name} = gea::makeRef<${storage}>();` : `${name} = ${storage}{};`);
|
|
85
|
+
const subscript = memberAccessOperator(representation.ownership) === '->' ? `(*${name})` : name;
|
|
86
|
+
for (const field of operation.fields) {
|
|
87
|
+
if (representation.key === 'symbol') {
|
|
88
|
+
throw createCppEmitBlockedError('runtime-helper:allocation:object-literal:dictionary(symbol-key)', 'a symbol-keyed dictionary literal needs the runtime symbol expression for each computed key, but this allocation operation records only its canonical field name');
|
|
89
|
+
}
|
|
90
|
+
// A number-keyed container is keyed by `double`. A property name is always
|
|
91
|
+
// a string in the source, so the numeric key is the name read back as the
|
|
92
|
+
// number it spells -- and a name that does not spell one has no key in this
|
|
93
|
+
// container at all, which refuses rather than silently storing under a
|
|
94
|
+
// value nothing reads.
|
|
95
|
+
if (representation.key === 'number' && !isCanonicalNumberPropertyKeyText(field.key)) {
|
|
96
|
+
throw createCppEmitBlockedError('runtime-helper:allocation:object-literal:dictionary(non-numeric-key)', `stores member "${field.key}" into a number-keyed dictionary, but that name does not spell a numeric key`);
|
|
97
|
+
}
|
|
98
|
+
// Numeric storage is keyed by the already-canonical PropertyKey text;
|
|
99
|
+
// this safely includes NaN/infinities and preserves -0's alias with "0".
|
|
100
|
+
const key = cppStringLiteral(field.key);
|
|
101
|
+
const rawValueText = operandText(ctx, field.value);
|
|
102
|
+
// A dictionary literal's own members can name narrower carriers than the
|
|
103
|
+
// table's declared value type -- `{ a: true }` against `{ [k: string]:
|
|
104
|
+
// string | number | boolean }` writes a `bool` into a `V` that is really a
|
|
105
|
+
// `gea::TaggedUnion<...>`, exactly the reconciliation
|
|
106
|
+
// `emit-properties.ts`'s own `defineOwnProperty` dictionary store already
|
|
107
|
+
// applies to a LATER keyed write. Widening on the very first write too is
|
|
108
|
+
// what keeps an allocation-time member and a later `dict[k] = v` store
|
|
109
|
+
// from silently disagreeing about whether one needs it.
|
|
110
|
+
const widened = alignedValueText(ctx, 'emit-allocation.ts:152', field.value.representation, representation.value, rawValueText) ?? rawValueText;
|
|
111
|
+
lines.push(`${subscript}[${key}] = ${widened};`);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
export const emitAllocateRecord = (ctx, lines, operation) => {
|
|
115
|
+
const representation = operation.result.representation;
|
|
116
|
+
if (representation.kind === 'dynamic') {
|
|
117
|
+
const name = defineValue(ctx, operation.result);
|
|
118
|
+
lines.push(`${name} = gea::Value::object();`);
|
|
119
|
+
for (const field of operation.fields) {
|
|
120
|
+
lines.push(`${name}.setProperty(gea::PropertyKey::string(${cppStringLiteral(field.key)}), ${boxedValueText(ctx, field.value, 'dynamic object field')});`);
|
|
121
|
+
}
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (representation.kind === 'dictionary') {
|
|
125
|
+
emitAllocateDictionary(ctx, lines, operation, representation);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (representation.kind !== 'record' && representation.kind !== 'record-with-index' && representation.kind !== 'native-record-ref') {
|
|
129
|
+
throw createCppEmitBlockedError(`runtime-helper:allocation:object-literal:${representation.kind}`, `carries a "${representation.kind}" result, but this emitter only allocates "record", "record-with-index", "native-record-ref" and "dictionary"`);
|
|
130
|
+
}
|
|
131
|
+
// Ownership decides how the object comes into being, and the carrier kind
|
|
132
|
+
// does not. All three carriers name their storage through the same
|
|
133
|
+
// authority (`cppRecordStructName`, rendered by `records.ts`), and what
|
|
134
|
+
// separates them is identity semantics -- whether two references to this
|
|
135
|
+
// object are the same object -- which is a question about the *carrier*,
|
|
136
|
+
// already answered before anything reaches this emitter. Dispatching
|
|
137
|
+
// allocation on the kind instead of the ownership is what made a shared
|
|
138
|
+
// `record` refuse while a shared `native-record-ref` allocated, though the
|
|
139
|
+
// two would emit the identical line; it also meant this file refused an
|
|
140
|
+
// allocation the manifest already claimed a recipe for, which is the wrong
|
|
141
|
+
// direction for an over-claim to point.
|
|
142
|
+
//
|
|
143
|
+
// `record-with-index` needs nothing beyond that: its index-signature half
|
|
144
|
+
// (the `gea_dynamic` sidecar `records.ts`'s `renderStructDefinition`
|
|
145
|
+
// already gives every such struct) is a MEMBER of the same struct
|
|
146
|
+
// `cppRecordStructName` names, not a second allocation -- `cppTypeOf`
|
|
147
|
+
// (`types.ts`) already spells `record` and `record-with-index` through the
|
|
148
|
+
// identical `case 'record': case 'record-with-index':` fallthrough, for
|
|
149
|
+
// exactly this reason. An object literal with no computed-key member (the
|
|
150
|
+
// common case: `this.morphAttributes = {}`, later filled by separate
|
|
151
|
+
// `define-own-property` stores -- see `AllocateRecordOperation`'s own
|
|
152
|
+
// comment) allocates the empty struct here and every member, named or
|
|
153
|
+
// indexed, is written afterward through `emit-properties.ts`'s
|
|
154
|
+
// `emitFieldStoreLines` and `emit-carrier-members.ts`'s
|
|
155
|
+
// `emitRecordIndexSidecarStore` -- the identical split a `record` allocation
|
|
156
|
+
// with members installed as later stores already goes through. A literal
|
|
157
|
+
// that DOES supply computed-key members inline reaches `emitFieldInits`
|
|
158
|
+
// below for its named half exactly like a `record` does; nothing here
|
|
159
|
+
// writes to the index sidecar, because `producers/shared.ts`'s own literal
|
|
160
|
+
// lowering never puts an index-signature member in `operation.fields` --
|
|
161
|
+
// only a real property name is.
|
|
162
|
+
// The host's own struct name when one was stated, exactly as `types.ts`'s
|
|
163
|
+
// `cppTypeOf` spells the same carrier -- a `gea_record_*` name minted here
|
|
164
|
+
// would be a second, incompatible identity for a type the engine already
|
|
165
|
+
// declares. The `owned` arm below goes through `cppTypeOf` and so always had
|
|
166
|
+
// this; the shared arm did not, and a stated-native allocation
|
|
167
|
+
// (`gea::runtime::regex::MatchResult`) named a struct nothing defines.
|
|
168
|
+
const structName = (representation.kind === 'native-record-ref' ? representation.native : null) ?? cppRecordStructName(representation.shapeId);
|
|
169
|
+
const name = defineValue(ctx, operation.result);
|
|
170
|
+
switch (representation.ownership) {
|
|
171
|
+
case 'owned':
|
|
172
|
+
lines.push(`${name} = ${cppTypeOf(representation)}{};`);
|
|
173
|
+
break;
|
|
174
|
+
case 'shared-refcount':
|
|
175
|
+
lines.push(`${name} = gea::makeRef<${structName}>();`);
|
|
176
|
+
break;
|
|
177
|
+
case 'borrowed':
|
|
178
|
+
// A borrow is a reference to an object something else owns, and an
|
|
179
|
+
// allocation has no such object to point at: emitting one would have to
|
|
180
|
+
// invent a lifetime the program never states. This is the one ownership
|
|
181
|
+
// that is genuinely unallocatable rather than merely unwritten.
|
|
182
|
+
throw createCppEmitBlockedError(`runtime-helper:allocation:object-literal:${representation.kind}(borrowed)`, `a "${representation.kind}" allocation carries ownership "borrowed", but a borrowed reference names an object some other ` +
|
|
183
|
+
'frame owns; there is nothing for an allocation to borrow from');
|
|
184
|
+
}
|
|
185
|
+
emitFieldInits(ctx, lines, name, representation, representation.ownership, operation.fields);
|
|
186
|
+
emitAccessorEnvironments(ctx, lines, name, representation, representation.ownership);
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* The environment a capturing accessor is entered with, stored on the object
|
|
190
|
+
* the accessor is reached through.
|
|
191
|
+
*
|
|
192
|
+
* An accessor has no `CallableObject` to carry its captures -- it is called by
|
|
193
|
+
* name off the shape (`emit-properties.ts`) -- so `get current() { return n +
|
|
194
|
+
* 1 }` written inside a function had nowhere to receive that function's `n`
|
|
195
|
+
* from, and refused. The object IS the transport: it is allocated in the very
|
|
196
|
+
* frame that owns the cells, so the environment is packed HERE, exactly as an
|
|
197
|
+
* `allocate-callable` packs one, through the same `packedEnvironmentText`.
|
|
198
|
+
* Which halves carry one is `captures.ts`'s admission, the same answer
|
|
199
|
+
* `renderStructDefinition` declared the member from.
|
|
200
|
+
*/
|
|
201
|
+
const emitAccessorEnvironments = (ctx, lines, receiverName, representation, ownership) => {
|
|
202
|
+
const accessors = representation.kind === 'record'
|
|
203
|
+
? representation.accessors
|
|
204
|
+
: representation.kind === 'native-record-ref'
|
|
205
|
+
? (recordAccessorsOfShape(ctx.deriver, representation.shapeId) ?? [])
|
|
206
|
+
: [];
|
|
207
|
+
const member = memberAccessOperator(ownership);
|
|
208
|
+
for (const accessor of accessors) {
|
|
209
|
+
for (const half of ['getter', 'setter']) {
|
|
210
|
+
const body = half === 'getter' ? accessor.getter : accessor.setter;
|
|
211
|
+
if (body === null)
|
|
212
|
+
continue;
|
|
213
|
+
const admission = ctx.captures.of(body);
|
|
214
|
+
if (admission.kind === 'none')
|
|
215
|
+
continue;
|
|
216
|
+
if (admission.kind === 'refused') {
|
|
217
|
+
throw createCppEmitBlockedError(`capture:accessor:${accessor.key}`, `the ${half} of "${accessor.key}" captures a cell this allocation cannot transport: ${admission.reason}`);
|
|
218
|
+
}
|
|
219
|
+
lines.push(`${receiverName}${member}${cppRecordAccessorEnvironmentName(accessor.key, half)} = ${packedEnvironmentText(ctx, lines, body, admission)};`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* The lines that fill one array member with `texts`, through the same
|
|
225
|
+
* `make_shared` + `push` sequence `emit-arrays.ts` allocates an array literal
|
|
226
|
+
* with -- the identical carrier and the identical runtime call, so a template
|
|
227
|
+
* object's arrays and an ordinary one's are one thing, not two.
|
|
228
|
+
*/
|
|
229
|
+
const templateArrayLines = (target, array, texts, role) => {
|
|
230
|
+
if (array.element.kind !== 'string') {
|
|
231
|
+
throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(array)}`, `a template object's ${role} array holds "${representationKey(array.element)}" elements; GetTemplateObject fills both arrays with strings`);
|
|
232
|
+
}
|
|
233
|
+
if (array.ownership !== 'shared-refcount') {
|
|
234
|
+
throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(array)}`, `a template object's ${role} array carries ownership "${array.ownership}"; only a shared array is spelled with std::make_shared here`);
|
|
235
|
+
}
|
|
236
|
+
return [
|
|
237
|
+
`${target} = gea::makeRef<gea::ArrayObject<${cppTypeOf(array.element)}>>();`,
|
|
238
|
+
...texts.map((text) => `${target}->push(${cppStringLiteral(text)});`)
|
|
239
|
+
];
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* The ordinary `TemplateStringsArray` carrier: an Array whose one extra own
|
|
243
|
+
* field, `raw`, lives in its typed extension sidecar.
|
|
244
|
+
*
|
|
245
|
+
* `raw` cannot be a separate record wrapped around the Array. The language
|
|
246
|
+
* hands the cooked Array itself to the tag, and `raw` is an own property of
|
|
247
|
+
* that same identity. The ArrayObject extension is the native representation
|
|
248
|
+
* of exactly that shape, so this keeps the indexed cooked values and `raw`
|
|
249
|
+
* together without boxing either one.
|
|
250
|
+
*/
|
|
251
|
+
const templateArrayObjectBody = (carrier, operation) => {
|
|
252
|
+
if (carrier.ownership !== 'shared-refcount') {
|
|
253
|
+
throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, `a template object carries ownership "${carrier.ownership}", but per-site identity needs one shared object every evaluation reaches, not a per-evaluation copy`);
|
|
254
|
+
}
|
|
255
|
+
if (carrier.element.kind !== 'string') {
|
|
256
|
+
throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, `a template object's cooked array holds "${representationKey(carrier.element)}" elements; GetTemplateObject fills it with strings`);
|
|
257
|
+
}
|
|
258
|
+
const extension = carrier.extension;
|
|
259
|
+
const rawFields = extension?.filter((field) => field.key === 'raw') ?? [];
|
|
260
|
+
if (rawFields.length !== 1 || extension === null) {
|
|
261
|
+
throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, 'a TemplateStringsArray carrier declares no unique "raw" extension field for GetTemplateObject to install');
|
|
262
|
+
}
|
|
263
|
+
if (extension.some((field) => field.key !== 'raw')) {
|
|
264
|
+
throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, 'a TemplateStringsArray carrier declares extension fields besides "raw"; GetTemplateObject does not invent values for them');
|
|
265
|
+
}
|
|
266
|
+
const raw = rawFields[0];
|
|
267
|
+
if (raw === undefined) {
|
|
268
|
+
throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, 'a TemplateStringsArray carrier declared one "raw" extension field but did not retain it for GetTemplateObject to install');
|
|
269
|
+
}
|
|
270
|
+
if (!raw.required || raw.value.kind !== 'array-object') {
|
|
271
|
+
throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(raw.value)}`, `a template object's "raw" extension carries "${representationKey(raw.value)}"; GetTemplateObject sets it to a required Array of raw strings`);
|
|
272
|
+
}
|
|
273
|
+
const holder = cppTypeOf(carrier);
|
|
274
|
+
const rawMember = `gea_object->template extensionFieldsMut<${cppArrayExtensionStructName(extension)}>().${cppRecordFieldName(raw.key)}`;
|
|
275
|
+
const body = [
|
|
276
|
+
`${holder} gea_object = gea::makeRef<${cppTypeOf(carrier, 'owned')}>();`,
|
|
277
|
+
...operation.cooked.map((segment) => segment.kind === 'undefined' ? 'gea_object->pushUndefined();' : `gea_object->push(${cppStringLiteral(segment.text)});`),
|
|
278
|
+
...templateArrayLines(rawMember, raw.value, operation.raw, 'raw'),
|
|
279
|
+
`gea::finalizeTemplateObject(gea_object, ${rawMember});`,
|
|
280
|
+
'return gea_object;'
|
|
281
|
+
];
|
|
282
|
+
return { holder, body };
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* `` tag`a${b}c` ``'s first argument: the template object, built once per site.
|
|
286
|
+
*
|
|
287
|
+
* The per-site `static` IS the semantics. ECMA-262 13.2.8.3 caches
|
|
288
|
+
* `GetTemplateObject` per Parse Node, so the tag must be handed the same object
|
|
289
|
+
* on every evaluation -- that is what makes a `WeakMap`-keyed tag cache (the
|
|
290
|
+
* dominant real use of tagged templates) work at all. A fresh object per
|
|
291
|
+
* evaluation would compile, run, and be quietly wrong.
|
|
292
|
+
*
|
|
293
|
+
* Only the native Array exotic carrier is admitted. A record-with-index can
|
|
294
|
+
* resemble the checker's structural declaration, but it cannot implement
|
|
295
|
+
* Array index/length descriptors, frozen integrity, or the exact `raw` own
|
|
296
|
+
* property. Treating that resemblance as a carrier was therefore a silent
|
|
297
|
+
* semantic downgrade, not another valid lowering.
|
|
298
|
+
*/
|
|
299
|
+
export const emitAllocateTemplateObject = (ctx, lines, operation) => {
|
|
300
|
+
const representation = operation.result.representation;
|
|
301
|
+
if (isCompleteTemplateObjectCarrier(representation)) {
|
|
302
|
+
// Render from the same canonical object the predicate compared against, so
|
|
303
|
+
// this function cannot gradually grow a second, broader carrier contract.
|
|
304
|
+
const { holder, body } = templateArrayObjectBody(completeTemplateObjectCarrier, operation);
|
|
305
|
+
const accessor = internTemplateObject(ctx.templateObjects, operation, holder, body);
|
|
306
|
+
const name = defineValue(ctx, operation.result);
|
|
307
|
+
lines.push(`${name} = ${accessor}();`);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(representation)}`, `a template object carries "${representationKey(representation)}"; the complete GetTemplateObject contract requires an ` +
|
|
311
|
+
'array-object with a required raw string-array extension and shared ownership, because a structural record cannot implement Array exotic ' +
|
|
312
|
+
'index/length descriptors, frozen integrity, or invalid-escape cooked undefined slots');
|
|
313
|
+
};
|
|
314
|
+
/**
|
|
315
|
+
* A regular-expression literal (ECMA-262 22.2.4.1 `RegExp(pattern, flags)`).
|
|
316
|
+
*
|
|
317
|
+
* Rendered as a construction of the runtime's own pattern type, never as a
|
|
318
|
+
* struct with ten fields written one by one, and the difference is not
|
|
319
|
+
* cosmetic. `RegExpInitialize` (22.2.3.2) parses the source, validates the
|
|
320
|
+
* flags, and DERIVES `global`/`ignoreCase`/`multiline`/`sticky`/`unicode`/
|
|
321
|
+
* `dotAll`/`hasIndices` from the flag string -- so the ten members a reader
|
|
322
|
+
* sees are one constructor's answers, not ten independent stores. A field-by-
|
|
323
|
+
* field allocation would also skip the SyntaxError 22.2.3.2 step 6 throws for
|
|
324
|
+
* a repeated or unknown flag.
|
|
325
|
+
*
|
|
326
|
+
* The carrier check is a real gate rather than a formality: this operation is
|
|
327
|
+
* only reachable for a result the deriver gave the pattern carrier to, and if
|
|
328
|
+
* some other carrier ever reached here the honest answer is a refusal, not a
|
|
329
|
+
* construction of a type the value is not held in.
|
|
330
|
+
*/
|
|
331
|
+
/**
|
|
332
|
+
* Whether a pattern source contains an ES2018 Unicode PROPERTY ESCAPE
|
|
333
|
+
* (`\p{...}` / `\P{...}`).
|
|
334
|
+
*
|
|
335
|
+
* `std::regex` has no such construct or Unicode Character Database. The
|
|
336
|
+
* runtime rejects a computed source at construction; a LITERAL's source is
|
|
337
|
+
* known here, so the honest answer is a refusal at build time instead.
|
|
338
|
+
*
|
|
339
|
+
* Only when the pattern is in Unicode mode: outside it, Annex B B.1.2 makes
|
|
340
|
+
* `\p` an IdentityEscape for the letter `p`, which `std::regex` matches
|
|
341
|
+
* correctly. Written as a character walk because the architecture gate
|
|
342
|
+
* forbids a RegExp literal under `targets/cpp` -- and because a regular
|
|
343
|
+
* expression that scans regular-expression source is the wrong instrument for
|
|
344
|
+
* a question this simple.
|
|
345
|
+
*/
|
|
346
|
+
const namesAUnicodePropertyEscape = (source, flags) => {
|
|
347
|
+
if (!flags.includes('u') && !flags.includes('v'))
|
|
348
|
+
return false;
|
|
349
|
+
for (let index = 0; index < source.length; index += 1) {
|
|
350
|
+
if (source.charCodeAt(index) !== 92)
|
|
351
|
+
continue;
|
|
352
|
+
const marker = source.charAt(index + 1);
|
|
353
|
+
if ((marker === 'p' || marker === 'P') && source.charAt(index + 2) === '{')
|
|
354
|
+
return true;
|
|
355
|
+
// Every other escape consumes its own next character, so `\\p{L}` -- an
|
|
356
|
+
// escaped backslash followed by a literal `p` -- is not one of these.
|
|
357
|
+
index += 1;
|
|
358
|
+
}
|
|
359
|
+
return false;
|
|
360
|
+
};
|
|
361
|
+
export const emitAllocateRegExp = (ctx, lines, operation) => {
|
|
362
|
+
const representation = operation.result.representation;
|
|
363
|
+
const nativePattern = representation.kind === 'native-record-ref' && representation.native === cppRegExpNativeTypes.pattern;
|
|
364
|
+
if (!nativePattern && representation.kind !== 'dynamic') {
|
|
365
|
+
throw createCppEmitBlockedError(`runtime-helper:allocation:regexp-object:${representation.kind}(${regexpFlagSupportKeyOf(operation.flags)})`, `a regular-expression literal is carried as "${representationKey(representation)}"; this backend builds one as ${cppRegExpNativeTypes.pattern} or boxes that exact Pattern at a dynamic boundary`);
|
|
366
|
+
}
|
|
367
|
+
if (namesAUnicodePropertyEscape(operation.source, operation.flags)) {
|
|
368
|
+
throw createCppEmitBlockedError(`runtime-helper:allocation:regexp-object:${representation.kind}(${regexpFlagSupportKeyOf(operation.flags)})`, `the pattern /${operation.source}/${operation.flags} names an ES2018 Unicode property escape (\\p{...}); std::regex, which this backend's ` +
|
|
369
|
+
"matcher and v1 geatsc's both compile against, has no such construct and no Unicode Character Database to answer one from. Refused here rather " +
|
|
370
|
+
"than at run time because a literal's source is known now -- a pattern built from a computed string still fails closed as a SyntaxError during " +
|
|
371
|
+
'RegExp construction');
|
|
372
|
+
}
|
|
373
|
+
if (operation.flags.includes('v')) {
|
|
374
|
+
throw createCppEmitBlockedError(`runtime-helper:allocation:regexp-object:${representation.kind}(${regexpFlagSupportKeyOf(operation.flags)})`, `the pattern /${operation.source}/${operation.flags} uses UnicodeSets RegExp semantics; the native matcher has no UnicodeSets parser or set-string ` +
|
|
375
|
+
'implementation, so this literal is refused rather than being routed through an incompatible character-class grammar');
|
|
376
|
+
}
|
|
377
|
+
if (operation.flags.includes('u') && operation.flags.includes('i')) {
|
|
378
|
+
throw createCppEmitBlockedError(`runtime-helper:allocation:regexp-object:${representation.kind}(${regexpFlagSupportKeyOf(operation.flags)})`, `the pattern /${operation.source}/${operation.flags} combines Unicode matching with ignoreCase; std::regex has no ECMAScript Unicode simple-case-folding ` +
|
|
379
|
+
'table, so this literal is refused rather than claiming locale-dependent case behavior is JavaScript Unicode semantics');
|
|
380
|
+
}
|
|
381
|
+
const name = defineValue(ctx, operation.result);
|
|
382
|
+
// `constructPatternOrThrow` rather than `gea::makeRef<Pattern>` directly:
|
|
383
|
+
// it is the ported entry point that runs 22.2.3.2's validation first, so an
|
|
384
|
+
// unknown or repeated flag throws where the language says it throws. The
|
|
385
|
+
// ownership the deriver chose is `shared-refcount` unconditionally for this
|
|
386
|
+
// carrier (see `derive.ts`), which is what the helper returns.
|
|
387
|
+
const construct = `gea::runtime::regex::constructPatternOrThrow(${cppStringLiteral(operation.source)}, ${cppStringLiteral(operation.flags)})`;
|
|
388
|
+
lines.push(representation.kind === 'dynamic' ? `${name} = gea::Value::box(gea::Value::Tag::Object, ${construct});` : `${name} = ${construct};`);
|
|
389
|
+
};
|
|
390
|
+
// Re-exported so `emit.ts` can fold this into its existing single-line
|
|
391
|
+
// `emit-allocation.js` import instead of adding a whole new import line --
|
|
392
|
+
// `emit.ts` sits at the architecture gate's line cap. The implementation
|
|
393
|
+
// itself lives in `emit-tonumber.ts`, where the rest of ToNumber/ToNumeric
|
|
394
|
+
// conversion already lives; this file has nothing to do with allocation.
|
|
395
|
+
export { emitToNumericCoercion } from './emit-tonumber.js';
|
|
396
|
+
/**
|
|
397
|
+
* Object spread's `CopyDataProperties` for a source whose own-property set is
|
|
398
|
+
* not known until this runs -- `SpreadCopyOperation` (ir/model.ts), lowered
|
|
399
|
+
* from `producers/protocol.ts`'s `protocol: 'spread'` operation by
|
|
400
|
+
* `ir/lower-protocol.ts`. Lives here, not in a file of its own: it is one
|
|
401
|
+
* more way an object's own storage gets written -- the same subject this
|
|
402
|
+
* file's `emitAllocateDictionary` (above) already owns for a literal's own
|
|
403
|
+
* keys -- and `targets/cpp` sits at the architecture gate's per-directory
|
|
404
|
+
* file-count cap, so a new top-level file for one function is not free here.
|
|
405
|
+
*
|
|
406
|
+
* This backend renders two deliberately narrow receiver/source pairs:
|
|
407
|
+
* `dynamic` into `dynamic`, with the full CopyDataProperties key,
|
|
408
|
+
* descriptor, Get, and CreateDataProperty sequence; and a plain
|
|
409
|
+
* `dictionary` receiver with the statically selected structural source
|
|
410
|
+
* carriers below. A dynamic source does not certify the dictionary path: it
|
|
411
|
+
* may contain symbol keys that the dictionary's string-key insertion loop
|
|
412
|
+
* cannot preserve.
|
|
413
|
+
*
|
|
414
|
+
* The SOURCE may be a plain `dictionary`, a `tagged-union` whose arms are
|
|
415
|
+
* each a `dictionary` or a `record`, or an `optional` wrapping either of
|
|
416
|
+
* those -- `HeaderRecord`'s own three arms (`Record<'Content-Type',
|
|
417
|
+
* BaseMime> | Record<ResponseHeader, string | string[]> | Record<string,
|
|
418
|
+
* string | string[]>`) are exactly one `record`, one `record` and one
|
|
419
|
+
* `dictionary`, and `setDefaultContentType`'s `headers?: HeaderRecord`
|
|
420
|
+
* parameter wraps that same union `optional`. A `dictionary` arm's copy is a
|
|
421
|
+
* runtime walk (`gea::Dictionary::copyInto`, gea_runtime.h); a `record` arm's
|
|
422
|
+
* copy is a static per-FIELD unroll, since its keys are known at compile
|
|
423
|
+
* time; an `optional` source is `CopyDataProperties(obj, source)` itself --
|
|
424
|
+
* spreading `null`/`undefined` is a no-op per that abstract operation, so an
|
|
425
|
+
* absent optional renders no copy at all, and a present one recurses into
|
|
426
|
+
* whichever of the two shapes its payload is. Any other kind -- `record-
|
|
427
|
+
* with-index`, `native-record-ref`, `class-ref`, ... -- refuses by name:
|
|
428
|
+
* unrolling those needs a field list this file does not have a uniform way
|
|
429
|
+
* to read yet, and a record arm with an accessor member refuses for the same
|
|
430
|
+
* reason `producers/shared.ts`'s `staticSpreadMembersOf` already refuses one
|
|
431
|
+
* on the static-copy path -- an accessor must be CALLED, which is not
|
|
432
|
+
* modelled here.
|
|
433
|
+
*/
|
|
434
|
+
export const emitSpreadCopy = (ctx, lines, operation) => {
|
|
435
|
+
const receiver = operation.receiver.representation;
|
|
436
|
+
const source = operation.source.representation;
|
|
437
|
+
if (source.kind === 'dynamic' && receiver.kind !== 'dynamic') {
|
|
438
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf(source.kind, source, receiver, ctx.deriver)}`, `requires a dynamic object-spread receiver for a dynamic source, but the receiver is a "${representationKey(receiver)}"; this runtime-key walk is installed only for a dynamic receiver`);
|
|
439
|
+
}
|
|
440
|
+
if (receiver.kind === 'dynamic') {
|
|
441
|
+
if (source.kind !== 'dynamic') {
|
|
442
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf(source.kind, source, receiver, ctx.deriver)}`, `writes a dynamic object-spread receiver from a "${representationKey(source)}" source; this runtime-key walk is installed only for a dynamic source`);
|
|
443
|
+
}
|
|
444
|
+
const receiverText = operandText(ctx, operation.receiver);
|
|
445
|
+
const sourceText = operandText(ctx, operation.source);
|
|
446
|
+
lines.push('{');
|
|
447
|
+
lines.push(`const auto& __gea_spread_source = ${sourceText};`);
|
|
448
|
+
lines.push('if (__gea_spread_source.tag() != gea::Value::Tag::Null && __gea_spread_source.tag() != gea::Value::Tag::Undefined) {');
|
|
449
|
+
lines.push('for (const gea::PropertyKey& __gea_spread_key : __gea_spread_source.ownPropertyKeys()) {');
|
|
450
|
+
lines.push('gea::PropertyDescriptor __gea_spread_descriptor;');
|
|
451
|
+
lines.push('if (!__gea_spread_source.ownDescriptor(__gea_spread_key, __gea_spread_descriptor) || !__gea_spread_descriptor.enumerable) continue;');
|
|
452
|
+
lines.push(`if (!${receiverText}.defineProperty(__gea_spread_key, gea::PropertyDescriptor::assignment(__gea_spread_source.getProperty(__gea_spread_key)))) {`);
|
|
453
|
+
lines.push('gea::host::throwRuntimeError("TypeError", "object spread target rejected a property");');
|
|
454
|
+
lines.push('}');
|
|
455
|
+
lines.push('}');
|
|
456
|
+
lines.push('}');
|
|
457
|
+
lines.push('}');
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
if (receiver.kind !== 'dictionary') {
|
|
461
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf(source.kind, source, receiver, ctx.deriver)}`, `writes a runtime object-spread copy into a "${receiver.kind}" receiver, but this emitter only renders one into a "dictionary"`);
|
|
462
|
+
}
|
|
463
|
+
if (receiver.ownership === 'borrowed') {
|
|
464
|
+
throw createCppEmitBlockedError('runtime-helper:protocol:spread:next:dictionary(borrowed)', 'writes into a dictionary receiver carried with ownership "borrowed", which names no object this copy may write through');
|
|
465
|
+
}
|
|
466
|
+
const receiverText = operandText(ctx, operation.receiver);
|
|
467
|
+
const receiverRef = memberAccessOperator(receiver.ownership) === '->' ? `(*${receiverText})` : receiverText;
|
|
468
|
+
const sourceText = operandText(ctx, operation.source);
|
|
469
|
+
emitSpreadSourceCopy(ctx, lines, source, sourceText, receiver, receiverRef);
|
|
470
|
+
};
|
|
471
|
+
const emitSpreadSourceCopy = (ctx, lines, source, sourceText, receiver, receiverRef) => {
|
|
472
|
+
// `null`/`undefined` copy nothing (`CopyDataProperties`'s own definition),
|
|
473
|
+
// so the absent branch is simply empty rather than a converted "empty
|
|
474
|
+
// dictionary" write -- there is no receiver mutation to make at all.
|
|
475
|
+
if (source.kind === 'optional') {
|
|
476
|
+
lines.push(`if (${sourceText}.has_value()) {`);
|
|
477
|
+
emitSpreadSourceCopy(ctx, lines, source.payload, `(*${sourceText})`, receiver, receiverRef);
|
|
478
|
+
lines.push('}');
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
if (source.kind !== 'tagged-union') {
|
|
482
|
+
emitSpreadArmCopy(ctx, lines, source, sourceText, receiver, receiverRef);
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
const arms = source.arms;
|
|
486
|
+
if (arms.length === 0) {
|
|
487
|
+
throw createCppEmitBlockedError('runtime-helper:protocol:spread:next:tagged-union(no-arms)', 'reads a runtime object-spread source carried as a tagged union with no arms');
|
|
488
|
+
}
|
|
489
|
+
if (arms.length === 1) {
|
|
490
|
+
emitSpreadArmCopy(ctx, lines, arms[0].value, armAt(sourceText, 0), receiver, receiverRef);
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
// Exactly one arm is live at runtime (`gea::TaggedUnion`'s own invariant),
|
|
494
|
+
// so each arm's copy is guarded by `armIs` -- the same per-arm dispatch
|
|
495
|
+
// style `emit-union-properties.ts`'s other renderers use. The last arm
|
|
496
|
+
// needs no guard: the union has already proven live by elimination.
|
|
497
|
+
arms.forEach((arm, index) => {
|
|
498
|
+
const isLast = index === arms.length - 1;
|
|
499
|
+
lines.push(index === 0 ? `if (${armIs(sourceText, index)}) {` : isLast ? '} else {' : `} else if (${armIs(sourceText, index)}) {`);
|
|
500
|
+
emitSpreadArmCopy(ctx, lines, arm.value, armAt(sourceText, index), receiver, receiverRef);
|
|
501
|
+
});
|
|
502
|
+
lines.push('}');
|
|
503
|
+
};
|
|
504
|
+
const emitSpreadArmCopy = (ctx, lines, arm, armText, receiver, receiverRef) => {
|
|
505
|
+
if (arm.kind === 'dictionary') {
|
|
506
|
+
emitSpreadDictionaryArmCopy(ctx, lines, arm, armText, receiver, receiverRef);
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
// A `class-ref` and a data-only `native-record-ref` name their field list
|
|
510
|
+
// rather than carrying it, and `CopyDataProperties` copies exactly that
|
|
511
|
+
// list: a class instance's own enumerable keys ARE the fields, since its
|
|
512
|
+
// methods and accessors live on the prototype and are not own properties at
|
|
513
|
+
// all. `staticOwnFieldsOf` (representation/record-fields.ts) is the one
|
|
514
|
+
// place that rule is stated, and it is the same function the preflight key
|
|
515
|
+
// admitting this source consulted -- reading a different list here than the
|
|
516
|
+
// one that licensed the render is the certify-then-crash that key exists to
|
|
517
|
+
// prevent.
|
|
518
|
+
const fields = staticOwnFieldsOf(ctx.deriver, arm);
|
|
519
|
+
if (fields !== null && (arm.kind !== 'record' || arm.accessors.length === 0)) {
|
|
520
|
+
emitSpreadFieldCopy(ctx, lines, fields, `${armText}${memberAccessOperator(ownershipOfSpreadArm(arm))}`, receiver, receiverRef);
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf(arm.kind, arm, receiver, ctx.deriver)}`, `reads a runtime object-spread source carried as "${arm.kind}", but this emitter only copies a source whose own key set a static ` +
|
|
524
|
+
'field list reproduces exactly: a "dictionary", or a record/class shape with no accessor member');
|
|
525
|
+
};
|
|
526
|
+
/** A shape-named source's ownership, which decides whether its fields are reached through `.` or `->`. */
|
|
527
|
+
const ownershipOfSpreadArm = (arm) => arm.kind === 'record' || arm.kind === 'class-ref' || arm.kind === 'native-record-ref' ? arm.ownership : 'owned';
|
|
528
|
+
/** A converting lambda for a value type this emitter cannot express as a bare identity -- `emit-narrowing.ts`'s own conversion text, wrapped as a callable `gea::Dictionary::copyInto` invokes per entry. */
|
|
529
|
+
const spreadConvertingLambda = (ctx, source, target) => {
|
|
530
|
+
const converted = alignedValueText(ctx, 'emit-allocation.ts:640', source, target, '__v');
|
|
531
|
+
if (converted === null) {
|
|
532
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(source)}->${representationKey(target)}`, `copies a dictionary source whose value is carried as "${representationKey(source)}" into a receiver whose value is carried as ` +
|
|
533
|
+
`"${representationKey(target)}"; no conversion between those is licensed`);
|
|
534
|
+
}
|
|
535
|
+
return `[](const ${cppTypeOf(source)}& __v) { return ${converted}; }`;
|
|
536
|
+
};
|
|
537
|
+
const emitSpreadDictionaryArmCopy = (ctx, lines, arm, armText, receiver, receiverRef) => {
|
|
538
|
+
if (arm.key !== receiver.key) {
|
|
539
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf('dictionary', arm, receiver, ctx.deriver)}`, `copies a "${arm.key}"-keyed dictionary source into a "${receiver.key}"-keyed dictionary receiver; the two key domains do not convert`);
|
|
540
|
+
}
|
|
541
|
+
const armMember = `${armText}${memberAccessOperator(arm.ownership)}`;
|
|
542
|
+
const sameValueShape = representationKey(arm.value) === representationKey(receiver.value);
|
|
543
|
+
const converter = sameValueShape ? '[](const auto& __v) { return __v; }' : spreadConvertingLambda(ctx, arm.value, receiver.value);
|
|
544
|
+
lines.push(`${armMember}copyInto(${receiverRef}, ${converter});`);
|
|
545
|
+
};
|
|
546
|
+
const emitSpreadFieldCopy = (ctx, lines, fields, armMember, receiver, receiverRef) => {
|
|
547
|
+
if (receiver.key !== 'string' && fields.length > 0) {
|
|
548
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:record->dictionary(${receiver.key})`, `copies statically named string fields into a "${receiver.key}"-keyed dictionary receiver; CopyDataProperties cannot change their PropertyKey domain`);
|
|
549
|
+
}
|
|
550
|
+
for (const field of fields) {
|
|
551
|
+
if (field.key.startsWith('sym(')) {
|
|
552
|
+
throw createCppEmitBlockedError('runtime-helper:protocol:spread:next:record(symbol-field)', `copies the symbol-named field "${field.key}", whose runtime Symbol identity cannot be reconstructed from its representation field name`);
|
|
553
|
+
}
|
|
554
|
+
// A field that may be absent is copied only when it IS there --
|
|
555
|
+
// `CopyDataProperties` (ECMA-262 7.3.25) walks the source's OWN property
|
|
556
|
+
// keys, and a missing key contributes nothing. Generated record storage's
|
|
557
|
+
// explicit presence bit is independent of the value carrier, so a present
|
|
558
|
+
// `undefined` is copied while an absent field is skipped.
|
|
559
|
+
if (fieldPresenceOf(field) === 'unprovable') {
|
|
560
|
+
throw createCppEmitBlockedError('runtime-helper:protocol:spread:next:record(unprovable-presence)', `copies a record source field "${field.key}" whose presence is unprovable beside "${representationKey(field.value)}"; this ` +
|
|
561
|
+
'emitter copies a required field or an optional generated field with an independent presence bit');
|
|
562
|
+
}
|
|
563
|
+
const fieldText = `${armMember}${cppRecordFieldName(field.key)}`;
|
|
564
|
+
const readText = fieldText;
|
|
565
|
+
const converted = alignedValueText(ctx, 'emit-allocation.ts:704', field.value, receiver.value, readText);
|
|
566
|
+
if (converted === null) {
|
|
567
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(field.value)}->${representationKey(receiver.value)}`, `copies a record source field "${field.key}" carried as "${representationKey(field.value)}" into a receiver whose value is carried as ` +
|
|
568
|
+
`"${representationKey(receiver.value)}"; no conversion between those is licensed`);
|
|
569
|
+
}
|
|
570
|
+
const write = `${receiverRef}[${cppStringLiteral(field.key)}] = ${converted};`;
|
|
571
|
+
lines.push(field.required ? write : `if (${armMember}${cppRecordFieldPresenceName(field.key)}) { ${write} }`);
|
|
572
|
+
}
|
|
573
|
+
};
|