@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,819 @@
|
|
|
1
|
+
/** The one string that identifies a call spelling -- for a diagnostic, and as the key its preamble is stated under. */
|
|
2
|
+
export const hostCallName = (spelling) => (spelling.kind === 'path' ? spelling.text : spelling.emit);
|
|
3
|
+
export const noHostNamespaces = Object.freeze({
|
|
4
|
+
roots: new Set(),
|
|
5
|
+
typeofs: new Map(),
|
|
6
|
+
methods: new Map(),
|
|
7
|
+
properties: new Map(),
|
|
8
|
+
propertySetters: new Map()
|
|
9
|
+
});
|
|
10
|
+
/**
|
|
11
|
+
* Whether a path names a namespace rather than a member of one.
|
|
12
|
+
*
|
|
13
|
+
* Asked of the member tables' own keys: `navigator.bluetooth` is a namespace
|
|
14
|
+
* exactly because members are stated under it. A prefix test rather than a
|
|
15
|
+
* separate list, so a path cannot be a namespace here and have no members
|
|
16
|
+
* there.
|
|
17
|
+
*/
|
|
18
|
+
export const isHostNamespacePath = (namespaces, path) => {
|
|
19
|
+
if (namespaces.roots.has(path))
|
|
20
|
+
return true;
|
|
21
|
+
const prefix = `${path}.`;
|
|
22
|
+
for (const key of namespaces.methods.keys())
|
|
23
|
+
if (key.startsWith(prefix))
|
|
24
|
+
return true;
|
|
25
|
+
for (const key of namespaces.properties.keys())
|
|
26
|
+
if (key.startsWith(prefix))
|
|
27
|
+
return true;
|
|
28
|
+
return false;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* The members this backend states a spelling for on its own.
|
|
32
|
+
*
|
|
33
|
+
* Only the surface a *language* runtime owns. `console` is not ECMA-262 --
|
|
34
|
+
* `lib.dom.d.ts` is where TypeScript declares it -- but it is present in every
|
|
35
|
+
* JavaScript host there is, and a compiler that cannot render `console.log`
|
|
36
|
+
* cannot compile ordinary TypeScript. `localStorage` is claimed on the same
|
|
37
|
+
* ground: a key-value store over strings, with no document and no node tree
|
|
38
|
+
* behind it.
|
|
39
|
+
*
|
|
40
|
+
* What is NOT here is the document, the element tree, and JSX. Those are a
|
|
41
|
+
* host's object model rather than the language's, so the plugin that installs
|
|
42
|
+
* that host states them (`plugins/gea/host.ts`) and this backend never learns
|
|
43
|
+
* their spellings. The split is not cosmetic: it is what keeps a claim and the
|
|
44
|
+
* text that renders it in one place. A protocol claimed here whose template
|
|
45
|
+
* lived elsewhere would be two authorities over one question, and the drift
|
|
46
|
+
* between them is silent -- preflight certifies, emission refuses by name.
|
|
47
|
+
*/
|
|
48
|
+
const nativeHandleProperty = (protocol, emit) => ({
|
|
49
|
+
kind: 'property',
|
|
50
|
+
store: null,
|
|
51
|
+
emit,
|
|
52
|
+
resultRepresentation: { kind: 'native-handle', protocol, version: 1, native: null, bases: [], call: null, construct: null }
|
|
53
|
+
});
|
|
54
|
+
export const coreHostMembers = new Map([
|
|
55
|
+
// Atomics is a finite language primitive, not an any-shaped Node shim. The
|
|
56
|
+
// call-site renderer verifies the concrete typed-array element carrier and
|
|
57
|
+
// names the one native operation; methods omitted here fail at the property.
|
|
58
|
+
...['load', 'store', 'add', 'sub', 'and', 'or', 'xor', 'exchange', 'compareExchange', 'isLockFree', 'wait', 'notify'].map((member) => [`Atomics.${member}`, { kind: 'method', emit: '/* atomics call-site renderer */', arity: 'call-site' }]),
|
|
59
|
+
// `console`. Only `log`/`error` are claimed -- the two members any real
|
|
60
|
+
// corpus program actually calls (`citations.md` section 2a) -- not
|
|
61
|
+
// `lib.dom.d.ts`'s full ~18-member interface. `{args}` is the one join of
|
|
62
|
+
// every call argument's ToString text, computed by
|
|
63
|
+
// `emit-tostring.ts`'s `consoleArgumentsText` before this template is
|
|
64
|
+
// filled (`emit-host-invoke.ts`'s `hostCallText`); there is no `{receiver}`
|
|
65
|
+
// because `console`, like `document`, is a singleton whose identity a
|
|
66
|
+
// call never needs to name.
|
|
67
|
+
// `TextEncoder`/`TextDecoder` (Encoding Standard), keyed by the CARRIER the
|
|
68
|
+
// backend states for each in `core-globals.ts`'s `coreNativeTypes` -- the
|
|
69
|
+
// same key `nativeHandleMemberText` builds (`native ?? protocol`) and the
|
|
70
|
+
// same one an installed host's rows are filed under. Each `emit` names a
|
|
71
|
+
// real member of the class `runtime/gea_runtime.h` defines, so clang checks
|
|
72
|
+
// every one of them.
|
|
73
|
+
//
|
|
74
|
+
// What is NOT here is `TextEncoder.encodeInto`: it writes into a caller's
|
|
75
|
+
// view and answers a `{ read, written }` record, and neither half has an
|
|
76
|
+
// implementation behind it. With no row it refuses BY NAME at its own
|
|
77
|
+
// access, which is the whole point of the table being the single authority.
|
|
78
|
+
['gea::runtime::textcodec::TextEncoder.encoding', { kind: 'property', emit: '{receiver}.encoding', store: null }],
|
|
79
|
+
['gea::runtime::textcodec::TextEncoder.encode', { kind: 'method', emit: '{receiver}.encode({args})', arity: 'pass-through' }],
|
|
80
|
+
['gea::runtime::textcodec::TextDecoder.encoding', { kind: 'property', emit: '{receiver}.encoding', store: null }],
|
|
81
|
+
['gea::runtime::textcodec::TextDecoder.fatal', { kind: 'property', emit: '{receiver}.fatal', store: null }],
|
|
82
|
+
['gea::runtime::textcodec::TextDecoder.ignoreBOM', { kind: 'property', emit: '{receiver}.ignoreBOM', store: null }],
|
|
83
|
+
// `pass-through`, not a fixed arity, and for the reason that arm exists:
|
|
84
|
+
// both members declare a single OPTIONAL parameter, so a call site legally
|
|
85
|
+
// passes one argument or none, and either fixed number would refuse half of
|
|
86
|
+
// them. The runtime states one overload per real shape (`encode()` /
|
|
87
|
+
// `encode(string)`, `decode()` / `decode(view)`), so which one a call means
|
|
88
|
+
// is C++'s own overload resolution over the argument the program actually
|
|
89
|
+
// wrote -- and a shape no overload covers is a clang error naming the
|
|
90
|
+
// member, never a silently different answer.
|
|
91
|
+
['gea::runtime::textcodec::TextDecoder.decode', { kind: 'method', emit: '{receiver}.decode({args})', arity: 'pass-through' }],
|
|
92
|
+
['Console.log', { kind: 'method', emit: 'gea::host::console::log({args})', arity: 'variadic' }],
|
|
93
|
+
['Console.error', { kind: 'method', emit: 'gea::host::console::error({args})', arity: 'variadic' }],
|
|
94
|
+
// `console.info` is Node's own alias of `console.log` (see the runtime's own
|
|
95
|
+
// `info` overloads for the citation), so this row buys a real member rather
|
|
96
|
+
// than a second severity: `@hono/node-server` writes one on the recoverable
|
|
97
|
+
// client-abort path and refused by name until it existed.
|
|
98
|
+
['Console.info', { kind: 'method', emit: 'gea::host::console::info({args})', arity: 'variadic' }],
|
|
99
|
+
// `localStorage`. `gea::host::storage` is a singleton table rather than a
|
|
100
|
+
// per-handle one, so no template here names a `{receiver}`.
|
|
101
|
+
['Storage.getItem', { kind: 'method', emit: 'gea::host::storage::getItem({arg0})', arity: 1 }],
|
|
102
|
+
['Storage.setItem', { kind: 'method', emit: 'gea::host::storage::setItem({arg0}, {arg1})', arity: 2 }],
|
|
103
|
+
['Storage.removeItem', { kind: 'method', emit: 'gea::host::storage::removeItem({arg0})', arity: 1 }],
|
|
104
|
+
// `JSON`. Neither member has a single fixed-arity C++ spelling the way
|
|
105
|
+
// every other entry here does -- `stringify`/`parse`'s real signature
|
|
106
|
+
// depends on the STATIC type of the value/assertion at each individual
|
|
107
|
+
// call site, which is exactly what a boxed `gea::Value`-shaped template
|
|
108
|
+
// slot cannot express without reintroducing the boxing this compiler
|
|
109
|
+
// forbids. `emit` is never read: `hostCallText` (emit-host-invoke.ts)
|
|
110
|
+
// recognizes `protocol === 'JSON'` and dispatches to `emit-json.ts`'s
|
|
111
|
+
// `jsonCallText` before it ever reaches this template's fill step.
|
|
112
|
+
['JSON.stringify', { kind: 'method', emit: '/* unused: see emit-json.ts */', arity: 1 }],
|
|
113
|
+
['JSON.parse', { kind: 'method', emit: '/* unused: see emit-json.ts */', arity: 1 }],
|
|
114
|
+
// `Math`, `Date` and `String`'s own singleton members -- three of the
|
|
115
|
+
// protocols `manifest.ts` claims in `nativeProtocols`, and the three whose
|
|
116
|
+
// members `gea_runtime.h` actually implements one by one, inside `namespace
|
|
117
|
+
// gea::host::Math` / `::DateConstructor` / `::StringConstructor`. Every
|
|
118
|
+
// `emit` below names a symbol that header really declares; none is derived
|
|
119
|
+
// from the protocol string, so a member the header does not declare cannot
|
|
120
|
+
// be spelled by accident.
|
|
121
|
+
//
|
|
122
|
+
// `property`, not `method`, and the distinction is exactly the one this
|
|
123
|
+
// file's own header draws. `storage.getItem` is a `method` because it names
|
|
124
|
+
// no C++ symbol on its own -- only the call has a spelling. `Math.floor` is
|
|
125
|
+
// the opposite: `gea::host::Math::floor` is a real `const
|
|
126
|
+
// gea::CallableObject<double(double)>` object, so the access loads a value
|
|
127
|
+
// and the *call* goes through that callable carrier rather than through any
|
|
128
|
+
// template here. Rendering it as a `method` would defer the call to a free
|
|
129
|
+
// function the runtime does not have.
|
|
130
|
+
//
|
|
131
|
+
// Listing them is what makes this table the single authority for "what does
|
|
132
|
+
// this member render to". Until they were listed, `nativeHandleMemberText`
|
|
133
|
+
// (emit-properties.ts) interpolated `gea::host::<protocol>::<key>` for them
|
|
134
|
+
// -- and, having no way to tell a member with a real symbol from one with
|
|
135
|
+
// none, for every unclaimed member of every other native-handle protocol
|
|
136
|
+
// too. `Promise.resolve` and `Math.acos` are the two the corpus actually
|
|
137
|
+
// reached that way: both sit on protocols `manifest.ts` claims, neither has
|
|
138
|
+
// any symbol behind it, and both emitted C++ that clang rejected with "no
|
|
139
|
+
// member named ... in namespace 'gea::host'" -- naming neither the access
|
|
140
|
+
// nor this table.
|
|
141
|
+
// `Math.toString()` -- ECMA-262 defines no own `toString` for `Math`
|
|
142
|
+
// (21.3), so it inherits `Object.prototype.toString` (20.1.3.6), whose
|
|
143
|
+
// builtin-tag walk reads `Math[Symbol.toStringTag]` (21.3.1.28.1's own
|
|
144
|
+
// "Math" literal) with no [[Call]] of anything else. The result is
|
|
145
|
+
// therefore a compile-time constant with no receiver read at all -- the
|
|
146
|
+
// same shape `promiseToStringText` (emit-prototype-invoke.ts) answers for
|
|
147
|
+
// `Promise.prototype.toString`, for the identical reason (neither
|
|
148
|
+
// `[Symbol.toStringTag]` nor an own `toString` is ever overridden for
|
|
149
|
+
// these). Borrowed Object.prototype.toString calls use ObjectTag and its
|
|
150
|
+
// native @@toStringTag lookup instead of this direct member path.
|
|
151
|
+
['Math.toString', { kind: 'method', emit: 'std::string("[object Math]")', arity: 0 }],
|
|
152
|
+
['Math.floor', { kind: 'property', store: null, emit: 'gea::host::Math::floor' }],
|
|
153
|
+
['Math.round', { kind: 'property', store: null, emit: 'gea::host::Math::round' }],
|
|
154
|
+
['Math.sin', { kind: 'property', store: null, emit: 'gea::host::Math::sin' }],
|
|
155
|
+
['Math.cos', { kind: 'property', store: null, emit: 'gea::host::Math::cos' }],
|
|
156
|
+
['Math.sqrt', { kind: 'property', store: null, emit: 'gea::host::Math::sqrt' }],
|
|
157
|
+
['Math.abs', { kind: 'property', store: null, emit: 'gea::host::Math::abs' }],
|
|
158
|
+
['Math.ceil', { kind: 'property', store: null, emit: 'gea::host::Math::ceil' }],
|
|
159
|
+
['Math.pow', { kind: 'property', store: null, emit: 'gea::host::Math::pow' }],
|
|
160
|
+
['Math.atan2', { kind: 'property', store: null, emit: 'gea::host::Math::atan2' }],
|
|
161
|
+
['Math.random', { kind: 'property', store: null, emit: 'gea::host::Math::random' }],
|
|
162
|
+
['Math.tan', { kind: 'property', store: null, emit: 'gea::host::Math::tan' }],
|
|
163
|
+
['Math.asin', { kind: 'property', store: null, emit: 'gea::host::Math::asin' }],
|
|
164
|
+
['Math.acos', { kind: 'property', store: null, emit: 'gea::host::Math::acos' }],
|
|
165
|
+
['Math.atan', { kind: 'property', store: null, emit: 'gea::host::Math::atan' }],
|
|
166
|
+
['Math.sinh', { kind: 'property', store: null, emit: 'gea::host::Math::sinh' }],
|
|
167
|
+
['Math.log', { kind: 'property', store: null, emit: 'gea::host::Math::log' }],
|
|
168
|
+
// All three retain their array-parameter callable values. Direct numeric
|
|
169
|
+
// max/min calls can additionally borrow a stack sequence without allocating
|
|
170
|
+
// the rest array; aliases and spreads keep the ordinary value spelling.
|
|
171
|
+
['Math.max', { kind: 'property', store: null, emit: 'gea::host::Math::max', numericRestCall: 'gea::host::Math::maxDirect({args})' }],
|
|
172
|
+
['Math.min', { kind: 'property', store: null, emit: 'gea::host::Math::min', numericRestCall: 'gea::host::Math::minDirect({args})' }],
|
|
173
|
+
['Math.hypot', { kind: 'property', store: null, emit: 'gea::host::Math::hypot' }],
|
|
174
|
+
// The sixteen `Math` members `gea_runtime.h` did not have. `cbrt` is v1's
|
|
175
|
+
// (`gea::runtime::math::cbrt`, stdlib.cpp); the other fifteen are written
|
|
176
|
+
// against ECMA-262 §21.3.2 there, because v1's own `gea::runtime::math`
|
|
177
|
+
// namespace has none of them and its boxed `Math` object is an empty record.
|
|
178
|
+
// Each row names a symbol that header really declares, in the same
|
|
179
|
+
// `CallableObject<double(double)>` shape as the rows above -- `imul` is the
|
|
180
|
+
// one binary member.
|
|
181
|
+
['Math.cbrt', { kind: 'property', store: null, emit: 'gea::host::Math::cbrt' }],
|
|
182
|
+
['Math.sign', { kind: 'property', store: null, emit: 'gea::host::Math::sign' }],
|
|
183
|
+
['Math.trunc', { kind: 'property', store: null, emit: 'gea::host::Math::trunc' }],
|
|
184
|
+
['Math.exp', { kind: 'property', store: null, emit: 'gea::host::Math::exp' }],
|
|
185
|
+
['Math.expm1', { kind: 'property', store: null, emit: 'gea::host::Math::expm1' }],
|
|
186
|
+
['Math.log10', { kind: 'property', store: null, emit: 'gea::host::Math::log10' }],
|
|
187
|
+
['Math.log1p', { kind: 'property', store: null, emit: 'gea::host::Math::log1p' }],
|
|
188
|
+
['Math.log2', { kind: 'property', store: null, emit: 'gea::host::Math::log2' }],
|
|
189
|
+
['Math.cosh', { kind: 'property', store: null, emit: 'gea::host::Math::cosh' }],
|
|
190
|
+
['Math.tanh', { kind: 'property', store: null, emit: 'gea::host::Math::tanh' }],
|
|
191
|
+
['Math.acosh', { kind: 'property', store: null, emit: 'gea::host::Math::acosh' }],
|
|
192
|
+
['Math.asinh', { kind: 'property', store: null, emit: 'gea::host::Math::asinh' }],
|
|
193
|
+
['Math.atanh', { kind: 'property', store: null, emit: 'gea::host::Math::atanh' }],
|
|
194
|
+
['Math.fround', { kind: 'property', store: null, emit: 'gea::host::Math::fround' }],
|
|
195
|
+
['Math.clz32', { kind: 'property', store: null, emit: 'gea::host::Math::clz32' }],
|
|
196
|
+
['Math.imul', { kind: 'property', store: null, emit: 'gea::host::Math::imul' }],
|
|
197
|
+
// `readonly PI: number` -- a data property, and the one member here that is
|
|
198
|
+
// not a callable at all.
|
|
199
|
+
['Math.PI', { kind: 'property', store: null, emit: 'gea::host::Math::PI' }],
|
|
200
|
+
['Math.LN2', { kind: 'property', store: null, emit: 'gea::host::Math::LN2' }],
|
|
201
|
+
// The six siblings PI/LN2 never had rows for -- see `gea_runtime.h`'s own
|
|
202
|
+
// comment on the identical gap in its `Math` namespace.
|
|
203
|
+
['Math.E', { kind: 'property', store: null, emit: 'gea::host::Math::E' }],
|
|
204
|
+
['Math.LN10', { kind: 'property', store: null, emit: 'gea::host::Math::LN10' }],
|
|
205
|
+
['Math.LOG2E', { kind: 'property', store: null, emit: 'gea::host::Math::LOG2E' }],
|
|
206
|
+
['Math.LOG10E', { kind: 'property', store: null, emit: 'gea::host::Math::LOG10E' }],
|
|
207
|
+
['Math.SQRT1_2', { kind: 'property', store: null, emit: 'gea::host::Math::SQRT1_2' }],
|
|
208
|
+
['Math.SQRT2', { kind: 'property', store: null, emit: 'gea::host::Math::SQRT2' }],
|
|
209
|
+
['DateConstructor.now', { kind: 'property', store: null, emit: 'gea::host::DateConstructor::now' }],
|
|
210
|
+
// The prototype slot is a handle of its own protocol (`Date.prototype@1`,
|
|
211
|
+
// registered by `bindHostObjectClosure` beside the constructor): reading it
|
|
212
|
+
// hands the program a namespace-shaped intrinsic, not a Date instance.
|
|
213
|
+
['DateConstructor.prototype', nativeHandleProperty('Date.prototype', 'gea::NativeHandle<gea_native_protocol_Date_prototype_v1>{}')],
|
|
214
|
+
['StringConstructor.prototype', nativeHandleProperty('String.prototype', 'gea::NativeHandle<gea_native_protocol_String_prototype_v1>{}')],
|
|
215
|
+
['NumberConstructor.prototype', nativeHandleProperty('Number.prototype', 'gea::NativeHandle<gea_native_protocol_Number_prototype_v1>{}')],
|
|
216
|
+
// The same slot, widened from Date/String/Number to RegExp, Boolean and
|
|
217
|
+
// Object -- `RegExp.prototype@1`/`Boolean.prototype@1`/`Object.prototype@1`
|
|
218
|
+
// (native-protocols.ts) are claimed rows, so each has a tag struct in
|
|
219
|
+
// `gea_runtime.h` for this handle to name.
|
|
220
|
+
['RegExpConstructor.prototype', nativeHandleProperty('RegExp.prototype', 'gea::NativeHandle<gea_native_protocol_RegExp_prototype_v1>{}')],
|
|
221
|
+
[
|
|
222
|
+
'BooleanConstructor.prototype',
|
|
223
|
+
nativeHandleProperty('Boolean.prototype', 'gea::NativeHandle<gea_native_protocol_Boolean_prototype_v1>{}')
|
|
224
|
+
],
|
|
225
|
+
['ObjectConstructor.prototype', nativeHandleProperty('Object.prototype', 'gea::NativeHandle<gea_native_protocol_Object_prototype_v1>{}')],
|
|
226
|
+
// `Date.parse` / `Date.UTC` -- ECMA-262 21.4.3.2 / 21.4.3.4.
|
|
227
|
+
//
|
|
228
|
+
// `call-site`, not a fixed-arity template, because `Date.UTC` takes one to
|
|
229
|
+
// seven arguments and an `arity: number` row can state only one of those.
|
|
230
|
+
// `dateConstructorCallText` (emit-prototype-date.ts) is the renderer, keyed
|
|
231
|
+
// off this protocol in `emit-host-invoke.ts`'s `hostMemberRenderers` -- the
|
|
232
|
+
// same mechanism `Promise.resolve` and `Symbol.for` already use.
|
|
233
|
+
//
|
|
234
|
+
// `now` above stays a `property`: it is a real readable
|
|
235
|
+
// `gea::CallableObject<double()>`, so the access loads it and the call goes
|
|
236
|
+
// through that carrier, exactly as `Math.floor` does.
|
|
237
|
+
[
|
|
238
|
+
'DateConstructor.parse',
|
|
239
|
+
{ kind: 'method', emit: '/* unused: see dateConstructorCallText, emit-prototype-date.ts */', arity: 'call-site' }
|
|
240
|
+
],
|
|
241
|
+
[
|
|
242
|
+
'DateConstructor.UTC',
|
|
243
|
+
{ kind: 'method', emit: '/* unused: see dateConstructorCallText, emit-prototype-date.ts */', arity: 'call-site' }
|
|
244
|
+
],
|
|
245
|
+
// `Number.isInteger`/`Number.isFinite` -- ECMA-262 21.1.2.3 / 21.1.2.2.
|
|
246
|
+
//
|
|
247
|
+
// `method`, not `property`, and for the reason `Promise.resolve` is: there
|
|
248
|
+
// is no readable `CallableObject` behind them and there could not be one.
|
|
249
|
+
// `lib.es2015.core.d.ts` declares both `(number: unknown) => boolean`, so a
|
|
250
|
+
// callable carrier would have to name a parameter the declaration says is
|
|
251
|
+
// `unknown` -- which is to say it would have to box a number to ask whether
|
|
252
|
+
// it is an integer. The call has a spelling, the member on its own does not,
|
|
253
|
+
// and `gea::host::NumberConstructor`'s overload set refuses in clang for any
|
|
254
|
+
// carrier it cannot answer for rather than answering `false` for a value
|
|
255
|
+
// that is in fact an integer.
|
|
256
|
+
['NumberConstructor.isInteger', { kind: 'method', emit: 'gea::host::NumberConstructor::isInteger({arg0})', arity: 1 }],
|
|
257
|
+
['BigIntConstructor.asIntN', { kind: 'method', emit: 'gea::host::BigIntConstructor::asIntN({arg0}, {arg1})', arity: 2 }],
|
|
258
|
+
['BigIntConstructor.asUintN', { kind: 'method', emit: 'gea::host::BigIntConstructor::asUintN({arg0}, {arg1})', arity: 2 }],
|
|
259
|
+
['NumberConstructor.isFinite', { kind: 'method', emit: 'gea::host::NumberConstructor::isFinite({arg0})', arity: 1 }],
|
|
260
|
+
// `isNaN`/`isSafeInteger` -- ECMA-262 21.1.2.4 / 21.1.2.5, `method` for the
|
|
261
|
+
// identical reason: both are declared `(number: unknown) => boolean`, so
|
|
262
|
+
// there is no callable carrier to read, and the overload set in
|
|
263
|
+
// `gea_runtime.h` refuses in clang for any carrier it cannot answer for.
|
|
264
|
+
['NumberConstructor.isNaN', { kind: 'method', emit: 'gea::host::NumberConstructor::isNaN({arg0})', arity: 1 }],
|
|
265
|
+
['NumberConstructor.isSafeInteger', { kind: 'method', emit: 'gea::host::NumberConstructor::isSafeInteger({arg0})', arity: 1 }],
|
|
266
|
+
// `Number.parseInt` / `Number.parseFloat` -- 21.1.2.13 / 21.1.2.12, which the
|
|
267
|
+
// specification defines as *the same function objects* the globals name.
|
|
268
|
+
// `method`, not `property`: the runtime spells them as free functions, since
|
|
269
|
+
// `parseInt`'s second parameter is optional and a `CallableObject`'s C++
|
|
270
|
+
// signature is one fixed arity. `arity: 2` is the declaration's own frame --
|
|
271
|
+
// `parseInt(string, radix?)` -- and the absent radix arrives as the `0` the
|
|
272
|
+
// clause's step 7 means by "absent", not as a guess.
|
|
273
|
+
['NumberConstructor.parseInt', { kind: 'method', emit: 'gea::host::NumberConstructor::parseInt({arg0}, {arg1})', arity: 2 }],
|
|
274
|
+
['NumberConstructor.parseFloat', { kind: 'method', emit: 'gea::host::NumberConstructor::parseFloat({arg0})', arity: 1 }],
|
|
275
|
+
// The five `NumberConstructor` data properties -- 21.1.2.1 `EPSILON`, .6
|
|
276
|
+
// `MAX_SAFE_INTEGER`, .7 `MAX_VALUE`, .8 `MIN_SAFE_INTEGER`, .9 `MIN_VALUE`.
|
|
277
|
+
// `property` like `Math.PI`, and for the same reason: each is a value the
|
|
278
|
+
// access loads, not a call.
|
|
279
|
+
['NumberConstructor.EPSILON', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::EPSILON' }],
|
|
280
|
+
['NumberConstructor.MAX_SAFE_INTEGER', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::MAX_SAFE_INTEGER' }],
|
|
281
|
+
['NumberConstructor.MIN_SAFE_INTEGER', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::MIN_SAFE_INTEGER' }],
|
|
282
|
+
['NumberConstructor.MAX_VALUE', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::MAX_VALUE' }],
|
|
283
|
+
['NumberConstructor.MIN_VALUE', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::MIN_VALUE' }],
|
|
284
|
+
['NumberConstructor.POSITIVE_INFINITY', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::POSITIVE_INFINITY' }],
|
|
285
|
+
['NumberConstructor.NEGATIVE_INFINITY', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::NEGATIVE_INFINITY' }],
|
|
286
|
+
['NumberConstructor.NaN', { kind: 'property', store: null, emit: 'std::numeric_limits<double>::quiet_NaN()' }],
|
|
287
|
+
// `Array.isArray` -- 23.1.2.2. The one `ArrayConstructor` member wired here:
|
|
288
|
+
// it asks what a value IS rather than building or reading one, so it needs
|
|
289
|
+
// no array runtime beyond the tag `gea::Value` already carries.
|
|
290
|
+
// ...and `call-site`, because the answer IS the argument's carrier: an
|
|
291
|
+
// `array-object` is `true` with nothing read, a record/dictionary/string is
|
|
292
|
+
// `false`, a TAGGED UNION is its own discriminant, and only the dynamic box
|
|
293
|
+
// needs the runtime's tag. A fixed `{arg0}` template handed the union
|
|
294
|
+
// straight to C++, which has no overload for one. See `isArrayText`
|
|
295
|
+
// (emit-host-invoke.ts).
|
|
296
|
+
['ArrayConstructor.isArray', { kind: 'method', emit: '/* unused: see isArrayText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
297
|
+
['ArrayConstructor.from', { kind: 'method', emit: '/* unused: see arrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
298
|
+
// `Array.prototype` READ AS A VALUE -- `describe(Array.prototype, 'join')`
|
|
299
|
+
// (test/runtime/static-intrinsic-reflection.runtime.js) passes it as an
|
|
300
|
+
// ordinary argument. Its stable native identity owns the intrinsic method
|
|
301
|
+
// descriptors in the same sidecar used for other array properties.
|
|
302
|
+
[
|
|
303
|
+
'ArrayConstructor.prototype',
|
|
304
|
+
{
|
|
305
|
+
kind: 'property',
|
|
306
|
+
store: null,
|
|
307
|
+
emit: 'gea::arrayPrototypeObject()',
|
|
308
|
+
resultRepresentation: {
|
|
309
|
+
kind: 'array-object',
|
|
310
|
+
element: { kind: 'dynamic', reason: 'declared-any-never-narrowed' },
|
|
311
|
+
ownership: 'shared-refcount',
|
|
312
|
+
extension: null
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
],
|
|
316
|
+
['Int8ArrayConstructor.from', { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
317
|
+
['Uint8ArrayConstructor.from', { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
318
|
+
[
|
|
319
|
+
'Uint8ClampedArrayConstructor.from',
|
|
320
|
+
{ kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
321
|
+
],
|
|
322
|
+
['Int16ArrayConstructor.from', { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
323
|
+
[
|
|
324
|
+
'Uint16ArrayConstructor.from',
|
|
325
|
+
{ kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
326
|
+
],
|
|
327
|
+
['Int32ArrayConstructor.from', { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
328
|
+
[
|
|
329
|
+
'Uint32ArrayConstructor.from',
|
|
330
|
+
{ kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
331
|
+
],
|
|
332
|
+
[
|
|
333
|
+
'Float32ArrayConstructor.from',
|
|
334
|
+
{ kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
335
|
+
],
|
|
336
|
+
[
|
|
337
|
+
'Float64ArrayConstructor.from',
|
|
338
|
+
{ kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
339
|
+
],
|
|
340
|
+
['StringConstructor.fromCharCode', { kind: 'property', store: null, emit: 'gea::host::StringConstructor::fromCharCode' }],
|
|
341
|
+
// `Promise.resolve` -- ECMA-262 27.2.4.7. `PromiseConstructor@1` is claimed
|
|
342
|
+
// in `manifest.ts`'s own `nativeProtocols` beside `Math`/`Date`/`String`
|
|
343
|
+
// because `Promise` is the language's, not a host's; until this row it was
|
|
344
|
+
// the one such claim with nothing at all behind it, which is exactly the
|
|
345
|
+
// drift this file's header warns about -- a protocol claimed in one place
|
|
346
|
+
// whose spelling lives in another, or in this case nowhere.
|
|
347
|
+
//
|
|
348
|
+
// `method`, not `property`: `Math.floor` loads one `CallableObject` that
|
|
349
|
+
// already exists, and `Promise.resolve` cannot, because the promise it
|
|
350
|
+
// mints is typed by the call's own payload. `gea::host::PromiseConstructor::
|
|
351
|
+
// resolve` is a free function TEMPLATE in `gea_runtime.h` (beside
|
|
352
|
+
// `ErrorConstructor::create`, for the identical reason: a payload is
|
|
353
|
+
// routinely a `gea_record_type_N` this header cannot name), so only the
|
|
354
|
+
// call has a spelling and `promiseResolveText` states it.
|
|
355
|
+
//
|
|
356
|
+
// `allSettled`, `any` and the remaining combinators still have no
|
|
357
|
+
// implementation and no row, so they refuse by name at the access -- the
|
|
358
|
+
// corpus census behind that choice, and the one `Promise.all` site it found,
|
|
359
|
+
// are in citations.md. `reject`, `all` and `race` have since each been given
|
|
360
|
+
// a real renderer, listed below.
|
|
361
|
+
['PromiseConstructor.resolve', { kind: 'method', emit: '/* unused: see promiseResolveText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
362
|
+
[
|
|
363
|
+
'PromiseConstructor.reject',
|
|
364
|
+
{ kind: 'method', emit: '/* unused: see promiseConstructorText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
365
|
+
],
|
|
366
|
+
// `Promise.all` -- 27.2.4.1. Same `call-site` reason as `resolve`: the array
|
|
367
|
+
// it fulfils with is typed by the call's own elements, and the per-element
|
|
368
|
+
// `PromiseResolve` is a carrier question only the emitter can answer, so the
|
|
369
|
+
// renderer hands the runtime a lambda rather than a fixed spelling.
|
|
370
|
+
['PromiseConstructor.all', { kind: 'method', emit: '/* unused: see promiseAllText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
371
|
+
// `Promise.race` -- 27.2.4.5, `call-site` for the same reason `all` is: the
|
|
372
|
+
// promise it mints is typed by the call's own `Awaited<T>` and the per-element
|
|
373
|
+
// registration is a carrier question only the emitter can answer, so the
|
|
374
|
+
// renderer hands the runtime an adopter lambda rather than a fixed spelling.
|
|
375
|
+
['PromiseConstructor.race', { kind: 'method', emit: '/* unused: see promiseRaceText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
376
|
+
// `Symbol.for` -- ECMA-262 20.4.2.2. `call-site` because a LITERAL key does
|
|
377
|
+
// not render as a call at all: `symbolMemberText` (emit-host-invoke.ts)
|
|
378
|
+
// interns it into the unit's own table and the access becomes a reference to
|
|
379
|
+
// one namespace-scope `inline const gea::Symbol`, evaluated once. A computed
|
|
380
|
+
// key has no literal to intern and renders as the `gea::symbolFor(k)` call
|
|
381
|
+
// this row would otherwise template -- one member, two spellings, which is
|
|
382
|
+
// precisely what a fixed `emit` string cannot say.
|
|
383
|
+
['SymbolConstructor.for', { kind: 'method', emit: '/* unused: see symbolMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
384
|
+
// `Symbol.keyFor` -- 20.4.2.6. One fixed spelling, so an ordinary row: the
|
|
385
|
+
// registry lookup is a runtime question about a symbol whose value is not
|
|
386
|
+
// known here, and it answers `Optional<std::string>` because an unregistered
|
|
387
|
+
// symbol's key is `undefined`, not `""`.
|
|
388
|
+
['SymbolConstructor.keyFor', { kind: 'method', emit: 'gea::symbolKeyFor({arg0})', arity: 1 }],
|
|
389
|
+
// The well-known symbols this backend has an id for -- ECMA-262 6.1.5.1.
|
|
390
|
+
// Data properties, so `kind: 'property'` with no store: `Symbol.dispose` IS
|
|
391
|
+
// a value, and reading it neither calls anything nor can be assigned to.
|
|
392
|
+
//
|
|
393
|
+
// Reading one is all a row here claims. `Symbol.iterator` being readable
|
|
394
|
+
// does not make a `for...of` over an arbitrary object work, and the
|
|
395
|
+
// operations that consume these symbols refuse at their own sites exactly as
|
|
396
|
+
// they did before -- which is why the rows are per member rather than a
|
|
397
|
+
// blanket claim over `SymbolConstructor`.
|
|
398
|
+
[
|
|
399
|
+
'SymbolConstructor.asyncIterator',
|
|
400
|
+
{ kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::AsyncIterator)' }
|
|
401
|
+
],
|
|
402
|
+
['SymbolConstructor.iterator', { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::Iterator)' }],
|
|
403
|
+
// `Symbol.match` and `Symbol.toPrimitive` are readable for the same reason
|
|
404
|
+
// `Symbol.iterator` above is, and the RUNTIME already implements both
|
|
405
|
+
// behaviours in full: `isRegExp` (gea_runtime.h) does the 22.2.7.4 `@@match`
|
|
406
|
+
// read through `wellKnownSymbol(WellKnownSymbol::Match)`, and
|
|
407
|
+
// `dynamicToPrimitive`/`dynamicToNumber` (gea_dynamic_proxy.h) run 7.1.1's
|
|
408
|
+
// `@@toPrimitive` dispatch. Only this table was missing the rows, so
|
|
409
|
+
// `exotic[Symbol.toPrimitive] = ...` and `regexLike[Symbol.match]` were
|
|
410
|
+
// refused at the property read while the machinery behind them was sitting
|
|
411
|
+
// there complete.
|
|
412
|
+
//
|
|
413
|
+
// This table is still an arbitrary SUBSET of the runtime's own
|
|
414
|
+
// `WellKnownSymbol` enum -- `hasInstance`, `isConcatSpreadable`, `matchAll`,
|
|
415
|
+
// `replace`, `search`, `species`, `split` and `unscopables` remain absent
|
|
416
|
+
// with no stated reason. Each needs the same one-line row plus evidence that
|
|
417
|
+
// whatever consumes it exists; they are left out here rather than added
|
|
418
|
+
// blind, because a readable property whose behaviour is not implemented
|
|
419
|
+
// turns a clean refusal into a wrong answer.
|
|
420
|
+
['SymbolConstructor.match', { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::Match)' }],
|
|
421
|
+
[
|
|
422
|
+
'SymbolConstructor.toPrimitive',
|
|
423
|
+
{ kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::ToPrimitive)' }
|
|
424
|
+
],
|
|
425
|
+
[
|
|
426
|
+
'SymbolConstructor.toStringTag',
|
|
427
|
+
{ kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::ToStringTag)' }
|
|
428
|
+
],
|
|
429
|
+
['SymbolConstructor.dispose', { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::Dispose)' }],
|
|
430
|
+
[
|
|
431
|
+
'SymbolConstructor.asyncDispose',
|
|
432
|
+
{ kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::AsyncDispose)' }
|
|
433
|
+
],
|
|
434
|
+
// `Object`'s statics. Every row is `call-site` and every one of them has to
|
|
435
|
+
// be, for one reason each spelling shares: what these render depends on the
|
|
436
|
+
// RECEIVER'S CARRIER at the individual site, which no fixed template can
|
|
437
|
+
// name.
|
|
438
|
+
//
|
|
439
|
+
// `Object.keys(shape)` where `shape`'s fields the checker already knows is a
|
|
440
|
+
// constant -- the field list, written out, with no runtime walk at all --
|
|
441
|
+
// and `Object.keys(anything)` where the program declared `anything` to be
|
|
442
|
+
// `any` is a real enumeration of a real ordered own-property table
|
|
443
|
+
// (`gea::host::ObjectConstructor::keys`, gea_runtime.h). One member, two
|
|
444
|
+
// spellings, decided by the argument: exactly what `SymbolConstructor.for`'s
|
|
445
|
+
// own row above describes for a literal vs. a computed key, and exactly what
|
|
446
|
+
// a fixed `emit` string cannot say. `objectMemberText` (emit-host-invoke.ts)
|
|
447
|
+
// states all of them and refuses by name for a carrier neither arm covers.
|
|
448
|
+
//
|
|
449
|
+
// The claim is per MEMBER, never per protocol: `Object.create`,
|
|
450
|
+
// `Object.setPrototypeOf`, `Object.defineProperties`
|
|
451
|
+
// and the rest have no row here, so each refuses
|
|
452
|
+
// at its own access with its own name. See `manifest.ts`'s
|
|
453
|
+
// `ObjectConstructor@1` entry for why each is absent. `Object.getPrototypeOf`
|
|
454
|
+
// is claimed below despite that entry's own comment predating it: the
|
|
455
|
+
// `[[Prototype]]` slot this backend's `DynamicObject` already carries and
|
|
456
|
+
// honours (`instanceof`/`in` already walk it) is a real answer, not the
|
|
457
|
+
// unmodeled `Object.prototype` INTRINSIC that comment is about -- see
|
|
458
|
+
// `getPrototypeOfText`, `emit-host-object.ts`. `Object.prototype` ITSELF is a
|
|
459
|
+
// separate row above this block, under the `.prototype` widening
|
|
460
|
+
// (`ObjectConstructor.prototype`) -- a reflection-only handle, not the
|
|
461
|
+
// intrinsic object `getPrototypeOfText` still refuses to fabricate.
|
|
462
|
+
['ObjectConstructor.keys', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
463
|
+
['ObjectConstructor.values', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
464
|
+
['ObjectConstructor.entries', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
465
|
+
[
|
|
466
|
+
'ObjectConstructor.getOwnPropertyNames',
|
|
467
|
+
{ kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
468
|
+
],
|
|
469
|
+
['ObjectConstructor.assign', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
470
|
+
// `Object.create(null)` -- the one-argument, null-prototype form; see `createText` (emit-host-object.ts) for what renders and what still refuses.
|
|
471
|
+
[
|
|
472
|
+
'ObjectConstructor.fromEntries',
|
|
473
|
+
{ kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
474
|
+
],
|
|
475
|
+
['ObjectConstructor.create', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
476
|
+
[
|
|
477
|
+
'ObjectConstructor.defineProperty',
|
|
478
|
+
{ kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
479
|
+
],
|
|
480
|
+
[
|
|
481
|
+
'ObjectConstructor.getOwnPropertyDescriptor',
|
|
482
|
+
{ kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
483
|
+
],
|
|
484
|
+
['ObjectConstructor.freeze', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
485
|
+
['ObjectConstructor.isFrozen', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
486
|
+
['ObjectConstructor.seal', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
487
|
+
['ObjectConstructor.isSealed', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
488
|
+
[
|
|
489
|
+
'ObjectConstructor.preventExtensions',
|
|
490
|
+
{ kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
491
|
+
],
|
|
492
|
+
[
|
|
493
|
+
'ObjectConstructor.isExtensible',
|
|
494
|
+
{ kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
495
|
+
],
|
|
496
|
+
['ObjectConstructor.hasOwn', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
497
|
+
['ObjectConstructor.is', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
|
|
498
|
+
[
|
|
499
|
+
'ObjectConstructor.getPrototypeOf',
|
|
500
|
+
{ kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
501
|
+
],
|
|
502
|
+
// `ArrayBuffer.isView` is a carrier test: typed arrays and DataViews are
|
|
503
|
+
// views, while the backing ArrayBuffer and every other stated carrier are
|
|
504
|
+
// not. The call-site renderer owns that distinction.
|
|
505
|
+
[
|
|
506
|
+
'ArrayBufferConstructor.isView',
|
|
507
|
+
{ kind: 'method', emit: '/* unused: see isArrayBufferViewText, emit-host-invoke.ts */', arity: 'call-site' }
|
|
508
|
+
],
|
|
509
|
+
// `PropertyDescriptor`'s own six fields -- ECMA-262 6.1.7.1, and the whole
|
|
510
|
+
// of the interface `lib.es5.d.ts` declares. `property`, not `method`: a
|
|
511
|
+
// descriptor field IS a value, unlike `Object.keys`, which names a symbol
|
|
512
|
+
// only at its call.
|
|
513
|
+
//
|
|
514
|
+
// Every row names a member of `gea::PropertyDescriptor` itself, because that
|
|
515
|
+
// is what the carrier is: `gea::NativeHandle` is specialized for this
|
|
516
|
+
// protocol's tag onto the real descriptor (see that specialization in
|
|
517
|
+
// `gea_runtime.h`), so `{receiver}.value` is a struct member load and not an
|
|
518
|
+
// id lookup into a store.
|
|
519
|
+
//
|
|
520
|
+
// `value` is declared `any`, which derives `dynamic` and carries
|
|
521
|
+
// `gea::Value` -- the same type the descriptor field already is, so the read
|
|
522
|
+
// is a plain member load. A descriptor that states no value holds a
|
|
523
|
+
// default-constructed `gea::Value`, which IS `undefined`: the right answer
|
|
524
|
+
// rather than a coincidence.
|
|
525
|
+
//
|
|
526
|
+
// `writable`/`enumerable`/`configurable` are declared `boolean | undefined`,
|
|
527
|
+
// so the plan selects `gea::Optional<bool>` and the read has to PRODUCE one.
|
|
528
|
+
// The descriptor's own `has*` flag is exactly that presence bit (6.2.6
|
|
529
|
+
// distinguishes "states false" from "states nothing"), so the ternary below
|
|
530
|
+
// is not a widening bolted on -- it is the same fact spelled in the carrier
|
|
531
|
+
// the checker asked for. Emitting the bare `bool` instead type-checked in
|
|
532
|
+
// this table and disagreed with the plan at the use site, which is the
|
|
533
|
+
// checker-vs-physical-carrier defect this compiler exists to not have.
|
|
534
|
+
// `{receiver}` repeats, which is safe: an operand's text is a value name or
|
|
535
|
+
// a literal, never an expression with an effect to run twice.
|
|
536
|
+
//
|
|
537
|
+
// Every row is READ-ONLY. A write would have to reconcile an
|
|
538
|
+
// `Optional<bool>` back onto a `bool` plus its flag, and nothing in the
|
|
539
|
+
// corpus mutates a descriptor in place -- a program builds a literal and
|
|
540
|
+
// passes it to `defineProperty`. So a write refuses by name rather than
|
|
541
|
+
// carrying a reconciliation with no call site to check it.
|
|
542
|
+
//
|
|
543
|
+
// `get`/`set` have NO ROW AT ALL, so a read of either refuses by name.
|
|
544
|
+
// `gea::PropertyDescriptor` stores an accessor as a native `std::function`
|
|
545
|
+
// -- which is what lets `gea::runtime::object::get` actually invoke one --
|
|
546
|
+
// and the program's own carrier for `(() => any) | undefined` is a
|
|
547
|
+
// `gea::CallableObject`. Those are different physical types, and a row
|
|
548
|
+
// spelling the member anyway would emit the descriptor's field where the
|
|
549
|
+
// plan wants the callable. Converting between them is real work with a real
|
|
550
|
+
// question in it (how the receiver reaches the getter), and it is not done
|
|
551
|
+
// here -- see `objectMemberText`'s matching refusal for an accessor
|
|
552
|
+
// descriptor passed to `defineProperty`.
|
|
553
|
+
['PropertyDescriptor.value', { kind: 'property', emit: '{receiver}.value', store: null }],
|
|
554
|
+
[
|
|
555
|
+
'PropertyDescriptor.writable',
|
|
556
|
+
{
|
|
557
|
+
kind: 'property',
|
|
558
|
+
emit: '({receiver}.hasWritable ? gea::Optional<bool>({receiver}.writable) : gea::Optional<bool>())',
|
|
559
|
+
store: null
|
|
560
|
+
}
|
|
561
|
+
],
|
|
562
|
+
[
|
|
563
|
+
'PropertyDescriptor.enumerable',
|
|
564
|
+
{
|
|
565
|
+
kind: 'property',
|
|
566
|
+
emit: '({receiver}.hasEnumerable ? gea::Optional<bool>({receiver}.enumerable) : gea::Optional<bool>())',
|
|
567
|
+
store: null
|
|
568
|
+
}
|
|
569
|
+
],
|
|
570
|
+
[
|
|
571
|
+
'PropertyDescriptor.configurable',
|
|
572
|
+
{
|
|
573
|
+
kind: 'property',
|
|
574
|
+
emit: '({receiver}.hasConfigurable ? gea::Optional<bool>({receiver}.configurable) : gea::Optional<bool>())',
|
|
575
|
+
store: null
|
|
576
|
+
}
|
|
577
|
+
]
|
|
578
|
+
]);
|
|
579
|
+
/**
|
|
580
|
+
* The ambient FREE FUNCTIONS the language itself defines on the global object,
|
|
581
|
+
* to the C++ each is -- the `hostFunctions` half of what `coreHostMembers` is
|
|
582
|
+
* to `hostMembers`.
|
|
583
|
+
*
|
|
584
|
+
* These are ECMAScript's, not any host's, so they belong here and not in a
|
|
585
|
+
* plugin package: `parseInt` is defined by ECMA-262 §19.2.5 and is present in
|
|
586
|
+
* every conforming environment, gea or otherwise. Before this table they had
|
|
587
|
+
* no claim anywhere, so `projection/bindings.ts` fell through to the ordinary
|
|
588
|
+
* external-cell case and `translation-unit.ts` declared `extern
|
|
589
|
+
* gea::CallableObject<double(std::string, gea::Optional<double>)> parseInt;`
|
|
590
|
+
* -- a global VARIABLE no object file defines. That passes a `-fsyntax-only`
|
|
591
|
+
* check, never links, and (if something does define the symbol) calls through
|
|
592
|
+
* a null invoke pointer. `plugins/model.ts`'s own `hostFunctions` comment
|
|
593
|
+
* describes exactly that failure for the host case.
|
|
594
|
+
*
|
|
595
|
+
* `parseInt` and `parseFloat` name `NumberConstructor`'s functions rather than
|
|
596
|
+
* twins of their own, because ECMA-262 21.1.2.13 and 21.1.2.12 define
|
|
597
|
+
* `Number.parseInt`/`Number.parseFloat` as *the same function objects* as the
|
|
598
|
+
* globals. `isNaN`/`isFinite` do get their own spellings, because the global
|
|
599
|
+
* pair and the `Number` pair are genuinely different functions -- see
|
|
600
|
+
* `gea::host::globalIsNaN` in `gea_runtime.h`.
|
|
601
|
+
*/
|
|
602
|
+
export const coreHostFunctions = new Map([
|
|
603
|
+
['parseInt', 'gea::host::NumberConstructor::parseInt'],
|
|
604
|
+
['parseFloat', 'gea::host::NumberConstructor::parseFloat'],
|
|
605
|
+
['isNaN', 'gea::host::globalIsNaN'],
|
|
606
|
+
['isFinite', 'gea::host::globalIsFinite']
|
|
607
|
+
]);
|
|
608
|
+
/**
|
|
609
|
+
* The ambient CONSTANTS the language defines on the global object, to the text
|
|
610
|
+
* each read renders.
|
|
611
|
+
*
|
|
612
|
+
* `NaN` (ECMA-262 §19.1.1) and `Infinity` (§19.1.2) are `declare var`s in
|
|
613
|
+
* `lib.es5.d.ts`, so without a claim here they were placed as ordinary
|
|
614
|
+
* external cells and the unit emitted `extern double NaN;` -- again a symbol
|
|
615
|
+
* nothing defines. A constant is the right storage rather than a function or a
|
|
616
|
+
* cell: neither name is readable-and-writable in any meaningful sense (both
|
|
617
|
+
* are non-writable, non-configurable properties of the global object), so
|
|
618
|
+
* every read is the value, spelled inline, exactly as
|
|
619
|
+
* `BindingStorage`'s `host-constant` describes for an Objective-C enumerator.
|
|
620
|
+
*
|
|
621
|
+
* `undefined` (§19.1.3) is not here: TypeScript treats it as a keyword with
|
|
622
|
+
* its own type rather than a binding this projection ever asks about, so it
|
|
623
|
+
* needs no cell and has none.
|
|
624
|
+
*/
|
|
625
|
+
export const coreHostConstants = new Map([
|
|
626
|
+
['NaN', 'std::numeric_limits<double>::quiet_NaN()'],
|
|
627
|
+
['Infinity', 'std::numeric_limits<double>::infinity()']
|
|
628
|
+
]);
|
|
629
|
+
/**
|
|
630
|
+
* The member a protocol states, looked up in the table this compilation built.
|
|
631
|
+
*
|
|
632
|
+
* The table is passed rather than imported: a plugin installs host protocols of
|
|
633
|
+
* its own, and a lookup that read a module-level map could only ever see this
|
|
634
|
+
* file's half of the answer.
|
|
635
|
+
*/
|
|
636
|
+
export const hostMemberOf = (table, protocol, member) => table.get(`${protocol}.${member}`);
|
|
637
|
+
/**
|
|
638
|
+
* A builtin method's own `length` where ECMA-262 states one that the
|
|
639
|
+
* declaration's required-parameter count does not reproduce. `lib.d.ts`
|
|
640
|
+
* marks `setFullYear(year, month?, date?)` with two optionals, so the census
|
|
641
|
+
* reads a required arity of 1; 21.4.4.22 gives the function `length` 3. The
|
|
642
|
+
* spec's number is a host fact, stated here beside the other host facts, and
|
|
643
|
+
* consulted before the census's arity by every reflection reader.
|
|
644
|
+
*/
|
|
645
|
+
const hostIntrinsicLengths = new Map([
|
|
646
|
+
['Date.prototype.setFullYear', 3],
|
|
647
|
+
['Date.prototype.setHours', 4],
|
|
648
|
+
['Date.prototype.setMinutes', 3],
|
|
649
|
+
['Date.prototype.setMonth', 2],
|
|
650
|
+
['Date.prototype.setSeconds', 2],
|
|
651
|
+
['Date.prototype.setUTCFullYear', 3],
|
|
652
|
+
['Date.prototype.setUTCHours', 4],
|
|
653
|
+
['Date.prototype.setUTCMinutes', 3],
|
|
654
|
+
['Date.prototype.setUTCMonth', 2],
|
|
655
|
+
['Date.prototype.setUTCSeconds', 2],
|
|
656
|
+
['Date.prototype.toJSON', 1],
|
|
657
|
+
['Number.prototype.toExponential', 1],
|
|
658
|
+
['Number.prototype.toFixed', 1],
|
|
659
|
+
['Number.prototype.toPrecision', 1],
|
|
660
|
+
['Number.prototype.toString', 1],
|
|
661
|
+
// `X.prototype.constructor.length` is the constructor's own `length`.
|
|
662
|
+
['Date.prototype.constructor', 7],
|
|
663
|
+
['String.prototype.constructor', 1],
|
|
664
|
+
['Number.prototype.constructor', 1],
|
|
665
|
+
// 23.1.2.1: `Array.from` is one function of length 1 whatever the four
|
|
666
|
+
// `lib.d.ts` overloads say. It is read as a VALUE rather than called, so
|
|
667
|
+
// there is no census arity behind it to fall back to -- see
|
|
668
|
+
// `statedHostIntrinsicLength` below.
|
|
669
|
+
['ArrayConstructor.from', 1]
|
|
670
|
+
]);
|
|
671
|
+
/**
|
|
672
|
+
* The spec's own `length` for a builtin, or `null` where none is stated here.
|
|
673
|
+
*
|
|
674
|
+
* Separated from `hostIntrinsicLengthOf` because a builtin read as a VALUE has
|
|
675
|
+
* no census arity to fall back to: `0` would be a fabricated answer, and the
|
|
676
|
+
* reader refuses by name instead. Same map, so the two readers cannot drift.
|
|
677
|
+
*/
|
|
678
|
+
export const statedHostIntrinsicLength = (protocol, member) => hostIntrinsicLengths.get(`${protocol}.${member}`) ?? null;
|
|
679
|
+
export const hostIntrinsicLengthOf = (protocol, member, censusArity) => statedHostIntrinsicLength(protocol, member) ?? censusArity ?? 0;
|
|
680
|
+
/**
|
|
681
|
+
* Fills a template's `{receiver}`, `{argN}`, and `{args}` slots.
|
|
682
|
+
*
|
|
683
|
+
* Scanned rather than pattern-matched: a RegExp is forbidden under this
|
|
684
|
+
* directory, and rightly so -- the emitted spelling of a program is not a place
|
|
685
|
+
* for a pattern language whose failure mode is a silently different match.
|
|
686
|
+
*
|
|
687
|
+
* `{args}` is separate from `{argN}` rather than a positional index into the
|
|
688
|
+
* same `args` array: a variadic call has no fixed positions to index, only
|
|
689
|
+
* one already-joined value the caller (`hostCallText`) computed ahead of time
|
|
690
|
+
* (see `consoleArgumentsText`, emit-tostring.ts). It is checked before the
|
|
691
|
+
* `{arg` prefix test below on purpose -- the literal slot name `args` itself
|
|
692
|
+
* starts with the three characters `arg`, so an unordered check would read it
|
|
693
|
+
* as an argument index, fail `Number.isInteger` on the leftover `"s"`, and
|
|
694
|
+
* refuse a template that is actually well-formed.
|
|
695
|
+
*
|
|
696
|
+
* Returns `null` when the template names a slot the call site did not supply,
|
|
697
|
+
* so the caller refuses by name instead of emitting a hole.
|
|
698
|
+
*/
|
|
699
|
+
/**
|
|
700
|
+
* Whether `{...}` here is meant as a slot at all.
|
|
701
|
+
*
|
|
702
|
+
* A slot is spelled in bare alphanumerics -- `receiver`, `args`, `value`,
|
|
703
|
+
* `arg0` -- and a brace-delimited run of C++ never is: a lambda body, a
|
|
704
|
+
* compound statement and an aggregate initializer all contain whitespace or
|
|
705
|
+
* punctuation. So this is what separates "the table misspelled a slot", which
|
|
706
|
+
* must be refused by name, from "the template contains C++", which must be
|
|
707
|
+
* copied through. Measured against every installed row before being relied on:
|
|
708
|
+
* 12 of 1044 templates carry a non-slot brace and none of them is ambiguous.
|
|
709
|
+
*
|
|
710
|
+
* Hand-rolled rather than a character class because no RegExp literal may
|
|
711
|
+
* appear under `targets/cpp` -- see `scripts/architecture.mjs`.
|
|
712
|
+
*/
|
|
713
|
+
const isSlotSpelling = (slot) => {
|
|
714
|
+
if (slot.length === 0)
|
|
715
|
+
return false;
|
|
716
|
+
for (const character of slot) {
|
|
717
|
+
const isDigit = character >= '0' && character <= '9';
|
|
718
|
+
const isLower = character >= 'a' && character <= 'z';
|
|
719
|
+
const isUpper = character >= 'A' && character <= 'Z';
|
|
720
|
+
if (!isDigit && !isLower && !isUpper)
|
|
721
|
+
return false;
|
|
722
|
+
}
|
|
723
|
+
return true;
|
|
724
|
+
};
|
|
725
|
+
export const fillHostTemplate = (emit, receiver, args, variadicArgs = null, value = null) => {
|
|
726
|
+
const out = [];
|
|
727
|
+
let index = 0;
|
|
728
|
+
while (index < emit.length) {
|
|
729
|
+
const open = emit.indexOf('{', index);
|
|
730
|
+
if (open < 0) {
|
|
731
|
+
out.push(emit.slice(index));
|
|
732
|
+
break;
|
|
733
|
+
}
|
|
734
|
+
const close = emit.indexOf('}', open);
|
|
735
|
+
if (close < 0) {
|
|
736
|
+
out.push(emit.slice(index));
|
|
737
|
+
break;
|
|
738
|
+
}
|
|
739
|
+
out.push(emit.slice(index, open));
|
|
740
|
+
const slot = emit.slice(open + 1, close);
|
|
741
|
+
if (slot === 'receiver') {
|
|
742
|
+
if (receiver === null)
|
|
743
|
+
return null;
|
|
744
|
+
out.push(receiver);
|
|
745
|
+
}
|
|
746
|
+
else if (slot === 'args') {
|
|
747
|
+
if (variadicArgs === null)
|
|
748
|
+
return null;
|
|
749
|
+
out.push(variadicArgs);
|
|
750
|
+
}
|
|
751
|
+
else if (slot === 'value') {
|
|
752
|
+
if (value === null)
|
|
753
|
+
return null;
|
|
754
|
+
out.push(value);
|
|
755
|
+
}
|
|
756
|
+
else if (slot.startsWith('arg')) {
|
|
757
|
+
const ordinal = Number(slot.slice(3));
|
|
758
|
+
const argument = Number.isInteger(ordinal) ? args[ordinal] : undefined;
|
|
759
|
+
if (argument === undefined)
|
|
760
|
+
return null;
|
|
761
|
+
out.push(argument);
|
|
762
|
+
}
|
|
763
|
+
else if (isSlotSpelling(slot)) {
|
|
764
|
+
// A slot spelling this filler does not know is a defect in this table,
|
|
765
|
+
// not in the program being compiled, and rendering the braces through
|
|
766
|
+
// into C++ would turn it into a confusing clang error instead of a named
|
|
767
|
+
// one.
|
|
768
|
+
return null;
|
|
769
|
+
}
|
|
770
|
+
else {
|
|
771
|
+
// Not a slot at all: a host template is C++ text, and C++ text
|
|
772
|
+
// legitimately contains braces. Twelve of the Apple rows spell a whole
|
|
773
|
+
// lambda -- `([&]() { id __gea_view = ...; })()` -- and treating that
|
|
774
|
+
// opening brace as a slot made the row unfillable, which surfaced as
|
|
775
|
+
// "names a slot this call cannot fill" for a template that named no slot
|
|
776
|
+
// there at all.
|
|
777
|
+
//
|
|
778
|
+
// Only the brace itself is consumed, never the span it appeared to open.
|
|
779
|
+
// A C++ block CONTAINS slots -- `...initWithCallback:std::function<void()>({arg0})...`
|
|
780
|
+
// sits inside a lambda body -- and skipping to the matching-looking `}`
|
|
781
|
+
// swallowed them: `{arg0}` was copied through verbatim and reached clang
|
|
782
|
+
// as an undeclared identifier. Advancing one character keeps the scan
|
|
783
|
+
// inside the block, where the real slots are.
|
|
784
|
+
out.push('{');
|
|
785
|
+
index = open + 1;
|
|
786
|
+
continue;
|
|
787
|
+
}
|
|
788
|
+
index = close + 1;
|
|
789
|
+
}
|
|
790
|
+
return out.join('');
|
|
791
|
+
};
|
|
792
|
+
/**
|
|
793
|
+
* How many arguments a host template consumes, read from the template itself.
|
|
794
|
+
*
|
|
795
|
+
* The template is the authority on this and nothing else is: it names
|
|
796
|
+
* `{arg0}`, `{arg1}`, ... exactly as many times as the host spelling needs, and
|
|
797
|
+
* `fillHostTemplate` refuses a slot the call cannot fill. Taking the count from
|
|
798
|
+
* the declared parameter list instead would be a second answer to the same
|
|
799
|
+
* question, free to drift from the text that actually gets rendered -- and a
|
|
800
|
+
* declared optional parameter the spelling does not mention would make the two
|
|
801
|
+
* disagree immediately.
|
|
802
|
+
*/
|
|
803
|
+
export const templateArity = (emit) => {
|
|
804
|
+
let highest = -1;
|
|
805
|
+
let index = 0;
|
|
806
|
+
while (index < emit.length) {
|
|
807
|
+
const open = emit.indexOf('{arg', index);
|
|
808
|
+
if (open < 0)
|
|
809
|
+
break;
|
|
810
|
+
const close = emit.indexOf('}', open);
|
|
811
|
+
if (close < 0)
|
|
812
|
+
break;
|
|
813
|
+
const ordinal = Number(emit.slice(open + 4, close));
|
|
814
|
+
if (Number.isInteger(ordinal) && ordinal > highest)
|
|
815
|
+
highest = ordinal;
|
|
816
|
+
index = close + 1;
|
|
817
|
+
}
|
|
818
|
+
return highest + 1;
|
|
819
|
+
};
|