@scriptc/compiler 0.1.7 → 0.2.0
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 +73 -24
- 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 +107 -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 +70 -28
- 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 +16 -2
- package/dist/backend/llvm/dyn.js +494 -165
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +596 -1
- package/dist/backend/llvm/emitter.js +695 -410
- 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 +1 -1
- package/dist/backend/llvm/expr-bytes.js +32 -14
- 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 +9 -5
- 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 +62 -74
- 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 +51 -30
- 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 +43 -4
- 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 +102 -121
- 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 +21 -16
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +117 -1
- 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 +35 -130
- 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 +10 -25
- package/dist/backend/native-toolchain.js +31 -211
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +5 -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 +70 -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 +95 -30
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +65 -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 +3 -3
- 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 +3 -3
- 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 +63 -0
- package/dist/frontend/lowering/class-callbacks.js.map +1 -0
- package/dist/frontend/lowering/class-descriptors.d.ts +9 -0
- package/dist/frontend/lowering/class-descriptors.js +73 -0
- package/dist/frontend/lowering/class-descriptors.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +41 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +803 -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 +92 -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 +64 -0
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -0
- package/dist/frontend/lowering/class-method-values.d.ts +10 -0
- package/dist/frontend/lowering/class-method-values.js +170 -0
- package/dist/frontend/lowering/class-method-values.js.map +1 -0
- package/dist/frontend/lowering/class-prototypes.d.ts +16 -0
- package/dist/frontend/lowering/class-prototypes.js +134 -0
- package/dist/frontend/lowering/class-prototypes.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 +164 -155
- 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 +39 -16
- 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 +11 -0
- package/dist/frontend/lowering/error-methods.js +78 -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 +49 -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 +124 -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 +473 -178
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +20 -8
- 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 +93 -0
- package/dist/frontend/lowering/function-context.js +103 -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 +10 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +105 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.d.ts +2 -1
- package/dist/frontend/lowering/lib-boundary.js +59 -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 +12 -0
- package/dist/frontend/lowering/lower-builtin-values.js +139 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +27 -41
- package/dist/frontend/lowering/lower-builtins.js +539 -343
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +20 -17
- package/dist/frontend/lowering/lower-calls.js +1236 -353
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +83 -45
- package/dist/frontend/lowering/lower-classes.js +952 -339
- 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 +27 -32
- package/dist/frontend/lowering/lower-containers.js +796 -151
- 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.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 +35 -11
- package/dist/frontend/lowering/lower-exprs.js +1674 -779
- 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 +77 -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 +5 -8
- package/dist/frontend/lowering/lower-island.js +34 -23
- 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 +233 -30
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- 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 +10 -14
- package/dist/frontend/lowering/lower-stmts.js +728 -496
- 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 +19 -10
- 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 +113 -189
- package/dist/frontend/lowering/lowerer.js +1031 -672
- 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 +26 -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 +8 -3
- package/dist/frontend/lowering/surfaces.js +61 -29
- 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 +10 -0
- package/dist/frontend/lowering/text-decoder-encoding.js +77 -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 +5 -4
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-prune.test.js +1 -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 +38 -19
- package/dist/frontend/program.js +344 -169
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +87 -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 +21 -15
- 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 +52 -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 +25 -17
- package/dist/frontend/type-mapper.js +465 -121
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +123 -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 +21 -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 +291 -152
- package/dist/ir/ir.js +588 -881
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +127 -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 +19 -12
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.d.ts +1 -0
- package/dist/ir/serialize.test.js +53 -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 +1942 -1491
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +476 -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 +135 -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 +74 -0
- package/dist/native/toolchain.js.map +1 -0
- package/dist/native/toolchain.test.d.ts +1 -0
- package/dist/native/toolchain.test.js +33 -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 +52 -18
- 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
package/dist/backend/c/shapes.js
DELETED
|
@@ -1,603 +0,0 @@
|
|
|
1
|
-
import { InternalCompilerError } from "../../errors.js";
|
|
2
|
-
import { RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, isRefCounted, mapOf, STRING } from "../../ir/ir.js";
|
|
3
|
-
import { mangleClassGcFree, mangleClassNew, mangleClassRelease, mangleClassReleaseDirect, mangleClassRetain, mangleClassStruct, mangleClassTrace, mangleCtorThunk, mangleField, mangleFunction, mangleRecordClone, mangleRecordGcFree, mangleRecordNew, mangleRecordRelease, mangleRecordRetain, mangleRecordStruct, mangleRecordTrace, mangleVtAdapter, mangleVtInstance, mangleVtStruct } from "../mangle.js";
|
|
4
|
-
import { boxKindC, cCommentText, cDecl, cType, elemKindC, mapValKindC, releaseCallC, retainCallC, vAdapters } from "./types.js";
|
|
5
|
-
import { streamRooted } from "../../ir/analysis.js";
|
|
6
|
-
/** The overflow map's C member name on index-signature record structs.
|
|
7
|
-
* User fields mangle to `sc_fld_*`, so no field can collide. */
|
|
8
|
-
export const OVERFLOW_MEMBER = "sc_ovf";
|
|
9
|
-
/** Per-shape C structs + RC helpers for classes AND record shapes (the
|
|
10
|
-
* layouts are identical: `size_t rc` header + fields). All structs are
|
|
11
|
-
* forward-declared first so fields can reference any shape regardless of
|
|
12
|
-
* order (classes nesting records, records nesting classes, mutual
|
|
13
|
-
* references), and the RC helpers are prototyped before any body so a
|
|
14
|
-
* release can call another shape's release regardless of emission order.
|
|
15
|
-
* The `_v` adapters give boxes untyped RC entry points without UB casts.
|
|
16
|
-
*
|
|
17
|
-
* Cycle-capable shapes (the constructor fixpoint) additionally get a
|
|
18
|
-
* cycle header (scr_cyc_alloc) plus two collector entry points: a trace
|
|
19
|
-
* visiting exactly the cycle-capable fields, and a teardown releasing
|
|
20
|
-
* exactly the other refcounted fields (the trace/teardown complement
|
|
21
|
-
* contract in scr_runtime.h) — and their retain/release feed the
|
|
22
|
-
* candidate-root buffer. Acyclic shapes keep the lean 1-word header. */
|
|
23
|
-
export function emitStructDefs(emitter, out) {
|
|
24
|
-
// Runtime-provided classes (the builtin Error hierarchy) emit NOTHING
|
|
25
|
-
// here — struct, RC helpers, and vtables live in the runtime. They keep
|
|
26
|
-
// their ClassMeta (preorder numbering, instanceof constants, vtable
|
|
27
|
-
// struct type for user subclasses); main() stamps their intervals.
|
|
28
|
-
const shapes = [
|
|
29
|
-
...(emitter.mod.classes ?? []).filter((cls) => !cls.runtime).map((cls) => ({
|
|
30
|
-
struct: mangleClassStruct(cls.name),
|
|
31
|
-
newFn: mangleClassNew(cls.name),
|
|
32
|
-
retain: mangleClassRetain(cls.name),
|
|
33
|
-
release: mangleClassRelease(cls.name),
|
|
34
|
-
trace: mangleClassTrace(cls.name),
|
|
35
|
-
gcFree: mangleClassGcFree(cls.name),
|
|
36
|
-
traced: emitter.tracedShapes.has(`object:${cls.name}`),
|
|
37
|
-
fields: cls.fields,
|
|
38
|
-
comment: `class ${cls.name}`,
|
|
39
|
-
meta: emitter.classMeta.get(cls.name) ?? null,
|
|
40
|
-
})),
|
|
41
|
-
...(emitter.mod.records ?? []).map((rec) => ({
|
|
42
|
-
struct: mangleRecordStruct(rec.id),
|
|
43
|
-
newFn: mangleRecordNew(rec.id),
|
|
44
|
-
retain: mangleRecordRetain(rec.id),
|
|
45
|
-
release: mangleRecordRelease(rec.id),
|
|
46
|
-
trace: mangleRecordTrace(rec.id),
|
|
47
|
-
gcFree: mangleRecordGcFree(rec.id),
|
|
48
|
-
traced: emitter.tracedShapes.has(`record:${rec.id}`),
|
|
49
|
-
fields: rec.fields,
|
|
50
|
-
recordId: rec.id,
|
|
51
|
-
...(rec.indexValue ? { indexValue: rec.indexValue } : {}),
|
|
52
|
-
comment: `record ${rec.id} { ${rec.fields.map((f) => f.name).join("; ")}${rec.indexValue ? "; [key: string]" : ""} }`,
|
|
53
|
-
meta: null,
|
|
54
|
-
})),
|
|
55
|
-
];
|
|
56
|
-
if (shapes.length === 0)
|
|
57
|
-
return;
|
|
58
|
-
const inHierarchy = (s) => s.meta !== null && s.meta.hierarchy;
|
|
59
|
-
// The RC-relevant members of a shape: every field, plus the overflow
|
|
60
|
-
// map on index-signature shapes — release/trace/teardown treat it as
|
|
61
|
-
// one more map-typed member (traceAdapterC's map rule answers whether
|
|
62
|
-
// the record's trace must visit it).
|
|
63
|
-
const rcMembers = (s) => [
|
|
64
|
-
...s.fields.map((f) => ({ member: mangleField(f.name), type: f.type, name: f.name })),
|
|
65
|
-
...(s.indexValue
|
|
66
|
-
? [{ member: OVERFLOW_MEMBER, type: mapOf(STRING, s.indexValue), name: "[key: string] overflow" }]
|
|
67
|
-
: []),
|
|
68
|
-
];
|
|
69
|
-
// CLASS newFns start every undefined-armed union field at JS's
|
|
70
|
-
// `undefined` — the interned immortal unit instance — instead of the
|
|
71
|
-
// calloc NULL: tsc's strictPropertyInitialization accepts such fields
|
|
72
|
-
// with no initializer and no constructor assignment (undefined is in
|
|
73
|
-
// the type), so a fresh instance is readable before any assignment
|
|
74
|
-
// runs — a method assigns later, a constructor branch skips it, a base
|
|
75
|
-
// constructor's virtual call reads a derived field before super()
|
|
76
|
-
// returns. Node reads `undefined` there; a NULL ScrUnion would be a
|
|
77
|
-
// segfault. Class shapes only: record shapes are fully written at
|
|
78
|
-
// every construction site (literal lowering fills omitted optional
|
|
79
|
-
// fields, the dynCheck/JSON builders fill missing keys), and the
|
|
80
|
-
// immortal instance costs nothing if overwritten (releases skip it).
|
|
81
|
-
const undefFieldInitC = (s) => s.meta === null ? [] : s.fields.flatMap((f) => emitter.undefFieldInitLineC(f.name, f.type));
|
|
82
|
-
// The overflow map's construction call (in the shape's newFn): value
|
|
83
|
-
// handling is type-directed exactly like a user Map's.
|
|
84
|
-
const overflowNewC = (s) => {
|
|
85
|
-
const v = s.indexValue;
|
|
86
|
-
const valKind = mapValKindC(v);
|
|
87
|
-
if (valKind !== "SCR_MAP_VAL_REF") {
|
|
88
|
-
return `scr_map_new(SCR_MAP_KEY_STR, ${valKind}, NULL, NULL, NULL)`;
|
|
89
|
-
}
|
|
90
|
-
const rc = vAdapters(v);
|
|
91
|
-
return `scr_map_new(SCR_MAP_KEY_STR, SCR_MAP_VAL_REF, &${rc.retain}, &${rc.release}, ${emitter.traceArgC(v)})`;
|
|
92
|
-
};
|
|
93
|
-
for (const s of shapes) {
|
|
94
|
-
out.push(`typedef struct ${s.struct} ${s.struct}; /* ${cCommentText(s.comment)} */`);
|
|
95
|
-
}
|
|
96
|
-
out.push("");
|
|
97
|
-
for (const s of shapes) {
|
|
98
|
-
out.push(`struct ${s.struct} { /* ${cCommentText(s.comment)} */`, ` size_t rc;`);
|
|
99
|
-
if (inHierarchy(s)) {
|
|
100
|
-
// The hierarchy prefix: base fields follow at identical offsets in
|
|
101
|
-
// every subclass, so vt must sit between rc and the field list.
|
|
102
|
-
out.push(` const ScrVt *vt;`);
|
|
103
|
-
if (s.meta.root.def.name === RUNTIME_EMITTER_CLASS) {
|
|
104
|
-
// Emitter subclasses embed ScrEmitter's remaining prefix (the
|
|
105
|
-
// registry and display-name slots) so an upcast to ScrEmitter*
|
|
106
|
-
// is the usual pointer reinterpret. Carried by the BACKEND —
|
|
107
|
-
// the IR field lists stay empty for it.
|
|
108
|
-
out.push(` ScrEeReg *sc_eereg; /* EventEmitter registry (ScrEmitter prefix) */`, ` const char *sc_eecls; /* EventEmitter display name (ScrEmitter prefix) */`);
|
|
109
|
-
if (streamRooted(s.meta)) {
|
|
110
|
-
// Stream subclasses embed ScrStream's remaining slot: the
|
|
111
|
-
// state pointer, NULL until the constructor's super(options)
|
|
112
|
-
// reaches scr_stream_init_* — so an upcast to ScrStream* (and
|
|
113
|
-
// on through ScrEmitter*) is the usual pointer reinterpret.
|
|
114
|
-
out.push(` ScrStreamState *sc_st; /* stream state (ScrStream prefix) */`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
for (const f of s.fields) {
|
|
119
|
-
out.push(` ${cDecl(f.type, mangleField(f.name))}; /* ${cCommentText(f.name)} */`);
|
|
120
|
-
}
|
|
121
|
-
if (s.indexValue) {
|
|
122
|
-
out.push(` ScrMap *${OVERFLOW_MEMBER}; /* [key: string] overflow (string-keyed) */`);
|
|
123
|
-
}
|
|
124
|
-
out.push(`};`);
|
|
125
|
-
}
|
|
126
|
-
out.push("");
|
|
127
|
-
// Vtable struct typedefs are named after hierarchy ROOTS, which may be
|
|
128
|
-
// a runtime error class (a user `extends Error` subclass's vtable
|
|
129
|
-
// instance is typed by the %Error root's struct) — so typedefs come
|
|
130
|
-
// from the EMITTED hierarchy classes' roots, while adapter prototypes,
|
|
131
|
-
// instances, and helpers stay shapes-only (the runtime owns the
|
|
132
|
-
// builtin classes; a subclass-free Error tree emits nothing at all).
|
|
133
|
-
emitter.emitVtableDecls(out, shapes.filter(inHierarchy).map((s) => s.meta));
|
|
134
|
-
for (const s of shapes) {
|
|
135
|
-
out.push(`static ${s.struct} *${s.retain}(${s.struct} *o);`, `static void ${s.release}(${s.struct} *o);`, `static ${s.struct} *${s.newFn}(void);`);
|
|
136
|
-
if (s.recordId !== undefined && emitter.recordCloneShapes.has(s.recordId)) {
|
|
137
|
-
out.push(`static ${s.struct} *${mangleRecordClone(s.recordId)}(${s.struct} *src);`);
|
|
138
|
-
}
|
|
139
|
-
if (inHierarchy(s)) {
|
|
140
|
-
out.push(`static void ${mangleClassReleaseDirect(s.meta.def.name)}(void *o0);`);
|
|
141
|
-
}
|
|
142
|
-
if (s.traced) {
|
|
143
|
-
out.push(`static void ${s.trace}(void *o, ScrTraceVisit visit, void *ctx);`, `static void ${s.gcFree}(void *o);`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
out.push("");
|
|
147
|
-
emitter.emitVtableInstances(out, shapes.filter(inHierarchy).map((s) => s.meta));
|
|
148
|
-
for (const s of shapes) {
|
|
149
|
-
if (inHierarchy(s)) {
|
|
150
|
-
emitter.emitHierarchyClassHelpers(out, s.meta, s);
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
// NULL-tolerant: zeroed fields (calloc) and user `null as unknown as C`
|
|
154
|
-
// casts can put NULL where an object is expected.
|
|
155
|
-
if (!s.traced) {
|
|
156
|
-
out.push(`static ${s.struct} *${s.retain}(${s.struct} *o) {`, ` if (o && o->rc != SIZE_MAX) o->rc++;`, ` return o;`, `}`, `static void ${s.release}(${s.struct} *o) {`, ` if (!o || o->rc == SIZE_MAX) return;`, ` if (--o->rc == 0) {`);
|
|
157
|
-
for (const m of rcMembers(s)) {
|
|
158
|
-
if (!isRefCounted(m.type))
|
|
159
|
-
continue;
|
|
160
|
-
const field = `o->${m.member}`;
|
|
161
|
-
out.push(` if (${field}) ${releaseCallC(m.type, field)};`);
|
|
162
|
-
}
|
|
163
|
-
out.push(` scr_obj_free_note();`, ` free(o);`, ` }`, `}`, `static ${s.struct} *${s.newFn}(void) {`, ` ${s.struct} *o = calloc(1, sizeof *o);`, ` if (!o) { scr_trap("scriptc: out of memory\\n"); }`, ` o->rc = 1;`, ...undefFieldInitC(s), ...(s.indexValue ? [` o->${OVERFLOW_MEMBER} = ${overflowNewC(s)};`] : []), ` scr_obj_alloc_note();`, ` return o;`, `}`, ...(s.recordId !== undefined && emitter.recordCloneShapes.has(s.recordId)
|
|
164
|
-
? emitRecordCloneC(s.recordId, s.struct, s.fields, s.newFn)
|
|
165
|
-
: []), `static void *${s.retain}_v(void *o) { return ${s.retain}((${s.struct} *)o); }`, `static void ${s.release}_v(void *o) { ${s.release}((${s.struct} *)o); }`, ``);
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
// Cycle-capable shape: cycle-headered allocation, root-buffer hooks
|
|
169
|
-
// on release, and the trace/teardown complement pair.
|
|
170
|
-
const tracedFields = rcMembers(s).filter((m) => emitter.traceAdapterC(m.type) !== null);
|
|
171
|
-
const untracedRefFields = rcMembers(s).filter((m) => isRefCounted(m.type) && emitter.traceAdapterC(m.type) === null);
|
|
172
|
-
out.push(`static ${s.struct} *${s.retain}(${s.struct} *o) {`, ` if (o && o->rc != SIZE_MAX) {`, ` o->rc++;`, ` scr_cyc_mark_live(o);`, ` }`, ` return o;`, `}`, `static void ${s.release}(${s.struct} *o) {`, ` if (!o || o->rc == SIZE_MAX) return;`, ` if (--o->rc == 0) {`, ` scr_cyc_on_dead(o);`);
|
|
173
|
-
for (const m of rcMembers(s)) {
|
|
174
|
-
if (!isRefCounted(m.type))
|
|
175
|
-
continue;
|
|
176
|
-
const field = `o->${m.member}`;
|
|
177
|
-
out.push(` if (${field}) ${releaseCallC(m.type, field)};`);
|
|
178
|
-
}
|
|
179
|
-
out.push(` scr_obj_free_note();`, ` scr_cyc_free(o);`, ` } else {`, ` scr_cyc_on_release(o); /* possible cycle root; may collect */`, ` }`, `}`, `static ${s.struct} *${s.newFn}(void) {`, ` ${s.struct} *o = scr_cyc_alloc(sizeof *o, &${s.trace}, &${s.gcFree});`, ` o->rc = 1;`, ...undefFieldInitC(s), ...(s.indexValue ? [` o->${OVERFLOW_MEMBER} = ${overflowNewC(s)};`] : []), ` scr_obj_alloc_note();`, ` return o;`, `}`, ...(s.recordId !== undefined && emitter.recordCloneShapes.has(s.recordId)
|
|
180
|
-
? emitRecordCloneC(s.recordId, s.struct, s.fields, s.newFn)
|
|
181
|
-
: []), `static void ${s.trace}(void *o0, ScrTraceVisit visit, void *ctx) {`, ` ${s.struct} *o = (${s.struct} *)o0;`, ...tracedFields.map((m) => ` visit(o->${m.member}, ctx); /* ${cCommentText(m.name)} */`), `}`, `static void ${s.gcFree}(void *o0) {`, ...(untracedRefFields.length > 0
|
|
182
|
-
? [
|
|
183
|
-
` ${s.struct} *o = (${s.struct} *)o0;`,
|
|
184
|
-
...untracedRefFields.map((m) => {
|
|
185
|
-
const field = `o->${m.member}`;
|
|
186
|
-
return ` if (${field}) ${releaseCallC(m.type, field)}; /* ${cCommentText(m.name)} (acyclic) */`;
|
|
187
|
-
}),
|
|
188
|
-
]
|
|
189
|
-
: []), ` scr_obj_free_note();`, ` scr_cyc_free(o0);`, `}`, `static void *${s.retain}_v(void *o) { return ${s.retain}((${s.struct} *)o); }`, `static void ${s.release}_v(void *o) { ${s.release}((${s.struct} *)o); }`, ``);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
/** One deliberately non-inlined same-shape clone helper. Keeping the copy
|
|
193
|
-
* here makes each `{ ...largeRecord, override }` site constant-sized while
|
|
194
|
-
* preserving the ordinary type-directed retain rules. */
|
|
195
|
-
function emitRecordCloneC(shapeId, struct, fields, newFn) {
|
|
196
|
-
const noinline = fields.length >= 16;
|
|
197
|
-
return [
|
|
198
|
-
...(noinline
|
|
199
|
-
? [
|
|
200
|
-
`#if defined(_MSC_VER)`,
|
|
201
|
-
`__declspec(noinline)`,
|
|
202
|
-
`#else`,
|
|
203
|
-
`__attribute__((noinline))`,
|
|
204
|
-
`#endif`,
|
|
205
|
-
]
|
|
206
|
-
: []),
|
|
207
|
-
`static ${struct} *${mangleRecordClone(shapeId)}(${struct} *src) {`,
|
|
208
|
-
` ${struct} *o = ${newFn}();`,
|
|
209
|
-
...fields.map((f) => {
|
|
210
|
-
const member = mangleField(f.name);
|
|
211
|
-
return ` o->${member} = ${isRefCounted(f.type) ? retainCallC(f.type, `src->${member}`) : `src->${member}`};`;
|
|
212
|
-
}),
|
|
213
|
-
` return o;`,
|
|
214
|
-
`}`,
|
|
215
|
-
];
|
|
216
|
-
}
|
|
217
|
-
/** The root's slot list as seen by one class: the implementation the
|
|
218
|
-
* class dispatches to, or null outside the slot's declaring subtree (a
|
|
219
|
-
* call through this class's vtable can never reach that slot). An
|
|
220
|
-
* ABSTRACT class whose chain holds only abstract declarations of the
|
|
221
|
-
* slot also answers null — the class never instantiates (tsc), so its
|
|
222
|
-
* own vtable entry can never dispatch. */
|
|
223
|
-
export function vtEntriesFor(emitter, meta) {
|
|
224
|
-
return meta.root.slots.map((slot) => {
|
|
225
|
-
if (!(slot.declarer.pre <= meta.pre && meta.pre <= slot.declarer.post)) {
|
|
226
|
-
return { slot, impl: null };
|
|
227
|
-
}
|
|
228
|
-
for (let c = meta; c; c = c.base) {
|
|
229
|
-
if (c.def.methods?.includes(slot.method) && !c.def.abstractMethods?.includes(slot.method)) {
|
|
230
|
-
return { slot, impl: c };
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
if (meta.def.abstract === true)
|
|
234
|
-
return { slot, impl: null };
|
|
235
|
-
throw new InternalCompilerError(`emitter bug: no implementation of ${slot.method} for ${meta.def.name}`);
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
/** The C parameter list of a slot (declaring-class `this` first). */
|
|
239
|
-
export function vtSlotParams(emitter, slot, named) {
|
|
240
|
-
const thisParam = named
|
|
241
|
-
? `${mangleClassStruct(slot.declarer.def.name)} *o`
|
|
242
|
-
: `${mangleClassStruct(slot.declarer.def.name)} *`;
|
|
243
|
-
const rest = slot.fn.params
|
|
244
|
-
.slice(1)
|
|
245
|
-
.map((p, i) => (named ? cDecl(p.type, `sc_a${i}`) : cType(p.type).trim()));
|
|
246
|
-
return [thisParam, ...rest];
|
|
247
|
-
}
|
|
248
|
-
/** Vtable struct typedefs + adapter prototypes (the definitions call
|
|
249
|
-
* function bodies, so they flush after the signature block — see emit). */
|
|
250
|
-
export function emitVtableDecls(emitter, out, hierarchyClasses) {
|
|
251
|
-
// Roots of the EMITTED classes' hierarchies — a runtime root (%Error)
|
|
252
|
-
// counts exactly when some emitted subclass needs its vtable type.
|
|
253
|
-
const roots = [...new Set(hierarchyClasses.map((m) => m.root))];
|
|
254
|
-
for (const root of roots) {
|
|
255
|
-
const vtt = mangleVtStruct(root.def.name);
|
|
256
|
-
out.push(`typedef struct ${vtt} { /* vtable: hierarchy rooted at ${root.def.name} */`);
|
|
257
|
-
out.push(` ScrVt head;`);
|
|
258
|
-
for (const slot of root.slots) {
|
|
259
|
-
const ret = cType(slot.fn.returnType).trim();
|
|
260
|
-
out.push(` ${ret} (*${slot.member})(${emitter.vtSlotParams(slot, false).join(", ")}); /* ${cCommentText(slot.method)} */`);
|
|
261
|
-
}
|
|
262
|
-
out.push(`} ${vtt};`);
|
|
263
|
-
}
|
|
264
|
-
if (roots.length > 0)
|
|
265
|
-
out.push("");
|
|
266
|
-
for (const meta of hierarchyClasses) {
|
|
267
|
-
for (const { slot, impl } of emitter.vtEntriesFor(meta)) {
|
|
268
|
-
if (impl === null)
|
|
269
|
-
continue;
|
|
270
|
-
const key = `${impl.def.name}.${slot.method}`;
|
|
271
|
-
if (emitter.vtAdapters.has(key))
|
|
272
|
-
continue;
|
|
273
|
-
emitter.vtAdapters.set(key, { impl, slot });
|
|
274
|
-
const ret = cType(slot.fn.returnType).trim();
|
|
275
|
-
out.push(`static ${ret} ${mangleVtAdapter(impl.def.name, slot.method)}(${emitter.vtSlotParams(slot, false).join(", ")});`);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
if (emitter.vtAdapters.size > 0)
|
|
279
|
-
out.push("");
|
|
280
|
-
}
|
|
281
|
-
/** One static const vtable per hierarchy class: interval, direct
|
|
282
|
-
* release, and the class's dispatch entry for every slot. */
|
|
283
|
-
export function emitVtableInstances(emitter, out, hierarchyClasses) {
|
|
284
|
-
for (const meta of hierarchyClasses) {
|
|
285
|
-
const vtt = mangleVtStruct(meta.root.def.name);
|
|
286
|
-
const head = `{ ${meta.pre}, ${meta.post}, &${mangleClassReleaseDirect(meta.def.name)} }`;
|
|
287
|
-
const entries = emitter.vtEntriesFor(meta).map(({ slot, impl }) => impl === null
|
|
288
|
-
? `0 /* ${cCommentText(slot.method)}: outside the declaring subtree */`
|
|
289
|
-
: `&${mangleVtAdapter(impl.def.name, slot.method)} /* ${cCommentText(slot.method)} */`);
|
|
290
|
-
out.push(`static const ${vtt} ${mangleVtInstance(meta.def.name)} = { /* class ${meta.def.name} */`, ` ${[head, ...entries].join(",\n ")}`, `};`);
|
|
291
|
-
}
|
|
292
|
-
if (hierarchyClasses.length > 0)
|
|
293
|
-
out.push("");
|
|
294
|
-
}
|
|
295
|
-
/** Adapter definitions (flushed after the signature block): the impl
|
|
296
|
-
* class's method behind the slot's declaring-class signature. */
|
|
297
|
-
export function emitVtAdapterDefs(emitter, out) {
|
|
298
|
-
for (const { impl, slot } of emitter.vtAdapters.values()) {
|
|
299
|
-
const ret = cType(slot.fn.returnType).trim();
|
|
300
|
-
const recv = impl === slot.declarer ? "o" : `(${mangleClassStruct(impl.def.name)} *)o`;
|
|
301
|
-
const args = [recv, ...slot.fn.params.slice(1).map((_, i) => `sc_a${i}`)].join(", ");
|
|
302
|
-
const call = `${mangleFunction(`%${impl.def.name}.${slot.method}`)}(${args})`;
|
|
303
|
-
out.push(``, `static ${ret} ${mangleVtAdapter(impl.def.name, slot.method)}(${emitter.vtSlotParams(slot, true).join(", ")}) {`, slot.fn.returnType.kind === "void" ? ` ${call};` : ` return ${call};`, `}`);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
/** RC helpers of one hierarchy class. Retain is layout-generic (rc sits
|
|
307
|
-
* at offset 0 in every subclass); the PUBLIC release dispatches through
|
|
308
|
-
* the object's vtable so a base-typed release tears down the derived
|
|
309
|
-
* object; the DIRECT release (the vtable entry) does the class's own
|
|
310
|
-
* teardown. Cycle capability is hierarchy-uniform (constructor fixpoint),
|
|
311
|
-
* and the cycle header's trace/teardown are stamped with the concrete
|
|
312
|
-
* class's functions at allocation — the collector needs no vtable. */
|
|
313
|
-
export function emitHierarchyClassHelpers(emitter, out, meta, s) {
|
|
314
|
-
const reld = mangleClassReleaseDirect(meta.def.name);
|
|
315
|
-
const emitterRooted = meta.root.def.name === RUNTIME_EMITTER_CLASS;
|
|
316
|
-
const isStreamRooted = streamRooted(meta);
|
|
317
|
-
// The display name Node's leak warning prints ([My]) — the source
|
|
318
|
-
// class name, without the module qualifier.
|
|
319
|
-
const displayName = meta.def.name.includes(".")
|
|
320
|
-
? meta.def.name.slice(meta.def.name.lastIndexOf(".") + 1)
|
|
321
|
-
: meta.def.name;
|
|
322
|
-
out.push(`static ${s.struct} *${s.retain}(${s.struct} *o) {`, ...(s.traced
|
|
323
|
-
? [` if (o && o->rc != SIZE_MAX) {`, ` o->rc++;`, ` scr_cyc_mark_live(o);`, ` }`]
|
|
324
|
-
: [` if (o && o->rc != SIZE_MAX) o->rc++;`]), ` return o;`, `}`, `static void ${s.release}(${s.struct} *o) {`, ` if (!o || o->rc == SIZE_MAX) return;`, ` o->vt->release(o); /* the DYNAMIC class's teardown */`, `}`, `static void ${reld}(void *o0) {`, ` ${s.struct} *o = (${s.struct} *)o0;`, ` if (--o->rc == 0) {`, ...(s.traced ? [` scr_cyc_on_dead(o);`] : []));
|
|
325
|
-
for (const f of s.fields) {
|
|
326
|
-
if (!isRefCounted(f.type))
|
|
327
|
-
continue;
|
|
328
|
-
const field = `o->${mangleField(f.name)}`;
|
|
329
|
-
out.push(` if (${field}) ${releaseCallC(f.type, field)};`);
|
|
330
|
-
}
|
|
331
|
-
if (emitterRooted) {
|
|
332
|
-
out.push(` scr_emitter_reg_drop(o->sc_eereg); /* EventEmitter prefix */`);
|
|
333
|
-
if (isStreamRooted) {
|
|
334
|
-
out.push(` scr_stream_st_release(o->sc_st); /* stream state (ScrStream prefix) */`);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
out.push(` scr_obj_free_note();`, s.traced ? ` scr_cyc_free(o);` : ` free(o);`, ...(s.traced
|
|
338
|
-
? [` } else {`, ` scr_cyc_on_release(o); /* possible cycle root; may collect */`, ` }`]
|
|
339
|
-
: [` }`]), `}`, `static ${s.struct} *${s.newFn}(void) {`, ...(s.traced
|
|
340
|
-
? [` ${s.struct} *o = scr_cyc_alloc(sizeof *o, &${s.trace}, &${s.gcFree});`]
|
|
341
|
-
: [
|
|
342
|
-
` ${s.struct} *o = calloc(1, sizeof *o);`,
|
|
343
|
-
` if (!o) { scr_trap("scriptc: out of memory\\n"); }`,
|
|
344
|
-
]), ` o->rc = 1;`, ` o->vt = &${mangleVtInstance(meta.def.name)}.head;`, ...(emitterRooted
|
|
345
|
-
? [` o->sc_eecls = ${JSON.stringify(displayName)}; /* EventEmitter prefix (reg stays NULL) */`]
|
|
346
|
-
: []),
|
|
347
|
-
// Undefined-admitting fields start as JS's undefined, not NULL — see
|
|
348
|
-
// undefFieldInitLineC. s.fields is the FLATTENED layout (base prefix
|
|
349
|
-
// + own), so a derived allocation covers inherited fields too.
|
|
350
|
-
...s.fields.flatMap((f) => emitter.undefFieldInitLineC(f.name, f.type)), ` scr_obj_alloc_note();`, ` return o;`, `}`);
|
|
351
|
-
if (s.traced) {
|
|
352
|
-
const tracedFields = s.fields.filter((f) => emitter.traceAdapterC(f.type) !== null);
|
|
353
|
-
const untracedRefFields = s.fields.filter((f) => isRefCounted(f.type) && emitter.traceAdapterC(f.type) === null);
|
|
354
|
-
out.push(`static void ${s.trace}(void *o0, ScrTraceVisit visit, void *ctx) {`, ` ${s.struct} *o = (${s.struct} *)o0;`, ...(emitterRooted
|
|
355
|
-
? [` scr_emitter_reg_trace(o->sc_eereg, visit, ctx); /* listener closures */`]
|
|
356
|
-
: []), ...(isStreamRooted
|
|
357
|
-
? [` scr_stream_st_trace(o->sc_st, visit, ctx); /* stream state closures/pipes */`]
|
|
358
|
-
: []), ...tracedFields.map((f) => ` visit(o->${mangleField(f.name)}, ctx); /* ${cCommentText(f.name)} */`), `}`, `static void ${s.gcFree}(void *o0) {`, ...(untracedRefFields.length > 0 || emitterRooted
|
|
359
|
-
? [` ${s.struct} *o = (${s.struct} *)o0;`]
|
|
360
|
-
: []), ...(emitterRooted
|
|
361
|
-
? [` scr_emitter_reg_gcfree(o->sc_eereg); /* EventEmitter prefix */`]
|
|
362
|
-
: []), ...(isStreamRooted
|
|
363
|
-
? [` scr_stream_st_gcfree(o->sc_st); /* stream state (ScrStream prefix) */`]
|
|
364
|
-
: []), ...untracedRefFields.map((f) => {
|
|
365
|
-
const field = `o->${mangleField(f.name)}`;
|
|
366
|
-
return ` if (${field}) ${releaseCallC(f.type, field)}; /* ${cCommentText(f.name)} (acyclic) */`;
|
|
367
|
-
}), ` scr_obj_free_note();`, ` scr_cyc_free(o0);`, `}`);
|
|
368
|
-
}
|
|
369
|
-
out.push(`static void *${s.retain}_v(void *o) { return ${s.retain}((${s.struct} *)o); }`, `static void ${s.release}_v(void *o) { ${s.release}((${s.struct} *)o); }`, ``);
|
|
370
|
-
}
|
|
371
|
-
/** Class objects (classes as first-class values): one immortal
|
|
372
|
-
* ScrClassObj static per class some classRef in the module names, plus
|
|
373
|
-
* the construct-thunk PROTOTYPES their `ctor` slots take the address of
|
|
374
|
-
* (definitions land later with the other synthesized bodies —
|
|
375
|
-
* emitCtorThunkDefs). The interval constants are the same numbering the
|
|
376
|
-
* vtables carry, so instanceOfValue agrees with compiled instanceOf. */
|
|
377
|
-
export function emitClassObjs(emitter, out) {
|
|
378
|
-
if (emitter.classObjs.size === 0)
|
|
379
|
-
return;
|
|
380
|
-
out.push("");
|
|
381
|
-
for (const [className, sym] of emitter.classObjs) {
|
|
382
|
-
const meta = emitter.classMeta.get(className);
|
|
383
|
-
if (!meta)
|
|
384
|
-
throw new InternalCompilerError(`emitter bug: class object for unknown class ${className}`);
|
|
385
|
-
// A generic-class INSTANTIATION's class object carries its FAMILY's
|
|
386
|
-
// interval: at runtime JS has ONE `Box`, so instanceof through the
|
|
387
|
-
// value must answer for the whole family (every instantiation and
|
|
388
|
-
// their subclasses) — IrClassDef.genericOf. Construction still
|
|
389
|
-
// dispatches the instantiation's own thunk.
|
|
390
|
-
const intervalMeta = meta.def.genericOf !== undefined
|
|
391
|
-
? emitter.classMeta.get(meta.def.genericOf)
|
|
392
|
-
: meta;
|
|
393
|
-
if (!intervalMeta)
|
|
394
|
-
throw new InternalCompilerError(`emitter bug: class object for ${className} names unknown family ${meta.def.genericOf ?? ""}`);
|
|
395
|
-
const nameSym = emitter.internLiteral(meta.def.jsName ?? "");
|
|
396
|
-
out.push(`static void *${mangleCtorThunk(className)}(${ctorThunkParams(emitter, className).decls || "void"});`, `static ScrClassObj ${sym} = { SIZE_MAX, ${intervalMeta.pre}, ${intervalMeta.post}, ` +
|
|
397
|
-
`(void *)&${mangleCtorThunk(className)}, (const ScrStr *)&${nameSym} }; /* class ${className} */`);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
/** The construct thunk's parameter list: the constructor's completed ABI
|
|
401
|
-
* minus the `this` the thunk allocates itself. */
|
|
402
|
-
function ctorThunkParams(emitter, className) {
|
|
403
|
-
const ctor = emitter.fnByName.get(`%${className}.constructor`);
|
|
404
|
-
if (!ctor)
|
|
405
|
-
throw new InternalCompilerError(`emitter bug: class object for ${className} without a constructor`);
|
|
406
|
-
const params = ctor.params.slice(1);
|
|
407
|
-
return {
|
|
408
|
-
decls: params.map((p, i) => cDecl(p.type, `sc_a${i}`)).join(", "),
|
|
409
|
-
names: params.map((_, i) => `sc_a${i}`),
|
|
410
|
-
};
|
|
411
|
-
}
|
|
412
|
-
/** Construct-thunk definitions (`void *sc_ct_C(args…)`): allocate, run
|
|
413
|
-
* the constructor over a +1 `this` like the inline `new` emission, and
|
|
414
|
-
* hand the remaining +1 out as `void *` — the one well-defined
|
|
415
|
-
* function-pointer shape every class in a classval slot shares (the
|
|
416
|
-
* frontend's ABI flow rule makes the parameter lists agree). A throwing
|
|
417
|
-
* constructor leaves the pending flag set: the thunk releases the
|
|
418
|
-
* half-built object and returns NULL (a dummy the checked call site
|
|
419
|
-
* never reads). */
|
|
420
|
-
export function emitCtorThunkDefs(emitter, out) {
|
|
421
|
-
for (const className of emitter.classObjs.keys()) {
|
|
422
|
-
const { decls, names } = ctorThunkParams(emitter, className);
|
|
423
|
-
const struct = mangleClassStruct(className);
|
|
424
|
-
const lines = [
|
|
425
|
-
``,
|
|
426
|
-
`static void *${mangleCtorThunk(className)}(${decls || "void"}) {`,
|
|
427
|
-
` ${struct} *o = ${mangleClassNew(className)}();`,
|
|
428
|
-
` ${mangleFunction(`%${className}.constructor`)}(${[`${mangleClassRetain(className)}(o)`, ...names].join(", ")});`,
|
|
429
|
-
];
|
|
430
|
-
if (emitter.mayThrow.has(`%${className}.constructor`)) {
|
|
431
|
-
lines.push(` if (scr_exc_pending()) {`, ` ${mangleClassRelease(className)}(o);`, ` return NULL;`, ` }`);
|
|
432
|
-
}
|
|
433
|
-
lines.push(` return (void *)o;`, `}`);
|
|
434
|
-
out.push(...lines);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
/** main()'s stamping of the runtime error vtables: preorder intervals
|
|
438
|
-
* from THIS module's numbering, plus the traced-mode switch when the
|
|
439
|
-
* cycle fixpoint marked the Error hierarchy (a user subclass holds
|
|
440
|
-
* cycle-capable fields — capability is hierarchy-uniform, so the
|
|
441
|
-
* runtime's own allocations need collector headers too). Empty for
|
|
442
|
-
* hand-written IR without the builtin defs. */
|
|
443
|
-
export function errorVtStampLines(emitter) {
|
|
444
|
-
const lines = [];
|
|
445
|
-
for (const [name, rec] of RUNTIME_ERROR_CLASSES) {
|
|
446
|
-
const meta = emitter.classMeta.get(name);
|
|
447
|
-
if (!meta)
|
|
448
|
-
return [];
|
|
449
|
-
lines.push(` scr_error_vts[${rec.kind}].pre = ${meta.pre}; scr_error_vts[${rec.kind}].post = ${meta.post}; /* ${rec.lib} */`);
|
|
450
|
-
}
|
|
451
|
-
if (emitter.tracedShapes.has("object:%Error")) {
|
|
452
|
-
lines.push(` scr_error_set_traced();`);
|
|
453
|
-
}
|
|
454
|
-
return lines;
|
|
455
|
-
}
|
|
456
|
-
/** main()'s stamping of the runtime emitter vtable: its preorder
|
|
457
|
-
* interval from THIS module's numbering (the errorVtStampLines story).
|
|
458
|
-
* Empty when the program never touches the emitter surface — the class
|
|
459
|
-
* def only rides modules that reference it. */
|
|
460
|
-
export function emitterVtStampLines(emitter) {
|
|
461
|
-
const meta = emitter.classMeta.get(RUNTIME_EMITTER_CLASS);
|
|
462
|
-
if (!meta)
|
|
463
|
-
return [];
|
|
464
|
-
return [
|
|
465
|
-
` scr_emitter_vt.pre = ${meta.pre}; scr_emitter_vt.post = ${meta.post}; /* EventEmitter */`,
|
|
466
|
-
];
|
|
467
|
-
}
|
|
468
|
-
/** main()'s stamping of the runtime stream vtables (Readable/Writable/
|
|
469
|
-
* Duplex/Transform/PassThrough) — the emitterVtStampLines story: each
|
|
470
|
-
* def rides the module only when the program touches the stream
|
|
471
|
-
* surface, and instanceof needs their preorder intervals under the
|
|
472
|
-
* emitter root. */
|
|
473
|
-
export function streamVtStampLines(emitter) {
|
|
474
|
-
const lines = [];
|
|
475
|
-
for (const [name, rec] of RUNTIME_STREAM_CLASSES) {
|
|
476
|
-
const meta = emitter.classMeta.get(name);
|
|
477
|
-
if (!meta)
|
|
478
|
-
continue;
|
|
479
|
-
const vt = `scr_${rec.lib.toLowerCase()}_vt`;
|
|
480
|
-
lines.push(` ${vt}.pre = ${meta.pre}; ${vt}.post = ${meta.post}; /* ${rec.lib} */`);
|
|
481
|
-
}
|
|
482
|
-
return lines;
|
|
483
|
-
}
|
|
484
|
-
/** The trace entry point symbol for a payload/field type, or null when
|
|
485
|
-
* the type cannot participate in a cycle (see the constructor fixpoint). */
|
|
486
|
-
export function traceAdapterC(emitter, t) {
|
|
487
|
-
switch (t.kind) {
|
|
488
|
-
case "func":
|
|
489
|
-
return "scr_closure_trace_v";
|
|
490
|
-
case "union":
|
|
491
|
-
return emitter.tracedUnions.has(t.unionId) ? "scr_union_trace_v" : null;
|
|
492
|
-
case "promise":
|
|
493
|
-
return "scr_promise_trace_v";
|
|
494
|
-
case "object":
|
|
495
|
-
if (!emitter.tracedShapes.has(`object:${t.className}`))
|
|
496
|
-
return null;
|
|
497
|
-
if (RUNTIME_ERROR_CLASSES.has(t.className))
|
|
498
|
-
return "scr_error_trace";
|
|
499
|
-
if (t.className === RUNTIME_EMITTER_CLASS)
|
|
500
|
-
return "scr_emitter_trace";
|
|
501
|
-
if (RUNTIME_STREAM_CLASSES.has(t.className))
|
|
502
|
-
return "scr_stream_trace";
|
|
503
|
-
return mangleClassTrace(t.className);
|
|
504
|
-
case "record":
|
|
505
|
-
return emitter.tracedShapes.has(`record:${t.shapeId}`) ? mangleRecordTrace(t.shapeId) : null;
|
|
506
|
-
// Cycle-capable exactly when the VALUE type is (mirrors the
|
|
507
|
-
// constructor fixpoint's map rule): such maps allocate with the
|
|
508
|
-
// collector header and their runtime trace visits every live value.
|
|
509
|
-
case "map":
|
|
510
|
-
return emitter.traceAdapterC(t.value) !== null ? "scr_map_trace_v" : null;
|
|
511
|
-
// Arrays mirror maps: cycle-capable exactly when the ELEMENT type is
|
|
512
|
-
// (a record/object/union element — or a cycle-capable inner array —
|
|
513
|
-
// can point back at the array holding it). Such arrays allocate with
|
|
514
|
-
// the collector header (scr_arr_new_ref with a trace); scalar/
|
|
515
|
-
// string/bytes-element arrays stay lean.
|
|
516
|
-
case "array":
|
|
517
|
-
return emitter.traceAdapterC(t.elem) !== null ? "scr_arr_trace_v" : null;
|
|
518
|
-
default:
|
|
519
|
-
return null;
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
/** `&<trace>` or `NULL` — the trace argument at a container call site. */
|
|
523
|
-
export function traceArgC(emitter, t) {
|
|
524
|
-
const sym = emitter.traceAdapterC(t);
|
|
525
|
-
return sym ? `&${sym}` : "NULL";
|
|
526
|
-
}
|
|
527
|
-
/** Array construction expression for one element type. Ref elements
|
|
528
|
-
* (records, class instances, unions — and cycle-capable inner arrays,
|
|
529
|
-
* whose SCR_ELEM_ARR spelling would hide them from the outer array's
|
|
530
|
-
* trace) construct through scr_arr_new_ref, which stores the element
|
|
531
|
-
* type's RC entry points once per array (the map-value technique) and
|
|
532
|
-
* allocates with the collector header exactly when the element type
|
|
533
|
-
* carries one (trace non-NULL). Every other element kind keeps the
|
|
534
|
-
* historic scr_arr_new call. */
|
|
535
|
-
export function arrNewC(emitter, elem, capExpr) {
|
|
536
|
-
const useRef = elem.kind === "record" || elem.kind === "object" || elem.kind === "union" ||
|
|
537
|
-
// Promise elements (Promise.all's food): refcounted, cycle-headered
|
|
538
|
-
// — the `_v` adapters and scr_promise_trace_v ride the same REF
|
|
539
|
-
// machinery as record/object/union elements.
|
|
540
|
-
elem.kind === "promise" ||
|
|
541
|
-
elem.kind === "jsval" || // island handles: scr_jsval_* adapters, no trace
|
|
542
|
-
elem.kind === "regex" || // RegExp values: scr_regex_* adapters, no trace (no refs inside)
|
|
543
|
-
elem.kind === "child" || // spawned child handles: scr_child_* adapters, no trace
|
|
544
|
-
elem.kind === "netServer" || // server handles: scr_net_server_* adapters, no trace
|
|
545
|
-
elem.kind === "symbol" || // symbol identities: scr_sym_* adapters, no trace
|
|
546
|
-
elem.kind === "bigint" || // immutable numeric values: scr_bigint_* adapters
|
|
547
|
-
elem.kind === "classval" || // class objects: no-op adapters, no trace (immortal statics)
|
|
548
|
-
// Closures: scr_closure_* adapters + scr_closure_trace_v (always
|
|
549
|
-
// cycle-headered — captures can reach back through boxes).
|
|
550
|
-
elem.kind === "func" ||
|
|
551
|
-
(elem.kind === "array" && emitter.traceAdapterC(elem) !== null);
|
|
552
|
-
if (!useRef)
|
|
553
|
-
return `scr_arr_new(${elemKindC(elem)}, ${capExpr})`;
|
|
554
|
-
const v = vAdapters(elem);
|
|
555
|
-
return `scr_arr_new_ref(&${v.retain}, &${v.release}, ${emitter.traceArgC(elem)}, ${capExpr})`;
|
|
556
|
-
}
|
|
557
|
-
/** Box construction expression — object/record/union/promise boxes carry
|
|
558
|
-
* their RC entry points (and the payload's trace) as function pointers
|
|
559
|
-
* (the SCR_BOX_OBJ mechanism: the runtime can't know per-shape layouts). */
|
|
560
|
-
export function boxNewC(emitter, t) {
|
|
561
|
-
// A captured local can be typed by a class the module never collected
|
|
562
|
-
// (a runtime-fenced JS class — e.g. one declared inside a block —
|
|
563
|
-
// whose declaration and every use compile to runtime traps): no
|
|
564
|
-
// instance can ever exist, so the box is an inert placeholder — its
|
|
565
|
-
// RC adapters were never emitted and must not be referenced.
|
|
566
|
-
if (t.kind === "object" && !emitter.classMeta.has(t.className)) {
|
|
567
|
-
return `scr_box_new(SCR_BOX_F64) /* ${t.className}: uncollected class, all uses trap */`;
|
|
568
|
-
}
|
|
569
|
-
if (t.kind === "object" || t.kind === "record" || t.kind === "union" ||
|
|
570
|
-
t.kind === "classval" ||
|
|
571
|
-
t.kind === "map" || t.kind === "set" || t.kind === "promise" ||
|
|
572
|
-
t.kind === "generator" ||
|
|
573
|
-
t.kind === "regex" || t.kind === "url" || t.kind === "searchParams" ||
|
|
574
|
-
t.kind === "symbol" || t.kind === "bigint" || t.kind === "stats" ||
|
|
575
|
-
t.kind === "fileHandle" ||
|
|
576
|
-
t.kind === "spawnRes" || t.kind === "child" || t.kind === "bytes" ||
|
|
577
|
-
t.kind === "netServer" || t.kind === "netSocket" ||
|
|
578
|
-
t.kind === "http2Session" || t.kind === "http2Stream" ||
|
|
579
|
-
t.kind === "dgramSocket" || t.kind === "testCtx" ||
|
|
580
|
-
t.kind === "httpReq" || t.kind === "httpRes" ||
|
|
581
|
-
t.kind === "httpClientReq" || t.kind === "secureCtx" ||
|
|
582
|
-
t.kind === "cryptoHash" || t.kind === "cryptoHmac" ||
|
|
583
|
-
t.kind === "fsWatcher" || t.kind === "childStream" || t.kind === "childWriter" ||
|
|
584
|
-
// Island handles: the box carries scr_jsval_retain_v/release_v and
|
|
585
|
-
// no trace — the same stance as jsval array elements.
|
|
586
|
-
t.kind === "jsval" ||
|
|
587
|
-
// Checked-dynamic captures (the mustCall wrapper closing over its
|
|
588
|
-
// implicit-any `fn` param): the box carries scr_dyn_retain_v/
|
|
589
|
-
// release_v and NO trace — a dyn tree is pure data except the
|
|
590
|
-
// function kind, whose closure edge stays invisible to the
|
|
591
|
-
// collector (trial deletion treats it as an external root: cycles
|
|
592
|
-
// through dyn never collect, nothing dangles — SEMANTICS.md).
|
|
593
|
-
t.kind === "dyn" ||
|
|
594
|
-
// A CYCLE-CAPABLE array must ride the obj-box so the box's trace
|
|
595
|
-
// reaches it (SCR_BOX_ARR payloads are never traced); acyclic arrays
|
|
596
|
-
// keep the historic plain-kind box below.
|
|
597
|
-
(t.kind === "array" && emitter.traceAdapterC(t) !== null)) {
|
|
598
|
-
const v = vAdapters(t);
|
|
599
|
-
return `scr_box_new_obj(&${v.retain}, &${v.release}, ${emitter.traceArgC(t)})`;
|
|
600
|
-
}
|
|
601
|
-
return `scr_box_new(${boxKindC(t)})`;
|
|
602
|
-
}
|
|
603
|
-
//# sourceMappingURL=shapes.js.map
|