@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/llvm/dyn.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { typedRefConstructor } from "./shapes.js";
|
|
2
|
+
import { BYTES_ELEM_NUM, f64Lit } from "./common.js";
|
|
1
3
|
import { InternalCompilerError } from "../../errors.js";
|
|
2
4
|
import { DYN_HANDLE_KINDS, isDynTypedRefType, isRefCounted, typeKey } from "../../ir/ir.js";
|
|
3
5
|
import { dynDesc, undefinedArmTag } from "../../ir/analysis.js";
|
|
@@ -17,6 +19,7 @@ const DYN_HANDLE_TAG_NUM = {
|
|
|
17
19
|
http2Stream: 5,
|
|
18
20
|
httpClientReq: 6,
|
|
19
21
|
child: 16,
|
|
22
|
+
fileHandle: 17,
|
|
20
23
|
};
|
|
21
24
|
export const DYN_KIND = {
|
|
22
25
|
NULL: 0,
|
|
@@ -32,13 +35,10 @@ export const DYN_KIND = {
|
|
|
32
35
|
PROMISE: 10,
|
|
33
36
|
JSVAL: 11, /* SCR_DYN_JSVAL — island values held by reference */
|
|
34
37
|
TYPED_REF: 12, /* SCR_DYN_TYPED_REF — static Web-stream transit capsule */
|
|
38
|
+
PROXY: 13,
|
|
39
|
+
BIGINT: 14,
|
|
40
|
+
SYMBOL: 15,
|
|
35
41
|
};
|
|
36
|
-
/** Exact double literal (the emitter's f64Lit — the walkers' copy). */
|
|
37
|
-
function f64Lit(n) {
|
|
38
|
-
const buf = new ArrayBuffer(8);
|
|
39
|
-
new DataView(buf).setFloat64(0, n);
|
|
40
|
-
return `0x${[...new Uint8Array(buf)].map((b) => b.toString(16).padStart(2, "0")).join("").toUpperCase()}`;
|
|
41
|
-
}
|
|
42
42
|
const FN_ATTRS = "#0";
|
|
43
43
|
export class LlDyn {
|
|
44
44
|
host;
|
|
@@ -51,11 +51,38 @@ export class LlDyn {
|
|
|
51
51
|
promiseDynAdapters = new Map();
|
|
52
52
|
dynToStrFn = null;
|
|
53
53
|
caughtToDynFn = null;
|
|
54
|
+
helperMemo = new Map();
|
|
54
55
|
/** Emitted function definitions, in interning order. */
|
|
55
56
|
defs = [];
|
|
56
57
|
constructor(host) {
|
|
57
58
|
this.host = host;
|
|
58
59
|
}
|
|
60
|
+
/** Branch to a variant only after its literal discriminator and complete
|
|
61
|
+
* structure match. Use the same path for predicates and builders. */
|
|
62
|
+
unionArmMatch(B, def, tag, yes, no) {
|
|
63
|
+
const guard = def.discriminant?.cases.find((candidate) => candidate.tag === tag);
|
|
64
|
+
if (guard && def.discriminant) {
|
|
65
|
+
const structure = B.newLabel("du.shape");
|
|
66
|
+
const field = this.host.internLiteral(def.discriminant.field);
|
|
67
|
+
guard.values.forEach((value, index) => {
|
|
68
|
+
const suffix = typeof value === "string" ? "str" : typeof value === "boolean" ? "bool" : "num";
|
|
69
|
+
const ty = typeof value === "string" ? "ptr" : typeof value === "boolean" ? "i1" : "double";
|
|
70
|
+
const operand = typeof value === "string" ? this.host.internLiteral(value)
|
|
71
|
+
: typeof value === "boolean" ? String(value) : f64Lit(value);
|
|
72
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_field_eq_${suffix}(ptr, ptr, ${ty}${ty === "i1" ? " zeroext" : ""})`);
|
|
73
|
+
const matches = B.tmp();
|
|
74
|
+
B.line(`${matches} = call zeroext i1 @scr_dyn_field_eq_${suffix}(ptr %d, ptr ${field}, ${ty} ${operand})`);
|
|
75
|
+
const next = index === guard.values.length - 1 ? no : B.newLabel("du.literal");
|
|
76
|
+
B.condBr(matches, structure, next);
|
|
77
|
+
if (index !== guard.values.length - 1)
|
|
78
|
+
B.startBlock(next);
|
|
79
|
+
});
|
|
80
|
+
B.startBlock(structure);
|
|
81
|
+
}
|
|
82
|
+
const matches = B.tmp();
|
|
83
|
+
B.line(`${matches} = call zeroext i1 @${this.dynMatchHelper(def.arms[tag])}(ptr %d)`);
|
|
84
|
+
B.condBr(matches, yes, no);
|
|
85
|
+
}
|
|
59
86
|
get S() { return this.host.sizeType; }
|
|
60
87
|
abiOffset(native64, wasm32) {
|
|
61
88
|
return this.S === "i32" ? wasm32 : native64;
|
|
@@ -118,12 +145,12 @@ export class LlDyn {
|
|
|
118
145
|
B.line(`${e} = load ptr, ptr ${p}`);
|
|
119
146
|
return e;
|
|
120
147
|
}
|
|
121
|
-
/** Object entry field addresses: entries + i*
|
|
122
|
-
*
|
|
148
|
+
/** Object entry field addresses: entries + i*sizeof(ScrDynEntry), with
|
|
149
|
+
* key, key_len, and value at offsets 0, 8, and 16 on 64-bit targets. */
|
|
123
150
|
entryAt(B, entries, i) {
|
|
124
151
|
const off = B.tmp();
|
|
125
152
|
const base = B.tmp();
|
|
126
|
-
B.line(`${off} = mul ${this.S} ${i}, ${this.abiOffset(
|
|
153
|
+
B.line(`${off} = mul ${this.S} ${i}, ${this.abiOffset(48, 24)} ; sizeof(ScrDynEntry)`);
|
|
127
154
|
B.line(`${base} = getelementptr inbounds i8, ptr ${entries}, ${this.S} ${off}`);
|
|
128
155
|
const key = B.tmp();
|
|
129
156
|
B.line(`${key} = load ptr, ptr ${base}`);
|
|
@@ -245,6 +272,29 @@ export class LlDyn {
|
|
|
245
272
|
B.startBlock(lk);
|
|
246
273
|
}
|
|
247
274
|
/* ── dynMatchHelper (walkers.ts, ported) ──────────────────────── */
|
|
275
|
+
/** Native subclass capsules also satisfy a checked base-class slot.
|
|
276
|
+
* Class layouts share their base prefix, so unboxing retains the same
|
|
277
|
+
* pointer and virtual dispatch still uses the object's original vtable. */
|
|
278
|
+
typedRefMatches(B, t) {
|
|
279
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_typed_ref_is(ptr, ptr, ${this.S})`);
|
|
280
|
+
const types = isDynTypedRefType(t)
|
|
281
|
+
? this.host.classSubtypes(t.className).map((className) => ({ kind: "object", className }))
|
|
282
|
+
: [t];
|
|
283
|
+
let matched = "false";
|
|
284
|
+
for (const type of types) {
|
|
285
|
+
const key = typeKey(type);
|
|
286
|
+
const next = B.tmp();
|
|
287
|
+
B.line(`${next} = call zeroext i1 @scr_dyn_typed_ref_is(ptr %d, ptr ${this.host.cstr(key)}, ${this.S} ${Buffer.byteLength(key, "utf8")})`);
|
|
288
|
+
if (matched === "false")
|
|
289
|
+
matched = next;
|
|
290
|
+
else {
|
|
291
|
+
const either = B.tmp();
|
|
292
|
+
B.line(`${either} = or i1 ${matched}, ${next}`);
|
|
293
|
+
matched = either;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return matched;
|
|
297
|
+
}
|
|
248
298
|
/** `sc_dm_<n>(ptr d) -> i1` — does this dyn fit T? Never throws. */
|
|
249
299
|
dynMatchHelper(t) {
|
|
250
300
|
const key = typeKey(t);
|
|
@@ -255,9 +305,7 @@ export class LlDyn {
|
|
|
255
305
|
this.dynMatchers.set(key, name);
|
|
256
306
|
const B = new BlockBuilder();
|
|
257
307
|
if (isRefCounted(t) && t.kind !== "dyn") {
|
|
258
|
-
|
|
259
|
-
const matched = B.tmp();
|
|
260
|
-
B.line(`${matched} = call zeroext i1 @scr_dyn_typed_ref_is(ptr %d, ptr ${this.host.cstr(key)}, ${this.S} ${Buffer.byteLength(key, "utf8")})`);
|
|
308
|
+
const matched = this.typedRefMatches(B, t);
|
|
261
309
|
const lRef = B.newLabel("dm.tr");
|
|
262
310
|
const lNext = B.newLabel("dm.nt");
|
|
263
311
|
B.condBr(matched, lRef, lNext);
|
|
@@ -290,6 +338,34 @@ export class LlDyn {
|
|
|
290
338
|
B.terminate(`ret i1 ${r}`);
|
|
291
339
|
};
|
|
292
340
|
switch (t.kind) {
|
|
341
|
+
case "url": {
|
|
342
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_native_url_is(ptr)`);
|
|
343
|
+
const r = B.tmp();
|
|
344
|
+
B.line(`${r} = call zeroext i1 @scr_dyn_native_url_is(ptr %d)`);
|
|
345
|
+
B.terminate(`ret i1 ${r}`);
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
case "regex": {
|
|
349
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_native_regex_is(ptr)`);
|
|
350
|
+
const r = B.tmp();
|
|
351
|
+
B.line(`${r} = call zeroext i1 @scr_dyn_native_regex_is(ptr %d)`);
|
|
352
|
+
B.terminate(`ret i1 ${r}`);
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
case "map":
|
|
356
|
+
case "set": {
|
|
357
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_native_${t.kind}_is(ptr)`);
|
|
358
|
+
const r = B.tmp();
|
|
359
|
+
B.line(`${r} = call zeroext i1 @scr_dyn_native_${t.kind}_is(ptr %d)`);
|
|
360
|
+
B.terminate(`ret i1 ${r}`);
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
case "bigint":
|
|
364
|
+
kindIs(DYN_KIND.BIGINT);
|
|
365
|
+
break;
|
|
366
|
+
case "symbol":
|
|
367
|
+
kindIs(DYN_KIND.SYMBOL);
|
|
368
|
+
break;
|
|
293
369
|
case "f64":
|
|
294
370
|
kindIs(DYN_KIND.NUM);
|
|
295
371
|
break;
|
|
@@ -309,14 +385,27 @@ export class LlDyn {
|
|
|
309
385
|
// An `unknown` target: every dyn value fits, undefined included.
|
|
310
386
|
B.terminate(`ret i1 true`);
|
|
311
387
|
break;
|
|
312
|
-
case "bytes":
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
388
|
+
case "bytes": {
|
|
389
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_bytes_is(ptr, i32)`);
|
|
390
|
+
const matched = B.tmp();
|
|
391
|
+
B.line(`${matched} = call zeroext i1 @scr_dyn_bytes_is(ptr %d, i32 ${BYTES_ELEM_NUM[t.elem]})`);
|
|
392
|
+
B.terminate(`ret i1 ${matched}`);
|
|
316
393
|
break;
|
|
394
|
+
}
|
|
317
395
|
case "func":
|
|
318
396
|
kindIs(DYN_KIND.FUNC);
|
|
319
397
|
break;
|
|
398
|
+
case "classval": {
|
|
399
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_class_is(ptr, ptr)`);
|
|
400
|
+
const matched = B.tmp();
|
|
401
|
+
B.line(`${matched} = call zeroext i1 @scr_dyn_class_is(ptr %d, ptr ${this.host.cstr(key)})`);
|
|
402
|
+
B.terminate(`ret i1 ${matched}`);
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
case "generator":
|
|
406
|
+
// Only an exact native capsule carries these channel types.
|
|
407
|
+
B.terminate(`ret i1 false`);
|
|
408
|
+
break;
|
|
320
409
|
case "object": {
|
|
321
410
|
if (t.className !== "%Error") {
|
|
322
411
|
// Exact class capsules returned true before materialization.
|
|
@@ -473,11 +562,9 @@ export class LlDyn {
|
|
|
473
562
|
throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
|
|
474
563
|
// Arms in canonical order; any full match answers true.
|
|
475
564
|
const yes = B.newLabel("dm.y");
|
|
476
|
-
for (
|
|
477
|
-
const ok = B.tmp();
|
|
478
|
-
B.line(`${ok} = call zeroext i1 @${this.dynMatchHelper(arm)}(ptr %d)`);
|
|
565
|
+
for (let tag = 0; tag < def.arms.length; tag++) {
|
|
479
566
|
const ln = B.newLabel("dm.n");
|
|
480
|
-
|
|
567
|
+
this.unionArmMatch(B, def, tag, yes, ln);
|
|
481
568
|
B.startBlock(ln);
|
|
482
569
|
}
|
|
483
570
|
B.terminate(`ret i1 false`);
|
|
@@ -528,11 +615,17 @@ export class LlDyn {
|
|
|
528
615
|
host.declare(`declare void @scr_dyn_check_fail(ptr, ptr, ptr)`);
|
|
529
616
|
const want = host.cstr(dynDesc(t, this.host.recordsById, this.host.unionsById));
|
|
530
617
|
const B = new BlockBuilder();
|
|
618
|
+
if (t.kind === "classval") {
|
|
619
|
+
host.declare(`declare ptr @scr_dyn_class_check(ptr, ptr, ptr)`);
|
|
620
|
+
const checked = B.tmp();
|
|
621
|
+
B.line(`${checked} = call ptr @scr_dyn_class_check(ptr %d, ptr ${host.cstr(key)}, ptr %path)`);
|
|
622
|
+
B.terminate(`ret ptr ${checked}`);
|
|
623
|
+
this.defs.push(`define internal ptr @${name}(ptr %d, ptr %path) ${FN_ATTRS} {`, B.render(), `}`, ``);
|
|
624
|
+
return name;
|
|
625
|
+
}
|
|
531
626
|
if (isRefCounted(t) && t.kind !== "dyn") {
|
|
532
|
-
host.declare(`declare zeroext i1 @scr_dyn_typed_ref_is(ptr, ptr, ${host.sizeType})`);
|
|
533
627
|
host.declare(`declare ptr @scr_dyn_typed_ref_unbox(ptr)`);
|
|
534
|
-
const matched =
|
|
535
|
-
B.line(`${matched} = call zeroext i1 @scr_dyn_typed_ref_is(ptr %d, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")})`);
|
|
628
|
+
const matched = this.typedRefMatches(B, t);
|
|
536
629
|
const lRef = B.newLabel("dc.tr");
|
|
537
630
|
const lNext = B.newLabel("dc.nt");
|
|
538
631
|
B.condBr(matched, lRef, lNext);
|
|
@@ -672,6 +765,46 @@ export class LlDyn {
|
|
|
672
765
|
B.startBlock(lo);
|
|
673
766
|
};
|
|
674
767
|
switch (t.kind) {
|
|
768
|
+
case "url": {
|
|
769
|
+
host.declare(`declare ptr @scr_dyn_native_url_check(ptr, ptr)`);
|
|
770
|
+
const r = B.tmp();
|
|
771
|
+
B.line(`${r} = call ptr @scr_dyn_native_url_check(ptr %d, ptr %path)`);
|
|
772
|
+
B.terminate(`ret ptr ${r}`);
|
|
773
|
+
break;
|
|
774
|
+
}
|
|
775
|
+
case "regex": {
|
|
776
|
+
host.declare(`declare ptr @scr_dyn_native_regex_check(ptr, ptr)`);
|
|
777
|
+
const r = B.tmp();
|
|
778
|
+
B.line(`${r} = call ptr @scr_dyn_native_regex_check(ptr %d, ptr %path)`);
|
|
779
|
+
B.terminate(`ret ptr ${r}`);
|
|
780
|
+
break;
|
|
781
|
+
}
|
|
782
|
+
case "map":
|
|
783
|
+
case "set": {
|
|
784
|
+
host.declare(`declare ptr @scr_dyn_native_${t.kind}_check(ptr, ptr)`);
|
|
785
|
+
const r = B.tmp();
|
|
786
|
+
B.line(`${r} = call ptr @scr_dyn_native_${t.kind}_check(ptr %d, ptr %path)`);
|
|
787
|
+
B.terminate(`ret ptr ${r}`);
|
|
788
|
+
break;
|
|
789
|
+
}
|
|
790
|
+
case "bigint": {
|
|
791
|
+
requireKind(DYN_KIND.BIGINT, "dc");
|
|
792
|
+
host.declare(`declare ptr @scr_bigint_retain(ptr)`);
|
|
793
|
+
const v = this.payloadOf(B, "%d", "ptr");
|
|
794
|
+
const r = B.tmp();
|
|
795
|
+
B.line(`${r} = call ptr @scr_bigint_retain(ptr ${v})`);
|
|
796
|
+
B.terminate(`ret ptr ${r}`);
|
|
797
|
+
break;
|
|
798
|
+
}
|
|
799
|
+
case "symbol": {
|
|
800
|
+
requireKind(DYN_KIND.SYMBOL, "dc");
|
|
801
|
+
host.declare(`declare ptr @scr_sym_retain(ptr)`);
|
|
802
|
+
const v = this.payloadOf(B, "%d", "ptr");
|
|
803
|
+
const r = B.tmp();
|
|
804
|
+
B.line(`${r} = call ptr @scr_sym_retain(ptr ${v})`);
|
|
805
|
+
B.terminate(`ret ptr ${r}`);
|
|
806
|
+
break;
|
|
807
|
+
}
|
|
675
808
|
case "f64": {
|
|
676
809
|
requireKind(DYN_KIND.NUM, "dc");
|
|
677
810
|
const v = this.payloadOf(B, "%d", "double");
|
|
@@ -702,16 +835,26 @@ export class LlDyn {
|
|
|
702
835
|
break;
|
|
703
836
|
}
|
|
704
837
|
case "bytes": {
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
838
|
+
host.declare(`declare zeroext i1 @scr_dyn_bytes_is(ptr, i32)`);
|
|
839
|
+
const matched = B.tmp();
|
|
840
|
+
B.line(`${matched} = call zeroext i1 @scr_dyn_bytes_is(ptr %d, i32 ${BYTES_ELEM_NUM[t.elem]})`);
|
|
841
|
+
const yes = B.newLabel("dc.bytes");
|
|
842
|
+
const no = B.newLabel("dc.bytes.fail");
|
|
843
|
+
B.condBr(matched, yes, no);
|
|
844
|
+
B.startBlock(no);
|
|
845
|
+
B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${want}, ptr %d)`);
|
|
846
|
+
B.terminate(`ret ptr null`);
|
|
847
|
+
B.startBlock(yes);
|
|
848
|
+
host.declare(`declare ptr @scr_dyn_bytes_unbox(ptr)`);
|
|
710
849
|
const r = B.tmp();
|
|
711
|
-
B.line(`${r} = call ptr @
|
|
850
|
+
B.line(`${r} = call ptr @scr_dyn_bytes_unbox(ptr %d)`);
|
|
712
851
|
B.terminate(`ret ptr ${r}`);
|
|
713
852
|
break;
|
|
714
853
|
}
|
|
854
|
+
case "generator":
|
|
855
|
+
B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${want}, ptr %d)`);
|
|
856
|
+
B.terminate(`ret ptr null`);
|
|
857
|
+
break;
|
|
715
858
|
case "object": {
|
|
716
859
|
// The %Error extraction (an instanceof-Error narrow on unknown):
|
|
717
860
|
// validate the checked-dynamic tree's error encoding — the reserved "%error" marker
|
|
@@ -827,6 +970,21 @@ export class LlDyn {
|
|
|
827
970
|
break;
|
|
828
971
|
}
|
|
829
972
|
requireKind(DYN_KIND.OBJ, "dcr");
|
|
973
|
+
if (shape.fields.length === 0 && !shape.indexValue) {
|
|
974
|
+
const sourceAccessor = `${this.toDynHelper(t)}_source_access`;
|
|
975
|
+
const rc = vAdapters(host, t);
|
|
976
|
+
host.declare(`declare ptr @scr_dyn_obj_source_cast(ptr, ptr, ptr)`);
|
|
977
|
+
const source = B.tmp();
|
|
978
|
+
const found = B.tmp();
|
|
979
|
+
const lSource = B.newLabel("dcr.source");
|
|
980
|
+
const lCopy = B.newLabel("dcr.copy");
|
|
981
|
+
B.line(`${source} = call ptr @scr_dyn_obj_source_cast(ptr %d, ptr @${sourceAccessor}, ptr ${rc.retain})`);
|
|
982
|
+
B.line(`${found} = icmp ne ptr ${source}, null`);
|
|
983
|
+
B.condBr(found, lSource, lCopy);
|
|
984
|
+
B.startBlock(lSource);
|
|
985
|
+
B.terminate(`ret ptr ${source}`);
|
|
986
|
+
B.startBlock(lCopy);
|
|
987
|
+
}
|
|
830
988
|
B.line(`%r0 = call ptr @${mangleRecordNew(t.shapeId)}()`);
|
|
831
989
|
for (const f of shape.fields) {
|
|
832
990
|
const fieldWant = host.cstr(dynDesc(f.type, this.host.recordsById, this.host.unionsById));
|
|
@@ -994,12 +1152,9 @@ export class LlDyn {
|
|
|
994
1152
|
// Arms in CANONICAL order, first FULL match wins. The matched
|
|
995
1153
|
// arm's builder can no longer fail.
|
|
996
1154
|
def.arms.forEach((arm, i) => {
|
|
997
|
-
const m = this.dynMatchHelper(arm);
|
|
998
|
-
const hit = B.tmp();
|
|
999
|
-
B.line(`${hit} = call zeroext i1 @${m}(ptr %d)`);
|
|
1000
1155
|
const lHit = B.newLabel("dcu.h");
|
|
1001
1156
|
const lNext = B.newLabel("dcu.n");
|
|
1002
|
-
|
|
1157
|
+
this.unionArmMatch(B, def, i, lHit, lNext);
|
|
1003
1158
|
B.startBlock(lHit);
|
|
1004
1159
|
if (arm.kind === "undefinedT" || arm.kind === "nullT") {
|
|
1005
1160
|
// A matched unit arm builds nothing: THE interned immortal
|
|
@@ -1078,13 +1233,14 @@ export class LlDyn {
|
|
|
1078
1233
|
const lCache = B.newLabel("dcu.put");
|
|
1079
1234
|
B.condBr(hasCached, lRefresh, lCache);
|
|
1080
1235
|
B.startBlock(lRefresh);
|
|
1081
|
-
[
|
|
1236
|
+
const fields = [
|
|
1082
1237
|
[1, "i32", "tag"],
|
|
1083
1238
|
[2, "ptr", "retain"],
|
|
1084
1239
|
[3, "ptr", "release"],
|
|
1085
1240
|
[4, "ptr", "trace"],
|
|
1086
1241
|
[5, "i64", "slot"],
|
|
1087
|
-
]
|
|
1242
|
+
];
|
|
1243
|
+
fields.forEach(([index, fieldType, fieldName]) => {
|
|
1088
1244
|
const cachedPtr = B.tmp();
|
|
1089
1245
|
const checkedPtr = B.tmp();
|
|
1090
1246
|
const oldValue = B.tmp();
|
|
@@ -1140,11 +1296,20 @@ export class LlDyn {
|
|
|
1140
1296
|
host.declare(`declare ptr @scr_box_new_obj(ptr, ptr, ptr)`);
|
|
1141
1297
|
host.declare(`declare void @scr_box_set_ref(ptr, ptr)`);
|
|
1142
1298
|
host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
|
|
1299
|
+
host.declare(`declare void @scr_dyn_trace_v(ptr, ptr, ptr)`);
|
|
1143
1300
|
host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
1144
1301
|
const a = B.tmp();
|
|
1145
1302
|
B.line(`${a} = call ptr @scr_closure_new(ptr @${adapter}, ${host.sizeType} 1)`);
|
|
1303
|
+
const sourceClosure = this.payloadOf(B, "%d", "ptr");
|
|
1304
|
+
const sourceKind = B.tmp();
|
|
1305
|
+
const functionKind = B.tmp();
|
|
1306
|
+
const targetKind = B.tmp();
|
|
1307
|
+
B.line(`${sourceKind} = getelementptr inbounds %ScrClosure, ptr ${sourceClosure}, i64 0, i32 4`);
|
|
1308
|
+
B.line(`${functionKind} = load i32, ptr ${sourceKind}`);
|
|
1309
|
+
B.line(`${targetKind} = getelementptr inbounds %ScrClosure, ptr ${a}, i64 0, i32 4`);
|
|
1310
|
+
B.line(`store i32 ${functionKind}, ptr ${targetKind}`);
|
|
1146
1311
|
const box = B.tmp();
|
|
1147
|
-
B.line(`${box} = call ptr @scr_box_new_obj(ptr @scr_dyn_retain_v, ptr @scr_dyn_release_v, ptr
|
|
1312
|
+
B.line(`${box} = call ptr @scr_box_new_obj(ptr @scr_dyn_retain_v, ptr @scr_dyn_release_v, ptr @scr_dyn_trace_v)`);
|
|
1148
1313
|
const capp = B.tmp();
|
|
1149
1314
|
B.line(`${capp} = getelementptr inbounds %ScrClosure, ptr ${a}, i64 1 ; caps[0]`);
|
|
1150
1315
|
B.line(`store ptr ${box}, ptr ${capp}`);
|
|
@@ -1186,6 +1351,42 @@ export class LlDyn {
|
|
|
1186
1351
|
const B = new BlockBuilder();
|
|
1187
1352
|
let sourceAccessor = null;
|
|
1188
1353
|
switch (t.kind) {
|
|
1354
|
+
case "url": {
|
|
1355
|
+
host.declare(`declare ptr @scr_dyn_native_url(ptr)`);
|
|
1356
|
+
const r = B.tmp();
|
|
1357
|
+
B.line(`${r} = call ptr @scr_dyn_native_url(ptr %v)`);
|
|
1358
|
+
B.terminate(`ret ptr ${r}`);
|
|
1359
|
+
break;
|
|
1360
|
+
}
|
|
1361
|
+
case "regex": {
|
|
1362
|
+
host.declare(`declare ptr @scr_dyn_native_regex(ptr)`);
|
|
1363
|
+
const r = B.tmp();
|
|
1364
|
+
B.line(`${r} = call ptr @scr_dyn_native_regex(ptr %v)`);
|
|
1365
|
+
B.terminate(`ret ptr ${r}`);
|
|
1366
|
+
break;
|
|
1367
|
+
}
|
|
1368
|
+
case "map":
|
|
1369
|
+
case "set": {
|
|
1370
|
+
host.declare(`declare ptr @scr_dyn_native_${t.kind}(ptr)`);
|
|
1371
|
+
const r = B.tmp();
|
|
1372
|
+
B.line(`${r} = call ptr @scr_dyn_native_${t.kind}(ptr %v)`);
|
|
1373
|
+
B.terminate(`ret ptr ${r}`);
|
|
1374
|
+
break;
|
|
1375
|
+
}
|
|
1376
|
+
case "bigint": {
|
|
1377
|
+
host.declare(`declare ptr @scr_dyn_new_bigint(ptr)`);
|
|
1378
|
+
const r = B.tmp();
|
|
1379
|
+
B.line(`${r} = call ptr @scr_dyn_new_bigint(ptr %v)`);
|
|
1380
|
+
B.terminate(`ret ptr ${r}`);
|
|
1381
|
+
break;
|
|
1382
|
+
}
|
|
1383
|
+
case "symbol": {
|
|
1384
|
+
host.declare(`declare ptr @scr_dyn_new_symbol(ptr)`);
|
|
1385
|
+
const r = B.tmp();
|
|
1386
|
+
B.line(`${r} = call ptr @scr_dyn_new_symbol(ptr %v)`);
|
|
1387
|
+
B.terminate(`ret ptr ${r}`);
|
|
1388
|
+
break;
|
|
1389
|
+
}
|
|
1189
1390
|
case "f64": {
|
|
1190
1391
|
host.declare(`declare ptr @scr_dyn_new_num(double)`);
|
|
1191
1392
|
const r = B.tmp();
|
|
@@ -1207,9 +1408,22 @@ export class LlDyn {
|
|
|
1207
1408
|
B.terminate(`ret ptr ${r}`);
|
|
1208
1409
|
break;
|
|
1209
1410
|
}
|
|
1411
|
+
case "generator": {
|
|
1412
|
+
// Keep the suspended fiber and its channels by identity. Member
|
|
1413
|
+
// calls are generated from the exact capsule key by the frontend.
|
|
1414
|
+
const rc = vAdapters(host, t);
|
|
1415
|
+
const r = B.tmp();
|
|
1416
|
+
const snapshot = `${name}_snapshot`;
|
|
1417
|
+
const message = "property reflection on a native generator through an untyped value is not supported yet";
|
|
1418
|
+
host.declare(`declare void @scr_throw_error_msg_code(i32, ptr, ${host.sizeType}, ptr)`);
|
|
1419
|
+
this.defs.push(`define internal ptr @${snapshot}(ptr %v) ${FN_ATTRS} {`, `entry:`, ` call void @scr_throw_error_msg_code(i32 0, ptr ${host.cstr(message)}, ${host.sizeType} ${Buffer.byteLength(message, "utf8")}, ptr ${host.cstr("SC1071")})`, ` ret ptr null`, `}`, ``);
|
|
1420
|
+
B.line(`${r} = call ptr ${typedRefConstructor(host, t)}(ptr %v, ptr ${rc.retain}, ptr ${rc.release}, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")}, ptr @${snapshot}, ptr null)`);
|
|
1421
|
+
B.terminate(`ret ptr ${r}`);
|
|
1422
|
+
break;
|
|
1423
|
+
}
|
|
1210
1424
|
case "object": {
|
|
1211
1425
|
const className = t.className;
|
|
1212
|
-
if (className
|
|
1426
|
+
if (host.isErrorClass(className)) {
|
|
1213
1427
|
host.declare(`declare ptr @scr_dyn_from_error(ptr)`);
|
|
1214
1428
|
const r = B.tmp();
|
|
1215
1429
|
B.line(`${r} = call ptr @scr_dyn_from_error(ptr %v)`);
|
|
@@ -1222,9 +1436,8 @@ export class LlDyn {
|
|
|
1222
1436
|
const adapter = host.liveDynRefAdapter(t);
|
|
1223
1437
|
const rc = vAdapters(host, t);
|
|
1224
1438
|
const keyLit = host.cstr(typeKey(t));
|
|
1225
|
-
host.declare(`declare ptr @scr_dyn_new_typed_ref(ptr, ptr, ptr, ptr, ${host.sizeType}, ptr, ptr)`);
|
|
1226
1439
|
const r = B.tmp();
|
|
1227
|
-
B.line(`${r} = call ptr
|
|
1440
|
+
B.line(`${r} = call ptr ${typedRefConstructor(host, t)}(ptr %v, ptr ${rc.retain}, ptr ${rc.release}, ptr ${keyLit}, ${host.sizeType} ${Buffer.byteLength(typeKey(t), "utf8")}, ptr @${adapter.snapshot}, ptr ${adapter.commit})`);
|
|
1228
1441
|
B.terminate(`ret ptr ${r}`);
|
|
1229
1442
|
break;
|
|
1230
1443
|
}
|
|
@@ -1233,6 +1446,13 @@ export class LlDyn {
|
|
|
1233
1446
|
B.terminate(`ret ptr ${r}`);
|
|
1234
1447
|
break;
|
|
1235
1448
|
}
|
|
1449
|
+
case "classval": {
|
|
1450
|
+
host.declare(`declare ptr @scr_dyn_new_class(ptr, ptr)`);
|
|
1451
|
+
const r = B.tmp();
|
|
1452
|
+
B.line(`${r} = call ptr @scr_dyn_new_class(ptr %v, ptr ${host.cstr(key)})`);
|
|
1453
|
+
B.terminate(`ret ptr ${r}`);
|
|
1454
|
+
break;
|
|
1455
|
+
}
|
|
1236
1456
|
case "func": {
|
|
1237
1457
|
const r = B.tmp();
|
|
1238
1458
|
B.line(`${r} = call ptr @${this.dynFuncBoxHelper(t)}(ptr %v, ptr null)`);
|
|
@@ -1240,11 +1460,9 @@ export class LlDyn {
|
|
|
1240
1460
|
break;
|
|
1241
1461
|
}
|
|
1242
1462
|
case "bytes": {
|
|
1243
|
-
|
|
1244
|
-
throw new InternalCompilerError(`llvm emitter bug: to-dyn of bytes<${t.elem}>`);
|
|
1245
|
-
host.declare(`declare ptr @scr_dyn_new_bytes_copy(ptr)`);
|
|
1463
|
+
host.declare(`declare ptr @scr_dyn_new_bytes(ptr)`);
|
|
1246
1464
|
const r = B.tmp();
|
|
1247
|
-
B.line(`${r} = call ptr @
|
|
1465
|
+
B.line(`${r} = call ptr @scr_dyn_new_bytes(ptr %v)`);
|
|
1248
1466
|
B.terminate(`ret ptr ${r}`);
|
|
1249
1467
|
break;
|
|
1250
1468
|
}
|
|
@@ -1268,7 +1486,7 @@ export class LlDyn {
|
|
|
1268
1486
|
host.declare(`declare void @scr_dyn_obj_set(ptr, ptr, ${host.sizeType}, ptr)`);
|
|
1269
1487
|
// CYCLE-CAPABLE shapes guard the deep copy: enter TRAPS on a value
|
|
1270
1488
|
// already being converted (a cyclic value has no finite dyn copy —
|
|
1271
|
-
// SEMANTICS.md
|
|
1489
|
+
// SEMANTICS.md).
|
|
1272
1490
|
const cyclicRec = traceAdapter(host, t) !== null;
|
|
1273
1491
|
if (cyclicRec) {
|
|
1274
1492
|
host.declare(`declare void @scr_dyn_from_enter(ptr)`);
|
|
@@ -1290,12 +1508,14 @@ export class LlDyn {
|
|
|
1290
1508
|
}
|
|
1291
1509
|
if (cyclicRec)
|
|
1292
1510
|
B.line(`call void @scr_dyn_from_leave()`);
|
|
1511
|
+
host.declare(`declare ptr @scr_dyn_mark_snapshot(ptr)`);
|
|
1512
|
+
B.line(`call ptr @scr_dyn_mark_snapshot(ptr ${d})`);
|
|
1293
1513
|
B.terminate(`ret ptr ${d}`);
|
|
1294
1514
|
break;
|
|
1295
1515
|
}
|
|
1296
1516
|
const d = B.tmp();
|
|
1297
1517
|
const carriesListenerIdentity = shape.fields.some((f) => f.name === "handleEvent" && f.type.kind === "func");
|
|
1298
|
-
if (carriesListenerIdentity) {
|
|
1518
|
+
if ((shape.fields.length === 0 && !shape.indexValue) || carriesListenerIdentity) {
|
|
1299
1519
|
const rc = vAdapters(host, t);
|
|
1300
1520
|
sourceAccessor = {
|
|
1301
1521
|
name: `${name}_source_access`,
|
|
@@ -1391,6 +1611,8 @@ export class LlDyn {
|
|
|
1391
1611
|
}
|
|
1392
1612
|
if (cyclicRec)
|
|
1393
1613
|
B.line(`call void @scr_dyn_from_leave()`);
|
|
1614
|
+
host.declare(`declare ptr @scr_dyn_mark_snapshot(ptr)`);
|
|
1615
|
+
B.line(`call ptr @scr_dyn_mark_snapshot(ptr ${d})`);
|
|
1394
1616
|
B.terminate(`ret ptr ${d}`);
|
|
1395
1617
|
break;
|
|
1396
1618
|
}
|
|
@@ -1411,6 +1633,20 @@ export class LlDyn {
|
|
|
1411
1633
|
const len = B.tmp();
|
|
1412
1634
|
B.line(`${len} = call double @scr_arr_len(ptr %v)`);
|
|
1413
1635
|
B.countedLoop(len, (i) => {
|
|
1636
|
+
host.declare(`declare double @scr_arr_state(ptr, double)`);
|
|
1637
|
+
const state = B.tmp();
|
|
1638
|
+
const undefinedState = B.tmp();
|
|
1639
|
+
const undefinedLabel = B.newLabel("tda.undefined");
|
|
1640
|
+
const valueLabel = B.newLabel("tda.value");
|
|
1641
|
+
const doneLabel = B.newLabel("tda.done");
|
|
1642
|
+
B.line(`${state} = call double @scr_arr_state(ptr %v, double ${i})`);
|
|
1643
|
+
B.line(`${undefinedState} = fcmp oeq double ${state}, 2.0`); // SCR_ARR_UNDEFINED
|
|
1644
|
+
B.terminate(`br i1 ${undefinedState}, label %${undefinedLabel}, label %${valueLabel}`);
|
|
1645
|
+
B.startBlock(undefinedLabel);
|
|
1646
|
+
const retained = this.retainDyn(B, this.undef(B));
|
|
1647
|
+
B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${retained})`);
|
|
1648
|
+
B.terminate(`br label %${doneLabel}`);
|
|
1649
|
+
B.startBlock(valueLabel);
|
|
1414
1650
|
if (elem.kind === "f64" || elem.kind === "bool") {
|
|
1415
1651
|
const acc = elem.kind;
|
|
1416
1652
|
const accTy = elem.kind === "f64" ? "double" : "i1";
|
|
@@ -1437,9 +1673,13 @@ export class LlDyn {
|
|
|
1437
1673
|
B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${conv})`);
|
|
1438
1674
|
B.line(`call void ${releaseSym(host, elem)}(ptr ${e})`);
|
|
1439
1675
|
}
|
|
1676
|
+
B.terminate(`br label %${doneLabel}`);
|
|
1677
|
+
B.startBlock(doneLabel);
|
|
1440
1678
|
});
|
|
1441
1679
|
if (cyclicArr)
|
|
1442
1680
|
B.line(`call void @scr_dyn_from_leave()`);
|
|
1681
|
+
host.declare(`declare ptr @scr_dyn_mark_snapshot(ptr)`);
|
|
1682
|
+
B.line(`call ptr @scr_dyn_mark_snapshot(ptr ${d})`);
|
|
1443
1683
|
B.terminate(`ret ptr ${d}`);
|
|
1444
1684
|
break;
|
|
1445
1685
|
}
|
|
@@ -1549,7 +1789,7 @@ export class LlDyn {
|
|
|
1549
1789
|
}
|
|
1550
1790
|
this.defs.push(`define internal ptr @${name}(${this.valTy(t)} %v) ${FN_ATTRS} { ; to-dyn ${key}`, B.render(), `}`, ``);
|
|
1551
1791
|
if (sourceAccessor) {
|
|
1552
|
-
this.defs.push(`define internal ptr @${sourceAccessor.name}(ptr %v, i1 %materialize) ${FN_ATTRS} { ;
|
|
1792
|
+
this.defs.push(`define internal ptr @${sourceAccessor.name}(ptr %v, i1 %materialize) ${FN_ATTRS} { ; record source ${key}`, `entry:`, ` br i1 %materialize, label %snapshot, label %release`, `snapshot:`, ` %d = call ptr @${name}(ptr %v)`, ` ret ptr %d`, `release:`, ` call void ${sourceAccessor.release}(ptr %v)`, ` ret ptr null`, `}`, ``);
|
|
1553
1793
|
}
|
|
1554
1794
|
return name;
|
|
1555
1795
|
}
|
|
@@ -1571,9 +1811,10 @@ export class LlDyn {
|
|
|
1571
1811
|
const B = new BlockBuilder();
|
|
1572
1812
|
host.declare(`declare void @scr_promise_fulfill_ref(ptr, ptr, ptr, ptr, ptr)`);
|
|
1573
1813
|
host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
|
|
1814
|
+
host.declare(`declare void @scr_dyn_trace_v(ptr, ptr, ptr)`);
|
|
1574
1815
|
host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
1575
1816
|
const fulfill = (dv) => {
|
|
1576
|
-
B.line(`call void @scr_promise_fulfill_ref(ptr %dst, ptr ${dv}, ptr @scr_dyn_retain_v, ptr @scr_dyn_release_v, ptr
|
|
1817
|
+
B.line(`call void @scr_promise_fulfill_ref(ptr %dst, ptr ${dv}, ptr @scr_dyn_retain_v, ptr @scr_dyn_release_v, ptr @scr_dyn_trace_v)`);
|
|
1577
1818
|
};
|
|
1578
1819
|
switch (inner.kind) {
|
|
1579
1820
|
case "void":
|
|
@@ -1660,10 +1901,17 @@ export class LlDyn {
|
|
|
1660
1901
|
const kd = this.kindOf(B, "%d");
|
|
1661
1902
|
const done = B.newLabel("ds.d");
|
|
1662
1903
|
const labels = new Map();
|
|
1663
|
-
for (const k of [DYN_KIND.NULL, DYN_KIND.BOOL, DYN_KIND.NUM, DYN_KIND.STR, DYN_KIND.ARR, DYN_KIND.OBJ, DYN_KIND.UNDEF, DYN_KIND.BYTES, DYN_KIND.FUNC, DYN_KIND.HANDLE, DYN_KIND.PROMISE, DYN_KIND.JSVAL, DYN_KIND.TYPED_REF]) {
|
|
1904
|
+
for (const k of [DYN_KIND.NULL, DYN_KIND.BOOL, DYN_KIND.NUM, DYN_KIND.STR, DYN_KIND.ARR, DYN_KIND.OBJ, DYN_KIND.UNDEF, DYN_KIND.BYTES, DYN_KIND.FUNC, DYN_KIND.HANDLE, DYN_KIND.PROMISE, DYN_KIND.JSVAL, DYN_KIND.TYPED_REF, DYN_KIND.PROXY, DYN_KIND.BIGINT, DYN_KIND.SYMBOL]) {
|
|
1664
1905
|
labels.set(k, B.newLabel(`ds.k${k}`));
|
|
1665
1906
|
}
|
|
1666
|
-
|
|
1907
|
+
const branches = [];
|
|
1908
|
+
for (const [kind, label] of labels)
|
|
1909
|
+
branches.push(`i32 ${kind}, label %${label}`);
|
|
1910
|
+
B.terminate(`switch i32 ${kd}, label %${done} [ ${branches.join(" ")} ]`);
|
|
1911
|
+
B.startBlock(labels.get(DYN_KIND.PROXY));
|
|
1912
|
+
host.declare(`declare void @scr_dyn_proxy_unsupported(ptr)`);
|
|
1913
|
+
B.line(`call void @scr_dyn_proxy_unsupported(ptr ${host.cstr("string conversion")})`);
|
|
1914
|
+
B.br(done);
|
|
1667
1915
|
B.startBlock(labels.get(DYN_KIND.JSVAL));
|
|
1668
1916
|
{
|
|
1669
1917
|
// Island-held: the engine's own ToString (a bridged failure
|
|
@@ -1696,6 +1944,24 @@ export class LlDyn {
|
|
|
1696
1944
|
B.line(`call void @scr_jb_puts(ptr %b, ptr ${s})`);
|
|
1697
1945
|
B.br(done);
|
|
1698
1946
|
}
|
|
1947
|
+
B.startBlock(labels.get(DYN_KIND.BIGINT));
|
|
1948
|
+
{
|
|
1949
|
+
host.declare(`declare ptr @scr_bigint_to_string(ptr, double)`);
|
|
1950
|
+
const v = this.payloadOf(B, "%d", "ptr");
|
|
1951
|
+
const s = B.tmp();
|
|
1952
|
+
B.line(`${s} = call ptr @scr_bigint_to_string(ptr ${v}, double ${f64Lit(10)})`);
|
|
1953
|
+
this.putScrStr(B, "%b", s);
|
|
1954
|
+
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
1955
|
+
B.br(done);
|
|
1956
|
+
}
|
|
1957
|
+
B.startBlock(labels.get(DYN_KIND.SYMBOL));
|
|
1958
|
+
{
|
|
1959
|
+
host.declare(`declare ptr @scr_dyn_string_coerce(ptr)`);
|
|
1960
|
+
const s = B.tmp();
|
|
1961
|
+
B.line(`${s} = call ptr @scr_dyn_string_coerce(ptr %d)`);
|
|
1962
|
+
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
1963
|
+
B.br(done);
|
|
1964
|
+
}
|
|
1699
1965
|
B.startBlock(labels.get(DYN_KIND.NUM));
|
|
1700
1966
|
{
|
|
1701
1967
|
// String(n): NaN/Infinity spelled out, not the JSON null.
|
|
@@ -1862,35 +2128,11 @@ export class LlDyn {
|
|
|
1862
2128
|
B.br(done);
|
|
1863
2129
|
B.startBlock(lJoin);
|
|
1864
2130
|
const bts = this.payloadOf(B, "%d", "ptr");
|
|
1865
|
-
|
|
1866
|
-
const
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
B.line(
|
|
1870
|
-
B.line(`${blen} = load ${this.S}, ptr ${blenp}`);
|
|
1871
|
-
B.line(`${bdatap} = getelementptr inbounds i8, ptr ${bts}, i64 ${this.abiOffset(24, 12)} ; ->data`);
|
|
1872
|
-
B.line(`${bdata} = load ptr, ptr ${bdatap}`);
|
|
1873
|
-
this.i64Loop(B, "ds.by", blen, (i) => {
|
|
1874
|
-
const nz = B.tmp();
|
|
1875
|
-
B.line(`${nz} = icmp ugt ${this.S} ${i}, 0`);
|
|
1876
|
-
const lcm = B.newLabel("ds.bc");
|
|
1877
|
-
const lv = B.newLabel("ds.bv");
|
|
1878
|
-
B.condBr(nz, lcm, lv);
|
|
1879
|
-
B.startBlock(lcm);
|
|
1880
|
-
B.line(`call void @scr_jb_putc(ptr %b, i8 44)`);
|
|
1881
|
-
B.br(lv);
|
|
1882
|
-
B.startBlock(lv);
|
|
1883
|
-
const cp = B.tmp();
|
|
1884
|
-
const c = B.tmp();
|
|
1885
|
-
const cd = B.tmp();
|
|
1886
|
-
B.line(`${cp} = getelementptr inbounds i8, ptr ${bdata}, ${this.S} ${i}`);
|
|
1887
|
-
B.line(`${c} = load i8, ptr ${cp}`);
|
|
1888
|
-
B.line(`${cd} = uitofp i8 ${c} to double`);
|
|
1889
|
-
const s = B.tmp();
|
|
1890
|
-
B.line(`${s} = call ptr @scr_f64_to_scrstr(double ${cd})`);
|
|
1891
|
-
this.putScrStr(B, "%b", s);
|
|
1892
|
-
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
1893
|
-
});
|
|
2131
|
+
host.declare(`declare ptr @scr_bytes_join(ptr, ptr)`);
|
|
2132
|
+
const joined = B.tmp();
|
|
2133
|
+
B.line(`${joined} = call ptr @scr_bytes_join(ptr ${bts}, ptr ${host.internLiteral(",")})`);
|
|
2134
|
+
this.putScrStr(B, "%b", joined);
|
|
2135
|
+
B.line(`call void @scr_str_release(ptr ${joined})`);
|
|
1894
2136
|
B.br(done);
|
|
1895
2137
|
}
|
|
1896
2138
|
B.startBlock(labels.get(DYN_KIND.FUNC));
|
|
@@ -1914,8 +2156,14 @@ export class LlDyn {
|
|
|
1914
2156
|
B.br(done);
|
|
1915
2157
|
}
|
|
1916
2158
|
B.startBlock(labels.get(DYN_KIND.HANDLE));
|
|
1917
|
-
|
|
1918
|
-
|
|
2159
|
+
{
|
|
2160
|
+
host.declare(`declare ptr @scr_dyn_to_string(ptr, ptr)`);
|
|
2161
|
+
const s = B.tmp();
|
|
2162
|
+
B.line(`${s} = call ptr @scr_dyn_to_string(ptr %d, ptr null)`);
|
|
2163
|
+
this.putScrStr(B, "%b", s);
|
|
2164
|
+
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
2165
|
+
B.br(done);
|
|
2166
|
+
}
|
|
1919
2167
|
B.startBlock(labels.get(DYN_KIND.PROMISE));
|
|
1920
2168
|
// Object.prototype.toString with the Promise @@toStringTag.
|
|
1921
2169
|
this.puts(B, "%b", "[object Promise]");
|
|
@@ -2062,6 +2310,47 @@ export class LlDyn {
|
|
|
2062
2310
|
/* ── the keyed read (dynKeyGetHelper, ported) ──────────────────────── */
|
|
2063
2311
|
/** `sc_dyn_key_get(ptr d, ptr k, i1 opt) -> ptr` — d[k] on a dyn value.
|
|
2064
2312
|
* Result +1; throws on non-optional nullish receivers. */
|
|
2313
|
+
dynComputedKeyGetHelper() {
|
|
2314
|
+
const name = "sc_dyn_computed_key_get";
|
|
2315
|
+
if (this.helperMemo.has(name))
|
|
2316
|
+
return name;
|
|
2317
|
+
this.helperMemo.set(name, name);
|
|
2318
|
+
const B = new BlockBuilder();
|
|
2319
|
+
const host = this.host;
|
|
2320
|
+
const stringHelper = this.dynKeyGetHelper();
|
|
2321
|
+
host.declare(`declare ptr @scr_dyn_property_key_value(ptr)`);
|
|
2322
|
+
host.declare(`declare ptr @scr_dyn_symbol_key_get(ptr, ptr, i1 zeroext)`);
|
|
2323
|
+
host.declare(`declare void @scr_dyn_release(ptr)`);
|
|
2324
|
+
const key = B.tmp();
|
|
2325
|
+
B.line(`${key} = call ptr @scr_dyn_property_key_value(ptr %key)`);
|
|
2326
|
+
const missing = B.tmp();
|
|
2327
|
+
B.line(`${missing} = icmp eq ptr ${key}, null`);
|
|
2328
|
+
const fail = B.newLabel("kg.fail");
|
|
2329
|
+
const dispatch = B.newLabel("kg.dispatch");
|
|
2330
|
+
B.condBr(missing, fail, dispatch);
|
|
2331
|
+
B.startBlock(fail);
|
|
2332
|
+
B.terminate("ret ptr null");
|
|
2333
|
+
B.startBlock(dispatch);
|
|
2334
|
+
const kind = this.kindOf(B, key);
|
|
2335
|
+
const symbol = B.tmp();
|
|
2336
|
+
B.line(`${symbol} = icmp eq i32 ${kind}, ${DYN_KIND.SYMBOL}`);
|
|
2337
|
+
const sym = B.newLabel("kg.symbol");
|
|
2338
|
+
const str = B.newLabel("kg.string");
|
|
2339
|
+
B.condBr(symbol, sym, str);
|
|
2340
|
+
B.startBlock(sym);
|
|
2341
|
+
const sv = B.tmp();
|
|
2342
|
+
B.line(`${sv} = call ptr @scr_dyn_symbol_key_get(ptr %d, ptr ${key}, i1 %opt)`);
|
|
2343
|
+
B.line(`call void @scr_dyn_release(ptr ${key})`);
|
|
2344
|
+
B.terminate(`ret ptr ${sv}`);
|
|
2345
|
+
B.startBlock(str);
|
|
2346
|
+
const text = this.payloadOf(B, key, "ptr");
|
|
2347
|
+
const value = B.tmp();
|
|
2348
|
+
B.line(`${value} = call ptr @${stringHelper}(ptr %d, ptr ${text}, i1 %opt)`);
|
|
2349
|
+
B.line(`call void @scr_dyn_release(ptr ${key})`);
|
|
2350
|
+
B.terminate(`ret ptr ${value}`);
|
|
2351
|
+
this.defs.push(`define internal ptr @${name}(ptr %d, ptr %key, i1 zeroext %opt) ${FN_ATTRS} {`, B.render(), "}", "");
|
|
2352
|
+
return name;
|
|
2353
|
+
}
|
|
2065
2354
|
dynKeyGetHelper() {
|
|
2066
2355
|
const memoKey = "%dynKeyGet";
|
|
2067
2356
|
const existing = this.dynBuilders.get(memoKey);
|
|
@@ -2122,6 +2411,19 @@ export class LlDyn {
|
|
|
2122
2411
|
B.terminate(`ret ptr null`);
|
|
2123
2412
|
B.startBlock(lNext);
|
|
2124
2413
|
}
|
|
2414
|
+
{
|
|
2415
|
+
const isSymbol = B.tmp();
|
|
2416
|
+
B.line(`${isSymbol} = icmp eq i32 ${kd}, ${DYN_KIND.SYMBOL}`);
|
|
2417
|
+
const lSymbol = B.newLabel("kg.sym");
|
|
2418
|
+
const lNext = B.newLabel("kg.n");
|
|
2419
|
+
B.condBr(isSymbol, lSymbol, lNext);
|
|
2420
|
+
B.startBlock(lSymbol);
|
|
2421
|
+
host.declare(`declare ptr @scr_dyn_symbol_get(ptr, ptr)`);
|
|
2422
|
+
const r = B.tmp();
|
|
2423
|
+
B.line(`${r} = call ptr @scr_dyn_symbol_get(ptr %d, ptr %k)`);
|
|
2424
|
+
B.terminate(`ret ptr ${r}`);
|
|
2425
|
+
B.startBlock(lNext);
|
|
2426
|
+
}
|
|
2125
2427
|
// Typed stream capsules expose their one cached, refreshed dyn view to
|
|
2126
2428
|
// ordinary property reads while the capsule itself keeps identity.
|
|
2127
2429
|
{
|
|
@@ -2144,6 +2446,19 @@ export class LlDyn {
|
|
|
2144
2446
|
// ISLAND-held receivers: o[k] reads the REAL engine property (getters
|
|
2145
2447
|
// included, throws bridged catchably) and the result wraps back
|
|
2146
2448
|
// scalar-normalized — the routed keyed read that retired the fence.
|
|
2449
|
+
{
|
|
2450
|
+
const isProxy = B.tmp();
|
|
2451
|
+
B.line(`${isProxy} = icmp eq i32 ${kd}, ${DYN_KIND.PROXY}`);
|
|
2452
|
+
const lProxy = B.newLabel("kg.proxy");
|
|
2453
|
+
const lNext = B.newLabel("kg.n");
|
|
2454
|
+
B.condBr(isProxy, lProxy, lNext);
|
|
2455
|
+
B.startBlock(lProxy);
|
|
2456
|
+
host.declare(`declare ptr @scr_dyn_proxy_get(ptr, ptr)`);
|
|
2457
|
+
const r = B.tmp();
|
|
2458
|
+
B.line(`${r} = call ptr @scr_dyn_proxy_get(ptr %d, ptr %k)`);
|
|
2459
|
+
B.terminate(`ret ptr ${r}`);
|
|
2460
|
+
B.startBlock(lNext);
|
|
2461
|
+
}
|
|
2147
2462
|
{
|
|
2148
2463
|
const isJv = B.tmp();
|
|
2149
2464
|
B.line(`${isJv} = icmp eq i32 ${kd}, ${DYN_KIND.JSVAL}`);
|
|
@@ -2288,45 +2603,10 @@ export class LlDyn {
|
|
|
2288
2603
|
const lNext = B.newLabel("kg.n");
|
|
2289
2604
|
B.condBr(isB, lB, lNext);
|
|
2290
2605
|
B.startBlock(lB);
|
|
2291
|
-
host.declare(`declare ptr @
|
|
2292
|
-
const
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
B.line(`${blenp} = getelementptr inbounds i8, ptr ${bts}, i64 ${this.abiOffset(8, 4)} ; ->len`);
|
|
2296
|
-
B.line(`${blen} = load ${host.sizeType}, ptr ${blenp}`);
|
|
2297
|
-
const lLen = B.newLabel("kg.bl");
|
|
2298
|
-
const lIdx = B.newLabel("kg.bi");
|
|
2299
|
-
B.condBr(lenHit, lLen, lIdx);
|
|
2300
|
-
B.startBlock(lLen);
|
|
2301
|
-
const lenD = B.tmp();
|
|
2302
|
-
const r0 = B.tmp();
|
|
2303
|
-
B.line(`${lenD} = uitofp ${host.sizeType} ${blen} to double`);
|
|
2304
|
-
B.line(`${r0} = call ptr @scr_dyn_new_num(double ${lenD})`);
|
|
2305
|
-
B.terminate(`ret ptr ${r0}`);
|
|
2306
|
-
B.startBlock(lIdx);
|
|
2307
|
-
const inRange = B.tmp();
|
|
2308
|
-
const hit = B.tmp();
|
|
2309
|
-
B.line(`${inRange} = icmp ult ${host.sizeType} ${idx}, ${blen}`);
|
|
2310
|
-
B.line(`${hit} = and i1 ${digits}, ${inRange}`);
|
|
2311
|
-
const lHit = B.newLabel("kg.bh");
|
|
2312
|
-
const lMiss = B.newLabel("kg.bm");
|
|
2313
|
-
B.condBr(hit, lHit, lMiss);
|
|
2314
|
-
B.startBlock(lHit);
|
|
2315
|
-
const bdatap = B.tmp();
|
|
2316
|
-
const bdata = B.tmp();
|
|
2317
|
-
B.line(`${bdatap} = getelementptr inbounds i8, ptr ${bts}, i64 ${this.abiOffset(24, 12)} ; ->data`);
|
|
2318
|
-
B.line(`${bdata} = load ptr, ptr ${bdatap}`);
|
|
2319
|
-
const bp = B.tmp();
|
|
2320
|
-
const bv = B.tmp();
|
|
2321
|
-
const bd = B.tmp();
|
|
2322
|
-
const r1 = B.tmp();
|
|
2323
|
-
B.line(`${bp} = getelementptr inbounds i8, ptr ${bdata}, ${host.sizeType} ${idx}`);
|
|
2324
|
-
B.line(`${bv} = load i8, ptr ${bp}`);
|
|
2325
|
-
B.line(`${bd} = uitofp i8 ${bv} to double`);
|
|
2326
|
-
B.line(`${r1} = call ptr @scr_dyn_new_num(double ${bd})`);
|
|
2327
|
-
B.terminate(`ret ptr ${r1}`);
|
|
2328
|
-
B.startBlock(lMiss);
|
|
2329
|
-
retainUndef();
|
|
2606
|
+
host.declare(`declare ptr @scr_dyn_bytes_key_get(ptr, ptr)`);
|
|
2607
|
+
const result = B.tmp();
|
|
2608
|
+
B.line(`${result} = call ptr @scr_dyn_bytes_key_get(ptr %d, ptr %k)`);
|
|
2609
|
+
B.terminate(`ret ptr ${result}`);
|
|
2330
2610
|
B.startBlock(lNext);
|
|
2331
2611
|
}
|
|
2332
2612
|
// FUNC: own props (defineProperties writes), then name/length.
|
|
@@ -2429,6 +2709,15 @@ export class LlDyn {
|
|
|
2429
2709
|
B.line(`call void @scr_str_release(ptr ${ch})`);
|
|
2430
2710
|
B.terminate(`ret ptr ${r2}`);
|
|
2431
2711
|
B.startBlock(lMiss);
|
|
2712
|
+
const lArrNamed = B.newLabel("kg.an");
|
|
2713
|
+
const lOther = B.newLabel("kg.ao");
|
|
2714
|
+
B.condBr(isA, lArrNamed, lOther);
|
|
2715
|
+
B.startBlock(lArrNamed);
|
|
2716
|
+
host.declare(`declare ptr @scr_dyn_arr_named_get(ptr, ptr)`);
|
|
2717
|
+
const named = B.tmp();
|
|
2718
|
+
B.line(`${named} = call ptr @scr_dyn_arr_named_get(ptr %d, ptr %k)`);
|
|
2719
|
+
B.terminate(`ret ptr ${named}`);
|
|
2720
|
+
B.startBlock(lOther);
|
|
2432
2721
|
retainUndef();
|
|
2433
2722
|
}
|
|
2434
2723
|
B.startBlock(lNext);
|
|
@@ -2647,7 +2936,7 @@ export class LlDyn {
|
|
|
2647
2936
|
B.line(`store ptr ${r2}, ptr ${itemSlot}`);
|
|
2648
2937
|
B.br(lPush);
|
|
2649
2938
|
}
|
|
2650
|
-
// BYTES: by
|
|
2939
|
+
// BYTES: by numeric element.
|
|
2651
2940
|
B.startBlock(lBy);
|
|
2652
2941
|
{
|
|
2653
2942
|
const bts = this.payloadOf(B, "%d", "ptr");
|
|
@@ -2661,17 +2950,12 @@ export class LlDyn {
|
|
|
2661
2950
|
const lMiss = B.newLabel("din.bm");
|
|
2662
2951
|
B.condBr(inR, lHit, lMiss);
|
|
2663
2952
|
B.startBlock(lHit);
|
|
2664
|
-
|
|
2665
|
-
const
|
|
2666
|
-
B.line(`${bdatap} = getelementptr inbounds i8, ptr ${bts}, i64 ${this.abiOffset(24, 12)} ; ->data`);
|
|
2667
|
-
B.line(`${bdata} = load ptr, ptr ${bdatap}`);
|
|
2668
|
-
const bp = B.tmp();
|
|
2669
|
-
const bv = B.tmp();
|
|
2953
|
+
host.declare(`declare double @scr_bytes_get(ptr, double)`);
|
|
2954
|
+
const index = B.tmp();
|
|
2670
2955
|
const bd = B.tmp();
|
|
2671
2956
|
const r = B.tmp();
|
|
2672
|
-
B.line(`${
|
|
2673
|
-
B.line(`${
|
|
2674
|
-
B.line(`${bd} = uitofp i8 ${bv} to double`);
|
|
2957
|
+
B.line(`${index} = uitofp ${host.sizeType} ${i} to double`);
|
|
2958
|
+
B.line(`${bd} = call double @scr_bytes_get(ptr ${bts}, double ${index})`);
|
|
2675
2959
|
B.line(`${r} = call ptr @scr_dyn_new_num(double ${bd})`);
|
|
2676
2960
|
B.line(`store ptr ${r}, ptr ${itemSlot}`);
|
|
2677
2961
|
B.br(lPush);
|
|
@@ -2793,7 +3077,55 @@ export class LlDyn {
|
|
|
2793
3077
|
const host = this.host;
|
|
2794
3078
|
const B = new BlockBuilder();
|
|
2795
3079
|
const argNames = [];
|
|
3080
|
+
const typedRest = t.rest === true && t.restAbi === "typed";
|
|
3081
|
+
const packTail = (start) => {
|
|
3082
|
+
host.declare(`declare ptr @scr_dyn_new_arr()`);
|
|
3083
|
+
host.declare(`declare void @scr_dyn_arr_push(ptr, ptr)`);
|
|
3084
|
+
const packed = B.tmp();
|
|
3085
|
+
B.line(`${packed} = call ptr @scr_dyn_new_arr()`);
|
|
3086
|
+
const riSlot = B.slot();
|
|
3087
|
+
B.entryAllocas.push(`${riSlot} = alloca ${host.sizeType}`);
|
|
3088
|
+
B.line(`store ${host.sizeType} ${start}, ptr ${riSlot}`);
|
|
3089
|
+
const lc = B.newLabel("dfk.rc");
|
|
3090
|
+
const lb = B.newLabel("dfk.rb");
|
|
3091
|
+
const le = B.newLabel("dfk.re");
|
|
3092
|
+
B.br(lc);
|
|
3093
|
+
B.startBlock(lc);
|
|
3094
|
+
const ri = B.tmp();
|
|
3095
|
+
const cont = B.tmp();
|
|
3096
|
+
B.line(`${ri} = load ${host.sizeType}, ptr ${riSlot}`);
|
|
3097
|
+
B.line(`${cont} = icmp ult ${host.sizeType} ${ri}, %argc`);
|
|
3098
|
+
B.condBr(cont, lb, le);
|
|
3099
|
+
B.startBlock(lb);
|
|
3100
|
+
const ap = B.tmp();
|
|
3101
|
+
const av = B.tmp();
|
|
3102
|
+
B.line(`${ap} = getelementptr inbounds ptr, ptr %args, ${host.sizeType} ${ri}`);
|
|
3103
|
+
B.line(`${av} = load ptr, ptr ${ap}`);
|
|
3104
|
+
const rv = this.retainDyn(B, av);
|
|
3105
|
+
B.line(`call void @scr_dyn_arr_push(ptr ${packed}, ptr ${rv})`);
|
|
3106
|
+
const ri2 = B.tmp();
|
|
3107
|
+
B.line(`${ri2} = add ${host.sizeType} ${ri}, 1`);
|
|
3108
|
+
B.line(`store ${host.sizeType} ${ri2}, ptr ${riSlot}`);
|
|
3109
|
+
B.br(lc);
|
|
3110
|
+
B.startBlock(le);
|
|
3111
|
+
return packed;
|
|
3112
|
+
};
|
|
2796
3113
|
t.params.forEach((p, i) => {
|
|
3114
|
+
if (typedRest && i === t.params.length - 1) {
|
|
3115
|
+
const packed = packTail(i);
|
|
3116
|
+
const a = B.tmp();
|
|
3117
|
+
B.line(`${a} = call ${this.valTy(p)} @${this.dynCheckHelper(p)}(ptr ${packed}, ptr null)`);
|
|
3118
|
+
host.declare(`declare void @scr_dyn_release(ptr)`);
|
|
3119
|
+
B.line(`call void @scr_dyn_release(ptr ${packed})`);
|
|
3120
|
+
this.pendingBail(B, "dfk.rest", () => {
|
|
3121
|
+
t.params.slice(0, i).forEach((q, j) => {
|
|
3122
|
+
if (isRefCounted(q))
|
|
3123
|
+
B.line(`call void ${releaseSym(host, q)}(ptr ${argNames[j]})`);
|
|
3124
|
+
});
|
|
3125
|
+
}, "ptr null");
|
|
3126
|
+
argNames.push(a);
|
|
3127
|
+
return;
|
|
3128
|
+
}
|
|
2797
3129
|
// JS arity: a missing argument IS the undefined dyn value.
|
|
2798
3130
|
const adSlot = B.slot();
|
|
2799
3131
|
B.entryAllocas.push(`${adSlot} = alloca ptr`);
|
|
@@ -2867,38 +3199,7 @@ export class LlDyn {
|
|
|
2867
3199
|
});
|
|
2868
3200
|
// VARIADIC (rest-marked) signatures: one extra trailing dyn-array
|
|
2869
3201
|
// param carries the call's arguments from index params.length on.
|
|
2870
|
-
|
|
2871
|
-
if (t.rest) {
|
|
2872
|
-
host.declare(`declare ptr @scr_dyn_new_arr()`);
|
|
2873
|
-
host.declare(`declare void @scr_dyn_arr_push(ptr, ptr)`);
|
|
2874
|
-
rest = B.tmp();
|
|
2875
|
-
B.line(`${rest} = call ptr @scr_dyn_new_arr()`);
|
|
2876
|
-
const riSlot = B.slot();
|
|
2877
|
-
B.entryAllocas.push(`${riSlot} = alloca ${host.sizeType}`);
|
|
2878
|
-
B.line(`store ${host.sizeType} ${t.argumentsAll ? 0 : t.params.length}, ptr ${riSlot}`);
|
|
2879
|
-
const lc = B.newLabel("dfk.rc");
|
|
2880
|
-
const lb = B.newLabel("dfk.rb");
|
|
2881
|
-
const le = B.newLabel("dfk.re");
|
|
2882
|
-
B.br(lc);
|
|
2883
|
-
B.startBlock(lc);
|
|
2884
|
-
const ri = B.tmp();
|
|
2885
|
-
const cont = B.tmp();
|
|
2886
|
-
B.line(`${ri} = load ${host.sizeType}, ptr ${riSlot}`);
|
|
2887
|
-
B.line(`${cont} = icmp ult ${host.sizeType} ${ri}, %argc`);
|
|
2888
|
-
B.condBr(cont, lb, le);
|
|
2889
|
-
B.startBlock(lb);
|
|
2890
|
-
const ap = B.tmp();
|
|
2891
|
-
const av = B.tmp();
|
|
2892
|
-
B.line(`${ap} = getelementptr inbounds ptr, ptr %args, ${host.sizeType} ${ri}`);
|
|
2893
|
-
B.line(`${av} = load ptr, ptr ${ap}`);
|
|
2894
|
-
const rv = this.retainDyn(B, av);
|
|
2895
|
-
B.line(`call void @scr_dyn_arr_push(ptr ${rest}, ptr ${rv})`);
|
|
2896
|
-
const ri2 = B.tmp();
|
|
2897
|
-
B.line(`${ri2} = add ${host.sizeType} ${ri}, 1`);
|
|
2898
|
-
B.line(`store ${host.sizeType} ${ri2}, ptr ${riSlot}`);
|
|
2899
|
-
B.br(lc);
|
|
2900
|
-
B.startBlock(le);
|
|
2901
|
-
}
|
|
3202
|
+
const rest = t.rest && !typedRest ? packTail(t.argumentsAll ? 0 : t.params.length) : null;
|
|
2902
3203
|
// The closure CONSUMES its params (+1 each moved in).
|
|
2903
3204
|
const fnp = B.tmp();
|
|
2904
3205
|
const fn = B.tmp();
|
|
@@ -2948,7 +3249,7 @@ export class LlDyn {
|
|
|
2948
3249
|
host.declare(`declare ptr @scr_closure_retain_v(ptr)`);
|
|
2949
3250
|
host.declare(`declare ptr @scr_dyn_new_func(ptr, ptr, i32, ptr, ptr)`);
|
|
2950
3251
|
const sigLit = host.cstr(key);
|
|
2951
|
-
this.defs.push(`define internal ptr @${name}(ptr %v, ptr %fname) ${FN_ATTRS} { ; box ${key} into dyn`, `entry:`, ` %c = call ptr @scr_closure_retain_v(ptr %v)`, ` %r = call ptr @scr_dyn_new_func(ptr %c, ptr @${thunk}, i32 ${t.params.length}, ptr ${sigLit}, ptr %fname)`, ` ret ptr %r`, `}`, ``);
|
|
3252
|
+
this.defs.push(`define internal ptr @${name}(ptr %v, ptr %fname) ${FN_ATTRS} { ; box ${key} into dyn`, `entry:`, ` %c = call ptr @scr_closure_retain_v(ptr %v)`, ` %r = call ptr @scr_dyn_new_func(ptr %c, ptr @${thunk}, i32 ${t.params.length - (t.restAbi === "typed" ? 1 : 0)}, ptr ${sigLit}, ptr %fname)`, ` ret ptr %r`, `}`, ``);
|
|
2952
3253
|
return name;
|
|
2953
3254
|
}
|
|
2954
3255
|
/** The adapter closure body for one TARGET signature: caps[0] is an
|
|
@@ -2977,7 +3278,30 @@ export class LlDyn {
|
|
|
2977
3278
|
// argument (borrowed by the conversion) and releases.
|
|
2978
3279
|
let argsPtr = "null";
|
|
2979
3280
|
const argVals = [];
|
|
2980
|
-
|
|
3281
|
+
const checkedRest = t.rest === true && t.restAbi === undefined;
|
|
3282
|
+
let packed = null;
|
|
3283
|
+
if (checkedRest) {
|
|
3284
|
+
host.declare(`declare ptr @scr_dyn_apply(ptr, ptr, ptr)`);
|
|
3285
|
+
host.declare(`declare ptr @scr_dyn_new_arr()`);
|
|
3286
|
+
host.declare(`declare void @scr_dyn_arr_push(ptr, ptr)`);
|
|
3287
|
+
host.declare(`declare void @scr_dyn_arr_push_spread(ptr, ptr, ptr)`);
|
|
3288
|
+
packed = t.argumentsAll ? "%rest" : B.tmp();
|
|
3289
|
+
if (!t.argumentsAll)
|
|
3290
|
+
B.line(`${packed} = call ptr @scr_dyn_new_arr()`);
|
|
3291
|
+
t.params.forEach((p, i) => {
|
|
3292
|
+
if (!t.argumentsAll) {
|
|
3293
|
+
const v = this.toDynExpr(B, p, `%a${i}`);
|
|
3294
|
+
B.line(`call void @scr_dyn_arr_push(ptr ${packed}, ptr ${v})`);
|
|
3295
|
+
}
|
|
3296
|
+
if (isRefCounted(p))
|
|
3297
|
+
B.line(`call void ${releaseSym(host, p)}(ptr %a${i})`);
|
|
3298
|
+
});
|
|
3299
|
+
if (!t.argumentsAll) {
|
|
3300
|
+
B.line(`call void @scr_dyn_arr_push_spread(ptr ${packed}, ptr %rest, ptr ${host.cstr("")})`);
|
|
3301
|
+
B.line(`call void @scr_dyn_release(ptr %rest)`);
|
|
3302
|
+
}
|
|
3303
|
+
}
|
|
3304
|
+
else if (t.params.length > 0) {
|
|
2981
3305
|
const arr = B.slot();
|
|
2982
3306
|
B.entryAllocas.push(`${arr} = alloca [${t.params.length} x ptr]`);
|
|
2983
3307
|
t.params.forEach((p, i) => {
|
|
@@ -2994,7 +3318,12 @@ export class LlDyn {
|
|
|
2994
3318
|
// The kind is FUNC by construction; `what` is unreachable — spelled
|
|
2995
3319
|
// anyway (the C's "value").
|
|
2996
3320
|
const r = B.tmp();
|
|
2997
|
-
|
|
3321
|
+
if (packed) {
|
|
3322
|
+
B.line(`${r} = call ptr @scr_dyn_apply(ptr ${fnv}, ptr ${packed}, ptr ${host.cstr("value")})`);
|
|
3323
|
+
B.line(`call void @scr_dyn_release(ptr ${packed})`);
|
|
3324
|
+
}
|
|
3325
|
+
else
|
|
3326
|
+
B.line(`${r} = call ptr @scr_dyn_call(ptr ${fnv}, ptr ${argsPtr}, ${host.sizeType} ${t.params.length}, ptr ${host.cstr("value")})`);
|
|
2998
3327
|
B.line(`call void @scr_dyn_release(ptr ${fnv})`);
|
|
2999
3328
|
for (const v of argVals)
|
|
3000
3329
|
B.line(`call void @scr_dyn_release(ptr ${v})`);
|
|
@@ -3014,7 +3343,7 @@ export class LlDyn {
|
|
|
3014
3343
|
B.line(`call void @scr_dyn_release(ptr ${r})`);
|
|
3015
3344
|
B.terminate(`ret ${this.valTy(t.ret)} ${out}`);
|
|
3016
3345
|
}
|
|
3017
|
-
const params = ["ptr %sc_env", ...t.params.map((p, i) => `${this.valTy(p)} %a${i}`)].join(", ");
|
|
3346
|
+
const params = ["ptr %sc_env", ...t.params.map((p, i) => `${this.valTy(p)} %a${i}`), ...(checkedRest ? ["ptr %rest"] : [])].join(", ");
|
|
3018
3347
|
this.defs.push(`define internal ${retTy === "i1" ? "zeroext i1" : retTy} @${name}(${params}) ${FN_ATTRS} { ; dyn fn adapter to ${key}`, B.render(), `}`, ``);
|
|
3019
3348
|
return name;
|
|
3020
3349
|
}
|