@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,1484 @@
|
|
|
1
|
+
import { cppDynamicArgumentHostParameters } from '../host/dynamic-argument-members.js';
|
|
2
|
+
import { cppNativeProtocolsOf } from '../host/native-protocols.js';
|
|
3
|
+
import { coreHostMembers } from '../host/host-members.js';
|
|
4
|
+
import { hasPropertyHelperClaims } from '../emit-in.js';
|
|
5
|
+
import { dynamicIteratorHelperClaims, enumerateHelperClaims, staticTupleIteratorHelperClaims } from '../emit-iterator.js';
|
|
6
|
+
import { cppInstanceofHelperKeys } from '../emit-instanceof.js';
|
|
7
|
+
import { completeTemplateObjectCapabilityKey } from '../../../representation/template-object.js';
|
|
8
|
+
/**
|
|
9
|
+
* The capabilities of the backend as it stands.
|
|
10
|
+
*
|
|
11
|
+
* Each row here corresponds to something `emit.ts` actually renders, and to
|
|
12
|
+
* nothing else. The order matters and is not a formality: a capability claimed
|
|
13
|
+
* before it is implemented turns a preflight pass into a crash during
|
|
14
|
+
* rendering, which is the exact failure preflight exists to prevent. So a row
|
|
15
|
+
* is added only after the emitter refuses to throw for it.
|
|
16
|
+
*
|
|
17
|
+
* A recipe key names the carrier as well as the operation, because the two
|
|
18
|
+
* together are what decides whether a recipe exists. `native-record-ref` field
|
|
19
|
+
* access is a `->` member load and needs no runtime at all; the same `[[Get]]`
|
|
20
|
+
* on an ordinary object needs machinery nothing has written. Claiming
|
|
21
|
+
* `get:false` without the carrier would assert both.
|
|
22
|
+
*/
|
|
23
|
+
export const currentCppRuntimeCapabilities = Object.freeze({
|
|
24
|
+
// `emit.ts` renders every call through the callable carrier's own invoke
|
|
25
|
+
// pointer, which is the generic path: it needs no proof about the target, and
|
|
26
|
+
// the ABI it calls through is the one the plan published. A direct call to a
|
|
27
|
+
// known symbol would be a devirtualization on top of this, not a substitute
|
|
28
|
+
// for it, so it stays unclaimed until it is written.
|
|
29
|
+
hasGenericCallPath: true,
|
|
30
|
+
// `gea::Value::callAsFunction` (gea_runtime.h): a thunk recorded at
|
|
31
|
+
// `Value::box`, where the payload's signature is still a C++ type, adapting
|
|
32
|
+
// boxed arguments to the callable's own declared parameters and boxing its
|
|
33
|
+
// result back. Arity is the language's -- an omitted argument is
|
|
34
|
+
// `undefined`, an extra one is dropped -- and a payload that is not a
|
|
35
|
+
// callable, or whose parameter types the header states no rule for, refuses
|
|
36
|
+
// by name instead of answering. `emit-callable.ts`'s `dynamicCallText`
|
|
37
|
+
// renders it.
|
|
38
|
+
hasDynamicCallPath: true,
|
|
39
|
+
propertyRecipes: new Set([
|
|
40
|
+
// GetV throws for either nullish receiver after the computed key has
|
|
41
|
+
// evaluated. emitGet installs that path without object materialization.
|
|
42
|
+
'undefined:get:false',
|
|
43
|
+
'undefined:get:true',
|
|
44
|
+
'null:get:false',
|
|
45
|
+
'null:get:true',
|
|
46
|
+
'void:get:false',
|
|
47
|
+
'void:get:true',
|
|
48
|
+
// A receiver carried as an optional, accessed on a branch that proved it
|
|
49
|
+
// present -- see `unwrapPresentValue` (emit-context.ts) for why the
|
|
50
|
+
// language admits no other kind of access through one, on either the read
|
|
51
|
+
// or the write side. The payload's own recipe still has to be claimed
|
|
52
|
+
// separately; this row only says the dereference is renderable.
|
|
53
|
+
//
|
|
54
|
+
// `emitFieldStoreLines` (emit-properties.ts) unwraps the receiver the
|
|
55
|
+
// identical way `emitGet` already did -- both a constant and a computed
|
|
56
|
+
// key reach the SAME unwrap, so both `:set:false` and `:set:true` are one
|
|
57
|
+
// capability, not two, exactly as the two `:get:*` rows above already are.
|
|
58
|
+
'optional:get:false',
|
|
59
|
+
'optional:get:true',
|
|
60
|
+
'optional:set:false',
|
|
61
|
+
'optional:set:true',
|
|
62
|
+
'record:get:false',
|
|
63
|
+
'record:set:false',
|
|
64
|
+
'record:define-own-property:false',
|
|
65
|
+
// `g.next()`/`.return()`/`.throw()` on an iterator, carried as the cursor
|
|
66
|
+
// `iterator(T)` (`representation/model.ts`). Each member is claimed BY
|
|
67
|
+
// NAME, the way `function-value-dispatch(call)` is:
|
|
68
|
+
// `preflight/property-access.ts` refines the receiver key with the
|
|
69
|
+
// constant member it reads, so these three rows certify exactly those
|
|
70
|
+
// three members and nothing else -- a flat `iterator:get:false` would
|
|
71
|
+
// have certified `[Symbol.iterator]` and any other member too.
|
|
72
|
+
// `emit-carrier-members.ts`'s `iteratorMemberText` defers the read and
|
|
73
|
+
// `prototype/emit-prototype-iterator.ts` renders the fused call --
|
|
74
|
+
// `return`/`throw` further refined there, by the receiver's own
|
|
75
|
+
// `source` tag, to a real generator's cursor: the four fixed-storage
|
|
76
|
+
// walks publish this same carrier but their actual
|
|
77
|
+
// `%ArrayIteratorPrototype%`-and-siblings define neither method
|
|
78
|
+
// (ECMA-262 27.1.2), so a claim here is necessary but not sufficient for
|
|
79
|
+
// them, exactly like `record-with-index`'s per-site refinement below.
|
|
80
|
+
'iterator(next):get:false',
|
|
81
|
+
'iterator(return):get:false',
|
|
82
|
+
'iterator(throw):get:false',
|
|
83
|
+
'native-record-ref:get:false',
|
|
84
|
+
// `emit-properties.ts`'s `emitGet` fallback (the same one `:get:false`
|
|
85
|
+
// above claims) resolves its key through `staticKeyTextOf`, which reads
|
|
86
|
+
// `ctx.constantTexts` and does not consult `operation.keyIsComputed` at
|
|
87
|
+
// all: `mesh['position']` and `mesh.position` reach the identical struct
|
|
88
|
+
// member load once the key is a literal, because the census already
|
|
89
|
+
// records both spellings as the same `constant` key operand. So a
|
|
90
|
+
// computed get needs nothing this backend has not already written --
|
|
91
|
+
// unlike `record-with-index`, whose computed form would have to route
|
|
92
|
+
// into a dictionary sidecar this codebase has twice refused to build
|
|
93
|
+
// (see that recipe's own comment below), a `native-record-ref` receiver
|
|
94
|
+
// has no such second path to reopen: field access is field access
|
|
95
|
+
// either way. A key that is genuinely dynamic (no recorded constant
|
|
96
|
+
// text) still fails closed exactly as it already does for `:get:false`
|
|
97
|
+
// -- `staticKeyTextOf` throws its own "dynamic-property-key" refusal at
|
|
98
|
+
// emission, unconditionally on `computed` -- so claiming this recipe
|
|
99
|
+
// widens what preflight admits without widening what the emitter
|
|
100
|
+
// actually renders.
|
|
101
|
+
'native-record-ref:get:true',
|
|
102
|
+
'native-record-ref:set:false',
|
|
103
|
+
'native-record-ref:define-own-property:false',
|
|
104
|
+
// `record-with-index`'s named half is exactly a `record` field -- a fixed
|
|
105
|
+
// struct member with its own static offset -- so a constant key that
|
|
106
|
+
// spells one of the carrier's own fields renders through the identical
|
|
107
|
+
// struct-access fallback `record`/`native-record-ref` use above (see
|
|
108
|
+
// `emit-properties.ts`'s `recordWithIndexFieldText`).
|
|
109
|
+
// `preflight/property-access.ts`'s `recordWithIndexKeyNamesAField` checks
|
|
110
|
+
// the match per site, because this flat claim cannot see which key a
|
|
111
|
+
// given operation reads.
|
|
112
|
+
'record-with-index:get:false',
|
|
113
|
+
// A constant key that names NO field routes into the index-signature
|
|
114
|
+
// sidecar instead -- `emit-carrier-members.ts`'s
|
|
115
|
+
// `recordIndexSidecarReadText`/`recordIndexSidecarTableOf`, over the
|
|
116
|
+
// identical `gea::Dictionary`/`gea::NumericDictionary` machinery
|
|
117
|
+
// `dictionary:get:true` below already renders, reached through one more
|
|
118
|
+
// member access. Claimed under its own, deliberately DIFFERENT receiver
|
|
119
|
+
// spelling (`property-access.ts`'s `buildPropertyAccessObligation` gives
|
|
120
|
+
// this exact case the refined key `record-with-index(unmatched-key)`)
|
|
121
|
+
// rather than folding it into the bare `record-with-index:get:false`
|
|
122
|
+
// claim above: the two are different capabilities that happen to share a
|
|
123
|
+
// carrier and a `computed` flag, and only THIS one needs
|
|
124
|
+
// `recordWithIndexKeyNamesAField` to have already said "no" before the
|
|
125
|
+
// claim is honest -- the bare claim above is asked (and honoured) only
|
|
126
|
+
// when it says "yes".
|
|
127
|
+
'record-with-index(unmatched-key):get:false',
|
|
128
|
+
// A COMPUTED key, by contrast, never spells a specific field by
|
|
129
|
+
// construction -- the checker itself answers a computed numeric/string
|
|
130
|
+
// read of an interface with both named members and an index signature
|
|
131
|
+
// (`ArrayLike<number>`, `{ length: number; [i: number]: number }`)
|
|
132
|
+
// through the index signature, never through a named field, because it
|
|
133
|
+
// cannot know at compile time which field a runtime key names. So every
|
|
134
|
+
// computed `get` on a `record-with-index` receiver routes into its
|
|
135
|
+
// `gea_dynamic` sidecar (`records.ts`'s `renderStructDefinition` gives
|
|
136
|
+
// every such struct one), rendered by `emit-carrier-members.ts`'s
|
|
137
|
+
// `recordIndexSidecarReadText` -- the same `gea::Dictionary`/
|
|
138
|
+
// `gea::NumericDictionary` machinery `dictionary:get:true` below already
|
|
139
|
+
// renders, reached through one more member access. Unconditional,
|
|
140
|
+
// unlike `record-with-index:get:false` above: `record-with-index`'s
|
|
141
|
+
// every instance *by construction* has an index signature (that is what
|
|
142
|
+
// distinguishes it from a plain `record`), so there is no per-site
|
|
143
|
+
// "does this one actually have a sidecar" question to ask.
|
|
144
|
+
'record-with-index:get:true',
|
|
145
|
+
// The store side of the identical split, over the identical machinery,
|
|
146
|
+
// now that `emit-properties.ts`'s `recordOwnershipOf`/
|
|
147
|
+
// `declaredFieldRepresentationOf` (`records.ts`) spell the struct half
|
|
148
|
+
// and `emit-carrier-members.ts`'s `emitRecordIndexSidecarStore` spells
|
|
149
|
+
// the sidecar half for BOTH a constant key naming no field and a computed
|
|
150
|
+
// key (which, exactly as the read side's comment above states, can never
|
|
151
|
+
// name one). `property-access.ts` raises one bare `record-with-index:
|
|
152
|
+
// set:*` obligation per site regardless of which half a key resolves to
|
|
153
|
+
// -- unlike `get`, `buildPropertyAccessObligation` gives `set` no
|
|
154
|
+
// "(unmatched-key)" refinement, because a STORE has no second, narrower
|
|
155
|
+
// capability to tell apart: whichever half a key's own `recordOwnershipOf`
|
|
156
|
+
// and `emitRecordIndexSidecarStore` route it to, the site is answered.
|
|
157
|
+
// So claiming this honestly requires both halves to already render,
|
|
158
|
+
// which is why this sits after the struct-member write (above, shared
|
|
159
|
+
// with `record`/`native-record-ref`) and the sidecar store both exist.
|
|
160
|
+
'record-with-index:set:false',
|
|
161
|
+
'record-with-index:set:true',
|
|
162
|
+
// Object-literal definitions use a fully permissive data descriptor.
|
|
163
|
+
// The named half reaches the ordinary struct store, while an unmatched or
|
|
164
|
+
// computed key reaches `emitRecordIndexSidecarStore`; both preserve the
|
|
165
|
+
// typed index value rather than widening the record to `gea::Value`.
|
|
166
|
+
'record-with-index:define-own-property:false',
|
|
167
|
+
'record-with-index:define-own-property:true',
|
|
168
|
+
// `native-record-ref` names a shape by id rather than carrying its own
|
|
169
|
+
// layout (model.ts); the identical `ArrayLike<number>`-shaped interface
|
|
170
|
+
// derives this carrier instead of `record-with-index` when it reaches
|
|
171
|
+
// representation selection through a *named* declaration
|
|
172
|
+
// (`representation/derive.ts`'s `declared` case) rather than an inline
|
|
173
|
+
// object type. A computed `get` needs the identical sidecar read, once
|
|
174
|
+
// the shape it names is resolved (`emit-carrier-members.ts`'s
|
|
175
|
+
// `recordIndexSidecarTableOf`) -- but unlike `record-with-index`, not
|
|
176
|
+
// every `native-record-ref` names a shape with an index signature at all
|
|
177
|
+
// (an ordinary interface has none), so this is NOT claimed
|
|
178
|
+
// unconditionally: `preflight/property-access.ts`'s
|
|
179
|
+
// `nativeRecordRefHasIndexSidecar` checks the named shape per site, the
|
|
180
|
+
// same way `constructorFamilyIsCensused` checks a `constructor-family`
|
|
181
|
+
// receiver's class per site above.
|
|
182
|
+
'native-record-ref:get:true',
|
|
183
|
+
// A class instance is a struct of its own fields, so a field load and store
|
|
184
|
+
// are the same `->` member access a record uses. Method and accessor keys
|
|
185
|
+
// are deliberately absent: neither is instance storage, and the emitter
|
|
186
|
+
// refuses a key it finds no field for rather than loading a member that
|
|
187
|
+
// does not exist.
|
|
188
|
+
'class-ref:get:false',
|
|
189
|
+
'class-ref:set:false',
|
|
190
|
+
'class-ref:define-own-property:false',
|
|
191
|
+
// The constructor side of a class -- a static method or get-only
|
|
192
|
+
// accessor read off the class value itself (`Quaternion.fromEuler`), and
|
|
193
|
+
// the assignment-only static field three.js spells as a bare
|
|
194
|
+
// `Object3D.DEFAULT_UP = new Vector3(0, 1, 0)`. That second kind is real
|
|
195
|
+
// emitted storage: `class-layout.ts`'s `censusClassStaticFieldStorage`
|
|
196
|
+
// claims one global per (class, key) the whole program writes,
|
|
197
|
+
// `records.ts` defines them ahead of every body, and both directions
|
|
198
|
+
// resolve one through the single `classConstructorStaticFieldName`. A key
|
|
199
|
+
// a `static` member DECLARES is still absent -- the census skips those,
|
|
200
|
+
// so no storage exists to read or write -- and so is a computed key,
|
|
201
|
+
// which is why only the `false` rows are claimed. This recipe resolves a
|
|
202
|
+
// specific site only when
|
|
203
|
+
// `projectClasses` actually published the receiver's class -- an ambient
|
|
204
|
+
// `declare class` never is (`semantics/program.ts` excludes declaration
|
|
205
|
+
// files from the census), so `preflight/run.ts` additionally verifies
|
|
206
|
+
// that per declaration before calling this obligation satisfied; see its
|
|
207
|
+
// own comment for why the flat claim below is not enough by itself.
|
|
208
|
+
'constructor-family:get:false',
|
|
209
|
+
// A computed key on the constructor is a dispatch over that same finite
|
|
210
|
+
// member set (`emit-dynamic-properties.ts`'s
|
|
211
|
+
// `constructorFamilyComputedGetText`): `C[String(1)]` after
|
|
212
|
+
// `static [1] = 2`. Reads only -- a computed WRITE would need storage for
|
|
213
|
+
// a key nothing declared, which the constructor object does not have.
|
|
214
|
+
'constructor-family:get:true',
|
|
215
|
+
'constructor-family:set:false',
|
|
216
|
+
'constructor-family:define-own-property:false',
|
|
217
|
+
// An Array's `length` get/set, its element get/set by a numeric key
|
|
218
|
+
// (computed or a constant that spells a canonical index -- `a[0]` and
|
|
219
|
+
// `a[i]` are the same rule, just with the index known at different
|
|
220
|
+
// times), and `length`'s own truncate/extend write. The ordinary-property
|
|
221
|
+
// half of an Array object is deliberately absent, with one exception: a
|
|
222
|
+
// constant key naming an `Array.prototype` METHOD this backend renders
|
|
223
|
+
// (`emit-prototype-array.ts`'s `arrayMethods` is the one authority for
|
|
224
|
+
// which) defers instead of refusing, and fuses with the call that follows.
|
|
225
|
+
// Every other non-index, non-`length` constant key still needs a property
|
|
226
|
+
// table this carrier does not have, and the emitter refuses those by name
|
|
227
|
+
// -- with a stated reason where there is one (`arrayMemberRefusals`).
|
|
228
|
+
// A dictionary is a `std::map`-backed table, so every key reaches it the
|
|
229
|
+
// same way whether the source spelled a computed one (`counts[k]`) or a
|
|
230
|
+
// constant (`counts.total`): both are one lookup in one container, which
|
|
231
|
+
// is why both the computed and the static row are claimed. The read is
|
|
232
|
+
// `Dictionary::read`, which does not insert; the store is `operator[]`,
|
|
233
|
+
// which does. `record-with-index`'s index sidecar is this identical
|
|
234
|
+
// container (see `records.ts`'s `renderStructDefinition`), but nothing
|
|
235
|
+
// claimed above reaches it: that claim is scoped to a key naming one of
|
|
236
|
+
// the carrier's own named fields, and a key that would have to land here
|
|
237
|
+
// instead -- computed, or a constant naming no field -- stays refused by
|
|
238
|
+
// name, deliberately (see that claim's own comment for why).
|
|
239
|
+
'dictionary:get:false',
|
|
240
|
+
'dictionary:get:true',
|
|
241
|
+
'dictionary:set:false',
|
|
242
|
+
'dictionary:set:true',
|
|
243
|
+
'dictionary:define-own-property:false',
|
|
244
|
+
'dictionary:define-own-property:true',
|
|
245
|
+
'array-object:get:false',
|
|
246
|
+
'array-object:get:true',
|
|
247
|
+
'array-object:set:false',
|
|
248
|
+
'array-object:set:true',
|
|
249
|
+
// A typed array's element get/set (constant canonical index, computed
|
|
250
|
+
// scalar index, and `length`) -- the same computed/constant/`length`
|
|
251
|
+
// shape `array-object` claims above. Its ordinary-property half is
|
|
252
|
+
// absent for the same reason: ECMA-262 23.2's integer-indexed exotic
|
|
253
|
+
// object has no ordinary-property table this carrier keeps, and the
|
|
254
|
+
// emitter refuses those by name -- see `typedArrayAccessText`/
|
|
255
|
+
// `emitFieldStore` in emit-properties.ts.
|
|
256
|
+
'typed-array:get:false',
|
|
257
|
+
'typed-array:get:true',
|
|
258
|
+
'typed-array:set:false',
|
|
259
|
+
'typed-array:set:true',
|
|
260
|
+
// An ArrayBuffer's own reads: `byteLength`, and the `slice` method that
|
|
261
|
+
// defers and fuses with its call. It has no indexed access at all --
|
|
262
|
+
// ECMA-262 25.1 gives it no exotic `[[Get]]`, so `b[0]` really is
|
|
263
|
+
// `undefined` -- which is why only the constant-key half is claimed here,
|
|
264
|
+
// and why a computed key on one is refused by name at emission rather
|
|
265
|
+
// than answering a byte.
|
|
266
|
+
'array-buffer:get:false',
|
|
267
|
+
'shared-array-buffer:get:false',
|
|
268
|
+
// A DataView's `getInt8`/`setFloat64`/... plus its three geometry
|
|
269
|
+
// accessors, all constant keys. Same reasoning: no indexed access exists
|
|
270
|
+
// on a DataView either.
|
|
271
|
+
'data-view:get:false',
|
|
272
|
+
// A string's `length` read -- its count of UTF-16 CODE UNITS, ECMA-262
|
|
273
|
+
// 6.1.4, not of the UTF-8 bytes this backend stores it in -- plus every
|
|
274
|
+
// `String.prototype` method `emit-prototype-string.ts`'s `stringMethods`
|
|
275
|
+
// renders, which defers at the access and fuses with the call that
|
|
276
|
+
// follows. Every other static key is still a method refused by name in
|
|
277
|
+
// the emitter, because the checker gives an ambient interface method no
|
|
278
|
+
// `this` parameter and the resulting calling convention has nowhere to
|
|
279
|
+
// carry the receiver -- see `stringMemberText` in emit-carrier-members.ts,
|
|
280
|
+
// and `stringMemberRefusals` for the members that state a reason.
|
|
281
|
+
'string:get:false',
|
|
282
|
+
// A symbol's `description` (ECMA-262 20.4.3.2), `symbolMemberText` in
|
|
283
|
+
// emit-carrier-members.ts; every other constant key refuses by name there.
|
|
284
|
+
'symbol:get:false',
|
|
285
|
+
// A string INDEX read, `s[i]` -- ECMA-262 10.4.3's String exotic `[[Get]]`,
|
|
286
|
+
// which is the only thing a computed key on a string can be: `ToPropertyKey`
|
|
287
|
+
// of a number is its String, and no `String.prototype` member has a name a
|
|
288
|
+
// number spells. Rendered by `stringIndexText` (emit-carrier-members.ts)
|
|
289
|
+
// through `gea::runtime::string::charAt`, which already owns the UTF-16
|
|
290
|
+
// code-unit projection over this backend's UTF-8 storage. Claimed
|
|
291
|
+
// unconditionally, because the one case it does not cover -- a result
|
|
292
|
+
// carried as `string | undefined`, the shape `noUncheckedIndexedAccess`
|
|
293
|
+
// gives every indexed read -- is refused by name at emission rather than
|
|
294
|
+
// rendered wrong.
|
|
295
|
+
'string:get:true',
|
|
296
|
+
// A `scalar` (`number`, `boolean`, ...) has no own data property at all --
|
|
297
|
+
// every static key is a `Number.prototype`/`Boolean.prototype` method. The
|
|
298
|
+
// three `Number.prototype` formatters (`toFixed`/`toExponential`/
|
|
299
|
+
// `toPrecision`) defer and fuse with their call, exactly as `substring`
|
|
300
|
+
// does off a string; every other key is still refused for the same
|
|
301
|
+
// missing-receiver reason `string:get:false` refuses every key but
|
|
302
|
+
// `length`. See `scalarMemberText` in emit-carrier-members.ts.
|
|
303
|
+
'scalar:get:false',
|
|
304
|
+
// A promise has no own data property either: `then`/`catch`/`finally` are
|
|
305
|
+
// `Promise.prototype` methods, and `then` is the one this backend renders
|
|
306
|
+
// -- deferred and fused with its call exactly as `substring` is off a
|
|
307
|
+
// string (`promiseMemberText`, emit-carrier-members.ts). `catch`/`finally`
|
|
308
|
+
// stay refused by name and not for lack of syntax: this runtime's promise
|
|
309
|
+
// carries a fulfilled value and no rejection state, so a rejection handler
|
|
310
|
+
// would be a handler that can never run.
|
|
311
|
+
'promise:get:false',
|
|
312
|
+
// A `Map`/`Set`/`WeakMap`/`WeakSet` receiver. `size` renders directly (it
|
|
313
|
+
// is an accessor over the collection's own storage, ECMA-262 23.1.3.14 /
|
|
314
|
+
// 24.2.3.9, not a method); every claimed METHOD defers and fuses with its
|
|
315
|
+
// call exactly as `then` does off a promise -- see
|
|
316
|
+
// `keyedCollectionMemberText` (emit-carrier-members.ts) and
|
|
317
|
+
// `keyedCollectionPrototypeMethods` (emit-prototype-invoke.ts), which is
|
|
318
|
+
// the one authority for which members exist per family. Everything else on
|
|
319
|
+
// these four interfaces -- `forEach`, `keys`/`values`/`entries`, the
|
|
320
|
+
// ES2025 set-algebra family, `getOrInsert` -- is still refused by name at
|
|
321
|
+
// the access, and `size`/`clear` are refused on the two WEAK families
|
|
322
|
+
// specifically, because ECMA-262 gives them neither.
|
|
323
|
+
//
|
|
324
|
+
// A computed key ("get:true") is absent for the same reason
|
|
325
|
+
// `array-object`'s ordinary half is: there is no runtime member table on
|
|
326
|
+
// these carriers to dispatch a computed name against.
|
|
327
|
+
'keyed-collection:get:false',
|
|
328
|
+
// A host singleton (`Math`, `Date`, `String`, ...) has no runtime member
|
|
329
|
+
// table at all -- every key is a qualified `gea::host::<protocol>::<key>`
|
|
330
|
+
// symbol resolved at compile time, so a computed key has nothing to
|
|
331
|
+
// dispatch against. See `nativeHandleMemberText` in emit-host-properties.ts.
|
|
332
|
+
'native-handle:get:false',
|
|
333
|
+
// The write half of the same member table (`nativeHandleStore`, same
|
|
334
|
+
// file). A host property is written through the host's own store spelling
|
|
335
|
+
// with `{value}` filled in, never through a field offset this compiler does
|
|
336
|
+
// not own -- and a member no table claims as settable is refused by name at
|
|
337
|
+
// the site, exactly as an unclaimed read is. Claimed only now that the
|
|
338
|
+
// renderer exists: this set is added to after the emitter stops throwing,
|
|
339
|
+
// never before.
|
|
340
|
+
'native-handle:set:false',
|
|
341
|
+
// `delete Math.SQRT2` and its siblings -- the ANSWER `[[Delete]]` gives
|
|
342
|
+
// for a host intrinsic's own member, read from the same static host
|
|
343
|
+
// member table `native-handle:get:false` already consults, never a real
|
|
344
|
+
// removal (a native-handle carries no per-instance storage to remove
|
|
345
|
+
// from). See `emitNativeHandleDelete` in emit-dynamic-properties.ts.
|
|
346
|
+
'native-handle:delete:false',
|
|
347
|
+
// The computed-key half of all three, for a namespace-shaped intrinsic
|
|
348
|
+
// (`Math[name]`, `Math[name] = v`, `delete Math[name]` with a runtime
|
|
349
|
+
// `name`): a static name-comparison chain over the protocol's classified
|
|
350
|
+
// member table in front of a per-protocol runtime sidecar
|
|
351
|
+
// (`gea::detail::hostIntrinsicSidecar`). See `computedNativeHandleGetText`
|
|
352
|
+
// in emit-host-properties.ts for the design and its one stated limit.
|
|
353
|
+
// test262's `verifyProperty` reaches all three on every host-intrinsic
|
|
354
|
+
// `prop-desc` case.
|
|
355
|
+
'native-handle:get:true',
|
|
356
|
+
'native-handle:set:true',
|
|
357
|
+
'native-handle:delete:true',
|
|
358
|
+
// The `dynamic` carrier's own property table -- `gea::Value`'s
|
|
359
|
+
// `DynamicObject`, rendered by `emit-dynamic-properties.ts`.
|
|
360
|
+
//
|
|
361
|
+
// This is the one carrier for which a *dynamic* property operation is the
|
|
362
|
+
// correct lowering rather than a defect. A value the program itself
|
|
363
|
+
// declared `any`/`unknown` and never narrowed is one of the four boundaries
|
|
364
|
+
// `representation/model.ts` admits, and `obj[k] = v` over one is ordinary
|
|
365
|
+
// TypeScript that a compiler which refuses it simply cannot compile. What
|
|
366
|
+
// is NOT here is any suggestion that a statically typed receiver may reach
|
|
367
|
+
// this row: a class instance used dynamically keeps its `class-ref`
|
|
368
|
+
// carrier and answers through its own sidecar (`class-ref:get:true`
|
|
369
|
+
// below), because boxing it to get here is exactly the shortcut this
|
|
370
|
+
// compiler refuses.
|
|
371
|
+
//
|
|
372
|
+
// Computed and static are both claimed, and for the reason
|
|
373
|
+
// `dictionary`'s two rows above are: one table, one lookup, and the key's
|
|
374
|
+
// spelling is the only difference -- a constant renders as a
|
|
375
|
+
// `gea::PropertyKey::string` literal, a computed one converts through
|
|
376
|
+
// `propertyKeyText`. A key carrier that has no ToPropertyKey (an object,
|
|
377
|
+
// whose conversion runs user code) is still refused by name at the site.
|
|
378
|
+
// The one `set` recipe covers both Reference strictness modes because the
|
|
379
|
+
// semantic operation carries `strict` through typed IR: emission calls
|
|
380
|
+
// `Value::reflectSet`, throws on its false result only for strict code,
|
|
381
|
+
// and explicitly discards that same false result for sloppy code.
|
|
382
|
+
'dynamic:get:false',
|
|
383
|
+
'dynamic:get:true',
|
|
384
|
+
'dynamic:set:false',
|
|
385
|
+
'dynamic:set:true',
|
|
386
|
+
'dynamic:delete:false',
|
|
387
|
+
'dynamic:delete:true',
|
|
388
|
+
'dynamic:has-property:false',
|
|
389
|
+
'dynamic:has-property:true',
|
|
390
|
+
// `[[DefineOwnProperty]]` with the default attributes IS `[[Set]]` on a
|
|
391
|
+
// key the object does not hold (ECMA-262 10.1.9.2 step 1.d.iii creates a
|
|
392
|
+
// writable, enumerable, configurable data property), which is exactly what
|
|
393
|
+
// `DynamicObject::set` installs -- so the same renderer answers both
|
|
394
|
+
// rather than a second one that could disagree about the attribute
|
|
395
|
+
// defaults.
|
|
396
|
+
'dynamic:define-own-property:false',
|
|
397
|
+
'dynamic:define-own-property:true',
|
|
398
|
+
// The dynamic-property SIDECAR on a statically typed receiver: a class
|
|
399
|
+
// instance or a record reached through a key only known at runtime.
|
|
400
|
+
//
|
|
401
|
+
// `(this as any)[key] = v` and `(raw as any)[prop]` are ordinary
|
|
402
|
+
// TypeScript, and the receiver of both keeps its native C++ type all the
|
|
403
|
+
// way through. Its declared members are reached by the field dispatcher
|
|
404
|
+
// `records.ts` renders on the struct -- so a dynamic write to a declared
|
|
405
|
+
// field is seen by every native read of that same field -- and the keys
|
|
406
|
+
// the struct does not declare live in a `gea::DynamicObject` keyed on the
|
|
407
|
+
// object's own ownership, shared with any box of the same object.
|
|
408
|
+
//
|
|
409
|
+
// Computed only. A constant key names a declared member and is reached as
|
|
410
|
+
// one, by the branches above these in `emitGet`/`emitFieldStore`; routing
|
|
411
|
+
// it through a runtime lookup instead would be slower and no more correct.
|
|
412
|
+
'class-ref:get:true',
|
|
413
|
+
'class-ref:set:true',
|
|
414
|
+
'record:get:true',
|
|
415
|
+
'record:set:true',
|
|
416
|
+
'native-record-ref:get:true',
|
|
417
|
+
'native-record-ref:set:true',
|
|
418
|
+
// The same claim under the more specific name `preflight/property-access.ts`
|
|
419
|
+
// gives a `native-record-ref` computed read whose named shape derives NO
|
|
420
|
+
// index sidecar. That specialization exists because routing such a read
|
|
421
|
+
// into a sidecar member the struct does not declare would be a claim about
|
|
422
|
+
// storage that is not there -- and the sidecar path claimed here is a
|
|
423
|
+
// different answer to the same question: the struct's field dispatcher
|
|
424
|
+
// answers its declared members, and the expando answers the rest, neither
|
|
425
|
+
// of which needs an index signature to exist.
|
|
426
|
+
'native-record-ref(no-index-sidecar):get:true',
|
|
427
|
+
// A `[[DefineOwnProperty]]` with a COMPUTED key on a `native-record-ref`
|
|
428
|
+
// receiver -- `Object.defineProperty(shape, key, {value, ...})` or a
|
|
429
|
+
// dynamic class-field-like install where the key is not a source
|
|
430
|
+
// literal. `emit-properties.ts`'s `emitFieldStoreLines` guards every
|
|
431
|
+
// `define-own-property` (this receiver included) on the descriptor
|
|
432
|
+
// actually being the default writable/enumerable/configurable data
|
|
433
|
+
// triple before reaching here, and once past that guard a
|
|
434
|
+
// `define-own-property` and a `set` render through the identical
|
|
435
|
+
// sidecar (`emitNativeSidecarSet`, `emit-dynamic-properties.ts`) this
|
|
436
|
+
// receiver's `set:true` row above already claims -- so this is that
|
|
437
|
+
// same primitive, claimed under `define-own-property`'s own name rather
|
|
438
|
+
// than assumed to fall out of the `set` claim.
|
|
439
|
+
'native-record-ref:define-own-property:true',
|
|
440
|
+
// A runtime-only delete key is deliberately unclaimed for record-shaped
|
|
441
|
+
// receivers. It can name either an expando or an optional declared field,
|
|
442
|
+
// and the runtime dispatcher does not yet carry the field-specific clear
|
|
443
|
+
// operation needed for the latter. Returning `false` there would silently
|
|
444
|
+
// treat a configurable generated field as non-configurable.
|
|
445
|
+
// A compiler-emitted optional field has a value member plus an independent
|
|
446
|
+
// presence bit. A constant delete clears both and therefore preserves the
|
|
447
|
+
// distinction between a missing key and a present `undefined` value.
|
|
448
|
+
// Preflight refines only a key proven to name such a field to this row;
|
|
449
|
+
// required fields and host-native layouts remain refused.
|
|
450
|
+
'record(optional-field):delete:false',
|
|
451
|
+
'record(optional-field):delete:true',
|
|
452
|
+
// A constant delete key naming NO declared field at all -- neither
|
|
453
|
+
// required nor optional -- names a key the sidecar itself owns (one
|
|
454
|
+
// `Object.defineProperty` added after the fact, since the checker's own
|
|
455
|
+
// ambient signature does not widen the receiver's declared shape). That
|
|
456
|
+
// is a DIFFERENT case from the one the comment above refuses: there is no
|
|
457
|
+
// struct member here to mis-clear, only the same `gea::DynamicObject`
|
|
458
|
+
// expando table `record:get:true`/`record:set:true` above already claim,
|
|
459
|
+
// and `deleteOwnProperty` (gea_runtime.h, 10.1.10.1) refuses a
|
|
460
|
+
// non-configurable entry there exactly as it does for every other
|
|
461
|
+
// carrier reaching it -- see `emitNativeSidecarDelete`
|
|
462
|
+
// (emit-dynamic-properties.ts). Certification names that case
|
|
463
|
+
// (`deleteNamesRecordExpandoKey`, ir/certify/property-access.ts), so the
|
|
464
|
+
// plain `record:delete:false` left over is a constant key naming a
|
|
465
|
+
// REQUIRED field, which stays unclaimed: the field's presence bit exists
|
|
466
|
+
// but no typed read consults it, and this row claimed for ten days what
|
|
467
|
+
// the emitter refused by the same name.
|
|
468
|
+
'record(expando-key):delete:false',
|
|
469
|
+
// Generated class instances dispatch deletion through their concrete
|
|
470
|
+
// own-field table and identity sidecar, including base-typed receivers.
|
|
471
|
+
'class-ref:delete:false',
|
|
472
|
+
// A native-record-ref whose resolved generated shape has an index
|
|
473
|
+
// sidecar, with a constant key proven not to name a fixed field. The
|
|
474
|
+
// generated sidecar owns this entry's configurable state, and
|
|
475
|
+
// `nativeDynamicDelete` dispatches to that exact table. This stays a
|
|
476
|
+
// refined row: a computed key could name an optional generated field,
|
|
477
|
+
// whose clear protocol is different, and must not be certified here.
|
|
478
|
+
'native-record-ref(index-sidecar):delete:false',
|
|
479
|
+
// Shared disjoint index authority proves the key cannot name a fixed slot.
|
|
480
|
+
// The native delete recipe consults the typed index's configurable state.
|
|
481
|
+
'record(disjoint-index):delete:false',
|
|
482
|
+
'record(disjoint-index):delete:true',
|
|
483
|
+
// A `dictionary`'s own `std::map`-backed table (`emitDictionaryDelete`).
|
|
484
|
+
// Both computed and constant keys reach the identical `erase`, for the
|
|
485
|
+
// same reason `dictionary:get:false`/`:get:true` above are both
|
|
486
|
+
// claimed: one table, one lookup, and the key's spelling is the only
|
|
487
|
+
// difference.
|
|
488
|
+
'dictionary:delete:true',
|
|
489
|
+
'dictionary:delete:false',
|
|
490
|
+
// Reading/writing a STATIC key through a `tagged-union` receiver, over
|
|
491
|
+
// the arms that all declare the field named
|
|
492
|
+
// (`emit-union-properties.ts`'s `taggedUnionGetText`/
|
|
493
|
+
// `emitTaggedUnionSet`). A union with even one arm that does not
|
|
494
|
+
// declare the field refuses by name at emission instead: this is a
|
|
495
|
+
// per-site fact the flat claim below cannot see, exactly the same
|
|
496
|
+
// asymmetry `class-ref:get:false`'s per-key refusal already lives with.
|
|
497
|
+
// A COMPUTED key over a MIXED-kind union (an `array-object` arm beside a
|
|
498
|
+
// `dictionary` arm, say) is deliberately absent -- a per-arm dispatch of
|
|
499
|
+
// a runtime-only key over arms of different KINDS would additionally
|
|
500
|
+
// have to reconcile their different read primitives, which is not
|
|
501
|
+
// written. The two shapes that owe no such reconciliation are claimed
|
|
502
|
+
// below under their own refined keys instead of widening this one.
|
|
503
|
+
'tagged-union:get:false',
|
|
504
|
+
'tagged-union:set:false',
|
|
505
|
+
// The computed key IS written for the two union shapes that owe no
|
|
506
|
+
// ARM-KIND reconciliation: every arm a `typed-array`
|
|
507
|
+
// (`emit-union-properties.ts`'s `taggedUnionElementText` /
|
|
508
|
+
// `emitTaggedUnionElementSet`). `TypedArray` is nine views differing only
|
|
509
|
+
// in element WIDTH, and `TypedArray::elementAt` returns `double` for all
|
|
510
|
+
// of them, so the per-arm dispatch produces one C++ type on every arm.
|
|
511
|
+
// Refined into its own key by `preflight/property-access.ts` rather than
|
|
512
|
+
// widening the flat claim above, which would over-claim for the
|
|
513
|
+
// `array-object`- and `dictionary`-shaped arms that reconciliation is
|
|
514
|
+
// about.
|
|
515
|
+
'tagged-union(typed-array-arms):get:true',
|
|
516
|
+
'tagged-union(typed-array-arms):set:true',
|
|
517
|
+
// ...and every arm a `dictionary` (`emit-union-properties.ts`'s
|
|
518
|
+
// `taggedUnionDictionaryGetText`/`taggedUnionHasOnlyDictionaryArms`,
|
|
519
|
+
// refined by `preflight/property-access.ts`'s
|
|
520
|
+
// `taggedUnionArmsAreAllDictionaries`). Every `dictionary` renders a
|
|
521
|
+
// computed read through the identical `member.read(key)`/`.has(key)`
|
|
522
|
+
// pair regardless of its value type, so only each arm's own VALUE needs
|
|
523
|
+
// reconciling to what the union's `get` publishes
|
|
524
|
+
// (`dictionaryArmReadText`'s `widenedStoreText` call) -- hono's
|
|
525
|
+
// `ParamIndexMap | Params` route table and `Record<string, string> |
|
|
526
|
+
// Record<string, string[]>` query-string result are both this shape.
|
|
527
|
+
// `:set:true` is deliberately absent: a computed WRITE into one of these
|
|
528
|
+
// arms is not a per-arm dispatch at all -- hono's own
|
|
529
|
+
// `results[name] = []` writes through the SAME live dictionary whichever
|
|
530
|
+
// arm it is, other keys included, so "switch the union's tag to answer
|
|
531
|
+
// this one write" would silently reinterpret every other entry already
|
|
532
|
+
// stored under the other arm's value type. That is a real gap in how
|
|
533
|
+
// this receiver shape is derived (a single dictionary of a per-entry
|
|
534
|
+
// union value, not a union of two whole dictionaries), not an emitter
|
|
535
|
+
// gap this file's evidence justified papering over.
|
|
536
|
+
'tagged-union(dictionary-arms):get:true',
|
|
537
|
+
// ...and every arm an `array-object` (`emit-union-properties.ts`'s
|
|
538
|
+
// `taggedUnionArrayGetText`/`taggedUnionHasOnlyArrayObjectArms`, refined
|
|
539
|
+
// by `preflight/property-access.ts`'s `taggedUnionArmsAreAllArrayObjects`).
|
|
540
|
+
// Every `array-object` renders a computed read through the identical
|
|
541
|
+
// `elementAt`/`hasElement` pair regardless of its own element type, so
|
|
542
|
+
// only each arm's own ELEMENT needs reconciling to what the union's
|
|
543
|
+
// `get` publishes (`arrayArmReadText`'s `widenedStoreText` call) --
|
|
544
|
+
// hono's `[T, ParamIndexMap][] | [T, Params][]` router match result
|
|
545
|
+
// (indexed by `routeIndex`) is this shape. `:set:true` stays unclaimed
|
|
546
|
+
// for the same reason the dictionary-arms case above declines it.
|
|
547
|
+
'tagged-union(array-arms):get:true',
|
|
548
|
+
// A runtime key over a tagged union of generated shared records/classes
|
|
549
|
+
// (and genuine dynamic/nullish alternatives) dispatches per live arm to
|
|
550
|
+
// `nativeDynamicGet`/`Value::getProperty`. The native helper checks
|
|
551
|
+
// fixed fields and typed index entries before the identity-keyed expando;
|
|
552
|
+
// `emit-union-properties.ts` decodes the resulting value into the
|
|
553
|
+
// already-selected result carrier. Host-native and by-value arms stay
|
|
554
|
+
// absent: neither has this generated sidecar contract.
|
|
555
|
+
'tagged-union(native-sidecar-arms):get:true',
|
|
556
|
+
// Its store twin (`emitTaggedUnionNativeSidecarSet`): `nativeDynamicSet`
|
|
557
|
+
// per live arm, the value boxed only for the sidecar.
|
|
558
|
+
'tagged-union(native-sidecar-arms):set:true',
|
|
559
|
+
// Each alternative retains its own native array/table storage. Numeric
|
|
560
|
+
// named record fields are excluded by the shared indexing predicate.
|
|
561
|
+
'tagged-union(numeric-index-arms):get:true',
|
|
562
|
+
'tagged-union(numeric-index-arms):set:true',
|
|
563
|
+
// `Function.prototype.call` read off a genuinely callable value --
|
|
564
|
+
// `add.call(x, 3, 4)`. There is no C++ object anywhere that implements
|
|
565
|
+
// `Function.prototype.call` itself (`lib.es5.d.ts`'s `strictBindCallApply`
|
|
566
|
+
// overload is a checker-only convention, not a physical one this or any
|
|
567
|
+
// backend could render a member for), so this is not a member LOAD the
|
|
568
|
+
// way `record:get:false` above is: `ir/lower-invocation.ts`'s
|
|
569
|
+
// `deferredFunctionCallCalleeOf` rewrites the *invocation* that reads this
|
|
570
|
+
// member to call the underlying receiver directly, with the read's own
|
|
571
|
+
// value never materialized -- which is why this claim has no emitter
|
|
572
|
+
// counterpart in `emit-properties.ts` to point at, unlike every other row
|
|
573
|
+
// in this set. Refined by `preflight/property-access.ts`'s
|
|
574
|
+
// `deferredFunctionPrototypeMember`, the same per-site technique
|
|
575
|
+
// `constructorFamilyIsCensused` and its siblings already use: the flat
|
|
576
|
+
// manifest can only say "a `.call` read off a callable value has
|
|
577
|
+
// somewhere to go", never which literal member name a given site actually
|
|
578
|
+
// reads, so a `.foo` read off the same receiver kind that is not
|
|
579
|
+
// `call` stays correctly unclaimed rather than silently over-claimed.
|
|
580
|
+
'function-value-dispatch(call):get:false',
|
|
581
|
+
'function(call):get:false',
|
|
582
|
+
'function-family(call):get:false',
|
|
583
|
+
'function-value-family(call):get:false',
|
|
584
|
+
// `Function.prototype.apply` read off a callable value --
|
|
585
|
+
// `Math.max.apply(null, [1, 5, 3])`. Identical shape to `.call` above,
|
|
586
|
+
// and the same reasoning: no C++ object implements `.apply` itself, so
|
|
587
|
+
// `ir/lower-invocation.ts`'s `deferredFunctionApplyCalleeOf` rewrites the
|
|
588
|
+
// invocation to call the underlying receiver directly -- the read's own
|
|
589
|
+
// value is never materialized -- which is why this claim has no emitter
|
|
590
|
+
// counterpart either. Refined per-site by `functionValueMemberIs`, so a
|
|
591
|
+
// `.foo` read off the same receiver kind that is not `apply` stays
|
|
592
|
+
// correctly unclaimed.
|
|
593
|
+
'function-value-dispatch(apply):get:false',
|
|
594
|
+
'function(apply):get:false',
|
|
595
|
+
'function-family(apply):get:false',
|
|
596
|
+
'function-value-family(apply):get:false',
|
|
597
|
+
// Only an immediately invoked bind read is admitted. It creates one new
|
|
598
|
+
// native callable with a captured receiver/prefix; extracting `.bind`
|
|
599
|
+
// itself remains unclaimed.
|
|
600
|
+
'function-value-dispatch(bind-direct):get:false',
|
|
601
|
+
'function(bind-direct):get:false',
|
|
602
|
+
'function-family(bind-direct):get:false',
|
|
603
|
+
'function-value-family(bind-direct):get:false',
|
|
604
|
+
// When an own write may shadow call/apply/bind, preserve the ordinary
|
|
605
|
+
// [[Get]] and invoke the Value returned by the callable's identity-owned
|
|
606
|
+
// property table. Function.prototype mutation itself remains unclaimed:
|
|
607
|
+
// the current runtime prototype object is immutable and cannot truthfully
|
|
608
|
+
// observe that write.
|
|
609
|
+
'function(prototype-dynamic):get:false',
|
|
610
|
+
'function-family(prototype-dynamic):get:false',
|
|
611
|
+
'function-value-family(prototype-dynamic):get:false',
|
|
612
|
+
'function-value-dispatch(prototype-dynamic):get:false',
|
|
613
|
+
'function-and-constructor(prototype-dynamic):get:false',
|
|
614
|
+
'function-value-dispatch(toString-direct):get:false',
|
|
615
|
+
// `.name`/`.length`: both `gea::CallableObject` facts decided once at the
|
|
616
|
+
// allocation site (a callable's own declared name, or the `NamedEvaluation`
|
|
617
|
+
// name from where an anonymous function/arrow literal was defined; the
|
|
618
|
+
// written parameters before the first default/rest one) and read back
|
|
619
|
+
// through `emit-properties.ts`'s matching arms. Refined the identical way
|
|
620
|
+
// `function-value-dispatch(call)` is, by the exact constant key a given
|
|
621
|
+
// site reads -- `.prototype`/`.bind` and any other `Function.prototype`
|
|
622
|
+
// member off the same receiver kind stay correctly unclaimed.
|
|
623
|
+
'function-value-dispatch(name):get:false',
|
|
624
|
+
'function-value-dispatch(length):get:false',
|
|
625
|
+
// The same two rows for a callable with no calling convention. Nothing
|
|
626
|
+
// else is claimed off `callable-identity`: it has no `.call`/`.apply`/
|
|
627
|
+
// `.bind` ladder, no expando arm and no computed-key arm, because the
|
|
628
|
+
// value is a builtin this backend renders for reflection only.
|
|
629
|
+
'callable-identity(name):get:false',
|
|
630
|
+
'callable-identity(length):get:false',
|
|
631
|
+
// An ordinary function's own `prototype`, materialized by
|
|
632
|
+
// `gea::installCallableOrdinaryPrototype` (gea_runtime.h) exactly as a
|
|
633
|
+
// `function-and-constructor`'s is -- one routine, because ECMA-262 10.2.5
|
|
634
|
+
// `MakeConstructor` is one step and the two carriers differ only in
|
|
635
|
+
// whether the checker also gave the value a construct signature. Refined
|
|
636
|
+
// BY THE DECLARATION, not by this key alone: `ir/certify/property-access.
|
|
637
|
+
// ts` admits the recipe only where the census proved the function makes a
|
|
638
|
+
// constructor -- or proved it does not, which is the same read landing on
|
|
639
|
+
// `Function.prototype`'s own (absent) `prototype` and answering
|
|
640
|
+
// `undefined`. A generator, whose `prototype` exists but inherits an
|
|
641
|
+
// intrinsic this runtime has no object for, states nothing and falls
|
|
642
|
+
// through to the unrefined `function-value-dispatch:get:false`, which is
|
|
643
|
+
// registered nowhere and refuses.
|
|
644
|
+
'function-value-dispatch(prototype):get:false',
|
|
645
|
+
// A function value is not widened merely because it receives an own
|
|
646
|
+
// property. `CallableObject` keeps the call ABI and identity, while its
|
|
647
|
+
// identity-owned dynamic-property table receives ordinary assignments.
|
|
648
|
+
// This row deliberately covers writes only: reads still need a result
|
|
649
|
+
// carrier and prototype-chain rule that the emitter has not installed.
|
|
650
|
+
'function-value-dispatch:set:false',
|
|
651
|
+
// Static deletion uses the same native Function-object property table as
|
|
652
|
+
// computed deletion; a literal key does not require a different carrier.
|
|
653
|
+
'function-value-dispatch:delete:false',
|
|
654
|
+
// Fixed Function own properties and static expandos are separately
|
|
655
|
+
// certified: preflight rejects Function.prototype members not named here,
|
|
656
|
+
// and `callableDynamicGet` reads the one shared function-object table.
|
|
657
|
+
'function-value-dispatch(expando):get:false',
|
|
658
|
+
'function-value-dispatch(own-symbol):get:true',
|
|
659
|
+
'function-value-dispatch(own-symbol):set:true',
|
|
660
|
+
// A RUNTIME string key on a callable -- test262's property helper reads,
|
|
661
|
+
// writes and deletes `obj[name]` on a builtin function to verify its own
|
|
662
|
+
// `name`/`length`. The one shared function-object table answers all three
|
|
663
|
+
// (`callableDynamicGet`/`callableDynamicSet`/`deleteOwnProperty`, facts
|
|
664
|
+
// installed first). The prototype-chain rule this row states is the
|
|
665
|
+
// narrow one the emitter renders: a key naming a `Function.prototype`
|
|
666
|
+
// member this backend does not model (`call`, `apply`, `bind`, ...)
|
|
667
|
+
// throws a TypeError at the read rather than answering `undefined` --
|
|
668
|
+
// see `callableSidecarGetText`'s computed arm.
|
|
669
|
+
'function-value-dispatch:get:true',
|
|
670
|
+
'function-value-dispatch:set:true',
|
|
671
|
+
'function-value-dispatch:delete:true',
|
|
672
|
+
// A callable constructor retains both its call and construct entries. The
|
|
673
|
+
// property rows below therefore never coerce it to a plain callable view.
|
|
674
|
+
'function-and-constructor(call):get:false',
|
|
675
|
+
'function-and-constructor(apply):get:false',
|
|
676
|
+
'function-and-constructor(toString-direct):get:false',
|
|
677
|
+
'function-and-constructor(name):get:false',
|
|
678
|
+
'function-and-constructor(length):get:false',
|
|
679
|
+
// `prototype` is a fixed own data property only on values proven to carry
|
|
680
|
+
// [[Construct]]. The callable keeps both ABI entries while its shared
|
|
681
|
+
// Function-object table performs ordinary Set/Delete, materializing that
|
|
682
|
+
// fixed descriptor before either operation reaches it.
|
|
683
|
+
'function-and-constructor(prototype):get:false',
|
|
684
|
+
'function-and-constructor(expando):get:false',
|
|
685
|
+
'function-and-constructor(own-symbol):get:true',
|
|
686
|
+
'function-and-constructor(own-symbol):set:true',
|
|
687
|
+
'function-and-constructor:set:false',
|
|
688
|
+
'function-and-constructor:delete:false',
|
|
689
|
+
'function-and-constructor:get:true',
|
|
690
|
+
'function-and-constructor:set:true',
|
|
691
|
+
'function-and-constructor:delete:true'
|
|
692
|
+
]),
|
|
693
|
+
// `'value'`: a scalar, string, or callable carrier -- nothing else aliases
|
|
694
|
+
// it, and a callable's own environment pointer is a deliberate, permanent
|
|
695
|
+
// leak (see `emitAllocateCallable`), so a copy of the pair is exactly as
|
|
696
|
+
// safe as the original. `'shared-refcount'`: a `shared_ptr`-backed carrier
|
|
697
|
+
// (class-ref/record/native-record-ref/array-object/dictionary) whose copy
|
|
698
|
+
// keeps the pointee alive as long as either copy survives, so the
|
|
699
|
+
// environment's copy is never left dangling by the frame that allocated it
|
|
700
|
+
// returning. `'owned'`: a by-value aggregate -- `cppOwnershipWrap` spells it
|
|
701
|
+
// as the bare struct, so a copy into an environment copies the storage
|
|
702
|
+
// itself, exactly as `'value'` does for a scalar, and any handle INSIDE it
|
|
703
|
+
// copies by its own rule. It used to be listed with `'borrowed'` as "not
|
|
704
|
+
// provably tied to the copy", which is true of a reference and not of a
|
|
705
|
+
// value: the two tiers were being refused for one tier's reason. It refused
|
|
706
|
+
// every closure capturing a host facade (`derive.ts` gives a namespace root
|
|
707
|
+
// and a host-bound record `'owned'` outright) and every closure capturing a
|
|
708
|
+
// value record. `'borrowed'` stays absent, and now for its own reason: it
|
|
709
|
+
// is spelled `T&`, so the environment would transport a reference that can
|
|
710
|
+
// outlive what it names.
|
|
711
|
+
captureOwnershipSupport: new Set(['value', 'shared-refcount', 'owned']),
|
|
712
|
+
// "jsx-element"@1: the JSX intrinsic element's `native-handle` protocol.
|
|
713
|
+
// `gea::NativeHandle<gea_native_protocol_jsx_element_v1>` and the
|
|
714
|
+
// `gea::jsx::create`/`prop`/`child` operations it is built with live in
|
|
715
|
+
// gea_runtime.h. Registered here, not guessed: `buildNativeBoundaryObligation`
|
|
716
|
+
// in preflight/run.ts checks this exact `protocol@version` key before any
|
|
717
|
+
// native-handle result is allowed to carry one.
|
|
718
|
+
// "Math"@1 / "DateConstructor"@1 / "StringConstructor"@1: the three ambient
|
|
719
|
+
// host-object protocols `gea_runtime.h`'s `gea::host` namespace actually
|
|
720
|
+
// implements, member by member (see that header's comments for exactly
|
|
721
|
+
// which members). These are genuine host boundaries: real ECMAScript
|
|
722
|
+
// ambient globals with no TypeScript source anywhere to compile. A
|
|
723
|
+
// `@geastack/core` export (`Display`, `WiFi`, `window`, `mount`, ...) is
|
|
724
|
+
// NOT one of these -- it is ordinary TypeScript, compiled from
|
|
725
|
+
// `runtime.ts` like any other module, and was only ever misclassified as
|
|
726
|
+
// ambient by a stale project mapping that pointed the package's import at
|
|
727
|
+
// its declaration file instead of its source. A per-framework registry of
|
|
728
|
+
// such names is exactly the source-specific hack this manifest exists to
|
|
729
|
+
// avoid: nothing framework-shaped is registered here, or ever should be.
|
|
730
|
+
// "ErrorConstructor"@1 is the same kind of row, but for the *invocation*
|
|
731
|
+
// half a `native-handle` can carry (`emit-host-invoke.ts`): `new Error(x)`
|
|
732
|
+
// now has a real `gea::host::ErrorConstructor::create` behind it, message
|
|
733
|
+
// only -- `ErrorOptions.cause` is accepted by the checker's overload set
|
|
734
|
+
// and silently unread, exactly as that file's own comment states.
|
|
735
|
+
// "Console"@1: `console.log`/`console.error` only, member by member, not
|
|
736
|
+
// the full ~18-member `lib.dom.d.ts` interface -- no real corpus program
|
|
737
|
+
// calls anything else (`citations.md` section 2a). A call to one of those
|
|
738
|
+
// still refuses by name rather than emitting a call to a symbol
|
|
739
|
+
// `gea_runtime.h` does not declare, same as any other unclaimed member.
|
|
740
|
+
// Every other genuinely ambient interface (`ArrayBuffer`, ...) is real,
|
|
741
|
+
// unclaimed ground: nothing here answers a read of one, so preflight
|
|
742
|
+
// refuses those programs instead of emitting a call to a symbol this
|
|
743
|
+
// header does not declare. `JSON`@1 (below) is claimed despite having no
|
|
744
|
+
// `HostMember` template in this file's own table: its two members render
|
|
745
|
+
// through a dedicated, type-directed path instead (`emit-json.ts`'s
|
|
746
|
+
// `jsonCallText`, wired into `emit-host-invoke.ts`'s `hostCallText`),
|
|
747
|
+
// because a fixed template signature for `stringify(value: any) =>
|
|
748
|
+
// string`/`parse(text: string) => any` is only reachable by boxing every
|
|
749
|
+
// call through it -- see citations.md finding 1 for the certify-then-fail
|
|
750
|
+
// this claim would otherwise cause without that rendering already landed.
|
|
751
|
+
// The eight typed-array constructors ARE claimed below, but not through
|
|
752
|
+
// this call/construct-ABI mechanism the way Math/Date/String/Error/Number
|
|
753
|
+
// are: their checker overload set has no single physical frame (`new
|
|
754
|
+
// (length: number)` and `new (array: ArrayLike<number>)` are genuinely
|
|
755
|
+
// different parameter-0 shapes; ECMA-262 23.2.5.1's buffer/iterable/copy
|
|
756
|
+
// overloads are refused by name at emission), so `derive.ts` correctly
|
|
757
|
+
// leaves `.construct` `null` for them and `emit-callable.ts`'s
|
|
758
|
+
// `emitTypedArrayConstruct` renders directly off each construct operation's
|
|
759
|
+
// own, already-resolved argument representation instead of the whole-type
|
|
760
|
+
// ABI every other native-handle construct uses.
|
|
761
|
+
// Every entry needs a matching `gea_native_protocol_<name>_v1` tag struct in
|
|
762
|
+
// `runtime/gea_runtime.h`, and a real implementation behind it. A claim with
|
|
763
|
+
// no tag certifies and then fails in clang, which is the one ordering this
|
|
764
|
+
// manifest exists to prevent.
|
|
765
|
+
//
|
|
766
|
+
// Only the language's own. `Math`, `Date`, `String`, `Error`, `Number`,
|
|
767
|
+
// `Promise` and the typed arrays are `lib.es5.d.ts`/`lib.es2015.*` -- the
|
|
768
|
+
// ECMAScript standard library, which a TypeScript compiler must render to
|
|
769
|
+
// compile TypeScript. `Console` and `Storage` are the two `lib.dom.d.ts`
|
|
770
|
+
// names kept here deliberately: neither has a document or a node tree behind
|
|
771
|
+
// it, and every JavaScript host in existence provides them.
|
|
772
|
+
//
|
|
773
|
+
// The document, the element tree, JSX and the audio graph are NOT here. They
|
|
774
|
+
// are a host's model of itself, not the language's, so the plugin that
|
|
775
|
+
// installs that host claims them alongside the templates that render them
|
|
776
|
+
// (`plugins/gea/host.ts`), and `compiler.ts` unions the two sets in one step.
|
|
777
|
+
// The authenticated host protocols, COMPUTED from `coreHostMembers` and the
|
|
778
|
+
// emitter's own dispatch tables by `host/native-protocols.ts`'s
|
|
779
|
+
// `cppNativeProtocolsOf` -- not a hand list, so a row here can no longer
|
|
780
|
+
// drift from the renderer it claims to speak for. `createCppTargetManifest`
|
|
781
|
+
// (manifest.ts) recomputes the same call for the specific host tables a
|
|
782
|
+
// compilation actually built; this is the plugin-independent default for a
|
|
783
|
+
// caller that supplies none.
|
|
784
|
+
nativeProtocols: cppNativeProtocolsOf(coreHostMembers),
|
|
785
|
+
// The member/role/positions whose call-site renderer takes a `dynamic`
|
|
786
|
+
// argument straight through; `host/dynamic-argument-members.ts` owns the
|
|
787
|
+
// list and states why each position needs the waiver while its siblings do
|
|
788
|
+
// not.
|
|
789
|
+
dynamicArgumentHostParameters: cppDynamicArgumentHostParameters,
|
|
790
|
+
runtimeHelpers: new Set([
|
|
791
|
+
'computation:strict-equality:dynamic-number',
|
|
792
|
+
'computation:strict-equality:dynamic-boolean',
|
|
793
|
+
'computation:strict-equality:dynamic-string',
|
|
794
|
+
'computation:strict-equality:dynamic-symbol',
|
|
795
|
+
'computation:strict-equality:dynamic-bigint',
|
|
796
|
+
'invocation:call:nullish',
|
|
797
|
+
'invocation:construct:nullish',
|
|
798
|
+
// `emitRegExpConstruct` preserves the typed Pattern path and sends only a
|
|
799
|
+
// genuinely dynamic pattern/flags argument through the runtime brand +
|
|
800
|
+
// ToString helper. The key is intentionally narrower than the protocol:
|
|
801
|
+
// it does not claim arbitrary RegExp static members or calls.
|
|
802
|
+
'invocation:construct:regexp-dynamic',
|
|
803
|
+
// `v instanceof <error constructor>`: the seven rows `emit-instanceof.ts`
|
|
804
|
+
// renders, derived from that file's own table so the claim and the
|
|
805
|
+
// rendering are one list. Every other `instanceof` -- a program's own
|
|
806
|
+
// class, another host protocol, a statically typed left operand -- has no
|
|
807
|
+
// row and refuses by name there.
|
|
808
|
+
...cppInstanceofHelperKeys,
|
|
809
|
+
// The control forms `ir/lower.ts`'s `lowerControl` actually renders, and
|
|
810
|
+
// only those. `debugger` and `branch` are markers it deliberately drops
|
|
811
|
+
// (a `branch`'s transfer is already built from `ConditionalEdge`
|
|
812
|
+
// membership); `return` and `throw` render terminators; `loop` is a
|
|
813
|
+
// head-tested loop whose blocks are the guard's own.
|
|
814
|
+
//
|
|
815
|
+
// Deliberately absent, each refused by name in `lowerControl` and now
|
|
816
|
+
// refused earlier, here: `switch` (needs case dispatch), `label` (its
|
|
817
|
+
// `label-target` boundary operation publishes no result, so nothing can
|
|
818
|
+
// anchor an obligation for it -- a labelled `break`/`continue` therefore
|
|
819
|
+
// stays certify-then-crash even though the loop/continue targets below
|
|
820
|
+
// are real), `yield` (needs a real generator frame), and
|
|
821
|
+
// `control:loop:iteration` -- a loop not driven by a boolean condition,
|
|
822
|
+
// which is what a `for...of` is.
|
|
823
|
+
//
|
|
824
|
+
// `break` and `continue` render as an ordinary `goto` out of (`break`) or
|
|
825
|
+
// back into (`continue`) the enclosing loop's own blocks -- `loopExitOf`
|
|
826
|
+
// and the loop's header/latch, both already built for the loop's own test
|
|
827
|
+
// -- so they are claimed here now that the census mints a `completion`
|
|
828
|
+
// result for them to anchor this obligation on (`producers/control.ts`,
|
|
829
|
+
// `contributeBreakOrContinue`).
|
|
830
|
+
//
|
|
831
|
+
// `await` is claimed too, as of `ir/lower.ts`'s `lowerControl` `'await'`
|
|
832
|
+
// case and `emit.ts`'s `emitAwait`: not a real suspension (this substrate
|
|
833
|
+
// has no coroutine primitive), but the honest, narrower answer this
|
|
834
|
+
// runtime's settled-value-only `gea::Promise` supports -- see
|
|
835
|
+
// `AwaitOperation`'s doc comment (`ir/model.ts`) and `gea::Promise::
|
|
836
|
+
// awaited()` (`runtime/gea_runtime.h`) for why reading the value
|
|
837
|
+
// immediately is complete for every promise this backend can construct.
|
|
838
|
+
'control:debugger',
|
|
839
|
+
'control:branch',
|
|
840
|
+
'control:return',
|
|
841
|
+
'control:throw',
|
|
842
|
+
'control:loop',
|
|
843
|
+
// `do`/`while`: the head-tested loop's own blocks in the other order --
|
|
844
|
+
// body in the header, condition in the latch, and the latch's terminator
|
|
845
|
+
// is the conditional back edge (`ir/lower-flow.ts`'s `closeBackEdge`).
|
|
846
|
+
'control:loop-tail',
|
|
847
|
+
'control:break',
|
|
848
|
+
'control:continue',
|
|
849
|
+
'control:await',
|
|
850
|
+
// The `await` resume boundary (`producers/control.ts`'s `contributeAwait`
|
|
851
|
+
// mints one alongside every `control:await`). Claimed for the same reason
|
|
852
|
+
// `control:await` is: `ir/lower.ts`'s `lowerBoundary` renders it as
|
|
853
|
+
// nothing, honestly, because this backend's `await` never suspends -- see
|
|
854
|
+
// that function's own comment.
|
|
855
|
+
'boundary:async-resume',
|
|
856
|
+
// Real native C++ `try`/`catch`, over a straight-line try/catch body only
|
|
857
|
+
// (`targets/cpp/emit-exceptions.ts`'s `straightLineChain` refuses a
|
|
858
|
+
// branch or a loop inside one by name at emission, since
|
|
859
|
+
// `ir/lower-flow.ts`'s region bookkeeping does not yet track the extra
|
|
860
|
+
// blocks either would need). A `finally` clause is refused earlier still,
|
|
861
|
+
// the moment the try marker itself lowers (`ir/lower.ts`'s `'try'` case).
|
|
862
|
+
'control:try',
|
|
863
|
+
// The caught value, only reached at all for a *bound* `catch (e)`
|
|
864
|
+
// (`preflight/run.ts`'s `buildRuntimeHelperObligation` anchors on the
|
|
865
|
+
// exception region's own published result, and a bindingless `catch {}`
|
|
866
|
+
// publishes none). `e`'s checker type is `unknown` -- one of the four
|
|
867
|
+
// legitimate dynamic boundaries -- and it materializes as the native
|
|
868
|
+
// `catch (const gea::Value& e)` parameter itself
|
|
869
|
+
// (`CatchBindingOperation`), not a second, redundant declaration.
|
|
870
|
+
'boundary:exception-region',
|
|
871
|
+
// Postfix `x++`/`x--`'s own coercion half (`computations.ts`'s
|
|
872
|
+
// `contributeUpdate`): `ToNumeric` over a `dynamic` operand landing on
|
|
873
|
+
// `scalar(number)`, the only pair this obligation's key
|
|
874
|
+
// (`runtime-helper-key.ts`, unkeyed by carrier -- every non-identity
|
|
875
|
+
// `ToNumeric` shares this one string) is ever raised for in practice.
|
|
876
|
+
// `emit-tonumber.ts`'s `dynamicToNumericText` renders it: switch on the
|
|
877
|
+
// box's own runtime tag, ECMAScript's per-tag ToNumber for the four tags
|
|
878
|
+
// that have one (Number identity, Boolean 1/0, String parse, Null 0,
|
|
879
|
+
// Undefined NaN), and a loud runtime refusal -- never a silent NaN -- for
|
|
880
|
+
// Object/Function/Symbol/BigInt, none of which this backend's ToNumeric
|
|
881
|
+
// can convert (Object needs ToPrimitive, which can run arbitrary user
|
|
882
|
+
// code; BigInt is a lossy conversion the language defines separately).
|
|
883
|
+
'computation:coercion:ToNumeric',
|
|
884
|
+
'allocation:object-literal:dynamic',
|
|
885
|
+
'allocation:object-literal:record',
|
|
886
|
+
// An object literal whose selected carrier is `record-with-index` -- the
|
|
887
|
+
// struct half of a "no writes yet, but a computed-key write reaches this
|
|
888
|
+
// storage somewhere in the program" shape, e.g. `this.morphAttributes =
|
|
889
|
+
// {}` later filled by `container.morphAttributes[ name ] = value`
|
|
890
|
+
// elsewhere. `emit-allocation.ts`'s `emitAllocateRecord` allocates it
|
|
891
|
+
// through the identical `cppRecordStructName`/`cppTypeOf` spelling a
|
|
892
|
+
// `record` allocation uses just above -- `types.ts`'s `cppTypeOf` already
|
|
893
|
+
// spells the two through the same `case 'record': case
|
|
894
|
+
// 'record-with-index':` fallthrough, because the index-signature half is
|
|
895
|
+
// a MEMBER of the one struct (`records.ts`'s `renderStructDefinition`),
|
|
896
|
+
// never a second allocation. Every member this obligation's own literal
|
|
897
|
+
// installs inline resolves through `emitFieldInits`, the same as a
|
|
898
|
+
// `record`'s; a member the literal does not install inline (the common
|
|
899
|
+
// case for this carrier -- see `AllocateRecordOperation`'s own comment)
|
|
900
|
+
// is written afterward as an ordinary `define-own-property`/`set`, which
|
|
901
|
+
// `record-with-index:set:false`/`record-with-index:set:true` above claim.
|
|
902
|
+
'allocation:object-literal:record-with-index',
|
|
903
|
+
// An object literal whose DECLARED type has an index signature
|
|
904
|
+
// (`{ [key: string]: T }`, a `Record<K, V>`) derives a `dictionary`
|
|
905
|
+
// carrier, not a record, so the literal's members are keyed stores rather
|
|
906
|
+
// than struct field assignments. `emit-properties.ts`'s
|
|
907
|
+
// `emitAllocateDictionary` renders them through the container's own
|
|
908
|
+
// `operator[]`, the store path `gea::Dictionary` documents.
|
|
909
|
+
'allocation:object-literal:dictionary',
|
|
910
|
+
'allocation:object-literal:native-record-ref',
|
|
911
|
+
// A tagged template's template object. The usual TypeScript
|
|
912
|
+
// `TemplateStringsArray` shape is one exact `array-object`: indexed cooked
|
|
913
|
+
// strings are the Array's own slots and its required `raw` Array is a
|
|
914
|
+
// typed extension field on that same identity. This is deliberately the
|
|
915
|
+
// only certified carrier: record-with-index and native-record-ref cannot
|
|
916
|
+
// implement Array exotic index/length descriptors, frozen integrity, or
|
|
917
|
+
// a present cooked `undefined` for an invalid escape. Legitimate
|
|
918
|
+
// TemplateStringsArray declarations derive through the general
|
|
919
|
+
// interface-extends-ReadonlyArray rule to this array-object shape.
|
|
920
|
+
// `emitAllocateTemplateObject` builds it once per parse site behind a
|
|
921
|
+
// function `static`; every other carrier refuses by name.
|
|
922
|
+
completeTemplateObjectCapabilityKey,
|
|
923
|
+
// A regular-expression literal. The native carrier receives the Pattern
|
|
924
|
+
// directly; an authorized dynamic boundary receives that same fresh
|
|
925
|
+
// Pattern boxed as an Object. `emitAllocateRegExp` writes both forms, and
|
|
926
|
+
// refuses every other carrier rather than constructing a pattern into a
|
|
927
|
+
// layout it cannot name.
|
|
928
|
+
'allocation:regexp-object:native-record-ref(supported-flags)',
|
|
929
|
+
'allocation:regexp-object:dynamic(supported-flags)',
|
|
930
|
+
'allocation:regexp-object:native-record-ref(unicode-flags)',
|
|
931
|
+
'allocation:regexp-object:dynamic(unicode-flags)',
|
|
932
|
+
// The plainest carrier there is: an ordinary `gea::CallableObject<S>`,
|
|
933
|
+
// written by `emitAllocateCallable`'s generic tail as `{invoke,
|
|
934
|
+
// environment}` (or `{invoke, nullptr}` when nothing is captured).
|
|
935
|
+
//
|
|
936
|
+
// This row was MISSING while the printer rendered it unconditionally --
|
|
937
|
+
// the same certify/print disagreement 2.3 fixed four of, and it stayed
|
|
938
|
+
// invisible for a structural reason worth remembering: the demand only
|
|
939
|
+
// arises in a body `ir/generator-split.ts` MINTS, and certification used
|
|
940
|
+
// to run on the pre-split, pre-shake body list, so nothing ever asked.
|
|
941
|
+
// Certifying the shaken program is what surfaced it, on
|
|
942
|
+
// `generator-parameter-binding-at-call` and
|
|
943
|
+
// `generator-bridged-parameter-ownership` -- two programs that emitted
|
|
944
|
+
// correctly and passed the runtime suite the whole time.
|
|
945
|
+
'allocation:function-object:function',
|
|
946
|
+
// A capture-free callable is a pointer pair the emitter writes inline; a
|
|
947
|
+
// capturing one needs an environment layout that is not written, and
|
|
948
|
+
// `emitAllocateCallable` refuses it by name rather than allocating nothing.
|
|
949
|
+
'allocation:function-object:function-value-dispatch',
|
|
950
|
+
// The identical allocation for a class method the checker marked OPTIONAL
|
|
951
|
+
// (`?`) for structural-compatibility reasons alone (`bodyString?(): string`
|
|
952
|
+
// in node-compat's `globals.ts`, matching `ClientResponse`'s narrower
|
|
953
|
+
// shape) -- the payload built is the same `CallableObject`, wrapped in
|
|
954
|
+
// `gea::Optional<T>` because the FIELD's type admits absence, not because
|
|
955
|
+
// this allocation ever produces one. `emitAllocateCallable`'s `payloadCarrier`/
|
|
956
|
+
// `wrap` render it by building the payload at its own type and handing it
|
|
957
|
+
// to `Optional` as the one value its constructor takes.
|
|
958
|
+
'allocation:function-object:optional',
|
|
959
|
+
// A pre-`class` JavaScript constructor function -- one `function
|
|
960
|
+
// WebGLClipping( properties ) { this.uniform = uniform; ... }` that is
|
|
961
|
+
// both called and `new`ed, which is how three.js writes its whole
|
|
962
|
+
// renderer. The carrier is `gea::CallableConstructorObject`, holding two
|
|
963
|
+
// function pointers because `[[Call]]` and `[[Construct]]` differ at both
|
|
964
|
+
// ends: one is handed a receiver and returns what the body returns, the
|
|
965
|
+
// other manufactures the receiver (ECMA-262 10.2.2) and evaluates to it.
|
|
966
|
+
// `emitAllocateCallable` writes both, and `translation-unit.ts`'s
|
|
967
|
+
// `constructThunkOf` renders the second -- allocate the instance, enter
|
|
968
|
+
// the body with it, return it -- over the SAME body the invoke thunk
|
|
969
|
+
// adapts, so nothing here is a second lowering of the function.
|
|
970
|
+
'allocation:function-object:function-and-constructor',
|
|
971
|
+
// A plain JS constructor function whose own `.prototype` is read or
|
|
972
|
+
// written (`prototypeMutatedConstructorTypes`, dynamic-fallback.ts) --
|
|
973
|
+
// boxed to `gea::Value` because it needs a real, mutable "prototype" own
|
|
974
|
+
// property no native callable carrier has (ECMA-262 10.2.5
|
|
975
|
+
// MakeConstructor). `emitAllocateCallable`'s `payloadCarrier.kind ===
|
|
976
|
+
// 'dynamic'` branch recovers the lost call ABI through `ctx.abiOfCallable`,
|
|
977
|
+
// boxes the same thunk pointer every other carrier here would have used,
|
|
978
|
+
// and installs the default "prototype" object through
|
|
979
|
+
// `gea::host::installOrdinaryConstructorPrototype`.
|
|
980
|
+
'allocation:function-object:dynamic',
|
|
981
|
+
'allocation:array-literal:dynamic',
|
|
982
|
+
// A dynamic-fallback array literal still keeps its fresh Array exotic
|
|
983
|
+
// allocation native. When one spread source is dynamic,
|
|
984
|
+
// `emitAllocateArrayObject` drains the acquired iterator record through
|
|
985
|
+
// `runtime::iterator::appendGather`; this is distinct from an ordinary
|
|
986
|
+
// dynamic array literal so a target cannot certify that runtime loop
|
|
987
|
+
// without spelling it.
|
|
988
|
+
'allocation:array-literal:dynamic(dynamic-gather)',
|
|
989
|
+
'allocation:array-literal:array-object',
|
|
990
|
+
'allocation:array-literal:array-object(dynamic-gather)',
|
|
991
|
+
// A tuple literal (`[a, b]` typed `[number, string]`, `readonly [x, y]`,
|
|
992
|
+
// or any other array literal whose own type derives to `record` --
|
|
993
|
+
// `representation/derive.ts`'s `deriveTuple` states there is deliberately
|
|
994
|
+
// no separate tuple carrier: a tuple *is* a record whose keys are its
|
|
995
|
+
// positions). `ir/lower-allocation.ts`'s `lowerTupleLiteral` already
|
|
996
|
+
// renders this through the identical `ctx.builder.allocateRecord` an
|
|
997
|
+
// object literal with a record carrier uses -- the same IR node, the same
|
|
998
|
+
// `emitAllocateRecord` -- so this is not new machinery, only the claim
|
|
999
|
+
// `object-literal:record` above already states for the identical builder
|
|
1000
|
+
// call, restated for the literal syntax that also reaches it. Leaving it
|
|
1001
|
+
// unclaimed blocked every tuple-typed array literal at preflight even
|
|
1002
|
+
// though lowering already handled it cleanly.
|
|
1003
|
+
//
|
|
1004
|
+
// `native-record-ref` is deliberately NOT claimed alongside it, and not
|
|
1005
|
+
// for lack of matching machinery: `structural.ts`'s `layoutTypeAt` gives
|
|
1006
|
+
// an array literal's OWN type only when the checker's contextual type is
|
|
1007
|
+
// itself array- or tuple-shaped (`checker.isArrayType`/`isTupleType`), and
|
|
1008
|
+
// `checker.isTupleType` is decided before a declared/named-alias anchor is
|
|
1009
|
+
// ever consulted (`structural.ts`'s own type walk), so a tuple can never
|
|
1010
|
+
// reach a `declared`/`object-anchor` shape and therefore never derives to
|
|
1011
|
+
// `native-record-ref`. There is consequently no TypeScript program for
|
|
1012
|
+
// which an array literal's shape resolves to `native-record-ref` at all --
|
|
1013
|
+
// before `layoutTypeAt` was narrowed, one DID reach it, but only by a
|
|
1014
|
+
// defect: an array literal being contextually typed against an unrelated
|
|
1015
|
+
// Object-flagged interface an overloaded call's parameter happened to name
|
|
1016
|
+
// (`new Uint8Array([68, 73, 65, 71])` against `Iterable<number>`, a
|
|
1017
|
+
// symbol-keyed protocol with zero data fields) -- `lowerTupleLiteral`'s own
|
|
1018
|
+
// arity check ("4 elements into a layout of 0 fields") is what caught it
|
|
1019
|
+
// once claimed, exactly the crash-during-rendering a certified program is
|
|
1020
|
+
// supposed to never reach. Fixed at the source in `layoutTypeAt`; nothing
|
|
1021
|
+
// is left here to claim.
|
|
1022
|
+
'allocation:array-literal:record',
|
|
1023
|
+
// Fixed-arity array-destructuring and its rest element, over a provably
|
|
1024
|
+
// plain Array source only -- `ir/lower-destructuring.ts`'s fast path
|
|
1025
|
+
// reads the source by constant index / range-copies it, the same
|
|
1026
|
+
// machinery `allocation:array-literal:array-object` and array spread
|
|
1027
|
+
// already use. `preflight/run.ts`'s obligation key carries the source's
|
|
1028
|
+
// own carrier for exactly this claim to stay narrow: every other carrier
|
|
1029
|
+
// (a Map, a Set, a user-defined iterable) is left correctly unclaimed and
|
|
1030
|
+
// refuses at preflight, not mid-lowering. An object-pattern rest
|
|
1031
|
+
// ("{...rest}") is kept structurally unclaimable even over an
|
|
1032
|
+
// array-typed source -- see the "object-pattern" key segment in
|
|
1033
|
+
// `preflight/run.ts`'s 'rest-element' case.
|
|
1034
|
+
'destructuring:array-pattern:array-object',
|
|
1035
|
+
// A source declared `any`/`unknown`, including the true arm of
|
|
1036
|
+
// `Array.isArray(source)`, keeps its `Value` identity and is stepped via
|
|
1037
|
+
// `runtime::iterator`; array rest drains the same record through a fresh
|
|
1038
|
+
// dynamic-element array rather than projecting the source as an array.
|
|
1039
|
+
'destructuring:array-pattern:dynamic',
|
|
1040
|
+
'destructuring:array-pattern-close:dynamic',
|
|
1041
|
+
'destructuring:array-pattern-close:iterator',
|
|
1042
|
+
'destructuring:rest-element:dynamic',
|
|
1043
|
+
// A presence test followed by TypeError on absence; the source stays in
|
|
1044
|
+
// its selected carrier, including primitive and native object sources.
|
|
1045
|
+
'destructuring:RequireObjectCoercible',
|
|
1046
|
+
// A tuple's element, read back by position -- `const [a, b] = pair` over a
|
|
1047
|
+
// `record`-carried tuple. This is a record field get keyed by the
|
|
1048
|
+
// position's own string ("0", "1", ...), exactly the field
|
|
1049
|
+
// `lowerTupleLiteral` (above) wrote it under -- never the iterator
|
|
1050
|
+
// protocol: a statically-typed tuple's shape is closed and known at
|
|
1051
|
+
// compile time, so there is nothing for GetIterator/next() to resolve
|
|
1052
|
+
// that a plain field read does not already answer. `rest-element` over a
|
|
1053
|
+
// tuple source is deliberately NOT claimed alongside this: a tuple's
|
|
1054
|
+
// remaining positions have no common carrier to range-copy into the way
|
|
1055
|
+
// a plain Array's do, and `destructuring:rest-element:record` stays
|
|
1056
|
+
// correctly unclaimed for that reason.
|
|
1057
|
+
//
|
|
1058
|
+
// Unlike the allocation claim above, this one is genuinely narrower than
|
|
1059
|
+
// "every `record` source": a destructuring source's type is the value's
|
|
1060
|
+
// own declared/inferred type, never routed through `layoutTypeAt`'s
|
|
1061
|
+
// array-literal guard, so an ordinary named-field object that also
|
|
1062
|
+
// declares `[Symbol.iterator]` (`const [a, b] = value` over a `{ first,
|
|
1063
|
+
// second, [Symbol.iterator]() {...} }`-shaped value) derives to the
|
|
1064
|
+
// identical `record` carrier without being a tuple at all.
|
|
1065
|
+
// `preflight/run.ts`'s `sourceIsPositionalTupleRecord` narrows the
|
|
1066
|
+
// obligation key to "record(non-tuple)" -- which this manifest does not
|
|
1067
|
+
// claim -- whenever the record's own fields are not exactly "0".."n-1" in
|
|
1068
|
+
// order, so that shape still refuses at preflight rather than certifying
|
|
1069
|
+
// and then throwing out of `lowerTuplePatternRead`'s own field-key check.
|
|
1070
|
+
// `native-record-ref` gets no claim at all for the identical reason
|
|
1071
|
+
// `sourceIsPositionalTupleRecord`'s own comment states: preflight has no
|
|
1072
|
+
// deriver to resolve its shape id back to fields, so the positional check
|
|
1073
|
+
// this claim depends on cannot be run for it, and claiming it unchecked
|
|
1074
|
+
// would reopen the exact false-certification risk this narrowing exists
|
|
1075
|
+
// to close.
|
|
1076
|
+
'destructuring:array-pattern:record',
|
|
1077
|
+
// A tuple's element, read back by position, when the source is a
|
|
1078
|
+
// `tagged-union` all of whose arms are themselves tuples --
|
|
1079
|
+
// `[T, ParamIndexMap][] | [T, Params][]`'s own per-entry type
|
|
1080
|
+
// (`[T, ParamIndexMap] | [T, Params]`), hono's own router match result:
|
|
1081
|
+
// fixed arity at fixed positions in EVERY arm, so `.map(([[, route]]) =>
|
|
1082
|
+
// route)`'s pattern reads position 0 the same closed-shape way a lone
|
|
1083
|
+
// tuple's positional field get already does. `ir/lower-destructuring.ts`'s
|
|
1084
|
+
// `isTupleUnionCarrier` is what recognizes the shape (the shared source
|
|
1085
|
+
// step aliases straight to the base value, same as the lone-tuple case
|
|
1086
|
+
// just above), and `lowerTaggedUnionTuplePatternRead` renders each
|
|
1087
|
+
// element as an ordinary record field get keyed by the position's own
|
|
1088
|
+
// string -- the identical `ctx.builder.get` the lone-tuple path already
|
|
1089
|
+
// uses, just against a `tagged-union` receiver instead of a `record` one.
|
|
1090
|
+
// That receiver kind is nothing new to the C++ backend: a `get` whose
|
|
1091
|
+
// receiver is a `tagged-union` already renders through
|
|
1092
|
+
// `emit-properties.ts`'s existing dispatch to `emit-union-properties.ts`'s
|
|
1093
|
+
// `taggedUnionGetText`, which was already claiming per-arm STATIC-key
|
|
1094
|
+
// field dispatch (`armFieldSite`) for exactly this receiver kind before
|
|
1095
|
+
// this task -- so no emitter code was added for this claim, only the
|
|
1096
|
+
// preflight/lowering acceptance that a tagged union of tuples is as
|
|
1097
|
+
// closed-shape as a lone tuple already was.
|
|
1098
|
+
'destructuring:array-pattern:tagged-union',
|
|
1099
|
+
// A general iterable source -- a `Generator<T>` reached directly (`var
|
|
1100
|
+
// [a, b] = g()`), or one whose `[Symbol.iterator]()` itself returns one
|
|
1101
|
+
// (a class/record method written as a generator, `generatorRecordTypeOf`
|
|
1102
|
+
// in `producers/protocol.ts`): `representation/publish.ts` derives the
|
|
1103
|
+
// shared source step's own `iterator-record` result straight off the
|
|
1104
|
+
// base's structural type with no override needed, because
|
|
1105
|
+
// `GeneratorDeclarationPolicy` (`representation/derive.ts`) already
|
|
1106
|
+
// carries a `Generator<T>` as the native `iterator(T)` cursor --
|
|
1107
|
+
// `%GeneratorPrototype%[@@iterator]` returns `this` (ECMA-262 27.5.1.2),
|
|
1108
|
+
// so the pattern's own "get iterator" step is an ALIAS of the base value,
|
|
1109
|
+
// never a construction, exactly as the tuple/array-object fast paths
|
|
1110
|
+
// above alias rather than build. `ir/lower-destructuring.ts`'s
|
|
1111
|
+
// `lowerArrayPatternSource` registers that alias, and each bound
|
|
1112
|
+
// element's own step advances the SAME cursor with `arrayNext()`/`done()`
|
|
1113
|
+
// -- the identical primitives a `for`-`of` over the same generator already
|
|
1114
|
+
// uses (`emit-iterator.ts`'s `emitIteratorNext`/`emitIteratorDone`), so no
|
|
1115
|
+
// new emission is needed, only the acceptance that a pattern may read
|
|
1116
|
+
// them one call per bound position instead of one call per loop
|
|
1117
|
+
// iteration.
|
|
1118
|
+
//
|
|
1119
|
+
// Scoped to a source that is ALREADY a cursor. A receiver whose
|
|
1120
|
+
// `[Symbol.iterator]()` is an ordinary method returning a hand-built
|
|
1121
|
+
// `{next, return}` record (the fully dynamic protocol
|
|
1122
|
+
// `mintIteratorSteps`/`emitDynamicGetIterator` render for `for`-`of`) is
|
|
1123
|
+
// a DIFFERENT shape -- a `record`/`class-ref`/`native-record-ref`
|
|
1124
|
+
// `iterator-record`, never this `iterator` one -- and this claim says
|
|
1125
|
+
// nothing about it; that shape stays correctly unclaimed for the
|
|
1126
|
+
// array-pattern form until this producer also mints the get-method/
|
|
1127
|
+
// get-iterator call the loop's own `mintIteratorSteps` already does.
|
|
1128
|
+
//
|
|
1129
|
+
// A REST element over the same cursor source (`[...xs] = g()`) is
|
|
1130
|
+
// deliberately NOT claimed alongside it: draining an unbounded cursor into
|
|
1131
|
+
// a fresh array needs an actual gathering LOOP, and every loop this IR
|
|
1132
|
+
// builds today lowers a real source-level `for`/`while`/`for`-`of`
|
|
1133
|
+
// construct through `control.ts`'s own census/gating wiring -- there is no
|
|
1134
|
+
// synthetic-loop desugaring an array-pattern's rest element could reach
|
|
1135
|
+
// for instead, so it stays refused at preflight rather than certifying a
|
|
1136
|
+
// shape nothing can lower.
|
|
1137
|
+
'destructuring:array-pattern:iterator',
|
|
1138
|
+
'destructuring:rest-element:array-object',
|
|
1139
|
+
// `const { strict, ...rest } = options` over a `record`/`native-record-ref`
|
|
1140
|
+
// source: the "object-pattern" segment in the obligation key
|
|
1141
|
+
// (`preflight/runtime-helper-key.ts`'s 'rest-element' case) keeps this
|
|
1142
|
+
// structurally distinct from `destructuring:rest-element:record` above,
|
|
1143
|
+
// which stays correctly unclaimed for the ARRAY-pattern tuple-rest case a
|
|
1144
|
+
// few lines up. This one is the opposite of that exclusion's reasoning:
|
|
1145
|
+
// an object-pattern rest's own type is `Omit<Source, K>`, a CLOSED field
|
|
1146
|
+
// set TypeScript already resolved at check time, not the general
|
|
1147
|
+
// `CopyDataProperties` over a key set computed at runtime -- so there is
|
|
1148
|
+
// no dynamic key enumeration to perform, only a field-by-field copy.
|
|
1149
|
+
// `ir/lower-destructuring.ts`'s `lowerObjectPatternRest` renders it: read
|
|
1150
|
+
// the rest binding's own required record layout, `[[Get]]` each field off
|
|
1151
|
+
// the source by name (the same primitive an object-pattern element read
|
|
1152
|
+
// already uses), and assemble the result with `allocateRecord` (the same
|
|
1153
|
+
// primitive an object literal's own allocation uses).
|
|
1154
|
+
'destructuring:rest-element:object-pattern:record',
|
|
1155
|
+
'destructuring:rest-element:object-pattern:native-record-ref',
|
|
1156
|
+
// An open dictionary's key set is runtime state. The lowering allocates a
|
|
1157
|
+
// fresh dictionary, uses the existing CopyDataProperties walk, and deletes
|
|
1158
|
+
// the pattern's excluded keys from that result; the source is unchanged.
|
|
1159
|
+
'destructuring:rest-element:object-pattern:dictionary',
|
|
1160
|
+
// A class's constructor object is a pointer to the construct function
|
|
1161
|
+
// `translation-unit.ts` emits for that class, with no environment: a class
|
|
1162
|
+
// declaration captures nothing. A class *expression* inside a closure would,
|
|
1163
|
+
// and `emitAllocateConstructor` refuses a capture-carrying one by name.
|
|
1164
|
+
'allocation:class-constructor-object:constructor-family',
|
|
1165
|
+
// An intrinsic JSX element (`<view>`, `<text>`, ...) allocates through
|
|
1166
|
+
// `gea::jsx::create`, with every prop and child threaded through
|
|
1167
|
+
// `gea::jsx::prop`/`gea::jsx::child`. `element:value` and
|
|
1168
|
+
// `element:fragment` are deliberately absent, and not for lack of effort:
|
|
1169
|
+
// an element whose tag names a value means whatever the library that
|
|
1170
|
+
// declared it says it means, so the recipe belongs to that library's
|
|
1171
|
+
// plugin and arrives with it. Claiming either here would assert this
|
|
1172
|
+
// backend can build something it has no definition of.
|
|
1173
|
+
'element:intrinsic',
|
|
1174
|
+
// `ToBoolean`, per carrier, because the rule differs per carrier and a
|
|
1175
|
+
// backend that can test a number has said nothing about testing a record.
|
|
1176
|
+
// `dynamic` is claimed too, as of `gea::host::detail::toBoolean`
|
|
1177
|
+
// (gea_runtime.h): ECMA-262 7.1.2 is a closed nine-tag table, so a boxed
|
|
1178
|
+
// value's truthiness is answerable from its own tag (and, for a boxed
|
|
1179
|
+
// boolean/number/string, its payload) without any open-ended dispatch.
|
|
1180
|
+
// `unresolved` stays absent -- lattice bottom names no runtime value to
|
|
1181
|
+
// test at all.
|
|
1182
|
+
'conversion:to-boolean:scalar',
|
|
1183
|
+
'conversion:to-boolean:string',
|
|
1184
|
+
'conversion:to-boolean:null',
|
|
1185
|
+
'conversion:to-boolean:undefined',
|
|
1186
|
+
'conversion:to-boolean:optional',
|
|
1187
|
+
'conversion:to-boolean:tagged-union',
|
|
1188
|
+
'conversion:to-boolean:class-ref',
|
|
1189
|
+
'conversion:to-boolean:record',
|
|
1190
|
+
'conversion:to-boolean:native-record-ref',
|
|
1191
|
+
'conversion:to-boolean:array-object',
|
|
1192
|
+
'conversion:to-boolean:dictionary',
|
|
1193
|
+
// Every Object is truthy: `new Map()` with zero entries is `true`, exactly
|
|
1194
|
+
// as `[]` is. `emit-presence.ts`'s always-truthy group renders it, and
|
|
1195
|
+
// `model.ts`'s `alwaysTruthyKinds` is what licenses a merge over one.
|
|
1196
|
+
'conversion:to-boolean:keyed-collection',
|
|
1197
|
+
'conversion:to-boolean:native-handle',
|
|
1198
|
+
'conversion:to-boolean:function',
|
|
1199
|
+
'conversion:to-boolean:function-family',
|
|
1200
|
+
'conversion:to-boolean:function-value-family',
|
|
1201
|
+
'conversion:to-boolean:function-value-dispatch',
|
|
1202
|
+
'conversion:to-boolean:constructor-family',
|
|
1203
|
+
'conversion:to-boolean:constructor-value-dispatch',
|
|
1204
|
+
'conversion:to-boolean:function-and-constructor',
|
|
1205
|
+
'conversion:to-boolean:dynamic',
|
|
1206
|
+
// `for`-`of`/argument-spread/`yield*` over a provably plain `T[]`: ECMA-262
|
|
1207
|
+
// 23.1.5's Array Iterator is a plain index/length walk over the exact
|
|
1208
|
+
// array, so `get-iterator` allocates a `gea::Iterator<T>` cursor directly
|
|
1209
|
+
// (no `[[Get]]` of `@@iterator`, no dynamic method call -- there is no
|
|
1210
|
+
// `protocol:iterator:get-method:*` claim anywhere in this manifest, and
|
|
1211
|
+
// there does not need to be one for this path) and `next` walks it
|
|
1212
|
+
// in-place (`targets/cpp/runtime/gea_runtime.h`'s `Iterator::arrayNext`,
|
|
1213
|
+
// `targets/cpp/emit-iterator.ts`). The carrier suffix is what keeps this
|
|
1214
|
+
// claim scoped to exactly that shape: `preflight/runtime-helper-key.ts`'s
|
|
1215
|
+
// `runtimeHelperKey` keys a protocol step by the operand carrier it reads,
|
|
1216
|
+
// so a for-of over any other iterable -- a `Map`, a `Set`, a genuinely
|
|
1217
|
+
// dynamic `Iterable<T>` -- resolves a different, unclaimed key
|
|
1218
|
+
// (`...:unresolved`, `...:dynamic`, ...) and is correctly refused here,
|
|
1219
|
+
// before lowering ever sees it. `next`'s own carrier is the iterator
|
|
1220
|
+
// *record* it advances, which by the time this step runs is the
|
|
1221
|
+
// `gea::Iterator<T>` the matching `get-iterator` already published
|
|
1222
|
+
// (`representation/publish.ts`'s `arrayFastPathIteratorCursorOf`) -- so
|
|
1223
|
+
// the claim reads `iterator`, the representation kind, not `array-object`.
|
|
1224
|
+
// `k in o`, stated by the file that renders it so the claim and the
|
|
1225
|
+
// rendering cannot drift: `emit-in.ts`'s `hasPropertyHelperClaims`.
|
|
1226
|
+
...hasPropertyHelperClaims,
|
|
1227
|
+
'protocol:iterator:get-iterator:array-object',
|
|
1228
|
+
// The same cursor over a `Set<T>` (ECMA-262 24.2.3.10): a fixed walk of
|
|
1229
|
+
// the collection's own insertion-ordered entries with no `@@iterator`
|
|
1230
|
+
// lookup, so `gea::Iterator<T>`'s Set constructor serves it and
|
|
1231
|
+
// `producers/shared.ts`'s `isNativeIterableSetType` is what keeps a
|
|
1232
|
+
// `get-method` step from being minted for one. `Map` is deliberately not
|
|
1233
|
+
// claimed -- its iterator yields a `[K, V]` pair with no cursor carrier --
|
|
1234
|
+
// and neither weak family iterates at all, so both still refuse by name.
|
|
1235
|
+
'protocol:iterator:get-iterator:keyed-collection',
|
|
1236
|
+
// The same cursor over a `string` (ECMA-262 22.1.3.36
|
|
1237
|
+
// `String.prototype[@@iterator]`): one CODE POINT per step over immutable
|
|
1238
|
+
// storage, so there is nothing for `GetIterator` to resolve that the value
|
|
1239
|
+
// itself does not already answer, and `gea::Iterator<std::string>`'s
|
|
1240
|
+
// string constructor serves it. `producers/shared.ts`'s
|
|
1241
|
+
// `isNativeIterableStringType` is what keeps a `get-method` step from
|
|
1242
|
+
// being minted for one; a shape that CARRIES as `string` without matching
|
|
1243
|
+
// that predicate (a union of string literals) still mints one and refuses
|
|
1244
|
+
// on the unclaimed `protocol:iterator:get-method:string` instead, which is
|
|
1245
|
+
// the fail-closed direction.
|
|
1246
|
+
'protocol:iterator:get-iterator:string',
|
|
1247
|
+
// A `Generator<T, TReturn, TNext>` (ECMA-262 27.5), carried as the same
|
|
1248
|
+
// `iterator(T)` cursor because a generator IS its own iterator:
|
|
1249
|
+
// `%GeneratorPrototype%[@@iterator]` returns `this`, so `get-iterator` over
|
|
1250
|
+
// one is an assignment (`emit-iterator.ts`) rather than a construction, and
|
|
1251
|
+
// `next` walks the coroutine frame `gea::Iterator<E>::promise_type` owns.
|
|
1252
|
+
'protocol:iterator:get-iterator:iterator',
|
|
1253
|
+
// The four native cursors again, this time over a POSSIBLY-ABSENT source
|
|
1254
|
+
// (`T[] | undefined`, `Set<T> | null`, ...). Iterating an absent value is
|
|
1255
|
+
// a runtime `TypeError` in the language itself -- ECMA-262 7.4.2
|
|
1256
|
+
// `GetIterator` performs `GetMethod(obj, @@iterator)`, which throws on
|
|
1257
|
+
// `undefined`/`null` -- never a static impossibility, so the walk over a
|
|
1258
|
+
// present payload is byte-for-byte the walk over a bare one and the
|
|
1259
|
+
// absence is ONE extra fact: whether the walk starts.
|
|
1260
|
+
// `targets/cpp/emit-iterator.ts` spells that as
|
|
1261
|
+
// `gea::detail::requireIterablePresent` in front of the same cursor
|
|
1262
|
+
// constructor, and `producers/shared.ts`'s `presentIterationArm` is what
|
|
1263
|
+
// routes such a source onto this path at all rather than demanding an
|
|
1264
|
+
// `@@iterator` lookup this backend has no representation for. Measured on
|
|
1265
|
+
// three.js: `this.materialCache.get( material )` is `Set<T> | undefined`
|
|
1266
|
+
// from the collection census, and every `for`-`of` over one refused with
|
|
1267
|
+
// an unclaimed `protocol:iterator:get-method:optional`.
|
|
1268
|
+
//
|
|
1269
|
+
// Claimed under their OWN keys rather than folded into the four above --
|
|
1270
|
+
// `preflight/runtime-helper-key.ts`'s `optionalIterationSourceKind`
|
|
1271
|
+
// reports `optional(<payload kind>)`, the same spelling
|
|
1272
|
+
// `spreadSourceCarrierKind` uses -- so a payload this emitter cannot
|
|
1273
|
+
// unwrap (a fixed-arity tuple, whose positions are read through a lambda
|
|
1274
|
+
// capture instead of a cursor constructor) stays refused by name at
|
|
1275
|
+
// preflight instead of being certified and crashed at emission.
|
|
1276
|
+
//
|
|
1277
|
+
// `for`-`in`'s own absent claim sits beside its dictionary claims below,
|
|
1278
|
+
// and it is NOT one of these assertions: ECMA-262 14.7.5.5 evaluates an
|
|
1279
|
+
// `undefined`/`null` enumerate source to a BREAK completion and the loop
|
|
1280
|
+
// runs zero times, so it is spelled as an empty cursor instead.
|
|
1281
|
+
'protocol:iterator:get-iterator:optional(array-object)',
|
|
1282
|
+
'protocol:iterator:get-iterator:optional(keyed-collection)',
|
|
1283
|
+
'protocol:iterator:get-iterator:optional(string)',
|
|
1284
|
+
'protocol:iterator:get-iterator:optional(iterator)',
|
|
1285
|
+
'protocol:iterator:next:iterator',
|
|
1286
|
+
// The GENERAL protocol: a class instance or a plain object whose
|
|
1287
|
+
// `[Symbol.iterator]()` is a real, program-written method (`Headers`'s
|
|
1288
|
+
// own, in `runtime/node/globals.ts`), rather than one of the native
|
|
1289
|
+
// sources above. `get-method` resolves the member (a `[[Get]]`,
|
|
1290
|
+
// `ir/lower-protocol.ts`'s own `get-method` case), `get-iterator` calls
|
|
1291
|
+
// it, and `next` calls the returned record's own `next()` once per step
|
|
1292
|
+
// -- all three claimed and rendered together by the file whose own
|
|
1293
|
+
// `dynamicIteratorHelperClaims` this spreads in, for the one-authority
|
|
1294
|
+
// reason `enumerateHelperClaims` already states below. `class-ref` and
|
|
1295
|
+
// `record` only: `preflight/runtime-helper-key.ts`'s
|
|
1296
|
+
// `iteratorMethodCarrierKind` keeps a "record" receiver with no
|
|
1297
|
+
// discoverable `@@iterator` FIELD -- an open tuple, whose iterator is
|
|
1298
|
+
// `Array.prototype`'s own -- off this claim, on the deliberately
|
|
1299
|
+
// unclaimed `record(no-iterator-method)` sibling instead.
|
|
1300
|
+
...dynamicIteratorHelperClaims,
|
|
1301
|
+
// `for (const name of ['a', 'b'] as const)` -- a fixed-arity tuple, which
|
|
1302
|
+
// has no method to fetch at all and unrolls to a positional read; stated
|
|
1303
|
+
// by the file that renders it, same as the two lists around it.
|
|
1304
|
+
...staticTupleIteratorHelperClaims,
|
|
1305
|
+
// `for (const k in table)` over a string-keyed index signature -- ECMA-262
|
|
1306
|
+
// 14.7.5.9 `EnumerateObjectProperties` -- carried as the same
|
|
1307
|
+
// `gea::Iterator<std::string>` cursor every claim above uses, walking
|
|
1308
|
+
// `gea::Dictionary::propertyKeys` (whose order IS
|
|
1309
|
+
// `OrdinaryOwnPropertyKeys`, 10.1.11, which is why that container holds
|
|
1310
|
+
// its entries in creation order rather than sorted). The carrier suffix
|
|
1311
|
+
// scopes this exactly: a `for`-`in` over a RECORD -- a struct whose keys
|
|
1312
|
+
// are a compile-time list, not a runtime table -- resolves
|
|
1313
|
+
// `protocol:enumerate:get-iterator:record`, which nothing claims, and is
|
|
1314
|
+
// refused here before lowering, exactly as an unclaimed iterable is.
|
|
1315
|
+
'protocol:enumerate:get-iterator:dictionary(string)',
|
|
1316
|
+
'protocol:enumerate:get-iterator:dictionary(symbol)',
|
|
1317
|
+
// The same two tables behind a possibly-absent carrier. This is the one
|
|
1318
|
+
// absent claim that is not a presence assertion: ECMA-262 14.7.5.5 runs a
|
|
1319
|
+
// `for`-`in` over `undefined`/`null` zero times, so `emit-iterator.ts`
|
|
1320
|
+
// spells it as `gea::detail::enumerateIfPresent` -- the table's own key
|
|
1321
|
+
// cursor when present, a default-constructed, already-done cursor when
|
|
1322
|
+
// not. Three's `WebGLPrograms.getProgramCacheKey` walks
|
|
1323
|
+
// `parameters.defines`, which the base-class overlay states
|
|
1324
|
+
// `Record | undefined` on `Material`, through an untyped JS parameter the
|
|
1325
|
+
// checker cannot narrow at the site's own `!== undefined` guard. Only
|
|
1326
|
+
// the two table domains: an absent record/class/host struct stays refused
|
|
1327
|
+
// by name (`runtime-helper-key.ts`'s `enumerateGetIteratorCarrierKind`)
|
|
1328
|
+
// because the static-snapshot walks read fields off the receiver itself.
|
|
1329
|
+
'protocol:enumerate:get-iterator:optional(dictionary(string))',
|
|
1330
|
+
'protocol:enumerate:get-iterator:optional(dictionary(symbol))',
|
|
1331
|
+
'protocol:enumerate:next:iterator',
|
|
1332
|
+
// `for`-`in` over a statically shaped receiver (a record, a class
|
|
1333
|
+
// instance, a named interface/type-alias, ...) or a genuinely dynamic
|
|
1334
|
+
// one -- the two remaining enumeration sources, claimed by the file that
|
|
1335
|
+
// renders both (`emit-iterator.ts`'s own `enumerateHelperClaims`, spread
|
|
1336
|
+
// in here so the claim and the rendering stay one authority). This
|
|
1337
|
+
// claims the bare `native-record-ref` key only -- a data-only HOST-bound
|
|
1338
|
+
// declared type derives that identical `.kind` but is reported under the
|
|
1339
|
+
// refined, deliberately UNCLAIMED `native-record-ref(host-bound)` key
|
|
1340
|
+
// instead (`preflight/runtime-helper-key.ts`'s
|
|
1341
|
+
// `enumerateGetIteratorCarrierKind`), because `emitStaticEnumerateIterator`
|
|
1342
|
+
// throws for it: a host struct has no compiler-rendered field dispatcher.
|
|
1343
|
+
...enumerateHelperClaims,
|
|
1344
|
+
// Object spread's `CopyDataProperties` (ECMA-262 7.3.25) when the
|
|
1345
|
+
// source's own-property set is not known until this runs -- a spread of
|
|
1346
|
+
// a union or an index-signature type into a literal whose own layout
|
|
1347
|
+
// resolves to a `dictionary` (`structural-layout-type.ts`'s
|
|
1348
|
+
// `layoutTypeAt`, "the one member of a union that can genuinely hold ANY
|
|
1349
|
+
// key the spread might copy"). `targets/cpp/emit-allocation.ts`'s
|
|
1350
|
+
// `emitSpreadCopy` renders it: a plain string/symbol `dictionary` source
|
|
1351
|
+
// walks its domain-matched `Dictionary::copyInto`/
|
|
1352
|
+
// `SymbolDictionary::copyInto` at runtime; the source->receiver suffix is
|
|
1353
|
+
// part of the certificate, so neither a numeric table nor a cross-domain
|
|
1354
|
+
// copy can borrow that claim. A `tagged-union`
|
|
1355
|
+
// source unrolls per arm, guarded by `armIs` -- claimed only under the
|
|
1356
|
+
// refined `tagged-union(record-or-dictionary)` key
|
|
1357
|
+
// (`preflight/runtime-helper-key.ts`'s `spreadSourceCarrierKind`), which
|
|
1358
|
+
// that same file computes as EXACTLY the union shapes `emitSpreadCopy`
|
|
1359
|
+
// can render (every arm a `dictionary`, or a `record` with no accessor
|
|
1360
|
+
// and no optional field) -- a union carrying any other arm kind keeps the
|
|
1361
|
+
// bare, deliberately unclaimed `tagged-union` key and refuses by name
|
|
1362
|
+
// before lowering ever reaches it.
|
|
1363
|
+
'protocol:spread:next:dictionary(string->string)',
|
|
1364
|
+
'protocol:spread:next:dictionary(symbol->symbol)',
|
|
1365
|
+
'protocol:spread:next:tagged-union(record-or-dictionary)',
|
|
1366
|
+
// An `optional` source -- `headers?: HeaderRecord` in hono's own
|
|
1367
|
+
// `setDefaultContentType` (`...headers,` inside an object literal) --
|
|
1368
|
+
// refines the identical way one layer out: `CopyDataProperties` copies
|
|
1369
|
+
// nothing for `null`/`undefined`, so `emitSpreadCopy`'s `optional`
|
|
1370
|
+
// branch renders that absent case as no write at all, and the present
|
|
1371
|
+
// case recurses into the SAME per-arm dispatch above. Claimed only under
|
|
1372
|
+
// the refined `optional(tagged-union(record-or-dictionary))` key
|
|
1373
|
+
// (`preflight/runtime-helper-key.ts`'s `spreadSourceCarrierKind`, which
|
|
1374
|
+
// computes it via the identical `isCopyableSpreadUnion` check as the
|
|
1375
|
+
// bare tagged-union claim) -- an optional payload of any other shape
|
|
1376
|
+
// keeps its own bare `optional(...)` key, deliberately unclaimed.
|
|
1377
|
+
'protocol:spread:next:optional(tagged-union(record-or-dictionary))',
|
|
1378
|
+
// A bare `dictionary` under `optional` -- `headers?: Record<string,
|
|
1379
|
+
// string>`, no union at all -- refines the identical one layer out too.
|
|
1380
|
+
// `emitSpreadSourceCopy`'s `optional` branch (`emit-allocation.ts`)
|
|
1381
|
+
// recurses on the present payload through its own generic `source.kind
|
|
1382
|
+
// !== 'tagged-union'` fallback, which reaches `emitSpreadArmCopy` and
|
|
1383
|
+
// then `emitSpreadDictionaryArmCopy` -- the identical `dictionary`-arm
|
|
1384
|
+
// render the matching domain-qualified bare dictionary claim above already
|
|
1385
|
+
// exercises for a non-optional source, just reached one payload-read
|
|
1386
|
+
// deeper. `spreadSourceCarrierKind` already computes this exact key
|
|
1387
|
+
// (`optional(dictionary(string->string))`, or its symbol sibling) and the
|
|
1388
|
+
// renderer already proven above is the only thing these claims add.
|
|
1389
|
+
'protocol:spread:next:optional(dictionary(string->string))',
|
|
1390
|
+
'protocol:spread:next:optional(dictionary(symbol->symbol))',
|
|
1391
|
+
// A source that simply IS a record `emitSpreadRecordArmCopy` can unroll --
|
|
1392
|
+
// no accessor member, every field required -- with no union and no
|
|
1393
|
+
// optional around it. `emitSpreadSourceCopy`'s own `source.kind !==
|
|
1394
|
+
// 'tagged-union'` fallback routes it to the identical `emitSpreadArmCopy`
|
|
1395
|
+
// dispatch a one-armed `tagged-union(record-or-dictionary)` already
|
|
1396
|
+
// reaches, so this claims a render already proven by the union claim
|
|
1397
|
+
// above, one arm-read shallower. Until now `spreadSourceCarrierKind`
|
|
1398
|
+
// returned the bare, unrefined `record` key for it, which meant `{ ...r }`
|
|
1399
|
+
// over a record refused while `{ ...(r as R | R2) }` over the same value
|
|
1400
|
+
// compiled -- the shape, not the union, is what the emitter reads.
|
|
1401
|
+
//
|
|
1402
|
+
// The refined key is what carries the proof. A field that may be absent is
|
|
1403
|
+
// copied under the independent presence bit generated beside its value --
|
|
1404
|
+
// `CopyDataProperties` copies the key only when the source has it, even
|
|
1405
|
+
// when the present value is `undefined`. A record with an accessor member
|
|
1406
|
+
// keeps the bare `record` key and stays deliberately unclaimed, exactly as
|
|
1407
|
+
// a union with an unrenderable arm does.
|
|
1408
|
+
'protocol:spread:next:record(copyable)',
|
|
1409
|
+
// A `class-ref` and a data-only `native-record-ref` name their field list
|
|
1410
|
+
// instead of carrying it, and that list IS the instance's own enumerable
|
|
1411
|
+
// key set: methods and accessors are on the prototype, never own
|
|
1412
|
+
// properties, so `{ ...instance }` copies exactly the fields. This is the
|
|
1413
|
+
// same list `host/object-protocol.ts` already enumerates for
|
|
1414
|
+
// `Object.keys`/`Object.assign` over a class, reached here through
|
|
1415
|
+
// `representation/record-fields.ts`'s `staticOwnFieldsOf` -- which is
|
|
1416
|
+
// also what the refined key above is computed from, so the render and its
|
|
1417
|
+
// licence read one list rather than two.
|
|
1418
|
+
//
|
|
1419
|
+
// A HOST-stated struct keeps the bare, unclaimed `native-record-ref` key:
|
|
1420
|
+
// its own enumerable properties are the host's to define and nothing here
|
|
1421
|
+
// can know whether the C++ members it was told about are the JavaScript
|
|
1422
|
+
// object's own keys.
|
|
1423
|
+
'protocol:spread:next:class-ref(copyable)',
|
|
1424
|
+
'protocol:spread:next:native-record-ref(copyable)',
|
|
1425
|
+
'protocol:spread:next:optional(class-ref(copyable))',
|
|
1426
|
+
'protocol:spread:next:optional(native-record-ref(copyable))',
|
|
1427
|
+
// The same record under `optional`, for the reason
|
|
1428
|
+
// `optional(dictionary)`'s claim gives: the absent case copies nothing by
|
|
1429
|
+
// `CopyDataProperties`'s own definition, and the present case recurses
|
|
1430
|
+
// into the dispatch this file's previous claim already proves.
|
|
1431
|
+
'protocol:spread:next:optional(record(copyable))',
|
|
1432
|
+
// `CopyDataProperties` over a genuinely dynamic source and a genuinely
|
|
1433
|
+
// dynamic fresh object. `emitSpreadCopy` walks the source's own keys,
|
|
1434
|
+
// filters its descriptors for enumerability, gets each value, then creates
|
|
1435
|
+
// a data property on the receiver. The `dynamic->dynamic` suffix is
|
|
1436
|
+
// mandatory: a dictionary receiver requires a different key-domain
|
|
1437
|
+
// contract and remains deliberately unclaimed.
|
|
1438
|
+
'protocol:spread:next:dynamic->dynamic',
|
|
1439
|
+
// `yield x` inside a `function*`, and the resume point paired with it.
|
|
1440
|
+
//
|
|
1441
|
+
// The body is emitted as a C++20 coroutine returning `gea::Iterator<T>`
|
|
1442
|
+
// (`targets/cpp/emit.ts`'s `emitYield`, and its `return` terminator's
|
|
1443
|
+
// `co_return` arm); the resume boundary is a no-op because the coroutine
|
|
1444
|
+
// transform owns the resume point itself (`ir/lower-exceptions.ts`).
|
|
1445
|
+
//
|
|
1446
|
+
// Both are claimed for the WHOLE forms, not a narrowed slice, because
|
|
1447
|
+
// everything this backend cannot do about a generator is refused EARLIER,
|
|
1448
|
+
// by name, at the census: `producers/control.ts` refuses `yield*` (a
|
|
1449
|
+
// delegation loop in an expression position) and refuses a `yield` whose
|
|
1450
|
+
// own value is read (there is no resume channel to carry what `next(v)`
|
|
1451
|
+
// sends). What is left reaching these keys is exactly what the coroutine
|
|
1452
|
+
// renders.
|
|
1453
|
+
'control:yield',
|
|
1454
|
+
'boundary:generator-resume'
|
|
1455
|
+
]),
|
|
1456
|
+
unsupportedRuntimeHelpers: new Set(),
|
|
1457
|
+
// `throw`, `break` and `continue`. `emit.ts`'s terminator renders a C++
|
|
1458
|
+
// `throw` of the thrown value's own carrier, and an uncaught one
|
|
1459
|
+
// terminating the process is what an uncaught ECMAScript exception already
|
|
1460
|
+
// does -- so that edge is genuinely handled, not half-handled. `break` and
|
|
1461
|
+
// `continue` are handled too, as of this patch: `ir/lower.ts`'s
|
|
1462
|
+
// `break`/`continue` case renders an ordinary `goto` to the loop's exit or
|
|
1463
|
+
// header/latch block, built from the same guard/loop machinery a plain loop
|
|
1464
|
+
// already uses.
|
|
1465
|
+
//
|
|
1466
|
+
// `suspend` is claimed too, now that `ir/lower.ts`'s `lowerBoundary` gives
|
|
1467
|
+
// it a real, honest handling: the edge between an `await` and its
|
|
1468
|
+
// `async-resume` boundary never becomes a runtime transfer at all, because
|
|
1469
|
+
// this backend's `await` completes synchronously (see `AwaitOperation`'s
|
|
1470
|
+
// doc comment, `ir/model.ts`) -- there is no queue to park a continuation
|
|
1471
|
+
// in, so "handled" here means "provably a no-op", not "renders a jump".
|
|
1472
|
+
//
|
|
1473
|
+
// `return` is the edge `producers/control.ts` mints ONLY when a `finally`
|
|
1474
|
+
// intercepts the completion, so claiming it is a claim about `finally` and
|
|
1475
|
+
// nothing else. What handles it is `gea::ScopeExit` (`runtime/
|
|
1476
|
+
// gea_runtime.h`), the object `emit-exceptions.ts` wraps the whole region in:
|
|
1477
|
+
// C++ destroys a scoped object on `return` exactly as ECMAScript runs a
|
|
1478
|
+
// finally clause on one, so the return stays an ordinary `return` terminator
|
|
1479
|
+
// and the interception is the destructor. The same object is what handles
|
|
1480
|
+
// this set's `break`/`continue` and `throw` edges when they cross a finally,
|
|
1481
|
+
// for the identical reason -- one mechanism, four completions, which is why
|
|
1482
|
+
// there is no completion record anywhere in the emit.
|
|
1483
|
+
abruptEdgeHandlers: new Set(['throw', 'break', 'continue', 'suspend', 'return'])
|
|
1484
|
+
});
|