@scriptc/compiler 0.1.7 → 0.2.1
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/ambient/scriptc-node-fallback.d.ts +98 -39
- package/ambient/scriptc-overrides.d.ts +10 -6
- package/ambient/scriptc.d.ts +15 -0
- package/dist/backend/build-cache.d.ts +1 -3
- package/dist/backend/build-cache.js +3 -22
- package/dist/backend/build-cache.js.map +1 -1
- package/dist/backend/cache-root.d.ts +3 -0
- package/dist/backend/cache-root.js +23 -0
- package/dist/backend/cache-root.js.map +1 -0
- package/dist/backend/cycle-analysis.d.ts +15 -0
- package/dist/backend/cycle-analysis.js +108 -0
- package/dist/backend/cycle-analysis.js.map +1 -0
- package/dist/backend/cycle-analysis.test.js +124 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -0
- package/dist/backend/executable-features.d.ts +4 -0
- package/dist/backend/executable-features.js +42 -0
- package/dist/backend/executable-features.js.map +1 -0
- package/dist/backend/external-c.d.ts +5 -27
- package/dist/backend/external-c.js +5 -40
- package/dist/backend/external-c.js.map +1 -1
- package/dist/backend/ffi-callbacks.d.ts +2 -3
- package/dist/backend/ffi-callbacks.js +2 -3
- package/dist/backend/ffi-callbacks.js.map +1 -1
- package/dist/backend/library-identity-markers.d.ts +4 -9
- package/dist/backend/library-identity-markers.js +11 -49
- package/dist/backend/library-identity-markers.js.map +1 -1
- package/dist/backend/library-pack.d.ts +5 -0
- package/dist/backend/library-pack.js +123 -0
- package/dist/backend/library-pack.js.map +1 -0
- package/dist/backend/link-plan-core.d.ts +20 -0
- package/dist/backend/link-plan-core.js +18 -0
- package/dist/backend/link-plan-core.js.map +1 -0
- package/dist/backend/link-plan.d.ts +1 -1
- package/dist/backend/link-plan.js +16 -17
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/link-trace.d.ts +2 -0
- package/dist/backend/link-trace.js +24 -0
- package/dist/backend/link-trace.js.map +1 -0
- package/dist/backend/linker.js +1 -1
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/literals.d.ts +9 -0
- package/dist/backend/literals.js +35 -0
- package/dist/backend/literals.js.map +1 -0
- package/dist/backend/literals.test.d.ts +1 -0
- package/dist/backend/literals.test.js +53 -0
- package/dist/backend/literals.test.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +2 -0
- package/dist/backend/llvm/blocks.js +9 -4
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/blocks.test.d.ts +1 -0
- package/dist/backend/llvm/blocks.test.js +91 -0
- package/dist/backend/llvm/blocks.test.js.map +1 -0
- package/dist/backend/llvm/classes.d.ts +14 -8
- package/dist/backend/llvm/classes.js +88 -30
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +5 -1
- package/dist/backend/llvm/common.js +45 -4
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/debug-info.js +2 -7
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/debug-info.test.d.ts +1 -0
- package/dist/backend/llvm/debug-info.test.js +110 -0
- package/dist/backend/llvm/debug-info.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +21 -2
- package/dist/backend/llvm/dyn.js +647 -251
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +596 -1
- package/dist/backend/llvm/emitter.js +769 -425
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.d.ts +1 -0
- package/dist/backend/llvm/emitter.test.js +179 -0
- package/dist/backend/llvm/emitter.test.js.map +1 -0
- package/dist/backend/llvm/expr-async.js +23 -14
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +2 -2
- package/dist/backend/llvm/expr-bytes.js +60 -31
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +1 -1
- package/dist/backend/llvm/expr-callbacks.js +25 -22
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +136 -35
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +1 -1
- package/dist/backend/llvm/expr-containers.js +43 -14
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +5 -260
- package/dist/backend/llvm/expr-control.js +10 -6
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.d.ts +1 -1
- package/dist/backend/llvm/expr-dispatch.js +2 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +78 -81
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-island.d.ts +1 -1
- package/dist/backend/llvm/expr-island.js +11 -7
- package/dist/backend/llvm/expr-island.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +62 -31
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +1 -1
- package/dist/backend/llvm/expr-records.d.ts +5 -1
- package/dist/backend/llvm/expr-records.js +54 -7
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +4 -4
- package/dist/backend/llvm/expr-stream-bridges.js +220 -131
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.d.ts +1 -0
- package/dist/backend/llvm/expr-stream-bridges.test.js +55 -0
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -0
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +12 -12
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +19 -0
- package/dist/backend/llvm/layouts.js +12 -0
- package/dist/backend/llvm/layouts.js.map +1 -0
- package/dist/backend/llvm/lib-abi.d.ts +19 -0
- package/dist/backend/llvm/lib-abi.js +82 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -0
- package/dist/backend/llvm/lib-connect.d.ts +2 -0
- package/dist/backend/llvm/lib-connect.js +51 -0
- package/dist/backend/llvm/lib-connect.js.map +1 -0
- package/dist/backend/llvm/lib-datagram.d.ts +2 -0
- package/dist/backend/llvm/lib-datagram.js +135 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -0
- package/dist/backend/llvm/lib-dispatch.js +50 -6
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +30 -18
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.d.ts +2 -0
- package/dist/backend/llvm/lib-http2.js +215 -0
- package/dist/backend/llvm/lib-http2.js.map +1 -0
- package/dist/backend/llvm/lib-lookup.d.ts +2 -0
- package/dist/backend/llvm/lib-lookup.js +39 -0
- package/dist/backend/llvm/lib-lookup.js.map +1 -0
- package/dist/backend/llvm/lib-network.js +25 -2
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +44 -19
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +162 -3
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +3 -2
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.d.ts +2 -0
- package/dist/backend/llvm/lib-test.js +34 -0
- package/dist/backend/llvm/lib-test.js.map +1 -0
- package/dist/backend/llvm/lib-tls.d.ts +2 -0
- package/dist/backend/llvm/lib-tls.js +82 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +10 -9
- package/dist/backend/llvm/shapes.js +42 -131
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/unsupported.d.ts +1 -0
- package/dist/backend/llvm/unsupported.js +1 -2
- package/dist/backend/llvm/unsupported.js.map +1 -1
- package/dist/backend/llvm/walkers.js +1 -7
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/mangle.d.ts +2 -2
- package/dist/backend/mangle.js +16 -5
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/{c/may-throw.d.ts → may-throw.d.ts} +1 -1
- package/dist/backend/{c/may-throw.js → may-throw.js} +51 -46
- package/dist/backend/may-throw.js.map +1 -0
- package/dist/backend/may-throw.test.d.ts +1 -0
- package/dist/backend/may-throw.test.js +58 -0
- package/dist/backend/may-throw.test.js.map +1 -0
- package/dist/backend/native-codegen-core.d.ts +22 -0
- package/dist/backend/native-codegen-core.js +44 -0
- package/dist/backend/native-codegen-core.js.map +1 -0
- package/dist/backend/native-codegen.d.ts +3 -19
- package/dist/backend/native-codegen.js +5 -44
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +2 -2
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +94 -0
- package/dist/backend/native-link-info-core.js +62 -0
- package/dist/backend/native-link-info-core.js.map +1 -0
- package/dist/backend/native-link-info.d.ts +3 -88
- package/dist/backend/native-link-info.js +12 -243
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +41 -146
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +12 -30
- package/dist/backend/native-toolchain.js +83 -233
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +77 -5
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +24 -0
- package/dist/backend/native-tools.js +33 -0
- package/dist/backend/native-tools.js.map +1 -0
- package/dist/backend/object-localize.js +19 -8
- package/dist/backend/object-localize.js.map +1 -1
- package/dist/backend/object-localize.test.js +22 -0
- package/dist/backend/object-localize.test.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +101 -0
- package/dist/backend/runtime-pack-core.js +172 -0
- package/dist/backend/runtime-pack-core.js.map +1 -0
- package/dist/backend/runtime-pack-native.d.ts +21 -0
- package/dist/backend/runtime-pack-native.js +73 -0
- package/dist/backend/runtime-pack-native.js.map +1 -0
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.d.ts +3 -83
- package/dist/backend/runtime-pack.js +8 -151
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +24 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.d.ts +22 -0
- package/dist/backend/target-diagnostics.js +108 -0
- package/dist/backend/target-diagnostics.js.map +1 -0
- package/dist/backend/target-platform.d.ts +15 -0
- package/dist/backend/target-platform.js +72 -0
- package/dist/backend/target-platform.js.map +1 -0
- package/dist/backend/targets.d.ts +13 -4
- package/dist/backend/targets.js +103 -34
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +72 -4
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/backend/toolchain-environment.d.ts +6 -0
- package/dist/backend/toolchain-environment.js +99 -0
- package/dist/backend/toolchain-environment.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +1 -9
- package/dist/backend/vendor-archives.js +2 -9
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +9 -0
- package/dist/backend/vendor-inputs.js +10 -0
- package/dist/backend/vendor-inputs.js.map +1 -0
- package/dist/backend/warm-cache.d.ts +3 -0
- package/dist/backend/warm-cache.js +41 -0
- package/dist/backend/warm-cache.js.map +1 -0
- package/dist/cli/command.d.ts +3 -0
- package/dist/cli/command.js +328 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/host.d.ts +24 -0
- package/dist/cli/host.js +2 -0
- package/dist/cli/host.js.map +1 -0
- package/dist/cli/output-options.d.ts +26 -0
- package/dist/cli/output-options.js +60 -0
- package/dist/cli/output-options.js.map +1 -0
- package/dist/cli/paths.d.ts +12 -0
- package/dist/cli/paths.js +42 -0
- package/dist/cli/paths.js.map +1 -0
- package/dist/cli/usage.d.ts +74 -0
- package/dist/cli/usage.js +86 -0
- package/dist/cli/usage.js.map +1 -0
- package/dist/cli/wasi-paths.d.ts +8 -0
- package/dist/cli/wasi-paths.js +41 -0
- package/dist/cli/wasi-paths.js.map +1 -0
- package/dist/cli/wasi-runner.d.ts +2 -0
- package/dist/cli/wasi-runner.js +28 -0
- package/dist/cli/wasi-runner.js.map +1 -0
- package/dist/compat/fetch-profile.js +37 -7
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +162 -0
- package/dist/compile-types.js +2 -0
- package/dist/compile-types.js.map +1 -0
- package/dist/coverage/report.js +11 -5
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +5 -2
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.js +5 -10
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +3 -4
- package/dist/executable/executable-cache.js +5 -6
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +16 -17
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +14 -0
- package/dist/executable/prepare.js +66 -0
- package/dist/executable/prepare.js.map +1 -0
- package/dist/ffi/ffi-manifest.d.ts +11 -4
- package/dist/ffi/ffi-manifest.js +170 -58
- package/dist/ffi/ffi-manifest.js.map +1 -1
- package/dist/ffi/ffi-manifest.test.d.ts +1 -0
- package/dist/ffi/ffi-manifest.test.js +111 -0
- package/dist/ffi/ffi-manifest.test.js.map +1 -0
- package/dist/format-integer.d.ts +3 -0
- package/dist/format-integer.js +14 -0
- package/dist/format-integer.js.map +1 -0
- package/dist/frontend/analysis.d.ts +5 -0
- package/dist/frontend/analysis.js +88 -0
- package/dist/frontend/analysis.js.map +1 -0
- package/dist/frontend/arguments-usage.d.ts +1 -3
- package/dist/frontend/arguments-usage.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +1 -1
- package/dist/frontend/builtin-modules.js +1 -1
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/cjs-lexer.d.ts +4 -25
- package/dist/frontend/cjs-lexer.js +6 -806
- package/dist/frontend/cjs-lexer.js.map +1 -1
- package/dist/frontend/cjs-resolve.d.ts +5 -0
- package/dist/frontend/cjs-resolve.js +429 -0
- package/dist/frontend/cjs-resolve.js.map +1 -0
- package/dist/frontend/cjs-syntax.d.ts +26 -0
- package/dist/frontend/cjs-syntax.js +806 -0
- package/dist/frontend/cjs-syntax.js.map +1 -0
- package/dist/frontend/comptime-node.d.ts +4 -0
- package/dist/frontend/comptime-node.js +16 -0
- package/dist/frontend/comptime-node.js.map +1 -0
- package/dist/frontend/comptime-node.test.d.ts +1 -0
- package/dist/frontend/comptime-node.test.js +37 -0
- package/dist/frontend/comptime-node.test.js.map +1 -0
- package/dist/frontend/dts-paths.d.ts +3 -4
- package/dist/frontend/dts-paths.js +15 -8
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/fork-target.js +2 -2
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/helper-tokens.d.ts +1 -0
- package/dist/frontend/helper-tokens.js +147 -0
- package/dist/frontend/helper-tokens.js.map +1 -0
- package/dist/frontend/helper-tokens.test.d.ts +1 -0
- package/dist/frontend/helper-tokens.test.js +35 -0
- package/dist/frontend/helper-tokens.test.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.d.ts +5 -0
- package/dist/frontend/inferred-js-diagnostics.js +69 -0
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.d.ts +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.js +58 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -0
- package/dist/frontend/input-tracker.d.ts +5 -2
- package/dist/frontend/input-tracker.js +24 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +23 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lib-contract.js +32 -24
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/literal-values.d.ts +4 -0
- package/dist/frontend/literal-values.js +21 -0
- package/dist/frontend/literal-values.js.map +1 -0
- package/dist/frontend/literal-values.test.d.ts +1 -0
- package/dist/frontend/literal-values.test.js +91 -0
- package/dist/frontend/literal-values.test.js.map +1 -0
- package/dist/frontend/lowering/abstract-equality.d.ts +1 -1
- package/dist/frontend/lowering/abstract-equality.js +3 -0
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +11 -6
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +4 -1
- package/dist/frontend/lowering/array-values.js +43 -1
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/callback-arg.js +1 -0
- package/dist/frontend/lowering/callback-arg.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +12 -0
- package/dist/frontend/lowering/class-callbacks.js +74 -0
- package/dist/frontend/lowering/class-callbacks.js.map +1 -0
- package/dist/frontend/lowering/class-construction.d.ts +12 -0
- package/dist/frontend/lowering/class-construction.js +156 -0
- package/dist/frontend/lowering/class-construction.js.map +1 -0
- package/dist/frontend/lowering/class-descriptors.d.ts +10 -0
- package/dist/frontend/lowering/class-descriptors.js +114 -0
- package/dist/frontend/lowering/class-descriptors.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +51 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1158 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.d.ts +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +93 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -0
- package/dist/frontend/lowering/class-instance-constructor.d.ts +7 -0
- package/dist/frontend/lowering/class-instance-constructor.js +67 -0
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -0
- package/dist/frontend/lowering/class-method-values.d.ts +13 -0
- package/dist/frontend/lowering/class-method-values.js +235 -0
- package/dist/frontend/lowering/class-method-values.js.map +1 -0
- package/dist/frontend/lowering/class-prototypes.d.ts +19 -0
- package/dist/frontend/lowering/class-prototypes.js +242 -0
- package/dist/frontend/lowering/class-prototypes.js.map +1 -0
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +66 -0
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -0
- package/dist/frontend/lowering/class-static-data.d.ts +6 -0
- package/dist/frontend/lowering/class-static-data.js +56 -0
- package/dist/frontend/lowering/class-static-data.js.map +1 -0
- package/dist/frontend/lowering/containers/buffer-numeric-methods.d.ts +4 -0
- package/dist/frontend/lowering/containers/buffer-numeric-methods.js +26 -0
- package/dist/frontend/lowering/containers/buffer-numeric-methods.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.d.ts +11 -7
- package/dist/frontend/lowering/containers/bytes.js +208 -163
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +2 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +58 -63
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.d.ts +7 -0
- package/dist/frontend/lowering/containers/string-replacement.js +217 -0
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -0
- package/dist/frontend/lowering/error-methods.d.ts +14 -0
- package/dist/frontend/lowering/error-methods.js +177 -0
- package/dist/frontend/lowering/error-methods.js.map +1 -0
- package/dist/frontend/lowering/expressions/global-symbols.d.ts +6 -0
- package/dist/frontend/lowering/expressions/global-symbols.js +11 -0
- package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -0
- package/dist/frontend/lowering/expressions/native-proxy.d.ts +7 -0
- package/dist/frontend/lowering/expressions/native-proxy.js +51 -0
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.d.ts +6 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js +132 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -0
- package/dist/frontend/lowering/expressions/object-literals.d.ts +8 -8
- package/dist/frontend/lowering/expressions/object-literals.js +509 -183
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -4
- package/dist/frontend/lowering/expressions/optional-chains.js +88 -24
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/try-lower-expression.js +1 -0
- package/dist/frontend/lowering/expressions/try-lower-expression.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.d.ts +8 -0
- package/dist/frontend/lowering/expressions/union-field-write.js +71 -0
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -0
- package/dist/frontend/lowering/function-context.d.ts +101 -0
- package/dist/frontend/lowering/function-context.js +109 -0
- package/dist/frontend/lowering/function-context.js.map +1 -0
- package/dist/frontend/lowering/generator-delegation.d.ts +7 -0
- package/dist/frontend/lowering/generator-delegation.js +85 -0
- package/dist/frontend/lowering/generator-delegation.js.map +1 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +11 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +143 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.d.ts +4 -1
- package/dist/frontend/lowering/lib-boundary.js +112 -20
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.test.d.ts +1 -0
- package/dist/frontend/lowering/lib-boundary.test.js +45 -0
- package/dist/frontend/lowering/lib-boundary.test.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
- package/dist/frontend/lowering/lower-assert.d.ts +1 -1
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +18 -0
- package/dist/frontend/lowering/lower-builtin-values.js +249 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +33 -46
- package/dist/frontend/lowering/lower-builtins.js +676 -365
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +28 -22
- package/dist/frontend/lowering/lower-calls.js +1660 -412
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +95 -57
- package/dist/frontend/lowering/lower-classes.js +1491 -404
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
- package/dist/frontend/lowering/lower-comptime.js +23 -32
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +36 -32
- package/dist/frontend/lowering/lower-containers.js +925 -181
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.d.ts +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -2
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.d.ts +1 -1
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +30 -1
- package/dist/frontend/lowering/lower-event-emitter.js +58 -26
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.d.ts +7 -1
- package/dist/frontend/lowering/lower-expando.js +14 -6
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +37 -13
- package/dist/frontend/lowering/lower-exprs.js +2163 -863
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +2 -5
- package/dist/frontend/lowering/lower-generators.js +88 -46
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +7 -0
- package/dist/frontend/lowering/lower-global-value.js +17 -0
- package/dist/frontend/lowering/lower-global-value.js.map +1 -0
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +17 -8
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +7 -8
- package/dist/frontend/lowering/lower-island.js +66 -33
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.d.ts +2 -2
- package/dist/frontend/lowering/lower-mixins.js +5 -3
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +1 -1
- package/dist/frontend/lowering/lower-modules.js +445 -39
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-modules.test.js +39 -0
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -0
- package/dist/frontend/lowering/lower-namespaces.d.ts +1 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.d.ts +1 -1
- package/dist/frontend/lowering/lower-node-module.js +13 -10
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +1 -1
- package/dist/frontend/lowering/lower-server.js +6 -10
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +17 -17
- package/dist/frontend/lowering/lower-stmts.js +855 -514
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +1 -1
- package/dist/frontend/lowering/lower-stream.js +20 -11
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +1 -1
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-url.d.ts +6 -0
- package/dist/frontend/lowering/lower-url.js +77 -0
- package/dist/frontend/lowering/lower-url.js.map +1 -0
- package/dist/frontend/lowering/lowerer.d.ts +140 -190
- package/dist/frontend/lowering/lowerer.js +1193 -712
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.d.ts +1 -0
- package/dist/frontend/lowering/lowerer.test.js +172 -0
- package/dist/frontend/lowering/lowerer.test.js.map +1 -0
- package/dist/frontend/lowering/native-ffi.d.ts +5 -0
- package/dist/frontend/lowering/native-ffi.js +40 -0
- package/dist/frontend/lowering/native-ffi.js.map +1 -0
- package/dist/frontend/lowering/object-enumeration-receiver.d.ts +7 -0
- package/dist/frontend/lowering/object-enumeration-receiver.js +33 -0
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.d.ts +8 -0
- package/dist/frontend/lowering/object-factory-new.js +68 -0
- package/dist/frontend/lowering/object-factory-new.js.map +1 -0
- package/dist/frontend/lowering/optional-arguments.js +6 -1
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +2 -1
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-locals.d.ts +14 -0
- package/dist/frontend/lowering/runtime-optional-locals.js +41 -0
- package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-locals.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-locals.test.js +85 -0
- package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.d.ts +8 -0
- package/dist/frontend/lowering/sanitize-class-types.js +79 -0
- package/dist/frontend/lowering/sanitize-class-types.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.d.ts +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js +60 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -0
- package/dist/frontend/lowering/static-this.d.ts +5 -1
- package/dist/frontend/lowering/static-this.js +28 -2
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/string-index.d.ts +7 -0
- package/dist/frontend/lowering/string-index.js +39 -0
- package/dist/frontend/lowering/string-index.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +10 -3
- package/dist/frontend/lowering/surfaces.js +86 -37
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +22 -0
- package/dist/frontend/lowering/symbol-fields.js +183 -0
- package/dist/frontend/lowering/symbol-fields.js.map +1 -0
- package/dist/frontend/lowering/symbol-methods.d.ts +7 -0
- package/dist/frontend/lowering/symbol-methods.js +30 -0
- package/dist/frontend/lowering/symbol-methods.js.map +1 -0
- package/dist/frontend/lowering/text-decoder-encoding.d.ts +12 -0
- package/dist/frontend/lowering/text-decoder-encoding.js +82 -0
- package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -0
- package/dist/frontend/lowering/text-decoder-encoding.test.d.ts +1 -0
- package/dist/frontend/lowering/text-decoder-encoding.test.js +38 -0
- package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -0
- package/dist/frontend/lowering/union-narrow.d.ts +9 -0
- package/dist/frontend/lowering/union-narrow.js +59 -0
- package/dist/frontend/lowering/union-narrow.js.map +1 -0
- package/dist/frontend/lowering/union-narrow.test.d.ts +1 -0
- package/dist/frontend/lowering/union-narrow.test.js +72 -0
- package/dist/frontend/lowering/union-narrow.test.js.map +1 -0
- package/dist/frontend/lowering/union-retag.d.ts +43 -0
- package/dist/frontend/lowering/union-retag.js +259 -0
- package/dist/frontend/lowering/union-retag.js.map +1 -0
- package/dist/frontend/lowering/union-retag.test.d.ts +1 -0
- package/dist/frontend/lowering/union-retag.test.js +405 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -0
- package/dist/frontend/lowering/unregistered-class-types.d.ts +14 -0
- package/dist/frontend/lowering/unregistered-class-types.js +94 -0
- package/dist/frontend/lowering/unregistered-class-types.js.map +1 -0
- package/dist/frontend/lowering/unregistered-class-types.test.d.ts +1 -0
- package/dist/frontend/lowering/unregistered-class-types.test.js +65 -0
- package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +40 -0
- package/dist/frontend/lowering/width-lift.js +2 -0
- package/dist/frontend/lowering/width-lift.js.map +1 -0
- package/dist/frontend/module-syntax.d.ts +58 -0
- package/dist/frontend/module-syntax.js +123 -0
- package/dist/frontend/module-syntax.js.map +1 -0
- package/dist/frontend/module-syntax.test.d.ts +1 -0
- package/dist/frontend/module-syntax.test.js +78 -0
- package/dist/frontend/module-syntax.test.js.map +1 -0
- package/dist/frontend/npm-fetch-analysis.d.ts +17 -0
- package/dist/frontend/npm-fetch-analysis.js +100 -0
- package/dist/frontend/npm-fetch-analysis.js.map +1 -0
- package/dist/frontend/npm-fetch-analysis.test.d.ts +1 -0
- package/dist/frontend/npm-fetch-analysis.test.js +107 -0
- package/dist/frontend/npm-fetch-analysis.test.js.map +1 -0
- package/dist/frontend/npm-fetch-node.d.ts +2 -0
- package/dist/frontend/npm-fetch-node.js +12 -0
- package/dist/frontend/npm-fetch-node.js.map +1 -0
- package/dist/frontend/npm-fetch-syntax.d.ts +6 -0
- package/dist/frontend/npm-fetch-syntax.js +207 -0
- package/dist/frontend/npm-fetch-syntax.js.map +1 -0
- package/dist/frontend/npm-node.d.ts +10 -0
- package/dist/frontend/npm-node.js +14 -0
- package/dist/frontend/npm-node.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.d.ts +8 -0
- package/dist/frontend/npm-static-bundled-cjs.js +236 -0
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-cjs.test.js +69 -0
- package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -0
- package/dist/frontend/npm-static-declaration-syntax.d.ts +57 -0
- package/dist/frontend/npm-static-declaration-syntax.js +944 -0
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -0
- package/dist/frontend/npm-static-declarations.d.ts +11 -39
- package/dist/frontend/npm-static-declarations.js +22 -561
- package/dist/frontend/npm-static-declarations.js.map +1 -1
- package/dist/frontend/npm-static-declarations.test.js +245 -6
- package/dist/frontend/npm-static-declarations.test.js.map +1 -1
- package/dist/frontend/npm-static-prune.d.ts +1 -1
- package/dist/frontend/npm-static-prune.js +121 -38
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-prune.test.js +9 -1
- package/dist/frontend/npm-static-prune.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.d.ts +4 -0
- package/dist/frontend/npm-static-rewrite-host.js +179 -0
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -0
- package/dist/frontend/npm-static-rewrite-syntax.d.ts +16 -0
- package/dist/frontend/npm-static-rewrite-syntax.js +905 -0
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -0
- package/dist/frontend/npm-static-rewrite.d.ts +0 -5
- package/dist/frontend/npm-static-rewrite.js +2 -1079
- package/dist/frontend/npm-static-rewrite.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.d.ts +5 -0
- package/dist/frontend/npm-static-subtyping.js +55 -0
- package/dist/frontend/npm-static-subtyping.js.map +1 -0
- package/dist/frontend/npm-static-subtyping.test.d.ts +1 -0
- package/dist/frontend/npm-static-subtyping.test.js +58 -0
- package/dist/frontend/npm-static-subtyping.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +7 -15
- package/dist/frontend/npm-static.js +19 -28
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.d.ts +8 -69
- package/dist/frontend/npm.js +21 -361
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.js +2 -2
- package/dist/frontend/npm.test.js.map +1 -1
- package/dist/frontend/pipeline-native.d.ts +6 -0
- package/dist/frontend/pipeline-native.js +32 -0
- package/dist/frontend/pipeline-native.js.map +1 -0
- package/dist/frontend/pipeline.d.ts +54 -0
- package/dist/frontend/pipeline.js +382 -0
- package/dist/frontend/pipeline.js.map +1 -0
- package/dist/frontend/pipeline.test.d.ts +1 -0
- package/dist/frontend/pipeline.test.js +77 -0
- package/dist/frontend/pipeline.test.js.map +1 -0
- package/dist/frontend/program-analysis.d.ts +10 -0
- package/dist/frontend/program-analysis.js +14 -0
- package/dist/frontend/program-analysis.js.map +1 -0
- package/dist/frontend/program-node.d.ts +9 -0
- package/dist/frontend/program-node.js +48 -0
- package/dist/frontend/program-node.js.map +1 -0
- package/dist/frontend/program.d.ts +39 -20
- package/dist/frontend/program.js +393 -189
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +105 -2
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/provenance-core.d.ts +9 -0
- package/dist/frontend/provenance-core.js +435 -0
- package/dist/frontend/provenance-core.js.map +1 -0
- package/dist/frontend/provenance.d.ts +0 -4
- package/dist/frontend/provenance.js +4 -459
- package/dist/frontend/provenance.js.map +1 -1
- package/dist/frontend/resolve.d.ts +3 -1
- package/dist/frontend/resolve.js +6 -3
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/runtime-resolve.d.ts +4 -3
- package/dist/frontend/runtime-resolve.js +22 -18
- package/dist/frontend/runtime-resolve.js.map +1 -1
- package/dist/frontend/runtime-resolve.test.js +53 -0
- package/dist/frontend/runtime-resolve.test.js.map +1 -1
- package/dist/frontend/services-node.d.ts +5 -0
- package/dist/frontend/services-node.js +19 -0
- package/dist/frontend/services-node.js.map +1 -0
- package/dist/frontend/services-node.test.d.ts +1 -0
- package/dist/frontend/services-node.test.js +70 -0
- package/dist/frontend/services-node.test.js.map +1 -0
- package/dist/frontend/services.d.ts +44 -0
- package/dist/frontend/services.js +90 -0
- package/dist/frontend/services.js.map +1 -0
- package/dist/frontend/services.test.d.ts +1 -0
- package/dist/frontend/services.test.js +174 -0
- package/dist/frontend/services.test.js.map +1 -0
- package/dist/frontend/ts7/adapter.d.ts +3 -3
- package/dist/frontend/ts7/adapter.js +14 -31
- package/dist/frontend/ts7/adapter.js.map +1 -1
- package/dist/frontend/ts7/api.d.ts +16 -0
- package/dist/frontend/ts7/api.js +24 -0
- package/dist/frontend/ts7/api.js.map +1 -0
- package/dist/frontend/ts7/ast-bytes.d.ts +31 -0
- package/dist/frontend/ts7/ast-bytes.js +137 -0
- package/dist/frontend/ts7/ast-bytes.js.map +1 -0
- package/dist/frontend/ts7/ast-bytes.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-bytes.test.js +73 -0
- package/dist/frontend/ts7/ast-bytes.test.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.generated.d.ts +353 -0
- package/dist/frontend/ts7/ast-guards.generated.js +1951 -0
- package/dist/frontend/ts7/ast-guards.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-guards.test.js +43 -0
- package/dist/frontend/ts7/ast-guards.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +194 -0
- package/dist/frontend/ts7/ast-node.js +448 -0
- package/dist/frontend/ts7/ast-node.js.map +1 -0
- package/dist/frontend/ts7/ast-node.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-node.test.js +266 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -0
- package/dist/frontend/ts7/ast-schema.generated.d.ts +503 -0
- package/dist/frontend/ts7/ast-schema.generated.js +1446 -0
- package/dist/frontend/ts7/ast-schema.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-text.d.ts +6 -0
- package/dist/frontend/ts7/ast-text.js +124 -0
- package/dist/frontend/ts7/ast-text.js.map +1 -0
- package/dist/frontend/ts7/ast-text.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-text.test.js +38 -0
- package/dist/frontend/ts7/ast-text.test.js.map +1 -0
- package/dist/frontend/ts7/ast-tokens.generated.d.ts +2 -0
- package/dist/frontend/ts7/ast-tokens.generated.js +155 -0
- package/dist/frontend/ts7/ast-tokens.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-types.d.ts +42 -0
- package/dist/frontend/ts7/ast-types.generated.d.ts +1615 -0
- package/dist/frontend/ts7/ast-types.generated.js +5 -0
- package/dist/frontend/ts7/ast-types.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-types.js +3 -0
- package/dist/frontend/ts7/ast-types.js.map +1 -0
- package/dist/frontend/ts7/ast-wire.d.ts +58 -0
- package/dist/frontend/ts7/ast-wire.js +267 -0
- package/dist/frontend/ts7/ast-wire.js.map +1 -0
- package/dist/frontend/ts7/ast-wire.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-wire.test.js +151 -0
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -0
- package/dist/frontend/ts7/ast.d.ts +14 -14
- package/dist/frontend/ts7/ast.js +25 -18
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/census-check.js +1 -0
- package/dist/frontend/ts7/census-check.js.map +1 -1
- package/dist/frontend/ts7/checker-cache.d.ts +48 -0
- package/dist/frontend/ts7/checker-cache.js +92 -0
- package/dist/frontend/ts7/checker-cache.js.map +1 -0
- package/dist/frontend/ts7/checker.d.ts +19 -46
- package/dist/frontend/ts7/checker.js +231 -161
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.d.ts +1 -0
- package/dist/frontend/ts7/checker.test.js +335 -0
- package/dist/frontend/ts7/checker.test.js.map +1 -0
- package/dist/frontend/ts7/enums.d.ts +4 -27
- package/dist/frontend/ts7/enums.generated.d.ts +878 -0
- package/dist/frontend/ts7/enums.generated.js +1313 -0
- package/dist/frontend/ts7/enums.generated.js.map +1 -0
- package/dist/frontend/ts7/enums.js +4 -45
- package/dist/frontend/ts7/enums.js.map +1 -1
- package/dist/frontend/ts7/enums.test.d.ts +1 -0
- package/dist/frontend/ts7/enums.test.js +48 -0
- package/dist/frontend/ts7/enums.test.js.map +1 -0
- package/dist/frontend/ts7/native-api.d.ts +10 -0
- package/dist/frontend/ts7/native-api.js +10 -0
- package/dist/frontend/ts7/native-api.js.map +1 -0
- package/dist/frontend/ts7/native-host.d.ts +2 -0
- package/dist/frontend/ts7/native-host.js +11 -0
- package/dist/frontend/ts7/native-host.js.map +1 -0
- package/dist/frontend/ts7/native-process.d.ts +14 -0
- package/dist/frontend/ts7/native-process.js +62 -0
- package/dist/frontend/ts7/native-process.js.map +1 -0
- package/dist/frontend/ts7/program-adapter.d.ts +10 -98
- package/dist/frontend/ts7/program-adapter.js +16 -310
- package/dist/frontend/ts7/program-adapter.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +115 -0
- package/dist/frontend/ts7/program-host.js +347 -0
- package/dist/frontend/ts7/program-host.js.map +1 -0
- package/dist/frontend/ts7/program-host.test.d.ts +1 -0
- package/dist/frontend/ts7/program-host.test.js +207 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-api.d.ts +12 -0
- package/dist/frontend/ts7/rpc-api.js +23 -0
- package/dist/frontend/ts7/rpc-api.js.map +1 -0
- package/dist/frontend/ts7/rpc-client.d.ts +27 -0
- package/dist/frontend/ts7/rpc-client.js +102 -0
- package/dist/frontend/ts7/rpc-client.js.map +1 -0
- package/dist/frontend/ts7/rpc-client.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-client.test.js +133 -0
- package/dist/frontend/ts7/rpc-client.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-filesystem.d.ts +16 -0
- package/dist/frontend/ts7/rpc-filesystem.js +42 -0
- package/dist/frontend/ts7/rpc-filesystem.js.map +1 -0
- package/dist/frontend/ts7/rpc-filesystem.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-filesystem.test.js +89 -0
- package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-process.d.ts +2 -0
- package/dist/frontend/ts7/rpc-process.js +148 -0
- package/dist/frontend/ts7/rpc-process.js.map +1 -0
- package/dist/frontend/ts7/rpc-process.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-process.test.js +29 -0
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-wire.d.ts +46 -0
- package/dist/frontend/ts7/rpc-wire.js +195 -0
- package/dist/frontend/ts7/rpc-wire.js.map +1 -0
- package/dist/frontend/ts7/rpc-wire.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-wire.test.js +168 -0
- package/dist/frontend/ts7/rpc-wire.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-checker.d.ts +137 -0
- package/dist/frontend/ts7/semantic-checker.js +221 -0
- package/dist/frontend/ts7/semantic-checker.js.map +1 -0
- package/dist/frontend/ts7/semantic-checker.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-checker.test.js +119 -0
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-json.d.ts +5 -0
- package/dist/frontend/ts7/semantic-json.js +47 -0
- package/dist/frontend/ts7/semantic-json.js.map +1 -0
- package/dist/frontend/ts7/semantic-json.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-json.test.js +42 -0
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-model.d.ts +222 -0
- package/dist/frontend/ts7/semantic-model.js +423 -0
- package/dist/frontend/ts7/semantic-model.js.map +1 -0
- package/dist/frontend/ts7/semantic-model.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-model.test.js +322 -0
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-schema.generated.d.ts +283 -0
- package/dist/frontend/ts7/semantic-schema.generated.js +222 -0
- package/dist/frontend/ts7/semantic-schema.generated.js.map +1 -0
- package/dist/frontend/ts7/semantic-types.d.ts +5 -0
- package/dist/frontend/ts7/semantic-types.js +2 -0
- package/dist/frontend/ts7/semantic-types.js.map +1 -0
- package/dist/frontend/ts7/session-cache.d.ts +17 -0
- package/dist/frontend/ts7/session-cache.js +97 -0
- package/dist/frontend/ts7/session-cache.js.map +1 -0
- package/dist/frontend/ts7/session-cache.test.d.ts +1 -0
- package/dist/frontend/ts7/session-cache.test.js +87 -0
- package/dist/frontend/ts7/session-cache.test.js.map +1 -0
- package/dist/frontend/ts7/session-path.d.ts +18 -0
- package/dist/frontend/ts7/session-path.js +203 -0
- package/dist/frontend/ts7/session-path.js.map +1 -0
- package/dist/frontend/ts7/session-path.test.d.ts +1 -0
- package/dist/frontend/ts7/session-path.test.js +34 -0
- package/dist/frontend/ts7/session-path.test.js.map +1 -0
- package/dist/frontend/ts7/session-schema.generated.d.ts +167 -0
- package/dist/frontend/ts7/session-schema.generated.js +5 -0
- package/dist/frontend/ts7/session-schema.generated.js.map +1 -0
- package/dist/frontend/ts7/session-timing.d.ts +50 -0
- package/dist/frontend/ts7/session-timing.js +61 -0
- package/dist/frontend/ts7/session-timing.js.map +1 -0
- package/dist/frontend/ts7/session-timing.test.d.ts +1 -0
- package/dist/frontend/ts7/session-timing.test.js +52 -0
- package/dist/frontend/ts7/session-timing.test.js.map +1 -0
- package/dist/frontend/ts7/session.d.ts +105 -0
- package/dist/frontend/ts7/session.js +233 -0
- package/dist/frontend/ts7/session.js.map +1 -0
- package/dist/frontend/ts7/session.test.d.ts +1 -0
- package/dist/frontend/ts7/session.test.js +215 -0
- package/dist/frontend/ts7/session.test.js.map +1 -0
- package/dist/frontend/ts7/source-parser-node.d.ts +6 -0
- package/dist/frontend/ts7/source-parser-node.js +15 -0
- package/dist/frontend/ts7/source-parser-node.js.map +1 -0
- package/dist/frontend/ts7/source-parser.d.ts +25 -0
- package/dist/frontend/ts7/source-parser.js +96 -0
- package/dist/frontend/ts7/source-parser.js.map +1 -0
- package/dist/frontend/ts7/source-parser.test.d.ts +1 -0
- package/dist/frontend/ts7/source-parser.test.js +151 -0
- package/dist/frontend/ts7/source-parser.test.js.map +1 -0
- package/dist/frontend/ts7/syntax.d.ts +3 -0
- package/dist/frontend/ts7/syntax.js +4 -0
- package/dist/frontend/ts7/syntax.js.map +1 -0
- package/dist/frontend/tsc-codes.js +3 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +34 -18
- package/dist/frontend/type-mapper.js +552 -131
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +146 -2
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend/union-discriminants.d.ts +16 -0
- package/dist/frontend/union-discriminants.js +98 -0
- package/dist/frontend/union-discriminants.js.map +1 -0
- package/dist/frontend/union-discriminants.test.d.ts +1 -0
- package/dist/frontend/union-discriminants.test.js +182 -0
- package/dist/frontend/union-discriminants.test.js.map +1 -0
- package/dist/index.d.ts +7 -198
- package/dist/index.js +369 -1572
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +16 -4
- package/dist/ir/analysis.js +23 -4
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +15 -2
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/constant-tables.js +67 -49
- package/dist/ir/constant-tables.js.map +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/control-flow.d.ts +6 -0
- package/dist/ir/control-flow.js +142 -0
- package/dist/ir/control-flow.js.map +1 -0
- package/dist/ir/control-flow.test.d.ts +1 -0
- package/dist/ir/control-flow.test.js +113 -0
- package/dist/ir/control-flow.test.js.map +1 -0
- package/dist/ir/integer-loops.js +7 -18
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-ranges.js +53 -27
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/ir.d.ts +334 -176
- package/dist/ir/ir.js +710 -903
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +162 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/scalar-records.js +165 -134
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/serialize.d.ts +4 -2
- package/dist/ir/serialize.js +33 -14
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.d.ts +1 -0
- package/dist/ir/serialize.test.js +57 -0
- package/dist/ir/serialize.test.js.map +1 -0
- package/dist/ir/traverse.d.ts +41 -0
- package/dist/ir/traverse.js +660 -0
- package/dist/ir/traverse.js.map +1 -0
- package/dist/ir/traverse.test.d.ts +1 -0
- package/dist/ir/traverse.test.js +242 -0
- package/dist/ir/traverse.test.js.map +1 -0
- package/dist/ir/validate.js +2018 -1498
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +536 -2
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/cache-primitives.d.ts +2 -3
- package/dist/library/cache-primitives.js +4 -6
- package/dist/library/cache-primitives.js.map +1 -1
- package/dist/library/fence-eval.js +2 -2
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/int-infer.js +7 -6
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/library-cache.d.ts +3 -2
- package/dist/library/library-cache.js +5 -17
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +54 -41
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/library-profile.d.ts +3 -1
- package/dist/library/library-profile.js +15 -6
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.d.ts +15 -0
- package/dist/library/prepare.js +584 -0
- package/dist/library/prepare.js.map +1 -0
- package/dist/library/semantic-source.d.ts +1 -1
- package/dist/library/semantic-source.js +8 -6
- package/dist/library/semantic-source.js.map +1 -1
- package/dist/library/sidecar-validate.js +4 -4
- package/dist/library/sidecar-validate.js.map +1 -1
- package/dist/library/sidecar.d.ts +2 -0
- package/dist/library/sidecar.js +10 -3
- package/dist/library/sidecar.js.map +1 -1
- package/dist/native/cache.d.ts +11 -0
- package/dist/native/cache.js +113 -0
- package/dist/native/cache.js.map +1 -0
- package/dist/native/cache.test.d.ts +1 -0
- package/dist/native/cache.test.js +66 -0
- package/dist/native/cache.test.js.map +1 -0
- package/dist/native/cli.d.ts +1 -0
- package/dist/native/cli.js +112 -0
- package/dist/native/cli.js.map +1 -0
- package/dist/native/compiler.d.ts +15 -0
- package/dist/native/compiler.js +336 -0
- package/dist/native/compiler.js.map +1 -0
- package/dist/native/compiler.test.d.ts +1 -0
- package/dist/native/compiler.test.js +174 -0
- package/dist/native/compiler.test.js.map +1 -0
- package/dist/native/comptime.d.ts +5 -0
- package/dist/native/comptime.js +73 -0
- package/dist/native/comptime.js.map +1 -0
- package/dist/native/comptime.test.d.ts +1 -0
- package/dist/native/comptime.test.js +65 -0
- package/dist/native/comptime.test.js.map +1 -0
- package/dist/native/executable-cache.d.ts +26 -0
- package/dist/native/executable-cache.js +228 -0
- package/dist/native/executable-cache.js.map +1 -0
- package/dist/native/executable-cache.test.d.ts +1 -0
- package/dist/native/executable-cache.test.js +151 -0
- package/dist/native/executable-cache.test.js.map +1 -0
- package/dist/native/file-identity.d.ts +4 -0
- package/dist/native/file-identity.js +14 -0
- package/dist/native/file-identity.js.map +1 -0
- package/dist/native/file-identity.test.d.ts +1 -0
- package/dist/native/file-identity.test.js +43 -0
- package/dist/native/file-identity.test.js.map +1 -0
- package/dist/native/library.d.ts +22 -0
- package/dist/native/library.js +83 -0
- package/dist/native/library.js.map +1 -0
- package/dist/native/prepare.d.ts +21 -0
- package/dist/native/prepare.js +174 -0
- package/dist/native/prepare.js.map +1 -0
- package/dist/native/prepare.test.d.ts +1 -0
- package/dist/native/prepare.test.js +70 -0
- package/dist/native/prepare.test.js.map +1 -0
- package/dist/native/sanitizer.d.ts +11 -0
- package/dist/native/sanitizer.js +137 -0
- package/dist/native/sanitizer.js.map +1 -0
- package/dist/native/sanitizer.test.d.ts +1 -0
- package/dist/native/sanitizer.test.js +58 -0
- package/dist/native/sanitizer.test.js.map +1 -0
- package/dist/native/task.d.ts +4 -0
- package/dist/native/task.js +16 -0
- package/dist/native/task.js.map +1 -0
- package/dist/native/task.test.d.ts +1 -0
- package/dist/native/task.test.js +17 -0
- package/dist/native/task.test.js.map +1 -0
- package/dist/native/toolchain.d.ts +45 -0
- package/dist/native/toolchain.js +94 -0
- package/dist/native/toolchain.js.map +1 -0
- package/dist/native/toolchain.test.d.ts +1 -0
- package/dist/native/toolchain.test.js +85 -0
- package/dist/native/toolchain.test.js.map +1 -0
- package/dist/startup-cache.d.ts +1 -1
- package/dist/startup-cache.js +2 -5
- package/dist/startup-cache.js.map +1 -1
- package/dist/timing.d.ts +4 -0
- package/dist/timing.js +19 -0
- package/dist/timing.js.map +1 -0
- package/dist/wasi-paths.js +10 -7
- package/dist/wasi-paths.js.map +1 -1
- package/package.json +28 -19
- package/surface-manifest.json +107 -98
- package/dist/backend/c/async.d.ts +0 -171
- package/dist/backend/c/async.js +0 -1317
- package/dist/backend/c/async.js.map +0 -1
- package/dist/backend/c/c-emitter.d.ts +0 -536
- package/dist/backend/c/c-emitter.js +0 -1932
- package/dist/backend/c/c-emitter.js.map +0 -1
- package/dist/backend/c/exprs.d.ts +0 -15
- package/dist/backend/c/exprs.js +0 -8847
- package/dist/backend/c/exprs.js.map +0 -1
- package/dist/backend/c/island.d.ts +0 -45
- package/dist/backend/c/island.js +0 -281
- package/dist/backend/c/island.js.map +0 -1
- package/dist/backend/c/may-throw.js.map +0 -1
- package/dist/backend/c/shapes.d.ts +0 -142
- package/dist/backend/c/shapes.js +0 -603
- package/dist/backend/c/shapes.js.map +0 -1
- package/dist/backend/c/stmts.d.ts +0 -76
- package/dist/backend/c/stmts.js +0 -1108
- package/dist/backend/c/stmts.js.map +0 -1
- package/dist/backend/c/types.d.ts +0 -71
- package/dist/backend/c/types.js +0 -459
- package/dist/backend/c/types.js.map +0 -1
- package/dist/backend/c/types.test.js +0 -32
- package/dist/backend/c/types.test.js.map +0 -1
- package/dist/backend/c/walkers.d.ts +0 -134
- package/dist/backend/c/walkers.js +0 -1772
- package/dist/backend/c/walkers.js.map +0 -1
- /package/dist/backend/{c/types.test.d.ts → cycle-analysis.test.d.ts} +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { InternalCompilerError } from "../../errors.js";
|
|
1
2
|
/* Module-graph lowering: splitting each source file into its parts, the
|
|
2
3
|
* program-collection pass (signatures, classes, globals — reachability
|
|
3
4
|
* seeds), npm/JSON import collection, per-file %init functions, %main, and
|
|
@@ -11,20 +12,24 @@ import { isJsSourceFileName } from "../tsc-codes.js";
|
|
|
11
12
|
import { isRelativeSpecifier } from "../workspace-registry.js";
|
|
12
13
|
import { canonicalBuiltinModule, cjsExportAssignmentOf, cjsExportDiscardReason, entryPackageFilePredicate, isCjsJsFile, isJsSourceFile, isRequireStatement, locOf, makeCycleAdmission, orderedImportsOf, resolveImport, resolveNpmImport } from "../program.js";
|
|
13
14
|
import { invalidJsonModuleDiag, npmEmbedFailedDiag, requiresDynamicImportDiag } from "../../diagnostics/diagnostic.js";
|
|
14
|
-
import { BOOL, DYN, F64, JSVAL, RUNTIME_ERROR_CLASSES, STRING, VOID, arrayOf, canConvertToDyn, isUnitType } from "../../ir/ir.js";
|
|
15
|
+
import { BOOL, DYN, F64, JSVAL, RUNTIME_ERROR_CLASSES, STRING, VOID, arrayOf, canBoxFuncIntoDyn, canConvertToDyn, isUnitType } from "../../ir/ir.js";
|
|
15
16
|
import { ENTRY_NAME, PoisonError, boundIdentifiersOf, dynFallbackType, dynUndefinedExpr, importCallHandleType, newFnCtx, staticImportNamespaceType, uncheckedOverloadHandleCall } from "./lowerer.js";
|
|
16
|
-
import { builtinMemberRequireDecl, builtinNamespaceDestructureModuleOf, createRequireBindingDecl, createRequireNamespaceDecl, createRequireProgramModuleDecl, createRequireSpecOf, isPromisifyCall, registerBuiltinCallableAlias,
|
|
17
|
-
import { bindingContextualGenericFnNodeOf, bindingGenericFnAliasInfoOf, bindingGenericFnInfoOf, bindingGenericFnNodeOf, bindingNeverReassigned, deadUnmappableBinding, implicitLocalFnInfoOf, implicitLocalFnNodeOf, nullishGenericBindingUnitOf, registerOverloadedCallableAlias } from "./lower-calls.js";
|
|
18
|
-
import { isVarDeclared, numericIteratorSourceOf, provenanceElidedConstDecl } from "./lower-stmts.js";
|
|
17
|
+
import { isNativeFfiRequire, builtinMemberRequireDecl, builtinNamespaceDestructureModuleOf, createRequireBindingDecl, createRequireNamespaceDecl, createRequireProgramModuleDecl, createRequireSpecOf, isPromisifyCall, registerBuiltinCallableAlias, stripTypeCasts } from "./lower-builtins.js";
|
|
18
|
+
import { bindingContextualGenericFnNodeOf, bindingGenericFnAliasInfoOf, bindingGenericFnInfoOf, bindingGenericFnNodeOf, bindingNeverReassigned, deadUnmappableBinding, funcTypeFromParamShapes, implicitLocalFnInfoOf, implicitLocalFnNodeOf, nullishGenericBindingUnitOf, registerOverloadedCallableAlias } from "./lower-calls.js";
|
|
19
|
+
import { jsBindingHasOpenWrites, hasJsTypeAnnotation, isVarDeclared, numericIteratorSourceOf, provenanceElidedConstDecl } from "./lower-stmts.js";
|
|
20
|
+
import { objectFactorySignature } from "./object-factory-new.js";
|
|
19
21
|
import { streamClassAliasDecl } from "./lower-stream.js";
|
|
20
|
-
import { stdlibGlobalAliasDecl, stdlibGlobalAliasNameOf } from "./surfaces.js";
|
|
21
|
-
import {
|
|
22
|
+
import { stdlibGlobalAliasDecl, stdlibGlobalAliasNameOf, stdlibGlobalNameOf } from "./surfaces.js";
|
|
23
|
+
import { isNativeBuiltinValueInitializer } from "./lower-builtin-values.js";
|
|
24
|
+
import { collectNamespaceStmt, nsMemberIdentOf, nsPathPrefix, trapDeclRootOf } from "./lower-namespaces.js";
|
|
22
25
|
import { collectExpandoMembers } from "./lower-expando.js";
|
|
26
|
+
import { recordTextCodecClass } from "../../ir/ir.js";
|
|
23
27
|
import { isUnitOnlyTsType, unitOnlyUnion } from "../type-mapper.js";
|
|
24
|
-
import { decoratorNodesOf, genericIfaceBindingKeepsClass, guaranteedDecorationThrow } from "./lower-classes.js";
|
|
28
|
+
import { collectVirtualJsMethods, decoratorNodesOf, genericIfaceBindingKeepsClass, guaranteedDecorationThrow, storedClassValueType } from "./lower-classes.js";
|
|
25
29
|
import { isMixinFnBinding, mixinResultBindingClassOf } from "./lower-mixins.js";
|
|
26
30
|
import { cjsModuleRef, cjsModuleRegistryPrelude } from "./lower-node-module.js";
|
|
27
31
|
import { forkTargetPaths } from "../fork-target.js";
|
|
32
|
+
import { isNativeProxyInitializer } from "./expressions/native-proxy.js";
|
|
28
33
|
/** Program modules selected by statically resolved child_process.fork()
|
|
29
34
|
* calls join the compiled graph without becoming startup dependencies of
|
|
30
35
|
* the parent entry. Their guarded init functions are selected by %main only
|
|
@@ -127,7 +132,7 @@ function dynamicImportProgramTargetOf(program, sf, spec) {
|
|
|
127
132
|
return null;
|
|
128
133
|
if (dep.fileName.endsWith(".json") || dep.fileName.endsWith(".cts"))
|
|
129
134
|
return null;
|
|
130
|
-
if (isCjsJsFile(dep))
|
|
135
|
+
if (isCjsJsFile(dep, program))
|
|
131
136
|
return null;
|
|
132
137
|
return dep;
|
|
133
138
|
}
|
|
@@ -223,11 +228,41 @@ export function appendDynamicImportModules(program, order, onCycle) {
|
|
|
223
228
|
* signatures are cheap and calls resolve against them; only BODY lowering
|
|
224
229
|
* is reachability-gated. */
|
|
225
230
|
export function collectProgram(lowerer, parts) {
|
|
231
|
+
const computed = new Set();
|
|
232
|
+
for (const fp of parts)
|
|
233
|
+
for (const decl of fp.classDecls) {
|
|
234
|
+
const heritage = decl.heritageClauses?.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types[0]?.expression;
|
|
235
|
+
if (heritage && ts.isCallExpression(heritage))
|
|
236
|
+
computed.add(decl);
|
|
237
|
+
}
|
|
238
|
+
// Descendants need the computed ancestor's completed layout before
|
|
239
|
+
// their own fields and inherited methods can be collected.
|
|
240
|
+
const computedSymbols = new Set([...computed].map((decl) => declSymbolOf(lowerer, decl)).filter((symbol) => symbol !== undefined));
|
|
241
|
+
let expanded = true;
|
|
242
|
+
while (expanded) {
|
|
243
|
+
expanded = false;
|
|
244
|
+
for (const fp of parts)
|
|
245
|
+
for (const decl of fp.classDecls) {
|
|
246
|
+
if (computed.has(decl))
|
|
247
|
+
continue;
|
|
248
|
+
const heritage = decl.heritageClauses?.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types[0]?.expression;
|
|
249
|
+
const base = heritage && ts.isIdentifier(heritage) ? lowerer.resolveValueSymbol(heritage) : undefined;
|
|
250
|
+
if (!base || !computedSymbols.has(base))
|
|
251
|
+
continue;
|
|
252
|
+
computed.add(decl);
|
|
253
|
+
const symbol = declSymbolOf(lowerer, decl);
|
|
254
|
+
if (symbol)
|
|
255
|
+
computedSymbols.add(symbol);
|
|
256
|
+
expanded = true;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
226
259
|
lowerer.collecting = true;
|
|
227
260
|
try {
|
|
261
|
+
collectVirtualJsMethods(lowerer, parts.map((part) => part.sf));
|
|
228
262
|
for (const fp of parts)
|
|
229
263
|
for (const decl of fp.classDecls)
|
|
230
|
-
|
|
264
|
+
if (!computed.has(decl))
|
|
265
|
+
lowerer.collectClassShape(decl);
|
|
231
266
|
for (const fp of parts)
|
|
232
267
|
for (const decl of fp.fnDecls)
|
|
233
268
|
lowerer.collectSignature(decl);
|
|
@@ -257,6 +292,60 @@ export function collectProgram(lowerer, parts) {
|
|
|
257
292
|
lowerer.collectNpmImports(parts);
|
|
258
293
|
lowerer.collectJsonImports(parts);
|
|
259
294
|
}
|
|
295
|
+
for (const decl of computed) {
|
|
296
|
+
const symbol = declSymbolOf(lowerer, decl);
|
|
297
|
+
const wasCollecting = lowerer.collecting;
|
|
298
|
+
lowerer.collecting = true;
|
|
299
|
+
const previousSink = lowerer.diagSink;
|
|
300
|
+
const deferred = [];
|
|
301
|
+
lowerer.diagSink = deferred;
|
|
302
|
+
const expression = decl.heritageClauses.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword).types[0].expression;
|
|
303
|
+
const context = newFnCtx(false, null, null, DYN);
|
|
304
|
+
lowerer.fnStack.push(context);
|
|
305
|
+
try {
|
|
306
|
+
let value = lowerer.lowerExpr(expression);
|
|
307
|
+
const known = value.type.kind === "dyn" ? storedClassValueType(lowerer, expression) : null;
|
|
308
|
+
if (known?.kind === "classval")
|
|
309
|
+
value = lowerer.coerceToExpected(value, known);
|
|
310
|
+
if (value.type.kind === "dyn" || value.type.kind === "func") {
|
|
311
|
+
const name = `%class.base.${lowerer.classNamer(decl)}`;
|
|
312
|
+
const loc = locOf(expression);
|
|
313
|
+
lowerer.liftedFns.push({ name, params: [], returnType: value.type, locals: context.locals,
|
|
314
|
+
body: [{ kind: "return", value, loc }], loc });
|
|
315
|
+
lowerer.computedCallableBases.set(decl, { kind: "call", callee: name, args: [], type: value.type, loc });
|
|
316
|
+
}
|
|
317
|
+
if (value.type.kind === "classval") {
|
|
318
|
+
const classInfo = lowerer.classes.get(value.type.className);
|
|
319
|
+
if (classInfo) {
|
|
320
|
+
const name = `%class.base.${lowerer.classNamer(decl)}`;
|
|
321
|
+
const loc = locOf(expression);
|
|
322
|
+
lowerer.liftedFns.push({ name, params: [], returnType: value.type, locals: context.locals,
|
|
323
|
+
body: [{ kind: "return", value, loc }], loc });
|
|
324
|
+
lowerer.computedClassBases.set(lowerer.classNamer(decl), { value: { kind: "call", callee: name, args: [], type: value.type, loc }, classInfo });
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
if (!(error instanceof PoisonError))
|
|
330
|
+
throw error;
|
|
331
|
+
}
|
|
332
|
+
finally {
|
|
333
|
+
lowerer.fnStack.pop();
|
|
334
|
+
lowerer.diagSink = previousSink;
|
|
335
|
+
}
|
|
336
|
+
lowerer.diagSink = deferred;
|
|
337
|
+
try {
|
|
338
|
+
lowerer.collectClassShape(decl);
|
|
339
|
+
}
|
|
340
|
+
finally {
|
|
341
|
+
lowerer.diagSink = previousSink;
|
|
342
|
+
}
|
|
343
|
+
if (symbol && deferred.length) {
|
|
344
|
+
lowerer.deferredDiags.set(symbol, [...(lowerer.deferredDiags.get(symbol) ?? []), ...deferred]);
|
|
345
|
+
lowerer.deferredClassByName.set(lowerer.classNamer(decl), symbol);
|
|
346
|
+
}
|
|
347
|
+
lowerer.collecting = wasCollecting;
|
|
348
|
+
}
|
|
260
349
|
}
|
|
261
350
|
/** The npm-import chokepoint, run once per pass during collection (so
|
|
262
351
|
* bodies lowered in ANY pass resolve the bindings). In a static build
|
|
@@ -272,7 +361,10 @@ export function collectProgram(lowerer, parts) {
|
|
|
272
361
|
* site. Type-only imports are free either way: the .d.ts is a type
|
|
273
362
|
* surface, not code. */
|
|
274
363
|
export function collectNpmImports(lowerer, parts) {
|
|
275
|
-
const
|
|
364
|
+
const services = lowerer.frontendServices;
|
|
365
|
+
if (lowerer.dynamic && services === undefined)
|
|
366
|
+
throw new Error("dynamic lowering requires frontend services");
|
|
367
|
+
const builder = lowerer.dynamic && services !== undefined ? new NpmGraphBuilder(services) : null;
|
|
276
368
|
const entryPackageFile = entryPackageFilePredicate(lowerer.entry.fileName);
|
|
277
369
|
for (const fp of parts) {
|
|
278
370
|
for (const stmt of fp.sf.statements) {
|
|
@@ -646,15 +738,41 @@ export function moduleArtifacts(lowerer, functions) {
|
|
|
646
738
|
const pendingClasses = [];
|
|
647
739
|
const pendingShapes = [];
|
|
648
740
|
const pendingUnions = [];
|
|
741
|
+
const boxedChild = (type, seen = new Set()) => {
|
|
742
|
+
switch (type.kind) {
|
|
743
|
+
case "child": return true;
|
|
744
|
+
case "array":
|
|
745
|
+
case "set": return boxedChild(type.elem, seen);
|
|
746
|
+
case "promise": return boxedChild(type.inner, seen);
|
|
747
|
+
case "map": return boxedChild(type.key, seen) || boxedChild(type.value, seen);
|
|
748
|
+
case "func": return boxedChild(type.ret, seen);
|
|
749
|
+
case "record":
|
|
750
|
+
if (seen.has(type.shapeId))
|
|
751
|
+
return false;
|
|
752
|
+
seen.add(type.shapeId);
|
|
753
|
+
return lowerer.shapes.get(type.shapeId)?.fields.some((field) => boxedChild(field.type, seen)) ?? false;
|
|
754
|
+
case "union":
|
|
755
|
+
if (seen.has(type.unionId))
|
|
756
|
+
return false;
|
|
757
|
+
seen.add(type.unionId);
|
|
758
|
+
return lowerer.unions.get(type.unionId)?.arms.some((arm) => boxedChild(arm, seen)) ?? false;
|
|
759
|
+
default: return false;
|
|
760
|
+
}
|
|
761
|
+
};
|
|
649
762
|
const visit = (node) => {
|
|
650
763
|
if (Array.isArray(node)) {
|
|
651
|
-
|
|
652
|
-
|
|
764
|
+
// This walk only reads compiler-owned arrays. A callback traversal
|
|
765
|
+
// reuses one checked view instead of refreshing it at each step.
|
|
766
|
+
node.forEach(visit);
|
|
653
767
|
return;
|
|
654
768
|
}
|
|
655
769
|
if (node === null || typeof node !== "object")
|
|
656
770
|
return;
|
|
657
771
|
const rec = node;
|
|
772
|
+
if (rec["kind"] === "dynFrom" && boxedChild(rec["value"].type)) {
|
|
773
|
+
// A generic child can expose native stdio without importing stream.
|
|
774
|
+
visit([{ className: "%Readable" }, { className: "%Writable" }]);
|
|
775
|
+
}
|
|
658
776
|
if (typeof rec["className"] === "string" && !classNames.has(rec["className"])) {
|
|
659
777
|
classNames.add(rec["className"]);
|
|
660
778
|
pendingClasses.push(rec["className"]);
|
|
@@ -672,15 +790,32 @@ export function moduleArtifacts(lowerer, functions) {
|
|
|
672
790
|
visit(rec[key]);
|
|
673
791
|
}
|
|
674
792
|
};
|
|
675
|
-
|
|
676
|
-
|
|
793
|
+
// Keep function lists and their typed slots in native storage. Reflective
|
|
794
|
+
// array iteration refreshes a complete view at each step; only executable
|
|
795
|
+
// nodes and individual types need the general dependency walk.
|
|
796
|
+
for (const fn of functions) {
|
|
797
|
+
for (const param of fn.params)
|
|
798
|
+
visit(param.type);
|
|
799
|
+
visit(fn.returnType);
|
|
800
|
+
for (const local of fn.locals)
|
|
801
|
+
visit(local.type);
|
|
802
|
+
for (const capture of fn.captures ?? [])
|
|
803
|
+
visit(capture.type);
|
|
804
|
+
for (const capture of fn.classCaptures ?? [])
|
|
805
|
+
visit(capture.type);
|
|
806
|
+
visit(fn.generator);
|
|
807
|
+
for (const stmt of fn.body)
|
|
808
|
+
visit(stmt);
|
|
809
|
+
}
|
|
810
|
+
for (const global of lowerer.globalsList)
|
|
811
|
+
visit(global.type);
|
|
677
812
|
// The builtin error classes ride EVERY module: the runtime's own throws
|
|
678
813
|
// (JSON/dynCheck/regex failures) mint instances of them whether or not
|
|
679
814
|
// user code mentions Error, and the uncaught printer tells Error
|
|
680
815
|
// payloads apart by their preorder interval — which must therefore be
|
|
681
816
|
// part of this program's numbering (backends stamp it into the
|
|
682
817
|
// runtime's vtables at main).
|
|
683
|
-
for (const name of RUNTIME_ERROR_CLASSES.keys()) {
|
|
818
|
+
for (const name of [...RUNTIME_ERROR_CLASSES.keys()]) {
|
|
684
819
|
if (!classNames.has(name)) {
|
|
685
820
|
classNames.add(name);
|
|
686
821
|
pendingClasses.push(name);
|
|
@@ -731,6 +866,8 @@ export function moduleArtifacts(lowerer, functions) {
|
|
|
731
866
|
.map((c) => c.def)
|
|
732
867
|
.filter((def) => classNames.has(def.name))
|
|
733
868
|
.map((def) => {
|
|
869
|
+
if (!def)
|
|
870
|
+
throw new InternalCompilerError("missing reachable class definition");
|
|
734
871
|
// Generic-class instantiations bypass the reachability gate
|
|
735
872
|
// (demand-driven — every member of a demanded instantiation
|
|
736
873
|
// lowers; see lowerClassMembers), so their defs keep every
|
|
@@ -738,18 +875,21 @@ export function moduleArtifacts(lowerer, functions) {
|
|
|
738
875
|
// the same rule (noteVirtualEdge marks the abstract declarer, so
|
|
739
876
|
// a dispatched slot keeps its declaration; an unreferenced one
|
|
740
877
|
// drops and the root-most CONCRETE declaration owns the slot).
|
|
878
|
+
const className = def.name;
|
|
741
879
|
const methods = reachable === null || def.genericOf !== undefined
|
|
742
880
|
? (def.methods ?? [])
|
|
743
|
-
: (def.methods?.filter((m) => reachable.has(`%${
|
|
881
|
+
: (def.methods?.filter((m) => reachable.has(`%${className}.${m}`)) ?? []);
|
|
744
882
|
const abstractMethods = def.abstractMethods?.filter((m) => methods.includes(m)) ?? [];
|
|
745
883
|
const rest = { ...def };
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
884
|
+
if (methods.length > 0)
|
|
885
|
+
rest.methods = methods;
|
|
886
|
+
else
|
|
887
|
+
delete rest.methods;
|
|
888
|
+
if (abstractMethods.length > 0)
|
|
889
|
+
rest.abstractMethods = abstractMethods;
|
|
890
|
+
else
|
|
891
|
+
delete rest.abstractMethods;
|
|
892
|
+
return rest;
|
|
753
893
|
}),
|
|
754
894
|
records: lowerer.shapes.shapes.filter((r) => shapeIds.has(r.id)),
|
|
755
895
|
unions: lowerer.unions.unions.filter((u) => unionIds.has(u.id)),
|
|
@@ -789,20 +929,96 @@ function cjsScalarLiteral(e) {
|
|
|
789
929
|
* a checked-dynamic (or unit) value, so a DYN module global can hold it:
|
|
790
930
|
* no initializer, a unit literal, or a checker-`any` call/member/
|
|
791
931
|
* identifier read (any-typed operations lower through the checked-dynamic tree in JS).
|
|
792
|
-
* `new` expressions stay OUT even when checker-any (`new Anon.Sub()` over
|
|
932
|
+
* User-class `new` expressions stay OUT even when checker-any (`new Anon.Sub()` over
|
|
793
933
|
* an expando class member constructs a TYPED instance — corpus 2032), as
|
|
794
934
|
* does everything else (object/array literals have their own rules;
|
|
795
935
|
* typed-but-unmappable initializers keep the %init-local adoption). */
|
|
936
|
+
function checkedGlobalReference(lowerer, expression) {
|
|
937
|
+
if (ts.isIdentifier(expression))
|
|
938
|
+
return lowerer.globalOf(expression)?.type.kind === "dyn";
|
|
939
|
+
if (!ts.isPropertyAccessExpression(expression) || !ts.isIdentifier(expression.name) || !ts.isIdentifier(expression.expression))
|
|
940
|
+
return false;
|
|
941
|
+
const root = lowerer.checker.getSymbolAtLocation(expression.expression);
|
|
942
|
+
const namespace = root && lowerer.checker.declarationsOf(root).some(ts.isNamespaceImport);
|
|
943
|
+
return (namespace || lowerer.cjsLocalModuleBindingOf(expression.expression)) &&
|
|
944
|
+
lowerer.globalOf(expression.name)?.type.kind === "dyn";
|
|
945
|
+
}
|
|
796
946
|
function jsDynHoldableInitializer(lowerer, init) {
|
|
797
947
|
if (init === undefined)
|
|
798
948
|
return true;
|
|
949
|
+
if (isNativeProxyInitializer(lowerer, init))
|
|
950
|
+
return true;
|
|
799
951
|
let e = init;
|
|
800
952
|
while (ts.isParenthesizedExpression(e))
|
|
801
953
|
e = e.expression;
|
|
954
|
+
if (checkedGlobalReference(lowerer, e))
|
|
955
|
+
return true;
|
|
956
|
+
if (ts.isCallExpression(e) && ts.isPropertyAccessExpression(e.expression) &&
|
|
957
|
+
["freeze", "seal", "preventExtensions"].includes(e.expression.name.text) &&
|
|
958
|
+
lowerer.stdlibGlobalMember(e.expression, "Object") !== null && e.arguments[0] &&
|
|
959
|
+
ts.isArrayLiteralExpression(e.arguments[0]))
|
|
960
|
+
return true;
|
|
961
|
+
// The built-in Array constructor can create an evolving array whose
|
|
962
|
+
// inferred element type has no native mapping. Its checked reference
|
|
963
|
+
// must remain shared with separately declared functions and aliases.
|
|
964
|
+
if ((ts.isCallExpression(e) || ts.isNewExpression(e)) && lowerer.isStdlibGlobal(e.expression, "Array"))
|
|
965
|
+
return true;
|
|
966
|
+
// JavaScript process streams lower to native checked handles even when
|
|
967
|
+
// their declared method overloads prevent a structural type mapping.
|
|
968
|
+
// Register the shared slot before separately declared functions lower.
|
|
969
|
+
if (ts.isPropertyAccessExpression(e)) {
|
|
970
|
+
const member = lowerer.stdlibGlobalMember(e, "process");
|
|
971
|
+
if (member === "stdin" || member === "stdout" || member === "stderr")
|
|
972
|
+
return true;
|
|
973
|
+
if (e.name.text === "constructor" && lowerer.checker.getCallSignatures(lowerer.typeOf(e.expression)).length > 0)
|
|
974
|
+
return true;
|
|
975
|
+
}
|
|
802
976
|
if (e.kind === ts.SyntaxKind.NullKeyword)
|
|
803
977
|
return true;
|
|
804
978
|
if (ts.isIdentifier(e) && e.text === "undefined")
|
|
805
979
|
return true;
|
|
980
|
+
if (ts.isConditionalExpression(e)) {
|
|
981
|
+
return jsDynHoldableInitializer(lowerer, e.whenTrue) && jsDynHoldableInitializer(lowerer, e.whenFalse);
|
|
982
|
+
}
|
|
983
|
+
if (ts.isBinaryExpression(e) && (e.operatorToken.kind === ts.SyntaxKind.QuestionQuestionToken ||
|
|
984
|
+
e.operatorToken.kind === ts.SyntaxKind.BarBarToken || e.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken)) {
|
|
985
|
+
return jsDynHoldableInitializer(lowerer, e.left) && jsDynHoldableInitializer(lowerer, e.right);
|
|
986
|
+
}
|
|
987
|
+
// A member of a checked module value is itself checked, including a
|
|
988
|
+
// callable whose inferred overloads cannot describe one native ABI.
|
|
989
|
+
if ((ts.isPropertyAccessExpression(e) || ts.isElementAccessExpression(e)) &&
|
|
990
|
+
ts.isIdentifier(e.expression) && lowerer.globalOf(e.expression)?.type.kind === "dyn")
|
|
991
|
+
return true;
|
|
992
|
+
if (ts.isPropertyAccessExpression(e)) {
|
|
993
|
+
const member = nsMemberIdentOf(lowerer, e);
|
|
994
|
+
if (member && (lowerer.globalOf(member)?.type.kind === "dyn" || lowerer.genericFnOf(member)?.implicitParams))
|
|
995
|
+
return true;
|
|
996
|
+
}
|
|
997
|
+
// Optional callable reads (for example descriptor?.get) can be held in
|
|
998
|
+
// the same checked slot as a callable. Their nullish arm must remain
|
|
999
|
+
// observable by functions declared outside the module initializer.
|
|
1000
|
+
if (ts.isPropertyAccessExpression(e) || ts.isElementAccessExpression(e) || ts.isCallExpression(e)) {
|
|
1001
|
+
const fallback = lowerer.mapTypeOf(lowerer.typeOf(e)) ?? dynFallbackType(lowerer, e, lowerer.typeOf(e));
|
|
1002
|
+
if (fallback?.kind === "func" && canBoxFuncIntoDyn(fallback, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)))
|
|
1003
|
+
return true;
|
|
1004
|
+
const arms = fallback?.kind === "union" ? lowerer.unions.get(fallback.unionId)?.arms : undefined;
|
|
1005
|
+
if (arms?.some(arm => arm.kind === "func") && arms.every(arm => isUnitType(arm) || (arm.kind === "func" && canBoxFuncIntoDyn(arm, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)))))
|
|
1006
|
+
return true;
|
|
1007
|
+
}
|
|
1008
|
+
if ((ts.isFunctionExpression(e) || ts.isArrowFunction(e)) && !e.typeParameters?.length && isJsSourceFile(e.getSourceFile()))
|
|
1009
|
+
return true;
|
|
1010
|
+
if (ts.isIdentifier(e) || ts.isArrowFunction(e) || ts.isFunctionExpression(e)) {
|
|
1011
|
+
if (ts.isIdentifier(e)) {
|
|
1012
|
+
if (lowerer.globalOf(e)?.type.kind === "dyn")
|
|
1013
|
+
return true;
|
|
1014
|
+
const signature = lowerer.isTopLevelFnSymbol(e) ? lowerer.fnSigOf(e) : null;
|
|
1015
|
+
if (signature && canBoxFuncIntoDyn(funcTypeFromParamShapes(signature.params, signature.returnType), (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)))
|
|
1016
|
+
return true;
|
|
1017
|
+
}
|
|
1018
|
+
const type = lowerer.mapTypeOf(lowerer.typeOf(e)) ?? dynFallbackType(lowerer, e, lowerer.typeOf(e));
|
|
1019
|
+
if (type?.kind === "func" && canBoxFuncIntoDyn(type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)))
|
|
1020
|
+
return true;
|
|
1021
|
+
}
|
|
806
1022
|
if ((ts.isCallExpression(e) || ts.isPropertyAccessExpression(e) || ts.isIdentifier(e)) &&
|
|
807
1023
|
(lowerer.typeOf(e).flags & ts.TypeFlags.Any) !== 0) {
|
|
808
1024
|
return true;
|
|
@@ -902,7 +1118,9 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
902
1118
|
if (!(symType.flags & ts.TypeFlags.Any))
|
|
903
1119
|
tsType = symType;
|
|
904
1120
|
}
|
|
905
|
-
let type = lowerer.mapTypeOf(tsType) ?? dynFallbackType(lowerer, stmt.expression, tsType)
|
|
1121
|
+
let type = lowerer.mapTypeOf(tsType) ?? dynFallbackType(lowerer, stmt.expression, tsType);
|
|
1122
|
+
if (type === null)
|
|
1123
|
+
lowerer.badType(stmt.expression, tsType);
|
|
906
1124
|
// `export default undefined` — the unit-only union, like any
|
|
907
1125
|
// unit-only binding (`export default null` maps via mapType).
|
|
908
1126
|
if (type.kind === "void" && isUnitOnlyTsType(tsType)) {
|
|
@@ -1050,8 +1268,12 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1050
1268
|
const diagsBefore = lowerer.diags.length;
|
|
1051
1269
|
try {
|
|
1052
1270
|
const strict = lowerer.typeOf(rhs);
|
|
1053
|
-
|
|
1271
|
+
let t = lowerer.mapTypeOf(strict) ??
|
|
1054
1272
|
(fnValued || factoryValued ? dynFallbackType(lowerer, rhs, strict) : null);
|
|
1273
|
+
// A returned object remains the live CommonJS root; later
|
|
1274
|
+
// exports.member writes must update that same open object.
|
|
1275
|
+
if (factoryValued && t?.kind === "record" && lowerer.dynConvertible(t))
|
|
1276
|
+
t = DYN;
|
|
1055
1277
|
if (t && t.kind !== "void") {
|
|
1056
1278
|
const g = { id: `%g.${tag}exports`, name: "exports", type: t, mutable: false };
|
|
1057
1279
|
lowerer.globalsByDeclNode.set(cjs.expr, g);
|
|
@@ -1145,7 +1367,8 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1145
1367
|
// require('node:process')` aliases the global process
|
|
1146
1368
|
// (stdlibGlobalAliasDecl's require form) so reads through the
|
|
1147
1369
|
// binding lower via the process surface.
|
|
1148
|
-
if (isRequireStatement(stmt))
|
|
1370
|
+
if (isRequireStatement(stmt) && !(ts.isVariableStatement(stmt) &&
|
|
1371
|
+
stmt.declarationList.declarations.some(decl => isNativeFfiRequire(lowerer, decl.initializer)))) {
|
|
1149
1372
|
if (ts.isVariableStatement(stmt) &&
|
|
1150
1373
|
(stmt.declarationList.flags & ts.NodeFlags.Const) !== 0) {
|
|
1151
1374
|
for (const decl of stmt.declarationList.declarations) {
|
|
@@ -1370,7 +1593,7 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1370
1593
|
// `const require = createRequire(import.meta.url)` at file scope:
|
|
1371
1594
|
// compile-time plumbing — no global storage; the statement
|
|
1372
1595
|
// lowering skips it by the same test.
|
|
1373
|
-
if (
|
|
1596
|
+
if (createRequireBindingDecl(lowerer, decl.name, decl.initializer))
|
|
1374
1597
|
continue;
|
|
1375
1598
|
// `const fs = require("node:fs")` through that binding at file
|
|
1376
1599
|
// scope — a namespace import in const clothing, same story.
|
|
@@ -1413,17 +1636,52 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1413
1636
|
})());
|
|
1414
1637
|
if (stableStdlibAlias && stdlibGlobalAliasDecl(lowerer, decl.name, decl.initializer))
|
|
1415
1638
|
continue;
|
|
1416
|
-
// Stored default TextEncoder/TextDecoder instances are the same
|
|
1417
|
-
// compile-time alias plumbing as their statement lowering: calls
|
|
1418
|
-
// trace this const initializer, so no module global exists.
|
|
1419
|
-
if (isConst && textCodecBindingDecl(lowerer, decl.name, decl.initializer))
|
|
1420
|
-
continue;
|
|
1421
1639
|
// Destructuring declarations register EVERY bound identifier (the
|
|
1422
1640
|
// desugar in the init function assigns the pre-registered globals,
|
|
1423
1641
|
// exactly like plain declarations).
|
|
1424
1642
|
for (const nameNode of boundIdentifiersOf(decl.name)) {
|
|
1425
1643
|
const diagsBefore = lowerer.diags.length;
|
|
1426
1644
|
try {
|
|
1645
|
+
// Checked JavaScript factories can expose inferred callables by
|
|
1646
|
+
// destructuring. Keep each exported binding in module storage so
|
|
1647
|
+
// separately lowered functions see the initialized value.
|
|
1648
|
+
if (isJsSourceFile(sf) && !ts.isIdentifier(decl.name) && decl.initializer &&
|
|
1649
|
+
!decl.type && !hasJsTypeAnnotation(decl) && !lowerer.mapTypeOf(lowerer.typeOf(nameNode))) {
|
|
1650
|
+
const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
|
|
1651
|
+
if (symbol && !lowerer.globalsBySymbol.has(symbol)) {
|
|
1652
|
+
const g = { id: `%g.${tag}${nsPrefix}${nameNode.text}`, name: nameNode.text,
|
|
1653
|
+
type: DYN, mutable: isLet, source: bindingSource(nameNode),
|
|
1654
|
+
...(!isVarDeclared(decl) ? { tdz: true } : {}) };
|
|
1655
|
+
lowerer.globalsBySymbol.set(symbol, g);
|
|
1656
|
+
lowerer.globalsList.push(g);
|
|
1657
|
+
if (isVarDeclared(decl))
|
|
1658
|
+
noteVarGlobalEntryInit(lowerer, sf, g);
|
|
1659
|
+
}
|
|
1660
|
+
continue;
|
|
1661
|
+
}
|
|
1662
|
+
// Builtin declarations do not always describe the concrete native
|
|
1663
|
+
// callable ABI. Preserve checked-native values in shared storage;
|
|
1664
|
+
// adapting the loader to (string) would replace its validation.
|
|
1665
|
+
const initializer = decl.initializer ? stripTypeCasts(decl.initializer) : undefined;
|
|
1666
|
+
if (isJsSourceFile(sf) && nameNode === decl.name && initializer &&
|
|
1667
|
+
(isNativeBuiltinValueInitializer(lowerer, initializer) ||
|
|
1668
|
+
(!decl.type && !hasJsTypeAnnotation(decl) && lowerer.mapTypeOf(lowerer.typeOf(nameNode))?.kind === "date") ||
|
|
1669
|
+
(!decl.type && !hasJsTypeAnnotation(decl) && checkedGlobalReference(lowerer, initializer)) ||
|
|
1670
|
+
(!lowerer.dynamic && stdlibGlobalNameOf(lowerer, initializer) === "globalThis"))) {
|
|
1671
|
+
const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
|
|
1672
|
+
if (symbol && !lowerer.globalsBySymbol.has(symbol)) {
|
|
1673
|
+
const g = {
|
|
1674
|
+
id: `%g.${tag}${nsPrefix}${nameNode.text}`, name: nameNode.text,
|
|
1675
|
+
type: DYN, mutable: isLet, source: bindingSource(nameNode),
|
|
1676
|
+
...(!isVarDeclared(decl) ? { tdz: true } : {}),
|
|
1677
|
+
};
|
|
1678
|
+
lowerer.globalsBySymbol.set(symbol, g);
|
|
1679
|
+
lowerer.globalsList.push(g);
|
|
1680
|
+
if (isVarDeclared(decl))
|
|
1681
|
+
noteVarGlobalEntryInit(lowerer, sf, g);
|
|
1682
|
+
}
|
|
1683
|
+
continue;
|
|
1684
|
+
}
|
|
1427
1685
|
// A JS file-scope evolving ARRAY (`const mustCallChecks = [];`
|
|
1428
1686
|
// — test/common's exit-accounting ledger): the strict type
|
|
1429
1687
|
// (any[]) has no mapping, but the VALUE is the dyn array the
|
|
@@ -1445,6 +1703,25 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1445
1703
|
continue;
|
|
1446
1704
|
}
|
|
1447
1705
|
// A JS file-scope OBJECT LITERAL (`const input = { foo: 'bar' }`
|
|
1706
|
+
// Methods and computed properties require live checked storage:
|
|
1707
|
+
// symbol identity and a method's receiver cannot be reconstructed
|
|
1708
|
+
// from a copied, inferred record shape.
|
|
1709
|
+
if (isJsSourceFile(sf) && ts.isIdentifier(decl.name) && nameNode === decl.name &&
|
|
1710
|
+
decl.initializer && ts.isObjectLiteralExpression(decl.initializer) &&
|
|
1711
|
+
decl.initializer.properties.some((p) => !ts.isSpreadAssignment(p) &&
|
|
1712
|
+
(ts.isMethodDeclaration(p) || ts.isAccessor(p) || ts.isComputedPropertyName(p.name) ||
|
|
1713
|
+
ts.isShorthandPropertyAssignment(p) && lowerer.checker.getCallSignatures(lowerer.typeOf(p.name)).length > 0))) {
|
|
1714
|
+
const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
|
|
1715
|
+
if (symbol && !lowerer.globalsBySymbol.has(symbol)) {
|
|
1716
|
+
const g = { id: `%g.${tag}${nsPrefix}${nameNode.text}`, name: nameNode.text, type: DYN, mutable: isLet, source: bindingSource(nameNode) };
|
|
1717
|
+
lowerer.globalsBySymbol.set(symbol, g);
|
|
1718
|
+
lowerer.globalsList.push(g);
|
|
1719
|
+
if (isVarDeclared(decl))
|
|
1720
|
+
noteVarGlobalEntryInit(lowerer, sf, g);
|
|
1721
|
+
}
|
|
1722
|
+
continue;
|
|
1723
|
+
}
|
|
1724
|
+
// A JS file-scope OBJECT LITERAL (`const input = { foo: 'bar' }`
|
|
1448
1725
|
// — the Node-suite trace-context idiom): JS object identity is
|
|
1449
1726
|
// the literal's contract — the SAME object flows into untyped
|
|
1450
1727
|
// callees, gets stamped by them, and is compared back against
|
|
@@ -1456,12 +1733,17 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1456
1733
|
// dyn-representable (unmappable member types are the checked-dynamic tree
|
|
1457
1734
|
// fallback's own case) — so shorthand aggregates (test/common's
|
|
1458
1735
|
// export object: alias plumbing importers resolve THROUGH),
|
|
1459
|
-
//
|
|
1736
|
+
// accessors, and literals holding unconvertible typed
|
|
1460
1737
|
// values (a Map member) keep their static/alias stories.
|
|
1738
|
+
// Spreads from an existing checked dictionary stay checked too;
|
|
1739
|
+
// copying its entries must not extract nested callable records.
|
|
1461
1740
|
if (isJsSourceFile(sf) &&
|
|
1462
1741
|
ts.isIdentifier(decl.name) && nameNode === decl.name &&
|
|
1463
1742
|
decl.initializer !== undefined && ts.isObjectLiteralExpression(decl.initializer) &&
|
|
1464
1743
|
decl.initializer.properties.every((p) => {
|
|
1744
|
+
if (ts.isSpreadAssignment(p)) {
|
|
1745
|
+
return ts.isIdentifier(p.expression) && lowerer.globalOf(p.expression)?.type.kind === "dyn";
|
|
1746
|
+
}
|
|
1465
1747
|
if (!ts.isPropertyAssignment(p) || ts.isComputedPropertyName(p.name))
|
|
1466
1748
|
return false;
|
|
1467
1749
|
const mt = lowerer.mapTypeOf(lowerer.typeOf(p.initializer));
|
|
@@ -1526,6 +1808,38 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1526
1808
|
}
|
|
1527
1809
|
continue;
|
|
1528
1810
|
}
|
|
1811
|
+
// A function initializer can have a native calling convention
|
|
1812
|
+
// even when its inferred return/parameter pieces need DYN. Keep
|
|
1813
|
+
// that closure in a checked-value global so class methods and
|
|
1814
|
+
// other module functions see its declaration-position assignment.
|
|
1815
|
+
// A var starts undefined; lexical bindings retain the TDZ guard.
|
|
1816
|
+
if (isJsSourceFile(sf) && !lowerer.mapTypeOf(lowerer.typeOf(nameNode)) &&
|
|
1817
|
+
ts.isIdentifier(decl.name) && nameNode === decl.name && decl.initializer &&
|
|
1818
|
+
jsDynHoldableInitializer(lowerer, decl.initializer)) {
|
|
1819
|
+
const initializer = decl.initializer;
|
|
1820
|
+
const member = ts.isPropertyAccessExpression(initializer) ? nsMemberIdentOf(lowerer, initializer) : null;
|
|
1821
|
+
const generic = member && lowerer.genericFnOf(member);
|
|
1822
|
+
const fallback = (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer)) && !initializer.typeParameters?.length
|
|
1823
|
+
? lowerer.lambdaSignature(initializer).funcType
|
|
1824
|
+
: member && lowerer.globalOf(member)?.type.kind === "dyn" ? DYN
|
|
1825
|
+
: member && generic?.implicitParams ? lowerer.lowerGenericFnValue(member, generic).type
|
|
1826
|
+
: dynFallbackType(lowerer, nameNode, lowerer.typeOf(nameNode));
|
|
1827
|
+
const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
|
|
1828
|
+
if (symbol && fallback && (fallback.kind === "dyn" || fallback.kind === "func" || fallback.kind === "union") && lowerer.dynConvertible(fallback)) {
|
|
1829
|
+
if (!lowerer.globalsBySymbol.has(symbol)) {
|
|
1830
|
+
const g = {
|
|
1831
|
+
id: `%g.${tag}${nsPrefix}${nameNode.text}`, name: nameNode.text,
|
|
1832
|
+
type: DYN, mutable: isLet, source: bindingSource(nameNode),
|
|
1833
|
+
...(!isVarDeclared(decl) ? { tdz: true } : {}),
|
|
1834
|
+
};
|
|
1835
|
+
lowerer.globalsBySymbol.set(symbol, g);
|
|
1836
|
+
lowerer.globalsList.push(g);
|
|
1837
|
+
if (isVarDeclared(decl))
|
|
1838
|
+
noteVarGlobalEntryInit(lowerer, sf, g);
|
|
1839
|
+
}
|
|
1840
|
+
continue;
|
|
1841
|
+
}
|
|
1842
|
+
}
|
|
1529
1843
|
// JS declarations whose STRICT type has no mapping register no
|
|
1530
1844
|
// global at all: the declaration lowers as an %init-body LOCAL
|
|
1531
1845
|
// whose type adopts the initializer's (lowerVarDecl's JS
|
|
@@ -1533,7 +1847,10 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1533
1847
|
// and closures created in the init body capture it normally.
|
|
1534
1848
|
// References from separately-declared functions cascade to
|
|
1535
1849
|
// their own per-site runtime fences.
|
|
1536
|
-
|
|
1850
|
+
const factoryType = !isLet && isJsSourceFile(sf) && !decl.type && !hasJsTypeAnnotation(decl) &&
|
|
1851
|
+
ts.isIdentifier(decl.name) && nameNode === decl.name && decl.initializer && ts.isNewExpression(decl.initializer)
|
|
1852
|
+
? objectFactorySignature(lowerer, decl.initializer)?.returnType : undefined;
|
|
1853
|
+
if (!factoryType && isJsSourceFile(sf) && !lowerer.mapTypeOf(lowerer.typeOf(nameNode)))
|
|
1537
1854
|
continue;
|
|
1538
1855
|
// `var p1 = import("./m")` at file scope: the global holds the
|
|
1539
1856
|
// island promise/handle — the import expression's only
|
|
@@ -1541,13 +1858,81 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1541
1858
|
// (lowerVarDecl's rule at module scope; the init body assigns
|
|
1542
1859
|
// it).
|
|
1543
1860
|
const handleT = ts.isIdentifier(decl.name) && nameNode === decl.name
|
|
1544
|
-
? (lowerer
|
|
1861
|
+
? (isNativeProxyInitializer(lowerer, decl.initializer) ? DYN : null) ??
|
|
1862
|
+
(lowerer.dynamic ? importCallHandleType(decl.initializer) : staticImportNamespaceType(lowerer, decl.initializer)) ??
|
|
1545
1863
|
(lowerer.dynamic ?
|
|
1546
1864
|
// An unchecked-overload call result stores the handle,
|
|
1547
1865
|
// exactly the local rule (uncheckedOverloadHandleCall).
|
|
1548
1866
|
(uncheckedOverloadHandleCall(lowerer, decl.initializer) ? JSVAL : null) : null)
|
|
1549
1867
|
: null;
|
|
1550
|
-
|
|
1868
|
+
// Unannotated results of JavaScript calls can carry callable
|
|
1869
|
+
// objects or heterogeneous unions absent from the native type
|
|
1870
|
+
// map. Their compiled initializer still validates every crossing.
|
|
1871
|
+
const callSignature = !decl.type && !hasJsTypeAnnotation(decl) && decl.initializer && ts.isCallExpression(decl.initializer)
|
|
1872
|
+
? lowerer.checker.getResolvedSignature(decl.initializer) : undefined;
|
|
1873
|
+
const callDeclaration = callSignature && lowerer.checker.signatureDeclaration(callSignature);
|
|
1874
|
+
const inferredJsCall = callDeclaration && isJsSourceFile(callDeclaration.getSourceFile()) &&
|
|
1875
|
+
!lowerer.mapTypeOf(lowerer.typeOf(nameNode));
|
|
1876
|
+
let type = handleT ?? factoryType ?? (inferredJsCall ? DYN : lowerer.irTypeOf(nameNode));
|
|
1877
|
+
if (isJsSourceFile(sf) && !decl.type && !hasJsTypeAnnotation(decl) && decl.initializer &&
|
|
1878
|
+
(ts.isArrowFunction(decl.initializer) || ts.isFunctionExpression(decl.initializer)) &&
|
|
1879
|
+
!decl.initializer.typeParameters?.length) {
|
|
1880
|
+
type = lowerer.lambdaSignature(decl.initializer).funcType;
|
|
1881
|
+
}
|
|
1882
|
+
if (isJsSourceFile(sf) && !decl.type && !hasJsTypeAnnotation(decl) &&
|
|
1883
|
+
decl.initializer && ts.isCallExpression(decl.initializer) && type.kind === "union") {
|
|
1884
|
+
const arms = lowerer.unions.get(type.unionId)?.arms;
|
|
1885
|
+
if (arms?.some((arm) => arm.kind === "record") && arms.every((arm) => isUnitType(arm) || arm.kind === "record"))
|
|
1886
|
+
type = DYN;
|
|
1887
|
+
}
|
|
1888
|
+
if (isJsSourceFile(sf) && !decl.type && !hasJsTypeAnnotation(decl) && decl.initializer &&
|
|
1889
|
+
ts.isNewExpression(decl.initializer) && lowerer.mapTypeOf(lowerer.typeOf(decl.initializer.expression))?.kind === "dyn" &&
|
|
1890
|
+
!(ts.isIdentifier(decl.initializer.expression) && lowerer.isStdlibSymbol(lowerer.checker.getSymbolAtLocation(decl.initializer.expression))))
|
|
1891
|
+
type = DYN;
|
|
1892
|
+
// Calls through checked function values retain their object
|
|
1893
|
+
// identity, including symbol keys absent from inferred records.
|
|
1894
|
+
if (isJsSourceFile(sf) && !decl.type && !hasJsTypeAnnotation(decl) && type.kind === "record" &&
|
|
1895
|
+
decl.initializer && ts.isCallExpression(decl.initializer) &&
|
|
1896
|
+
ts.isIdentifier(decl.initializer.expression) && lowerer.globalOf(decl.initializer.expression)?.type.kind === "dyn") {
|
|
1897
|
+
type = DYN;
|
|
1898
|
+
}
|
|
1899
|
+
if (isJsSourceFile(sf) && !decl.type && !hasJsTypeAnnotation(decl) && type.kind === "record" &&
|
|
1900
|
+
decl.initializer && ts.isCallExpression(decl.initializer) &&
|
|
1901
|
+
ts.isPropertyAccessExpression(decl.initializer.expression) &&
|
|
1902
|
+
lowerer.stdlibGlobalMember(decl.initializer.expression, "Object") === "assign" &&
|
|
1903
|
+
decl.initializer.arguments.some((arg) => ts.isIdentifier(arg) && lowerer.globalOf(arg)?.type.kind === "dyn")) {
|
|
1904
|
+
type = DYN;
|
|
1905
|
+
}
|
|
1906
|
+
// Runtime-arity JavaScript callables can be returned by a
|
|
1907
|
+
// checked factory. Keep that callable boxed instead of asking
|
|
1908
|
+
// a fixed-signature adapter to reconstruct its hidden rest ABI.
|
|
1909
|
+
if (!decl.type && !hasJsTypeAnnotation(decl) && type.kind === "func" && type.rest === true && type.restAbi === undefined)
|
|
1910
|
+
type = DYN;
|
|
1911
|
+
if (isJsSourceFile(sf) && isLet && !decl.type && !hasJsTypeAnnotation(decl) &&
|
|
1912
|
+
(type.kind === "object" || jsBindingHasOpenWrites(lowerer, decl)))
|
|
1913
|
+
type = DYN;
|
|
1914
|
+
// JavaScript call results may retain a checked array supplied by
|
|
1915
|
+
// the caller. A typed global here would copy it on extraction.
|
|
1916
|
+
if (isJsSourceFile(sf) && !decl.type && !hasJsTypeAnnotation(decl) && type.kind === "array" &&
|
|
1917
|
+
decl.initializer && ts.isCallExpression(decl.initializer))
|
|
1918
|
+
type = DYN;
|
|
1919
|
+
// Unannotated JavaScript aliases retain an existing native
|
|
1920
|
+
// checked object instead of copying it into an inferred record.
|
|
1921
|
+
if (isJsSourceFile(sf) && !decl.type && !hasJsTypeAnnotation(decl) &&
|
|
1922
|
+
decl.initializer && ts.isIdentifier(decl.initializer) &&
|
|
1923
|
+
(type.kind === "record" || type.kind === "func")) {
|
|
1924
|
+
const source = lowerer.globalOf(decl.initializer);
|
|
1925
|
+
if (source?.type.kind === "dyn")
|
|
1926
|
+
type = DYN;
|
|
1927
|
+
}
|
|
1928
|
+
// JavaScript bind inference can leave an artificial tuple-rest
|
|
1929
|
+
// signature. Keep the returned callable's runtime arity intact.
|
|
1930
|
+
if (isJsSourceFile(sf) && type.kind === "func" && decl.initializer &&
|
|
1931
|
+
ts.isCallExpression(decl.initializer) && ts.isPropertyAccessExpression(decl.initializer.expression) &&
|
|
1932
|
+
decl.initializer.expression.name.text === "bind" && lowerer.isStdlibMember(decl.initializer.expression) &&
|
|
1933
|
+
decl.type === undefined && !hasJsTypeAnnotation(decl)) {
|
|
1934
|
+
type = DYN;
|
|
1935
|
+
}
|
|
1551
1936
|
// An evolving-`any` array's DERIVED file-scope binding under
|
|
1552
1937
|
// --dynamic (`const kept = fns.filter(...)` where `fns`
|
|
1553
1938
|
// registered array<jsval> at its `any[]` declaration): the
|
|
@@ -1608,7 +1993,7 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1608
1993
|
// adapter would re-copy at the assignment.
|
|
1609
1994
|
if (isJsSourceFile(sf) &&
|
|
1610
1995
|
type.kind === "func" &&
|
|
1611
|
-
type.ret.kind === "record" &&
|
|
1996
|
+
(type.ret.kind === "date" || type.ret.kind === "record" && lowerer.dynConvertible(type.ret)) &&
|
|
1612
1997
|
decl.initializer !== undefined &&
|
|
1613
1998
|
(ts.isFunctionExpression(decl.initializer) || ts.isArrowFunction(decl.initializer)) &&
|
|
1614
1999
|
decl.initializer.type === undefined &&
|
|
@@ -1624,6 +2009,20 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1624
2009
|
if (shape && shape.fields.length === 0 && !shape.indexValue && !shape.tuple)
|
|
1625
2010
|
type = DYN;
|
|
1626
2011
|
}
|
|
2012
|
+
// Module vars hold real undefined until their declaration runs.
|
|
2013
|
+
// Unannotated JS function values need that state too: callers
|
|
2014
|
+
// before the initializer must see undefined and a TypeError.
|
|
2015
|
+
if (isJsSourceFile(sf) && isVarDeclared(decl) && type.kind === "func" && lowerer.dynConvertible(type))
|
|
2016
|
+
type = DYN;
|
|
2017
|
+
// Codec records keep that state in the ordinary optional union;
|
|
2018
|
+
// lexical codec declarations retain their separate TDZ guard.
|
|
2019
|
+
const codec = type.kind === "record" && recordTextCodecClass(lowerer.shapes.get(type.shapeId)) !== null;
|
|
2020
|
+
if (codec && isVarDeclared(decl)) {
|
|
2021
|
+
type = { kind: "union", unionId: lowerer.unions.intern([type, { kind: "undefinedT" }]) };
|
|
2022
|
+
}
|
|
2023
|
+
else if (codec && !decl.initializer) {
|
|
2024
|
+
lowerer.noLowering("uninitialized lexical codec bindings", decl, "initialize let or const TextEncoder/TextDecoder bindings at their declaration");
|
|
2025
|
+
}
|
|
1627
2026
|
const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
|
|
1628
2027
|
// Merged `var` redeclarations (`var y = 1; ...; var y = 2;` —
|
|
1629
2028
|
// one symbol) register exactly one global; later declarations
|
|
@@ -1636,6 +2035,10 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1636
2035
|
type,
|
|
1637
2036
|
mutable: isLet,
|
|
1638
2037
|
source: bindingSource(nameNode),
|
|
2038
|
+
// A function pointer must not be dereferenced before a lexical
|
|
2039
|
+
// declaration assigns it. The shared pointer TDZ guard handles
|
|
2040
|
+
// these bindings like stored codec records.
|
|
2041
|
+
...(((codec || type.kind === "func") && !isVarDeclared(decl)) ? { tdz: true } : {}),
|
|
1639
2042
|
};
|
|
1640
2043
|
lowerer.globalsBySymbol.set(symbol, g);
|
|
1641
2044
|
lowerer.globalsList.push(g);
|
|
@@ -1757,6 +2160,9 @@ function collectNestedVarGlobals(lowerer, sf, stmt, tag) {
|
|
|
1757
2160
|
if (shape && shape.fields.length === 0 && !shape.indexValue && !shape.tuple)
|
|
1758
2161
|
type = DYN;
|
|
1759
2162
|
}
|
|
2163
|
+
if (type.kind === "record" && recordTextCodecClass(lowerer.shapes.get(type.shapeId)) !== null) {
|
|
2164
|
+
type = { kind: "union", unionId: lowerer.unions.intern([type, { kind: "undefinedT" }]) };
|
|
2165
|
+
}
|
|
1760
2166
|
const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
|
|
1761
2167
|
if (!symbol || lowerer.globalsBySymbol.has(symbol))
|
|
1762
2168
|
continue;
|
|
@@ -2011,7 +2417,7 @@ export function lowerFileInit(lowerer, sf, stmts, name) {
|
|
|
2011
2417
|
// SITE's position instead (below) — their inner class node may
|
|
2012
2418
|
// even live in another file.
|
|
2013
2419
|
c.decl && ts.isClassDeclaration(c.decl) && !c.mixinInstance && c.decl.getSourceFile() === sf &&
|
|
2014
|
-
(c.staticFields.length > 0 || (c.staticBlocks?.length ?? 0) > 0 || c.classDecorators !== undefined))
|
|
2420
|
+
(c.callableBase !== undefined || c.def.baseValueGlobal !== undefined || c.staticFields.length > 0 || (c.staticBlocks?.length ?? 0) > 0 || c.classDecorators !== undefined))
|
|
2015
2421
|
.map((c) => ({ pos: c.decl.getStart(), info: c }));
|
|
2016
2422
|
// Statics-bearing MIXIN instantiations whose call evaluates in THIS
|
|
2017
2423
|
// file: their declaration-time code runs when the call does — the
|