@scriptc/compiler 0.1.7 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +98 -39
- package/ambient/scriptc-overrides.d.ts +10 -6
- package/ambient/scriptc.d.ts +15 -0
- package/dist/backend/build-cache.d.ts +1 -3
- package/dist/backend/build-cache.js +3 -22
- package/dist/backend/build-cache.js.map +1 -1
- package/dist/backend/cache-root.d.ts +3 -0
- package/dist/backend/cache-root.js +23 -0
- package/dist/backend/cache-root.js.map +1 -0
- package/dist/backend/cycle-analysis.d.ts +15 -0
- package/dist/backend/cycle-analysis.js +108 -0
- package/dist/backend/cycle-analysis.js.map +1 -0
- package/dist/backend/cycle-analysis.test.js +124 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -0
- package/dist/backend/executable-features.d.ts +4 -0
- package/dist/backend/executable-features.js +42 -0
- package/dist/backend/executable-features.js.map +1 -0
- package/dist/backend/external-c.d.ts +5 -27
- package/dist/backend/external-c.js +5 -40
- package/dist/backend/external-c.js.map +1 -1
- package/dist/backend/ffi-callbacks.d.ts +2 -3
- package/dist/backend/ffi-callbacks.js +2 -3
- package/dist/backend/ffi-callbacks.js.map +1 -1
- package/dist/backend/library-identity-markers.d.ts +4 -9
- package/dist/backend/library-identity-markers.js +11 -49
- package/dist/backend/library-identity-markers.js.map +1 -1
- package/dist/backend/library-pack.d.ts +5 -0
- package/dist/backend/library-pack.js +123 -0
- package/dist/backend/library-pack.js.map +1 -0
- package/dist/backend/link-plan-core.d.ts +20 -0
- package/dist/backend/link-plan-core.js +18 -0
- package/dist/backend/link-plan-core.js.map +1 -0
- package/dist/backend/link-plan.d.ts +1 -1
- package/dist/backend/link-plan.js +16 -17
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/link-trace.d.ts +2 -0
- package/dist/backend/link-trace.js +24 -0
- package/dist/backend/link-trace.js.map +1 -0
- package/dist/backend/linker.js +1 -1
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/literals.d.ts +9 -0
- package/dist/backend/literals.js +35 -0
- package/dist/backend/literals.js.map +1 -0
- package/dist/backend/literals.test.d.ts +1 -0
- package/dist/backend/literals.test.js +53 -0
- package/dist/backend/literals.test.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +2 -0
- package/dist/backend/llvm/blocks.js +9 -4
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/blocks.test.d.ts +1 -0
- package/dist/backend/llvm/blocks.test.js +91 -0
- package/dist/backend/llvm/blocks.test.js.map +1 -0
- package/dist/backend/llvm/classes.d.ts +14 -8
- package/dist/backend/llvm/classes.js +88 -30
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +5 -1
- package/dist/backend/llvm/common.js +45 -4
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/debug-info.js +2 -7
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/debug-info.test.d.ts +1 -0
- package/dist/backend/llvm/debug-info.test.js +110 -0
- package/dist/backend/llvm/debug-info.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +21 -2
- package/dist/backend/llvm/dyn.js +647 -251
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +596 -1
- package/dist/backend/llvm/emitter.js +769 -425
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.d.ts +1 -0
- package/dist/backend/llvm/emitter.test.js +179 -0
- package/dist/backend/llvm/emitter.test.js.map +1 -0
- package/dist/backend/llvm/expr-async.js +23 -14
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +2 -2
- package/dist/backend/llvm/expr-bytes.js +60 -31
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +1 -1
- package/dist/backend/llvm/expr-callbacks.js +25 -22
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +136 -35
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +1 -1
- package/dist/backend/llvm/expr-containers.js +43 -14
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +5 -260
- package/dist/backend/llvm/expr-control.js +10 -6
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.d.ts +1 -1
- package/dist/backend/llvm/expr-dispatch.js +2 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +78 -81
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-island.d.ts +1 -1
- package/dist/backend/llvm/expr-island.js +11 -7
- package/dist/backend/llvm/expr-island.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +62 -31
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +1 -1
- package/dist/backend/llvm/expr-records.d.ts +5 -1
- package/dist/backend/llvm/expr-records.js +54 -7
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +4 -4
- package/dist/backend/llvm/expr-stream-bridges.js +220 -131
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.d.ts +1 -0
- package/dist/backend/llvm/expr-stream-bridges.test.js +55 -0
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -0
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +12 -12
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +19 -0
- package/dist/backend/llvm/layouts.js +12 -0
- package/dist/backend/llvm/layouts.js.map +1 -0
- package/dist/backend/llvm/lib-abi.d.ts +19 -0
- package/dist/backend/llvm/lib-abi.js +82 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -0
- package/dist/backend/llvm/lib-connect.d.ts +2 -0
- package/dist/backend/llvm/lib-connect.js +51 -0
- package/dist/backend/llvm/lib-connect.js.map +1 -0
- package/dist/backend/llvm/lib-datagram.d.ts +2 -0
- package/dist/backend/llvm/lib-datagram.js +135 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -0
- package/dist/backend/llvm/lib-dispatch.js +50 -6
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +30 -18
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.d.ts +2 -0
- package/dist/backend/llvm/lib-http2.js +215 -0
- package/dist/backend/llvm/lib-http2.js.map +1 -0
- package/dist/backend/llvm/lib-lookup.d.ts +2 -0
- package/dist/backend/llvm/lib-lookup.js +39 -0
- package/dist/backend/llvm/lib-lookup.js.map +1 -0
- package/dist/backend/llvm/lib-network.js +25 -2
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +44 -19
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +162 -3
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +3 -2
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.d.ts +2 -0
- package/dist/backend/llvm/lib-test.js +34 -0
- package/dist/backend/llvm/lib-test.js.map +1 -0
- package/dist/backend/llvm/lib-tls.d.ts +2 -0
- package/dist/backend/llvm/lib-tls.js +82 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +10 -9
- package/dist/backend/llvm/shapes.js +42 -131
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/unsupported.d.ts +1 -0
- package/dist/backend/llvm/unsupported.js +1 -2
- package/dist/backend/llvm/unsupported.js.map +1 -1
- package/dist/backend/llvm/walkers.js +1 -7
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/mangle.d.ts +2 -2
- package/dist/backend/mangle.js +16 -5
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/{c/may-throw.d.ts → may-throw.d.ts} +1 -1
- package/dist/backend/{c/may-throw.js → may-throw.js} +51 -46
- package/dist/backend/may-throw.js.map +1 -0
- package/dist/backend/may-throw.test.d.ts +1 -0
- package/dist/backend/may-throw.test.js +58 -0
- package/dist/backend/may-throw.test.js.map +1 -0
- package/dist/backend/native-codegen-core.d.ts +22 -0
- package/dist/backend/native-codegen-core.js +44 -0
- package/dist/backend/native-codegen-core.js.map +1 -0
- package/dist/backend/native-codegen.d.ts +3 -19
- package/dist/backend/native-codegen.js +5 -44
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +2 -2
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +94 -0
- package/dist/backend/native-link-info-core.js +62 -0
- package/dist/backend/native-link-info-core.js.map +1 -0
- package/dist/backend/native-link-info.d.ts +3 -88
- package/dist/backend/native-link-info.js +12 -243
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +41 -146
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +12 -30
- package/dist/backend/native-toolchain.js +83 -233
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +77 -5
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +24 -0
- package/dist/backend/native-tools.js +33 -0
- package/dist/backend/native-tools.js.map +1 -0
- package/dist/backend/object-localize.js +19 -8
- package/dist/backend/object-localize.js.map +1 -1
- package/dist/backend/object-localize.test.js +22 -0
- package/dist/backend/object-localize.test.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +101 -0
- package/dist/backend/runtime-pack-core.js +172 -0
- package/dist/backend/runtime-pack-core.js.map +1 -0
- package/dist/backend/runtime-pack-native.d.ts +21 -0
- package/dist/backend/runtime-pack-native.js +73 -0
- package/dist/backend/runtime-pack-native.js.map +1 -0
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.d.ts +3 -83
- package/dist/backend/runtime-pack.js +8 -151
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +24 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.d.ts +22 -0
- package/dist/backend/target-diagnostics.js +108 -0
- package/dist/backend/target-diagnostics.js.map +1 -0
- package/dist/backend/target-platform.d.ts +15 -0
- package/dist/backend/target-platform.js +72 -0
- package/dist/backend/target-platform.js.map +1 -0
- package/dist/backend/targets.d.ts +13 -4
- package/dist/backend/targets.js +103 -34
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +72 -4
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/backend/toolchain-environment.d.ts +6 -0
- package/dist/backend/toolchain-environment.js +99 -0
- package/dist/backend/toolchain-environment.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +1 -9
- package/dist/backend/vendor-archives.js +2 -9
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +9 -0
- package/dist/backend/vendor-inputs.js +10 -0
- package/dist/backend/vendor-inputs.js.map +1 -0
- package/dist/backend/warm-cache.d.ts +3 -0
- package/dist/backend/warm-cache.js +41 -0
- package/dist/backend/warm-cache.js.map +1 -0
- package/dist/cli/command.d.ts +3 -0
- package/dist/cli/command.js +328 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/host.d.ts +24 -0
- package/dist/cli/host.js +2 -0
- package/dist/cli/host.js.map +1 -0
- package/dist/cli/output-options.d.ts +26 -0
- package/dist/cli/output-options.js +60 -0
- package/dist/cli/output-options.js.map +1 -0
- package/dist/cli/paths.d.ts +12 -0
- package/dist/cli/paths.js +42 -0
- package/dist/cli/paths.js.map +1 -0
- package/dist/cli/usage.d.ts +74 -0
- package/dist/cli/usage.js +86 -0
- package/dist/cli/usage.js.map +1 -0
- package/dist/cli/wasi-paths.d.ts +8 -0
- package/dist/cli/wasi-paths.js +41 -0
- package/dist/cli/wasi-paths.js.map +1 -0
- package/dist/cli/wasi-runner.d.ts +2 -0
- package/dist/cli/wasi-runner.js +28 -0
- package/dist/cli/wasi-runner.js.map +1 -0
- package/dist/compat/fetch-profile.js +37 -7
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +162 -0
- package/dist/compile-types.js +2 -0
- package/dist/compile-types.js.map +1 -0
- package/dist/coverage/report.js +11 -5
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +5 -2
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.js +5 -10
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +3 -4
- package/dist/executable/executable-cache.js +5 -6
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +16 -17
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +14 -0
- package/dist/executable/prepare.js +66 -0
- package/dist/executable/prepare.js.map +1 -0
- package/dist/ffi/ffi-manifest.d.ts +11 -4
- package/dist/ffi/ffi-manifest.js +170 -58
- package/dist/ffi/ffi-manifest.js.map +1 -1
- package/dist/ffi/ffi-manifest.test.d.ts +1 -0
- package/dist/ffi/ffi-manifest.test.js +111 -0
- package/dist/ffi/ffi-manifest.test.js.map +1 -0
- package/dist/format-integer.d.ts +3 -0
- package/dist/format-integer.js +14 -0
- package/dist/format-integer.js.map +1 -0
- package/dist/frontend/analysis.d.ts +5 -0
- package/dist/frontend/analysis.js +88 -0
- package/dist/frontend/analysis.js.map +1 -0
- package/dist/frontend/arguments-usage.d.ts +1 -3
- package/dist/frontend/arguments-usage.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +1 -1
- package/dist/frontend/builtin-modules.js +1 -1
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/cjs-lexer.d.ts +4 -25
- package/dist/frontend/cjs-lexer.js +6 -806
- package/dist/frontend/cjs-lexer.js.map +1 -1
- package/dist/frontend/cjs-resolve.d.ts +5 -0
- package/dist/frontend/cjs-resolve.js +429 -0
- package/dist/frontend/cjs-resolve.js.map +1 -0
- package/dist/frontend/cjs-syntax.d.ts +26 -0
- package/dist/frontend/cjs-syntax.js +806 -0
- package/dist/frontend/cjs-syntax.js.map +1 -0
- package/dist/frontend/comptime-node.d.ts +4 -0
- package/dist/frontend/comptime-node.js +16 -0
- package/dist/frontend/comptime-node.js.map +1 -0
- package/dist/frontend/comptime-node.test.d.ts +1 -0
- package/dist/frontend/comptime-node.test.js +37 -0
- package/dist/frontend/comptime-node.test.js.map +1 -0
- package/dist/frontend/dts-paths.d.ts +3 -4
- package/dist/frontend/dts-paths.js +15 -8
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/fork-target.js +2 -2
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/helper-tokens.d.ts +1 -0
- package/dist/frontend/helper-tokens.js +147 -0
- package/dist/frontend/helper-tokens.js.map +1 -0
- package/dist/frontend/helper-tokens.test.d.ts +1 -0
- package/dist/frontend/helper-tokens.test.js +35 -0
- package/dist/frontend/helper-tokens.test.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.d.ts +5 -0
- package/dist/frontend/inferred-js-diagnostics.js +69 -0
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.d.ts +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.js +58 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -0
- package/dist/frontend/input-tracker.d.ts +5 -2
- package/dist/frontend/input-tracker.js +24 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +23 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lib-contract.js +32 -24
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/literal-values.d.ts +4 -0
- package/dist/frontend/literal-values.js +21 -0
- package/dist/frontend/literal-values.js.map +1 -0
- package/dist/frontend/literal-values.test.d.ts +1 -0
- package/dist/frontend/literal-values.test.js +91 -0
- package/dist/frontend/literal-values.test.js.map +1 -0
- package/dist/frontend/lowering/abstract-equality.d.ts +1 -1
- package/dist/frontend/lowering/abstract-equality.js +3 -0
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +11 -6
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +4 -1
- package/dist/frontend/lowering/array-values.js +43 -1
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/callback-arg.js +1 -0
- package/dist/frontend/lowering/callback-arg.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +12 -0
- package/dist/frontend/lowering/class-callbacks.js +74 -0
- package/dist/frontend/lowering/class-callbacks.js.map +1 -0
- package/dist/frontend/lowering/class-construction.d.ts +12 -0
- package/dist/frontend/lowering/class-construction.js +156 -0
- package/dist/frontend/lowering/class-construction.js.map +1 -0
- package/dist/frontend/lowering/class-descriptors.d.ts +10 -0
- package/dist/frontend/lowering/class-descriptors.js +114 -0
- package/dist/frontend/lowering/class-descriptors.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +51 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1158 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.d.ts +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +93 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -0
- package/dist/frontend/lowering/class-instance-constructor.d.ts +7 -0
- package/dist/frontend/lowering/class-instance-constructor.js +67 -0
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -0
- package/dist/frontend/lowering/class-method-values.d.ts +13 -0
- package/dist/frontend/lowering/class-method-values.js +235 -0
- package/dist/frontend/lowering/class-method-values.js.map +1 -0
- package/dist/frontend/lowering/class-prototypes.d.ts +19 -0
- package/dist/frontend/lowering/class-prototypes.js +242 -0
- package/dist/frontend/lowering/class-prototypes.js.map +1 -0
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +66 -0
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -0
- package/dist/frontend/lowering/class-static-data.d.ts +6 -0
- package/dist/frontend/lowering/class-static-data.js +56 -0
- package/dist/frontend/lowering/class-static-data.js.map +1 -0
- package/dist/frontend/lowering/containers/buffer-numeric-methods.d.ts +4 -0
- package/dist/frontend/lowering/containers/buffer-numeric-methods.js +26 -0
- package/dist/frontend/lowering/containers/buffer-numeric-methods.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.d.ts +11 -7
- package/dist/frontend/lowering/containers/bytes.js +208 -163
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +2 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +58 -63
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.d.ts +7 -0
- package/dist/frontend/lowering/containers/string-replacement.js +217 -0
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -0
- package/dist/frontend/lowering/error-methods.d.ts +14 -0
- package/dist/frontend/lowering/error-methods.js +177 -0
- package/dist/frontend/lowering/error-methods.js.map +1 -0
- package/dist/frontend/lowering/expressions/global-symbols.d.ts +6 -0
- package/dist/frontend/lowering/expressions/global-symbols.js +11 -0
- package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -0
- package/dist/frontend/lowering/expressions/native-proxy.d.ts +7 -0
- package/dist/frontend/lowering/expressions/native-proxy.js +51 -0
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.d.ts +6 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js +132 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -0
- package/dist/frontend/lowering/expressions/object-literals.d.ts +8 -8
- package/dist/frontend/lowering/expressions/object-literals.js +509 -183
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -4
- package/dist/frontend/lowering/expressions/optional-chains.js +88 -24
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/try-lower-expression.js +1 -0
- package/dist/frontend/lowering/expressions/try-lower-expression.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.d.ts +8 -0
- package/dist/frontend/lowering/expressions/union-field-write.js +71 -0
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -0
- package/dist/frontend/lowering/function-context.d.ts +101 -0
- package/dist/frontend/lowering/function-context.js +109 -0
- package/dist/frontend/lowering/function-context.js.map +1 -0
- package/dist/frontend/lowering/generator-delegation.d.ts +7 -0
- package/dist/frontend/lowering/generator-delegation.js +85 -0
- package/dist/frontend/lowering/generator-delegation.js.map +1 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +11 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +143 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.d.ts +4 -1
- package/dist/frontend/lowering/lib-boundary.js +112 -20
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.test.d.ts +1 -0
- package/dist/frontend/lowering/lib-boundary.test.js +45 -0
- package/dist/frontend/lowering/lib-boundary.test.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
- package/dist/frontend/lowering/lower-assert.d.ts +1 -1
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +18 -0
- package/dist/frontend/lowering/lower-builtin-values.js +249 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +33 -46
- package/dist/frontend/lowering/lower-builtins.js +676 -365
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +28 -22
- package/dist/frontend/lowering/lower-calls.js +1660 -412
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +95 -57
- package/dist/frontend/lowering/lower-classes.js +1491 -404
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
- package/dist/frontend/lowering/lower-comptime.js +23 -32
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +36 -32
- package/dist/frontend/lowering/lower-containers.js +925 -181
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.d.ts +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -2
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.d.ts +1 -1
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +30 -1
- package/dist/frontend/lowering/lower-event-emitter.js +58 -26
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.d.ts +7 -1
- package/dist/frontend/lowering/lower-expando.js +14 -6
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +37 -13
- package/dist/frontend/lowering/lower-exprs.js +2163 -863
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +2 -5
- package/dist/frontend/lowering/lower-generators.js +88 -46
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +7 -0
- package/dist/frontend/lowering/lower-global-value.js +17 -0
- package/dist/frontend/lowering/lower-global-value.js.map +1 -0
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +17 -8
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +7 -8
- package/dist/frontend/lowering/lower-island.js +66 -33
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.d.ts +2 -2
- package/dist/frontend/lowering/lower-mixins.js +5 -3
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +1 -1
- package/dist/frontend/lowering/lower-modules.js +445 -39
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-modules.test.js +39 -0
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -0
- package/dist/frontend/lowering/lower-namespaces.d.ts +1 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.d.ts +1 -1
- package/dist/frontend/lowering/lower-node-module.js +13 -10
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +1 -1
- package/dist/frontend/lowering/lower-server.js +6 -10
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +17 -17
- package/dist/frontend/lowering/lower-stmts.js +855 -514
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +1 -1
- package/dist/frontend/lowering/lower-stream.js +20 -11
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +1 -1
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-url.d.ts +6 -0
- package/dist/frontend/lowering/lower-url.js +77 -0
- package/dist/frontend/lowering/lower-url.js.map +1 -0
- package/dist/frontend/lowering/lowerer.d.ts +140 -190
- package/dist/frontend/lowering/lowerer.js +1193 -712
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.d.ts +1 -0
- package/dist/frontend/lowering/lowerer.test.js +172 -0
- package/dist/frontend/lowering/lowerer.test.js.map +1 -0
- package/dist/frontend/lowering/native-ffi.d.ts +5 -0
- package/dist/frontend/lowering/native-ffi.js +40 -0
- package/dist/frontend/lowering/native-ffi.js.map +1 -0
- package/dist/frontend/lowering/object-enumeration-receiver.d.ts +7 -0
- package/dist/frontend/lowering/object-enumeration-receiver.js +33 -0
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.d.ts +8 -0
- package/dist/frontend/lowering/object-factory-new.js +68 -0
- package/dist/frontend/lowering/object-factory-new.js.map +1 -0
- package/dist/frontend/lowering/optional-arguments.js +6 -1
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +2 -1
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-locals.d.ts +14 -0
- package/dist/frontend/lowering/runtime-optional-locals.js +41 -0
- package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-locals.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-locals.test.js +85 -0
- package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.d.ts +8 -0
- package/dist/frontend/lowering/sanitize-class-types.js +79 -0
- package/dist/frontend/lowering/sanitize-class-types.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.d.ts +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js +60 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -0
- package/dist/frontend/lowering/static-this.d.ts +5 -1
- package/dist/frontend/lowering/static-this.js +28 -2
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/string-index.d.ts +7 -0
- package/dist/frontend/lowering/string-index.js +39 -0
- package/dist/frontend/lowering/string-index.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +10 -3
- package/dist/frontend/lowering/surfaces.js +86 -37
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +22 -0
- package/dist/frontend/lowering/symbol-fields.js +183 -0
- package/dist/frontend/lowering/symbol-fields.js.map +1 -0
- package/dist/frontend/lowering/symbol-methods.d.ts +7 -0
- package/dist/frontend/lowering/symbol-methods.js +30 -0
- package/dist/frontend/lowering/symbol-methods.js.map +1 -0
- package/dist/frontend/lowering/text-decoder-encoding.d.ts +12 -0
- package/dist/frontend/lowering/text-decoder-encoding.js +82 -0
- package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -0
- package/dist/frontend/lowering/text-decoder-encoding.test.d.ts +1 -0
- package/dist/frontend/lowering/text-decoder-encoding.test.js +38 -0
- package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -0
- package/dist/frontend/lowering/union-narrow.d.ts +9 -0
- package/dist/frontend/lowering/union-narrow.js +59 -0
- package/dist/frontend/lowering/union-narrow.js.map +1 -0
- package/dist/frontend/lowering/union-narrow.test.d.ts +1 -0
- package/dist/frontend/lowering/union-narrow.test.js +72 -0
- package/dist/frontend/lowering/union-narrow.test.js.map +1 -0
- package/dist/frontend/lowering/union-retag.d.ts +43 -0
- package/dist/frontend/lowering/union-retag.js +259 -0
- package/dist/frontend/lowering/union-retag.js.map +1 -0
- package/dist/frontend/lowering/union-retag.test.d.ts +1 -0
- package/dist/frontend/lowering/union-retag.test.js +405 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -0
- package/dist/frontend/lowering/unregistered-class-types.d.ts +14 -0
- package/dist/frontend/lowering/unregistered-class-types.js +94 -0
- package/dist/frontend/lowering/unregistered-class-types.js.map +1 -0
- package/dist/frontend/lowering/unregistered-class-types.test.d.ts +1 -0
- package/dist/frontend/lowering/unregistered-class-types.test.js +65 -0
- package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +40 -0
- package/dist/frontend/lowering/width-lift.js +2 -0
- package/dist/frontend/lowering/width-lift.js.map +1 -0
- package/dist/frontend/module-syntax.d.ts +58 -0
- package/dist/frontend/module-syntax.js +123 -0
- package/dist/frontend/module-syntax.js.map +1 -0
- package/dist/frontend/module-syntax.test.d.ts +1 -0
- package/dist/frontend/module-syntax.test.js +78 -0
- package/dist/frontend/module-syntax.test.js.map +1 -0
- package/dist/frontend/npm-fetch-analysis.d.ts +17 -0
- package/dist/frontend/npm-fetch-analysis.js +100 -0
- package/dist/frontend/npm-fetch-analysis.js.map +1 -0
- package/dist/frontend/npm-fetch-analysis.test.d.ts +1 -0
- package/dist/frontend/npm-fetch-analysis.test.js +107 -0
- package/dist/frontend/npm-fetch-analysis.test.js.map +1 -0
- package/dist/frontend/npm-fetch-node.d.ts +2 -0
- package/dist/frontend/npm-fetch-node.js +12 -0
- package/dist/frontend/npm-fetch-node.js.map +1 -0
- package/dist/frontend/npm-fetch-syntax.d.ts +6 -0
- package/dist/frontend/npm-fetch-syntax.js +207 -0
- package/dist/frontend/npm-fetch-syntax.js.map +1 -0
- package/dist/frontend/npm-node.d.ts +10 -0
- package/dist/frontend/npm-node.js +14 -0
- package/dist/frontend/npm-node.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.d.ts +8 -0
- package/dist/frontend/npm-static-bundled-cjs.js +236 -0
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-cjs.test.js +69 -0
- package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -0
- package/dist/frontend/npm-static-declaration-syntax.d.ts +57 -0
- package/dist/frontend/npm-static-declaration-syntax.js +944 -0
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -0
- package/dist/frontend/npm-static-declarations.d.ts +11 -39
- package/dist/frontend/npm-static-declarations.js +22 -561
- package/dist/frontend/npm-static-declarations.js.map +1 -1
- package/dist/frontend/npm-static-declarations.test.js +245 -6
- package/dist/frontend/npm-static-declarations.test.js.map +1 -1
- package/dist/frontend/npm-static-prune.d.ts +1 -1
- package/dist/frontend/npm-static-prune.js +121 -38
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-prune.test.js +9 -1
- package/dist/frontend/npm-static-prune.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.d.ts +4 -0
- package/dist/frontend/npm-static-rewrite-host.js +179 -0
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -0
- package/dist/frontend/npm-static-rewrite-syntax.d.ts +16 -0
- package/dist/frontend/npm-static-rewrite-syntax.js +905 -0
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -0
- package/dist/frontend/npm-static-rewrite.d.ts +0 -5
- package/dist/frontend/npm-static-rewrite.js +2 -1079
- package/dist/frontend/npm-static-rewrite.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.d.ts +5 -0
- package/dist/frontend/npm-static-subtyping.js +55 -0
- package/dist/frontend/npm-static-subtyping.js.map +1 -0
- package/dist/frontend/npm-static-subtyping.test.d.ts +1 -0
- package/dist/frontend/npm-static-subtyping.test.js +58 -0
- package/dist/frontend/npm-static-subtyping.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +7 -15
- package/dist/frontend/npm-static.js +19 -28
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.d.ts +8 -69
- package/dist/frontend/npm.js +21 -361
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.js +2 -2
- package/dist/frontend/npm.test.js.map +1 -1
- package/dist/frontend/pipeline-native.d.ts +6 -0
- package/dist/frontend/pipeline-native.js +32 -0
- package/dist/frontend/pipeline-native.js.map +1 -0
- package/dist/frontend/pipeline.d.ts +54 -0
- package/dist/frontend/pipeline.js +382 -0
- package/dist/frontend/pipeline.js.map +1 -0
- package/dist/frontend/pipeline.test.d.ts +1 -0
- package/dist/frontend/pipeline.test.js +77 -0
- package/dist/frontend/pipeline.test.js.map +1 -0
- package/dist/frontend/program-analysis.d.ts +10 -0
- package/dist/frontend/program-analysis.js +14 -0
- package/dist/frontend/program-analysis.js.map +1 -0
- package/dist/frontend/program-node.d.ts +9 -0
- package/dist/frontend/program-node.js +48 -0
- package/dist/frontend/program-node.js.map +1 -0
- package/dist/frontend/program.d.ts +39 -20
- package/dist/frontend/program.js +393 -189
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +105 -2
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/provenance-core.d.ts +9 -0
- package/dist/frontend/provenance-core.js +435 -0
- package/dist/frontend/provenance-core.js.map +1 -0
- package/dist/frontend/provenance.d.ts +0 -4
- package/dist/frontend/provenance.js +4 -459
- package/dist/frontend/provenance.js.map +1 -1
- package/dist/frontend/resolve.d.ts +3 -1
- package/dist/frontend/resolve.js +6 -3
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/runtime-resolve.d.ts +4 -3
- package/dist/frontend/runtime-resolve.js +22 -18
- package/dist/frontend/runtime-resolve.js.map +1 -1
- package/dist/frontend/runtime-resolve.test.js +53 -0
- package/dist/frontend/runtime-resolve.test.js.map +1 -1
- package/dist/frontend/services-node.d.ts +5 -0
- package/dist/frontend/services-node.js +19 -0
- package/dist/frontend/services-node.js.map +1 -0
- package/dist/frontend/services-node.test.d.ts +1 -0
- package/dist/frontend/services-node.test.js +70 -0
- package/dist/frontend/services-node.test.js.map +1 -0
- package/dist/frontend/services.d.ts +44 -0
- package/dist/frontend/services.js +90 -0
- package/dist/frontend/services.js.map +1 -0
- package/dist/frontend/services.test.d.ts +1 -0
- package/dist/frontend/services.test.js +174 -0
- package/dist/frontend/services.test.js.map +1 -0
- package/dist/frontend/ts7/adapter.d.ts +3 -3
- package/dist/frontend/ts7/adapter.js +14 -31
- package/dist/frontend/ts7/adapter.js.map +1 -1
- package/dist/frontend/ts7/api.d.ts +16 -0
- package/dist/frontend/ts7/api.js +24 -0
- package/dist/frontend/ts7/api.js.map +1 -0
- package/dist/frontend/ts7/ast-bytes.d.ts +31 -0
- package/dist/frontend/ts7/ast-bytes.js +137 -0
- package/dist/frontend/ts7/ast-bytes.js.map +1 -0
- package/dist/frontend/ts7/ast-bytes.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-bytes.test.js +73 -0
- package/dist/frontend/ts7/ast-bytes.test.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.generated.d.ts +353 -0
- package/dist/frontend/ts7/ast-guards.generated.js +1951 -0
- package/dist/frontend/ts7/ast-guards.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-guards.test.js +43 -0
- package/dist/frontend/ts7/ast-guards.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +194 -0
- package/dist/frontend/ts7/ast-node.js +448 -0
- package/dist/frontend/ts7/ast-node.js.map +1 -0
- package/dist/frontend/ts7/ast-node.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-node.test.js +266 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -0
- package/dist/frontend/ts7/ast-schema.generated.d.ts +503 -0
- package/dist/frontend/ts7/ast-schema.generated.js +1446 -0
- package/dist/frontend/ts7/ast-schema.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-text.d.ts +6 -0
- package/dist/frontend/ts7/ast-text.js +124 -0
- package/dist/frontend/ts7/ast-text.js.map +1 -0
- package/dist/frontend/ts7/ast-text.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-text.test.js +38 -0
- package/dist/frontend/ts7/ast-text.test.js.map +1 -0
- package/dist/frontend/ts7/ast-tokens.generated.d.ts +2 -0
- package/dist/frontend/ts7/ast-tokens.generated.js +155 -0
- package/dist/frontend/ts7/ast-tokens.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-types.d.ts +42 -0
- package/dist/frontend/ts7/ast-types.generated.d.ts +1615 -0
- package/dist/frontend/ts7/ast-types.generated.js +5 -0
- package/dist/frontend/ts7/ast-types.generated.js.map +1 -0
- package/dist/frontend/ts7/ast-types.js +3 -0
- package/dist/frontend/ts7/ast-types.js.map +1 -0
- package/dist/frontend/ts7/ast-wire.d.ts +58 -0
- package/dist/frontend/ts7/ast-wire.js +267 -0
- package/dist/frontend/ts7/ast-wire.js.map +1 -0
- package/dist/frontend/ts7/ast-wire.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-wire.test.js +151 -0
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -0
- package/dist/frontend/ts7/ast.d.ts +14 -14
- package/dist/frontend/ts7/ast.js +25 -18
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/census-check.js +1 -0
- package/dist/frontend/ts7/census-check.js.map +1 -1
- package/dist/frontend/ts7/checker-cache.d.ts +48 -0
- package/dist/frontend/ts7/checker-cache.js +92 -0
- package/dist/frontend/ts7/checker-cache.js.map +1 -0
- package/dist/frontend/ts7/checker.d.ts +19 -46
- package/dist/frontend/ts7/checker.js +231 -161
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.d.ts +1 -0
- package/dist/frontend/ts7/checker.test.js +335 -0
- package/dist/frontend/ts7/checker.test.js.map +1 -0
- package/dist/frontend/ts7/enums.d.ts +4 -27
- package/dist/frontend/ts7/enums.generated.d.ts +878 -0
- package/dist/frontend/ts7/enums.generated.js +1313 -0
- package/dist/frontend/ts7/enums.generated.js.map +1 -0
- package/dist/frontend/ts7/enums.js +4 -45
- package/dist/frontend/ts7/enums.js.map +1 -1
- package/dist/frontend/ts7/enums.test.d.ts +1 -0
- package/dist/frontend/ts7/enums.test.js +48 -0
- package/dist/frontend/ts7/enums.test.js.map +1 -0
- package/dist/frontend/ts7/native-api.d.ts +10 -0
- package/dist/frontend/ts7/native-api.js +10 -0
- package/dist/frontend/ts7/native-api.js.map +1 -0
- package/dist/frontend/ts7/native-host.d.ts +2 -0
- package/dist/frontend/ts7/native-host.js +11 -0
- package/dist/frontend/ts7/native-host.js.map +1 -0
- package/dist/frontend/ts7/native-process.d.ts +14 -0
- package/dist/frontend/ts7/native-process.js +62 -0
- package/dist/frontend/ts7/native-process.js.map +1 -0
- package/dist/frontend/ts7/program-adapter.d.ts +10 -98
- package/dist/frontend/ts7/program-adapter.js +16 -310
- package/dist/frontend/ts7/program-adapter.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +115 -0
- package/dist/frontend/ts7/program-host.js +347 -0
- package/dist/frontend/ts7/program-host.js.map +1 -0
- package/dist/frontend/ts7/program-host.test.d.ts +1 -0
- package/dist/frontend/ts7/program-host.test.js +207 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-api.d.ts +12 -0
- package/dist/frontend/ts7/rpc-api.js +23 -0
- package/dist/frontend/ts7/rpc-api.js.map +1 -0
- package/dist/frontend/ts7/rpc-client.d.ts +27 -0
- package/dist/frontend/ts7/rpc-client.js +102 -0
- package/dist/frontend/ts7/rpc-client.js.map +1 -0
- package/dist/frontend/ts7/rpc-client.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-client.test.js +133 -0
- package/dist/frontend/ts7/rpc-client.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-filesystem.d.ts +16 -0
- package/dist/frontend/ts7/rpc-filesystem.js +42 -0
- package/dist/frontend/ts7/rpc-filesystem.js.map +1 -0
- package/dist/frontend/ts7/rpc-filesystem.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-filesystem.test.js +89 -0
- package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-process.d.ts +2 -0
- package/dist/frontend/ts7/rpc-process.js +148 -0
- package/dist/frontend/ts7/rpc-process.js.map +1 -0
- package/dist/frontend/ts7/rpc-process.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-process.test.js +29 -0
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -0
- package/dist/frontend/ts7/rpc-wire.d.ts +46 -0
- package/dist/frontend/ts7/rpc-wire.js +195 -0
- package/dist/frontend/ts7/rpc-wire.js.map +1 -0
- package/dist/frontend/ts7/rpc-wire.test.d.ts +1 -0
- package/dist/frontend/ts7/rpc-wire.test.js +168 -0
- package/dist/frontend/ts7/rpc-wire.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-checker.d.ts +137 -0
- package/dist/frontend/ts7/semantic-checker.js +221 -0
- package/dist/frontend/ts7/semantic-checker.js.map +1 -0
- package/dist/frontend/ts7/semantic-checker.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-checker.test.js +119 -0
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-json.d.ts +5 -0
- package/dist/frontend/ts7/semantic-json.js +47 -0
- package/dist/frontend/ts7/semantic-json.js.map +1 -0
- package/dist/frontend/ts7/semantic-json.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-json.test.js +42 -0
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-model.d.ts +222 -0
- package/dist/frontend/ts7/semantic-model.js +423 -0
- package/dist/frontend/ts7/semantic-model.js.map +1 -0
- package/dist/frontend/ts7/semantic-model.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-model.test.js +322 -0
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-schema.generated.d.ts +283 -0
- package/dist/frontend/ts7/semantic-schema.generated.js +222 -0
- package/dist/frontend/ts7/semantic-schema.generated.js.map +1 -0
- package/dist/frontend/ts7/semantic-types.d.ts +5 -0
- package/dist/frontend/ts7/semantic-types.js +2 -0
- package/dist/frontend/ts7/semantic-types.js.map +1 -0
- package/dist/frontend/ts7/session-cache.d.ts +17 -0
- package/dist/frontend/ts7/session-cache.js +97 -0
- package/dist/frontend/ts7/session-cache.js.map +1 -0
- package/dist/frontend/ts7/session-cache.test.d.ts +1 -0
- package/dist/frontend/ts7/session-cache.test.js +87 -0
- package/dist/frontend/ts7/session-cache.test.js.map +1 -0
- package/dist/frontend/ts7/session-path.d.ts +18 -0
- package/dist/frontend/ts7/session-path.js +203 -0
- package/dist/frontend/ts7/session-path.js.map +1 -0
- package/dist/frontend/ts7/session-path.test.d.ts +1 -0
- package/dist/frontend/ts7/session-path.test.js +34 -0
- package/dist/frontend/ts7/session-path.test.js.map +1 -0
- package/dist/frontend/ts7/session-schema.generated.d.ts +167 -0
- package/dist/frontend/ts7/session-schema.generated.js +5 -0
- package/dist/frontend/ts7/session-schema.generated.js.map +1 -0
- package/dist/frontend/ts7/session-timing.d.ts +50 -0
- package/dist/frontend/ts7/session-timing.js +61 -0
- package/dist/frontend/ts7/session-timing.js.map +1 -0
- package/dist/frontend/ts7/session-timing.test.d.ts +1 -0
- package/dist/frontend/ts7/session-timing.test.js +52 -0
- package/dist/frontend/ts7/session-timing.test.js.map +1 -0
- package/dist/frontend/ts7/session.d.ts +105 -0
- package/dist/frontend/ts7/session.js +233 -0
- package/dist/frontend/ts7/session.js.map +1 -0
- package/dist/frontend/ts7/session.test.d.ts +1 -0
- package/dist/frontend/ts7/session.test.js +215 -0
- package/dist/frontend/ts7/session.test.js.map +1 -0
- package/dist/frontend/ts7/source-parser-node.d.ts +6 -0
- package/dist/frontend/ts7/source-parser-node.js +15 -0
- package/dist/frontend/ts7/source-parser-node.js.map +1 -0
- package/dist/frontend/ts7/source-parser.d.ts +25 -0
- package/dist/frontend/ts7/source-parser.js +96 -0
- package/dist/frontend/ts7/source-parser.js.map +1 -0
- package/dist/frontend/ts7/source-parser.test.d.ts +1 -0
- package/dist/frontend/ts7/source-parser.test.js +151 -0
- package/dist/frontend/ts7/source-parser.test.js.map +1 -0
- package/dist/frontend/ts7/syntax.d.ts +3 -0
- package/dist/frontend/ts7/syntax.js +4 -0
- package/dist/frontend/ts7/syntax.js.map +1 -0
- package/dist/frontend/tsc-codes.js +3 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +34 -18
- package/dist/frontend/type-mapper.js +552 -131
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +146 -2
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend/union-discriminants.d.ts +16 -0
- package/dist/frontend/union-discriminants.js +98 -0
- package/dist/frontend/union-discriminants.js.map +1 -0
- package/dist/frontend/union-discriminants.test.d.ts +1 -0
- package/dist/frontend/union-discriminants.test.js +182 -0
- package/dist/frontend/union-discriminants.test.js.map +1 -0
- package/dist/index.d.ts +7 -198
- package/dist/index.js +369 -1572
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +16 -4
- package/dist/ir/analysis.js +23 -4
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +15 -2
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/constant-tables.js +67 -49
- package/dist/ir/constant-tables.js.map +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/control-flow.d.ts +6 -0
- package/dist/ir/control-flow.js +142 -0
- package/dist/ir/control-flow.js.map +1 -0
- package/dist/ir/control-flow.test.d.ts +1 -0
- package/dist/ir/control-flow.test.js +113 -0
- package/dist/ir/control-flow.test.js.map +1 -0
- package/dist/ir/integer-loops.js +7 -18
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-ranges.js +53 -27
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/ir.d.ts +334 -176
- package/dist/ir/ir.js +710 -903
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +162 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/scalar-records.js +165 -134
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/serialize.d.ts +4 -2
- package/dist/ir/serialize.js +33 -14
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.d.ts +1 -0
- package/dist/ir/serialize.test.js +57 -0
- package/dist/ir/serialize.test.js.map +1 -0
- package/dist/ir/traverse.d.ts +41 -0
- package/dist/ir/traverse.js +660 -0
- package/dist/ir/traverse.js.map +1 -0
- package/dist/ir/traverse.test.d.ts +1 -0
- package/dist/ir/traverse.test.js +242 -0
- package/dist/ir/traverse.test.js.map +1 -0
- package/dist/ir/validate.js +2018 -1498
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +536 -2
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/cache-primitives.d.ts +2 -3
- package/dist/library/cache-primitives.js +4 -6
- package/dist/library/cache-primitives.js.map +1 -1
- package/dist/library/fence-eval.js +2 -2
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/int-infer.js +7 -6
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/library-cache.d.ts +3 -2
- package/dist/library/library-cache.js +5 -17
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +54 -41
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/library-profile.d.ts +3 -1
- package/dist/library/library-profile.js +15 -6
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.d.ts +15 -0
- package/dist/library/prepare.js +584 -0
- package/dist/library/prepare.js.map +1 -0
- package/dist/library/semantic-source.d.ts +1 -1
- package/dist/library/semantic-source.js +8 -6
- package/dist/library/semantic-source.js.map +1 -1
- package/dist/library/sidecar-validate.js +4 -4
- package/dist/library/sidecar-validate.js.map +1 -1
- package/dist/library/sidecar.d.ts +2 -0
- package/dist/library/sidecar.js +10 -3
- package/dist/library/sidecar.js.map +1 -1
- package/dist/native/cache.d.ts +11 -0
- package/dist/native/cache.js +113 -0
- package/dist/native/cache.js.map +1 -0
- package/dist/native/cache.test.d.ts +1 -0
- package/dist/native/cache.test.js +66 -0
- package/dist/native/cache.test.js.map +1 -0
- package/dist/native/cli.d.ts +1 -0
- package/dist/native/cli.js +112 -0
- package/dist/native/cli.js.map +1 -0
- package/dist/native/compiler.d.ts +15 -0
- package/dist/native/compiler.js +336 -0
- package/dist/native/compiler.js.map +1 -0
- package/dist/native/compiler.test.d.ts +1 -0
- package/dist/native/compiler.test.js +174 -0
- package/dist/native/compiler.test.js.map +1 -0
- package/dist/native/comptime.d.ts +5 -0
- package/dist/native/comptime.js +73 -0
- package/dist/native/comptime.js.map +1 -0
- package/dist/native/comptime.test.d.ts +1 -0
- package/dist/native/comptime.test.js +65 -0
- package/dist/native/comptime.test.js.map +1 -0
- package/dist/native/executable-cache.d.ts +26 -0
- package/dist/native/executable-cache.js +228 -0
- package/dist/native/executable-cache.js.map +1 -0
- package/dist/native/executable-cache.test.d.ts +1 -0
- package/dist/native/executable-cache.test.js +151 -0
- package/dist/native/executable-cache.test.js.map +1 -0
- package/dist/native/file-identity.d.ts +4 -0
- package/dist/native/file-identity.js +14 -0
- package/dist/native/file-identity.js.map +1 -0
- package/dist/native/file-identity.test.d.ts +1 -0
- package/dist/native/file-identity.test.js +43 -0
- package/dist/native/file-identity.test.js.map +1 -0
- package/dist/native/library.d.ts +22 -0
- package/dist/native/library.js +83 -0
- package/dist/native/library.js.map +1 -0
- package/dist/native/prepare.d.ts +21 -0
- package/dist/native/prepare.js +174 -0
- package/dist/native/prepare.js.map +1 -0
- package/dist/native/prepare.test.d.ts +1 -0
- package/dist/native/prepare.test.js +70 -0
- package/dist/native/prepare.test.js.map +1 -0
- package/dist/native/sanitizer.d.ts +11 -0
- package/dist/native/sanitizer.js +137 -0
- package/dist/native/sanitizer.js.map +1 -0
- package/dist/native/sanitizer.test.d.ts +1 -0
- package/dist/native/sanitizer.test.js +58 -0
- package/dist/native/sanitizer.test.js.map +1 -0
- package/dist/native/task.d.ts +4 -0
- package/dist/native/task.js +16 -0
- package/dist/native/task.js.map +1 -0
- package/dist/native/task.test.d.ts +1 -0
- package/dist/native/task.test.js +17 -0
- package/dist/native/task.test.js.map +1 -0
- package/dist/native/toolchain.d.ts +45 -0
- package/dist/native/toolchain.js +94 -0
- package/dist/native/toolchain.js.map +1 -0
- package/dist/native/toolchain.test.d.ts +1 -0
- package/dist/native/toolchain.test.js +85 -0
- package/dist/native/toolchain.test.js.map +1 -0
- package/dist/startup-cache.d.ts +1 -1
- package/dist/startup-cache.js +2 -5
- package/dist/startup-cache.js.map +1 -1
- package/dist/timing.d.ts +4 -0
- package/dist/timing.js +19 -0
- package/dist/timing.js.map +1 -0
- package/dist/wasi-paths.js +10 -7
- package/dist/wasi-paths.js.map +1 -1
- package/package.json +28 -19
- package/surface-manifest.json +107 -98
- package/dist/backend/c/async.d.ts +0 -171
- package/dist/backend/c/async.js +0 -1317
- package/dist/backend/c/async.js.map +0 -1
- package/dist/backend/c/c-emitter.d.ts +0 -536
- package/dist/backend/c/c-emitter.js +0 -1932
- package/dist/backend/c/c-emitter.js.map +0 -1
- package/dist/backend/c/exprs.d.ts +0 -15
- package/dist/backend/c/exprs.js +0 -8847
- package/dist/backend/c/exprs.js.map +0 -1
- package/dist/backend/c/island.d.ts +0 -45
- package/dist/backend/c/island.js +0 -281
- package/dist/backend/c/island.js.map +0 -1
- package/dist/backend/c/may-throw.js.map +0 -1
- package/dist/backend/c/shapes.d.ts +0 -142
- package/dist/backend/c/shapes.js +0 -603
- package/dist/backend/c/shapes.js.map +0 -1
- package/dist/backend/c/stmts.d.ts +0 -76
- package/dist/backend/c/stmts.js +0 -1108
- package/dist/backend/c/stmts.js.map +0 -1
- package/dist/backend/c/types.d.ts +0 -71
- package/dist/backend/c/types.js +0 -459
- package/dist/backend/c/types.js.map +0 -1
- package/dist/backend/c/types.test.js +0 -32
- package/dist/backend/c/types.test.js.map +0 -1
- package/dist/backend/c/walkers.d.ts +0 -134
- package/dist/backend/c/walkers.js +0 -1772
- package/dist/backend/c/walkers.js.map +0 -1
- /package/dist/backend/{c/types.test.d.ts → cycle-analysis.test.d.ts} +0 -0
package/dist/backend/llvm/dyn.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
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
|
-
import { dynDesc
|
|
5
|
+
import { dynDesc } from "../../ir/analysis.js";
|
|
4
6
|
import { mangleRecordNew, mangleRecordStruct } from "../mangle.js";
|
|
5
7
|
import { BlockBuilder } from "./blocks.js";
|
|
6
8
|
import { llvmCommentText } from "./common.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;
|
|
@@ -49,13 +49,41 @@ export class LlDyn {
|
|
|
49
49
|
dynFuncBoxes = new Map();
|
|
50
50
|
dynFuncAdapters = new Map();
|
|
51
51
|
promiseDynAdapters = new Map();
|
|
52
|
+
mapDynOps = new Map();
|
|
52
53
|
dynToStrFn = null;
|
|
53
54
|
caughtToDynFn = null;
|
|
55
|
+
helperMemo = new Map();
|
|
54
56
|
/** Emitted function definitions, in interning order. */
|
|
55
57
|
defs = [];
|
|
56
58
|
constructor(host) {
|
|
57
59
|
this.host = host;
|
|
58
60
|
}
|
|
61
|
+
/** Branch to a variant only after its literal discriminator and complete
|
|
62
|
+
* structure match. Use the same path for predicates and builders. */
|
|
63
|
+
unionArmMatch(B, def, tag, yes, no) {
|
|
64
|
+
const guard = def.discriminant?.cases.find((candidate) => candidate.tag === tag);
|
|
65
|
+
if (guard && def.discriminant) {
|
|
66
|
+
const structure = B.newLabel("du.shape");
|
|
67
|
+
const field = this.host.internLiteral(def.discriminant.field);
|
|
68
|
+
guard.values.forEach((value, index) => {
|
|
69
|
+
const suffix = typeof value === "string" ? "str" : typeof value === "boolean" ? "bool" : "num";
|
|
70
|
+
const ty = typeof value === "string" ? "ptr" : typeof value === "boolean" ? "i1" : "double";
|
|
71
|
+
const operand = typeof value === "string" ? this.host.internLiteral(value)
|
|
72
|
+
: typeof value === "boolean" ? String(value) : f64Lit(value);
|
|
73
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_field_eq_${suffix}(ptr, ptr, ${ty}${ty === "i1" ? " zeroext" : ""})`);
|
|
74
|
+
const matches = B.tmp();
|
|
75
|
+
B.line(`${matches} = call zeroext i1 @scr_dyn_field_eq_${suffix}(ptr %d, ptr ${field}, ${ty} ${operand})`);
|
|
76
|
+
const next = index === guard.values.length - 1 ? no : B.newLabel("du.literal");
|
|
77
|
+
B.condBr(matches, structure, next);
|
|
78
|
+
if (index !== guard.values.length - 1)
|
|
79
|
+
B.startBlock(next);
|
|
80
|
+
});
|
|
81
|
+
B.startBlock(structure);
|
|
82
|
+
}
|
|
83
|
+
const matches = B.tmp();
|
|
84
|
+
B.line(`${matches} = call zeroext i1 @${this.dynMatchHelper(def.arms[tag])}(ptr %d)`);
|
|
85
|
+
B.condBr(matches, yes, no);
|
|
86
|
+
}
|
|
59
87
|
get S() { return this.host.sizeType; }
|
|
60
88
|
abiOffset(native64, wasm32) {
|
|
61
89
|
return this.S === "i32" ? wasm32 : native64;
|
|
@@ -65,7 +93,29 @@ export class LlDyn {
|
|
|
65
93
|
}
|
|
66
94
|
/** The value LLVM type of a dynCheck result / toDyn operand for `t`. */
|
|
67
95
|
valTy(t) {
|
|
68
|
-
return t.kind === "f64" ? "double" : t.kind === "bool" ? "i1" : "ptr";
|
|
96
|
+
return t.kind === "f64" || t.kind === "date" ? "double" : t.kind === "bool" ? "i1" : "ptr";
|
|
97
|
+
}
|
|
98
|
+
collectionDynOps(t) {
|
|
99
|
+
const key = typeKey(t);
|
|
100
|
+
const prior = this.mapDynOps.get(key);
|
|
101
|
+
if (prior)
|
|
102
|
+
return prior;
|
|
103
|
+
const name = `sc_map_dyn_${this.mapDynOps.size}`;
|
|
104
|
+
this.mapDynOps.set(key, name);
|
|
105
|
+
const keyType = t.kind === "map" ? t.key : t.elem;
|
|
106
|
+
const valueType = t.kind === "map" ? t.value : { kind: "f64" };
|
|
107
|
+
const emitSlot = (type, role) => {
|
|
108
|
+
const ty = this.valTy(type);
|
|
109
|
+
const unpack = ty === "double" ? "bitcast i64 %slot to double" : ty === "i1" ? "trunc i64 %slot to i1" : "inttoptr i64 %slot to ptr";
|
|
110
|
+
const pack = ty === "double" ? "bitcast double %value to i64" : ty === "i1" ? "zext i1 %value to i64" : "ptrtoint ptr %value to i64";
|
|
111
|
+
const box = this.toDynHelper(type);
|
|
112
|
+
const unbox = this.dynCheckHelper(type);
|
|
113
|
+
this.defs.push(`define internal ptr @${name}_${role}_box(i64 %slot) ${FN_ATTRS} {`, ` %value = ${unpack}`, ` %result = call ptr @${box}(${ty} %value)`, ` ret ptr %result`, `}`, "", `define internal i64 @${name}_${role}_unbox(ptr %d) ${FN_ATTRS} {`, ` %value = call ${ty === "i1" ? "zeroext i1" : ty} @${unbox}(ptr %d, ptr null)`, ` %result = ${pack}`, ` ret i64 %result`, `}`, "");
|
|
114
|
+
};
|
|
115
|
+
emitSlot(keyType, "key");
|
|
116
|
+
emitSlot(valueType, "value");
|
|
117
|
+
this.defs.push(`@${name} = internal constant { ptr, ptr, ptr, ptr, ptr, ptr } { ptr ${this.host.cstr(key)}, ptr @${name}_key_box, ptr @${name}_key_unbox, ptr @${this.dynMatchHelper(keyType)}, ptr @${name}_value_box, ptr @${name}_value_unbox }`, "");
|
|
118
|
+
return name;
|
|
69
119
|
}
|
|
70
120
|
/* ── dyn node plumbing ─────────────────────────────────────────────── */
|
|
71
121
|
/** Loads a dyn node's kind tag (after the size_t rc word). */
|
|
@@ -118,12 +168,12 @@ export class LlDyn {
|
|
|
118
168
|
B.line(`${e} = load ptr, ptr ${p}`);
|
|
119
169
|
return e;
|
|
120
170
|
}
|
|
121
|
-
/** Object entry field addresses: entries + i*
|
|
122
|
-
*
|
|
171
|
+
/** Object entry field addresses: entries + i*sizeof(ScrDynEntry), with
|
|
172
|
+
* key, key_len, and value at offsets 0, 8, and 16 on 64-bit targets. */
|
|
123
173
|
entryAt(B, entries, i) {
|
|
124
174
|
const off = B.tmp();
|
|
125
175
|
const base = B.tmp();
|
|
126
|
-
B.line(`${off} = mul ${this.S} ${i}, ${this.abiOffset(
|
|
176
|
+
B.line(`${off} = mul ${this.S} ${i}, ${this.abiOffset(48, 24)} ; sizeof(ScrDynEntry)`);
|
|
127
177
|
B.line(`${base} = getelementptr inbounds i8, ptr ${entries}, ${this.S} ${off}`);
|
|
128
178
|
const key = B.tmp();
|
|
129
179
|
B.line(`${key} = load ptr, ptr ${base}`);
|
|
@@ -170,6 +220,13 @@ export class LlDyn {
|
|
|
170
220
|
B.line(`${t} = call ptr @scr_dyn_obj_get(ptr ${d}, ptr ${this.host.cstr(key)}, ${this.S} ${len}) ; .${llvmCommentText(key)}`);
|
|
171
221
|
return t;
|
|
172
222
|
}
|
|
223
|
+
/** Ordinary property lookup, including inherited data and accessors (+1). */
|
|
224
|
+
objReadLit(B, d, key) {
|
|
225
|
+
this.host.declare(`declare ptr @scr_dyn_obj_read(ptr, ptr, ${this.S})`);
|
|
226
|
+
const value = B.tmp();
|
|
227
|
+
B.line(`${value} = call ptr @scr_dyn_obj_read(ptr ${d}, ptr ${this.host.cstr(key)}, ${this.S} ${Buffer.byteLength(key, "utf8")})`);
|
|
228
|
+
return value;
|
|
229
|
+
}
|
|
173
230
|
/** Appends an ScrStr's bytes into a ScrJsonBuf (walkers' putScrStr). */
|
|
174
231
|
putScrStr(B, buf, s) {
|
|
175
232
|
this.host.declare(`declare void @scr_jb_putc(ptr, i8)`);
|
|
@@ -245,6 +302,29 @@ export class LlDyn {
|
|
|
245
302
|
B.startBlock(lk);
|
|
246
303
|
}
|
|
247
304
|
/* ── dynMatchHelper (walkers.ts, ported) ──────────────────────── */
|
|
305
|
+
/** Native subclass capsules also satisfy a checked base-class slot.
|
|
306
|
+
* Class layouts share their base prefix, so unboxing retains the same
|
|
307
|
+
* pointer and virtual dispatch still uses the object's original vtable. */
|
|
308
|
+
typedRefMatches(B, t) {
|
|
309
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_typed_ref_is(ptr, ptr, ${this.S})`);
|
|
310
|
+
const types = isDynTypedRefType(t)
|
|
311
|
+
? this.host.classSubtypes(t.className).map((className) => ({ kind: "object", className }))
|
|
312
|
+
: [t];
|
|
313
|
+
let matched = "false";
|
|
314
|
+
for (const type of types) {
|
|
315
|
+
const key = typeKey(type);
|
|
316
|
+
const next = B.tmp();
|
|
317
|
+
B.line(`${next} = call zeroext i1 @scr_dyn_typed_ref_is(ptr %d, ptr ${this.host.cstr(key)}, ${this.S} ${Buffer.byteLength(key, "utf8")})`);
|
|
318
|
+
if (matched === "false")
|
|
319
|
+
matched = next;
|
|
320
|
+
else {
|
|
321
|
+
const either = B.tmp();
|
|
322
|
+
B.line(`${either} = or i1 ${matched}, ${next}`);
|
|
323
|
+
matched = either;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return matched;
|
|
327
|
+
}
|
|
248
328
|
/** `sc_dm_<n>(ptr d) -> i1` — does this dyn fit T? Never throws. */
|
|
249
329
|
dynMatchHelper(t) {
|
|
250
330
|
const key = typeKey(t);
|
|
@@ -255,9 +335,7 @@ export class LlDyn {
|
|
|
255
335
|
this.dynMatchers.set(key, name);
|
|
256
336
|
const B = new BlockBuilder();
|
|
257
337
|
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")})`);
|
|
338
|
+
const matched = this.typedRefMatches(B, t);
|
|
261
339
|
const lRef = B.newLabel("dm.tr");
|
|
262
340
|
const lNext = B.newLabel("dm.nt");
|
|
263
341
|
B.condBr(matched, lRef, lNext);
|
|
@@ -290,6 +368,47 @@ export class LlDyn {
|
|
|
290
368
|
B.terminate(`ret i1 ${r}`);
|
|
291
369
|
};
|
|
292
370
|
switch (t.kind) {
|
|
371
|
+
case "date": {
|
|
372
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_native_date_is(ptr)`);
|
|
373
|
+
const r = B.tmp();
|
|
374
|
+
B.line(`${r} = call zeroext i1 @scr_dyn_native_date_is(ptr %d)`);
|
|
375
|
+
B.terminate(`ret i1 ${r}`);
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
case "url":
|
|
379
|
+
case "searchParams": {
|
|
380
|
+
const native = t.kind === "url" ? "url" : "search_params";
|
|
381
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_native_${native}_is(ptr)`);
|
|
382
|
+
const r = B.tmp();
|
|
383
|
+
B.line(`${r} = call zeroext i1 @scr_dyn_native_${native}_is(ptr %d)`);
|
|
384
|
+
B.terminate(`ret i1 ${r}`);
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
case "regex": {
|
|
388
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_native_regex_is(ptr)`);
|
|
389
|
+
const r = B.tmp();
|
|
390
|
+
B.line(`${r} = call zeroext i1 @scr_dyn_native_regex_is(ptr %d)`);
|
|
391
|
+
B.terminate(`ret i1 ${r}`);
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
case "map":
|
|
395
|
+
case "set": {
|
|
396
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_native_collection_is(ptr, i32, ptr)`);
|
|
397
|
+
const r = B.tmp();
|
|
398
|
+
const typed = t.kind === "map" ? t.key.kind !== "dyn" || t.value.kind !== "dyn" : t.elem.kind !== "dyn";
|
|
399
|
+
B.line(`${r} = call zeroext i1 @scr_dyn_native_collection_is(ptr %d, i32 ${t.kind === "map" ? 1 : 0}, ptr ${typed ? this.host.cstr(typeKey(t)) : "null"})`);
|
|
400
|
+
B.terminate(`ret i1 ${r}`);
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
case "bigint":
|
|
404
|
+
kindIs(DYN_KIND.BIGINT);
|
|
405
|
+
break;
|
|
406
|
+
case "promise":
|
|
407
|
+
kindIs(DYN_KIND.PROMISE);
|
|
408
|
+
break;
|
|
409
|
+
case "symbol":
|
|
410
|
+
kindIs(DYN_KIND.SYMBOL);
|
|
411
|
+
break;
|
|
293
412
|
case "f64":
|
|
294
413
|
kindIs(DYN_KIND.NUM);
|
|
295
414
|
break;
|
|
@@ -309,14 +428,27 @@ export class LlDyn {
|
|
|
309
428
|
// An `unknown` target: every dyn value fits, undefined included.
|
|
310
429
|
B.terminate(`ret i1 true`);
|
|
311
430
|
break;
|
|
312
|
-
case "bytes":
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
431
|
+
case "bytes": {
|
|
432
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_bytes_is(ptr, i32)`);
|
|
433
|
+
const matched = B.tmp();
|
|
434
|
+
B.line(`${matched} = call zeroext i1 @scr_dyn_bytes_is(ptr %d, i32 ${BYTES_ELEM_NUM[t.elem]})`);
|
|
435
|
+
B.terminate(`ret i1 ${matched}`);
|
|
316
436
|
break;
|
|
437
|
+
}
|
|
317
438
|
case "func":
|
|
318
439
|
kindIs(DYN_KIND.FUNC);
|
|
319
440
|
break;
|
|
441
|
+
case "classval": {
|
|
442
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_class_is(ptr, ptr)`);
|
|
443
|
+
const matched = B.tmp();
|
|
444
|
+
B.line(`${matched} = call zeroext i1 @scr_dyn_class_is(ptr %d, ptr ${this.host.cstr(key)})`);
|
|
445
|
+
B.terminate(`ret i1 ${matched}`);
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
case "generator":
|
|
449
|
+
// Only an exact native capsule carries these channel types.
|
|
450
|
+
B.terminate(`ret i1 false`);
|
|
451
|
+
break;
|
|
320
452
|
case "object": {
|
|
321
453
|
if (t.className !== "%Error") {
|
|
322
454
|
// Exact class capsules returned true before materialization.
|
|
@@ -376,28 +508,26 @@ export class LlDyn {
|
|
|
376
508
|
const isObj = B.tmp();
|
|
377
509
|
B.line(`${isObj} = icmp eq i32 ${kd}, ${DYN_KIND.OBJ}`);
|
|
378
510
|
const l0 = B.newLabel("dm.o");
|
|
379
|
-
|
|
511
|
+
let readable = isObj;
|
|
512
|
+
if (!shape.indexValue) {
|
|
513
|
+
const proxy = B.tmp();
|
|
514
|
+
readable = B.tmp();
|
|
515
|
+
B.line(`${proxy} = icmp eq i32 ${kd}, ${DYN_KIND.PROXY}`);
|
|
516
|
+
B.line(`${readable} = or i1 ${isObj}, ${proxy}`);
|
|
517
|
+
}
|
|
518
|
+
B.condBr(readable, l0, fail);
|
|
380
519
|
B.startBlock(l0);
|
|
381
520
|
// dyn ('unknown') fields match ANY value, present or missing.
|
|
382
521
|
for (const f of shape.fields) {
|
|
383
522
|
if (f.type.kind === "dyn")
|
|
384
523
|
continue;
|
|
385
|
-
const m = this.
|
|
386
|
-
const has = B.tmp();
|
|
387
|
-
B.line(`${has} = icmp ne ptr ${m}, null`);
|
|
388
|
-
const lTest = B.newLabel("dm.t");
|
|
524
|
+
const m = this.objReadLit(B, "%d", f.name);
|
|
389
525
|
const lNext = B.newLabel("dm.n");
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
// (a match); a PRESENT key must fit the union as usual.
|
|
393
|
-
B.condBr(has, lTest, lNext);
|
|
394
|
-
}
|
|
395
|
-
else {
|
|
396
|
-
B.condBr(has, lTest, fail);
|
|
397
|
-
}
|
|
398
|
-
B.startBlock(lTest);
|
|
526
|
+
this.host.declare(`declare void @scr_dyn_release(ptr)`);
|
|
527
|
+
this.pendingBail(B, "dm.read", () => B.line(`call void @scr_dyn_release(ptr ${m})`), "i1 false");
|
|
399
528
|
const ok = B.tmp();
|
|
400
529
|
B.line(`${ok} = call zeroext i1 @${this.dynMatchHelper(f.type)}(ptr ${m})`);
|
|
530
|
+
B.line(`call void @scr_dyn_release(ptr ${m})`);
|
|
401
531
|
B.condBr(ok, lNext, fail);
|
|
402
532
|
B.startBlock(lNext);
|
|
403
533
|
}
|
|
@@ -473,11 +603,9 @@ export class LlDyn {
|
|
|
473
603
|
throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
|
|
474
604
|
// Arms in canonical order; any full match answers true.
|
|
475
605
|
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)`);
|
|
606
|
+
for (let tag = 0; tag < def.arms.length; tag++) {
|
|
479
607
|
const ln = B.newLabel("dm.n");
|
|
480
|
-
|
|
608
|
+
this.unionArmMatch(B, def, tag, yes, ln);
|
|
481
609
|
B.startBlock(ln);
|
|
482
610
|
}
|
|
483
611
|
B.terminate(`ret i1 false`);
|
|
@@ -528,11 +656,28 @@ export class LlDyn {
|
|
|
528
656
|
host.declare(`declare void @scr_dyn_check_fail(ptr, ptr, ptr)`);
|
|
529
657
|
const want = host.cstr(dynDesc(t, this.host.recordsById, this.host.unionsById));
|
|
530
658
|
const B = new BlockBuilder();
|
|
659
|
+
if (t.kind === "classval") {
|
|
660
|
+
host.declare(`declare ptr @scr_dyn_class_check(ptr, ptr, ptr)`);
|
|
661
|
+
const checked = B.tmp();
|
|
662
|
+
B.line(`${checked} = call ptr @scr_dyn_class_check(ptr %d, ptr ${host.cstr(key)}, ptr %path)`);
|
|
663
|
+
B.terminate(`ret ptr ${checked}`);
|
|
664
|
+
this.defs.push(`define internal ptr @${name}(ptr %d, ptr %path) ${FN_ATTRS} {`, B.render(), `}`, ``);
|
|
665
|
+
return name;
|
|
666
|
+
}
|
|
531
667
|
if (isRefCounted(t) && t.kind !== "dyn") {
|
|
532
|
-
host.declare(`declare zeroext i1 @scr_dyn_typed_ref_is(ptr, ptr, ${host.sizeType})`);
|
|
533
668
|
host.declare(`declare ptr @scr_dyn_typed_ref_unbox(ptr)`);
|
|
534
|
-
|
|
535
|
-
|
|
669
|
+
if (t.kind === "object" && t.className === "%Error") {
|
|
670
|
+
host.declare(`declare ptr @scr_errdyn_err_of(ptr)`);
|
|
671
|
+
const error = B.tmp(), found = B.tmp();
|
|
672
|
+
B.line(`${error} = call ptr @scr_errdyn_err_of(ptr %d)`);
|
|
673
|
+
B.line(`${found} = icmp ne ptr ${error}, null`);
|
|
674
|
+
const yes = B.newLabel("dc.error"), next = B.newLabel("dc.noterror");
|
|
675
|
+
B.condBr(found, yes, next);
|
|
676
|
+
B.startBlock(yes);
|
|
677
|
+
B.terminate(`ret ptr ${error}`);
|
|
678
|
+
B.startBlock(next);
|
|
679
|
+
}
|
|
680
|
+
const matched = this.typedRefMatches(B, t);
|
|
536
681
|
const lRef = B.newLabel("dc.tr");
|
|
537
682
|
const lNext = B.newLabel("dc.nt");
|
|
538
683
|
B.condBr(matched, lRef, lNext);
|
|
@@ -544,7 +689,7 @@ export class LlDyn {
|
|
|
544
689
|
if (t.kind !== "union") {
|
|
545
690
|
host.declare(`declare ptr @scr_dyn_typed_ref_materialize(ptr)`);
|
|
546
691
|
host.declare(`declare ptr @scr_dyn_typed_ref_cached_cast(ptr, ptr, ${host.sizeType})`);
|
|
547
|
-
host.declare(`declare void @scr_dyn_typed_ref_cache_cast(ptr, ptr, ${host.sizeType}, ptr, ptr, ptr)`);
|
|
692
|
+
host.declare(`declare void @scr_dyn_typed_ref_cache_cast(ptr, ptr, ${host.sizeType}, ptr, ptr, ptr, i1)`);
|
|
548
693
|
host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
549
694
|
const rc = vAdapters(host, t);
|
|
550
695
|
const kind = this.kindOf(B, "%d");
|
|
@@ -642,7 +787,7 @@ export class LlDyn {
|
|
|
642
787
|
B.line(`call void ${releaseSym(host, t)}(ptr ${checked})`);
|
|
643
788
|
B.terminate(`ret ptr ${cached}`);
|
|
644
789
|
B.startBlock(lCache);
|
|
645
|
-
B.line(`call void @scr_dyn_typed_ref_cache_cast(ptr %d, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")}, ptr ${checked}, ptr ${rc.retain}, ptr ${rc.release})`);
|
|
790
|
+
B.line(`call void @scr_dyn_typed_ref_cache_cast(ptr %d, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")}, ptr ${checked}, ptr ${rc.retain}, ptr ${rc.release}, i1 ${traceAdapter(host, t) !== null ? "true" : "false"})`);
|
|
646
791
|
B.terminate(`ret ptr ${checked}`);
|
|
647
792
|
}
|
|
648
793
|
else {
|
|
@@ -650,7 +795,7 @@ export class LlDyn {
|
|
|
650
795
|
const lReturn = B.newLabel("dc.tr.ret");
|
|
651
796
|
B.condBr(ok, lCache, lReturn);
|
|
652
797
|
B.startBlock(lCache);
|
|
653
|
-
B.line(`call void @scr_dyn_typed_ref_cache_cast(ptr %d, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")}, ptr ${checked}, ptr ${rc.retain}, ptr ${rc.release})`);
|
|
798
|
+
B.line(`call void @scr_dyn_typed_ref_cache_cast(ptr %d, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")}, ptr ${checked}, ptr ${rc.retain}, ptr ${rc.release}, i1 ${traceAdapter(host, t) !== null ? "true" : "false"})`);
|
|
654
799
|
B.br(lReturn);
|
|
655
800
|
B.startBlock(lReturn);
|
|
656
801
|
B.terminate(`ret ptr ${checked}`);
|
|
@@ -672,6 +817,56 @@ export class LlDyn {
|
|
|
672
817
|
B.startBlock(lo);
|
|
673
818
|
};
|
|
674
819
|
switch (t.kind) {
|
|
820
|
+
case "date": {
|
|
821
|
+
host.declare(`declare double @scr_dyn_native_date_value(ptr)`);
|
|
822
|
+
const r = B.tmp();
|
|
823
|
+
B.line(`${r} = call double @scr_dyn_native_date_value(ptr %d)`);
|
|
824
|
+
B.terminate(`ret double ${r}`);
|
|
825
|
+
break;
|
|
826
|
+
}
|
|
827
|
+
case "url":
|
|
828
|
+
case "searchParams": {
|
|
829
|
+
const native = t.kind === "url" ? "url" : "search_params";
|
|
830
|
+
host.declare(`declare ptr @scr_dyn_native_${native}_check(ptr, ptr)`);
|
|
831
|
+
const r = B.tmp();
|
|
832
|
+
B.line(`${r} = call ptr @scr_dyn_native_${native}_check(ptr %d, ptr %path)`);
|
|
833
|
+
B.terminate(`ret ptr ${r}`);
|
|
834
|
+
break;
|
|
835
|
+
}
|
|
836
|
+
case "regex": {
|
|
837
|
+
host.declare(`declare ptr @scr_dyn_native_regex_check(ptr, ptr)`);
|
|
838
|
+
const r = B.tmp();
|
|
839
|
+
B.line(`${r} = call ptr @scr_dyn_native_regex_check(ptr %d, ptr %path)`);
|
|
840
|
+
B.terminate(`ret ptr ${r}`);
|
|
841
|
+
break;
|
|
842
|
+
}
|
|
843
|
+
case "map":
|
|
844
|
+
case "set": {
|
|
845
|
+
host.declare(`declare ptr @scr_dyn_native_collection_check(ptr, i32, ptr, ptr)`);
|
|
846
|
+
const r = B.tmp();
|
|
847
|
+
const typed = t.kind === "map" ? t.key.kind !== "dyn" || t.value.kind !== "dyn" : t.elem.kind !== "dyn";
|
|
848
|
+
B.line(`${r} = call ptr @scr_dyn_native_collection_check(ptr %d, i32 ${t.kind === "map" ? 1 : 0}, ptr ${typed ? host.cstr(typeKey(t)) : "null"}, ptr %path)`);
|
|
849
|
+
B.terminate(`ret ptr ${r}`);
|
|
850
|
+
break;
|
|
851
|
+
}
|
|
852
|
+
case "bigint": {
|
|
853
|
+
requireKind(DYN_KIND.BIGINT, "dc");
|
|
854
|
+
host.declare(`declare ptr @scr_bigint_retain(ptr)`);
|
|
855
|
+
const v = this.payloadOf(B, "%d", "ptr");
|
|
856
|
+
const r = B.tmp();
|
|
857
|
+
B.line(`${r} = call ptr @scr_bigint_retain(ptr ${v})`);
|
|
858
|
+
B.terminate(`ret ptr ${r}`);
|
|
859
|
+
break;
|
|
860
|
+
}
|
|
861
|
+
case "symbol": {
|
|
862
|
+
requireKind(DYN_KIND.SYMBOL, "dc");
|
|
863
|
+
host.declare(`declare ptr @scr_sym_retain(ptr)`);
|
|
864
|
+
const v = this.payloadOf(B, "%d", "ptr");
|
|
865
|
+
const r = B.tmp();
|
|
866
|
+
B.line(`${r} = call ptr @scr_sym_retain(ptr ${v})`);
|
|
867
|
+
B.terminate(`ret ptr ${r}`);
|
|
868
|
+
break;
|
|
869
|
+
}
|
|
675
870
|
case "f64": {
|
|
676
871
|
requireKind(DYN_KIND.NUM, "dc");
|
|
677
872
|
const v = this.payloadOf(B, "%d", "double");
|
|
@@ -702,16 +897,44 @@ export class LlDyn {
|
|
|
702
897
|
break;
|
|
703
898
|
}
|
|
704
899
|
case "bytes": {
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
900
|
+
host.declare(`declare zeroext i1 @scr_dyn_bytes_is(ptr, i32)`);
|
|
901
|
+
const matched = B.tmp();
|
|
902
|
+
B.line(`${matched} = call zeroext i1 @scr_dyn_bytes_is(ptr %d, i32 ${BYTES_ELEM_NUM[t.elem]})`);
|
|
903
|
+
const yes = B.newLabel("dc.bytes");
|
|
904
|
+
const no = B.newLabel("dc.bytes.fail");
|
|
905
|
+
B.condBr(matched, yes, no);
|
|
906
|
+
B.startBlock(no);
|
|
907
|
+
B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${want}, ptr %d)`);
|
|
908
|
+
B.terminate(`ret ptr null`);
|
|
909
|
+
B.startBlock(yes);
|
|
910
|
+
host.declare(`declare ptr @scr_dyn_bytes_unbox(ptr)`);
|
|
710
911
|
const r = B.tmp();
|
|
711
|
-
B.line(`${r} = call ptr @
|
|
912
|
+
B.line(`${r} = call ptr @scr_dyn_bytes_unbox(ptr %d)`);
|
|
712
913
|
B.terminate(`ret ptr ${r}`);
|
|
713
914
|
break;
|
|
714
915
|
}
|
|
916
|
+
case "generator":
|
|
917
|
+
B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${want}, ptr %d)`);
|
|
918
|
+
B.terminate(`ret ptr null`);
|
|
919
|
+
break;
|
|
920
|
+
case "promise": {
|
|
921
|
+
requireKind(DYN_KIND.PROMISE, "dc");
|
|
922
|
+
host.declare(`declare ptr @scr_promise_retain(ptr)`);
|
|
923
|
+
const promise = this.payloadOf(B, "%d", "ptr"), retained = B.tmp();
|
|
924
|
+
if (t.inner.kind !== "dyn") {
|
|
925
|
+
host.declare(`declare ptr @scr_promise_new()`);
|
|
926
|
+
host.declare(`declare void @scr_promise_race_add(ptr, ptr, ptr)`);
|
|
927
|
+
B.line(`${retained} = call ptr @scr_promise_new()`);
|
|
928
|
+
host.declare(`declare void @scr_promise_share_identity(ptr, ptr)`);
|
|
929
|
+
B.line(`call void @scr_promise_share_identity(ptr ${retained}, ptr ${promise})`);
|
|
930
|
+
B.line(`call void @scr_promise_race_add(ptr ${retained}, ptr ${promise}, ptr @${host.dynPromiseAdapter(t.inner)})`);
|
|
931
|
+
B.terminate(`ret ptr ${retained}`);
|
|
932
|
+
break;
|
|
933
|
+
}
|
|
934
|
+
B.line(`${retained} = call ptr @scr_promise_retain(ptr ${promise})`);
|
|
935
|
+
B.terminate(`ret ptr ${retained}`);
|
|
936
|
+
break;
|
|
937
|
+
}
|
|
715
938
|
case "object": {
|
|
716
939
|
// The %Error extraction (an instanceof-Error narrow on unknown):
|
|
717
940
|
// validate the checked-dynamic tree's error encoding — the reserved "%error" marker
|
|
@@ -826,64 +1049,46 @@ export class LlDyn {
|
|
|
826
1049
|
B.terminate(`ret ptr %r0`);
|
|
827
1050
|
break;
|
|
828
1051
|
}
|
|
829
|
-
|
|
1052
|
+
if (shape.indexValue)
|
|
1053
|
+
requireKind(DYN_KIND.OBJ, "dcr");
|
|
1054
|
+
else {
|
|
1055
|
+
const kind = this.kindOf(B, "%d"), object = B.tmp(), proxy = B.tmp(), readable = B.tmp();
|
|
1056
|
+
B.line(`${object} = icmp eq i32 ${kind}, ${DYN_KIND.OBJ}`);
|
|
1057
|
+
B.line(`${proxy} = icmp eq i32 ${kind}, ${DYN_KIND.PROXY}`);
|
|
1058
|
+
B.line(`${readable} = or i1 ${object}, ${proxy}`);
|
|
1059
|
+
const ok = B.newLabel("dcr.object"), fail = B.newLabel("dcr.fail");
|
|
1060
|
+
B.condBr(readable, ok, fail);
|
|
1061
|
+
B.startBlock(fail);
|
|
1062
|
+
B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${want}, ptr %d)`);
|
|
1063
|
+
B.terminate(`ret ptr null`);
|
|
1064
|
+
B.startBlock(ok);
|
|
1065
|
+
}
|
|
1066
|
+
if (shape.fields.length === 0 && !shape.indexValue) {
|
|
1067
|
+
const sourceAccessor = `${this.toDynHelper(t)}_source_access`;
|
|
1068
|
+
const rc = vAdapters(host, t);
|
|
1069
|
+
host.declare(`declare ptr @scr_dyn_obj_source_cast(ptr, ptr, ptr)`);
|
|
1070
|
+
const source = B.tmp();
|
|
1071
|
+
const found = B.tmp();
|
|
1072
|
+
const lSource = B.newLabel("dcr.source");
|
|
1073
|
+
const lCopy = B.newLabel("dcr.copy");
|
|
1074
|
+
B.line(`${source} = call ptr @scr_dyn_obj_source_cast(ptr %d, ptr @${sourceAccessor}, ptr ${rc.retain})`);
|
|
1075
|
+
B.line(`${found} = icmp ne ptr ${source}, null`);
|
|
1076
|
+
B.condBr(found, lSource, lCopy);
|
|
1077
|
+
B.startBlock(lSource);
|
|
1078
|
+
B.terminate(`ret ptr ${source}`);
|
|
1079
|
+
B.startBlock(lCopy);
|
|
1080
|
+
}
|
|
830
1081
|
B.line(`%r0 = call ptr @${mangleRecordNew(t.shapeId)}()`);
|
|
831
1082
|
for (const f of shape.fields) {
|
|
832
|
-
const
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
B.line(`${has} = icmp ne ptr ${m}, null`);
|
|
842
|
-
const sel = B.tmp();
|
|
843
|
-
const u = this.undef(B);
|
|
844
|
-
B.line(`${sel} = select i1 ${has}, ptr ${m}, ptr ${u}`);
|
|
845
|
-
const value = B.tmp();
|
|
846
|
-
B.line(`${value} = call ptr @${this.dynCheckHelper(f.type)}(ptr ${sel}, ptr ${pathSlot})`);
|
|
847
|
-
storeInto(f.name, f.type, value);
|
|
848
|
-
}
|
|
849
|
-
else if (utag >= 0 && f.type.kind === "union") {
|
|
850
|
-
const unit = host.unitInstanceRef(f.type.unionId, utag);
|
|
851
|
-
const has = B.tmp();
|
|
852
|
-
B.line(`${has} = icmp ne ptr ${m}, null`);
|
|
853
|
-
const lp = B.newLabel("dcr.p");
|
|
854
|
-
const la = B.newLabel("dcr.a");
|
|
855
|
-
const lj = B.newLabel("dcr.j");
|
|
856
|
-
B.condBr(has, lp, la);
|
|
857
|
-
B.startBlock(la);
|
|
858
|
-
storeInto(f.name, f.type, unit); // absent key -> the undefined arm
|
|
859
|
-
B.br(lj);
|
|
860
|
-
B.startBlock(lp);
|
|
861
|
-
setPath(f.name, "0");
|
|
862
|
-
const v = B.tmp();
|
|
863
|
-
B.line(`${v} = call ptr @${this.dynCheckHelper(f.type)}(ptr ${m}, ptr ${pathSlot})`);
|
|
864
|
-
storeInto(f.name, f.type, v);
|
|
865
|
-
this.pendingBail(B, "dcr", releaseR, "ptr null");
|
|
866
|
-
B.br(lj);
|
|
867
|
-
B.startBlock(lj);
|
|
868
|
-
}
|
|
869
|
-
else {
|
|
870
|
-
const has = B.tmp();
|
|
871
|
-
B.line(`${has} = icmp ne ptr ${m}, null`);
|
|
872
|
-
const lp = B.newLabel("dcr.p");
|
|
873
|
-
const la = B.newLabel("dcr.a");
|
|
874
|
-
B.condBr(has, lp, la);
|
|
875
|
-
B.startBlock(la);
|
|
876
|
-
setPath(f.name, "0");
|
|
877
|
-
B.line(`call void @scr_dyn_check_fail(ptr ${pathSlot}, ptr ${fieldWant}, ptr null)`);
|
|
878
|
-
releaseR();
|
|
879
|
-
B.terminate(`ret ptr null`);
|
|
880
|
-
B.startBlock(lp);
|
|
881
|
-
setPath(f.name, "0");
|
|
882
|
-
const v = B.tmp();
|
|
883
|
-
B.line(`${v} = call ${this.valTy(f.type)} @${this.dynCheckHelper(f.type)}(ptr ${m}, ptr ${pathSlot})`);
|
|
884
|
-
storeInto(f.name, f.type, v);
|
|
885
|
-
this.pendingBail(B, "dcr", releaseR, "ptr null");
|
|
886
|
-
}
|
|
1083
|
+
const m = this.objReadLit(B, "%d", f.name);
|
|
1084
|
+
host.declare(`declare void @scr_dyn_release(ptr)`);
|
|
1085
|
+
this.pendingBail(B, "dcr.read", () => { B.line(`call void @scr_dyn_release(ptr ${m})`); releaseR(); }, "ptr null");
|
|
1086
|
+
setPath(f.name, "0");
|
|
1087
|
+
const value = B.tmp();
|
|
1088
|
+
B.line(`${value} = call ${this.valTy(f.type)} @${this.dynCheckHelper(f.type)}(ptr ${m}, ptr ${pathSlot})`);
|
|
1089
|
+
B.line(`call void @scr_dyn_release(ptr ${m})`);
|
|
1090
|
+
storeInto(f.name, f.type, value);
|
|
1091
|
+
this.pendingBail(B, "dcr", releaseR, "ptr null");
|
|
887
1092
|
}
|
|
888
1093
|
// Index-signature shapes CAPTURE undeclared keys into the
|
|
889
1094
|
// overflow map.
|
|
@@ -994,12 +1199,9 @@ export class LlDyn {
|
|
|
994
1199
|
// Arms in CANONICAL order, first FULL match wins. The matched
|
|
995
1200
|
// arm's builder can no longer fail.
|
|
996
1201
|
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
1202
|
const lHit = B.newLabel("dcu.h");
|
|
1001
1203
|
const lNext = B.newLabel("dcu.n");
|
|
1002
|
-
|
|
1204
|
+
this.unionArmMatch(B, def, i, lHit, lNext);
|
|
1003
1205
|
B.startBlock(lHit);
|
|
1004
1206
|
if (arm.kind === "undefinedT" || arm.kind === "nullT") {
|
|
1005
1207
|
// A matched unit arm builds nothing: THE interned immortal
|
|
@@ -1039,7 +1241,7 @@ export class LlDyn {
|
|
|
1039
1241
|
// live narrowed alias).
|
|
1040
1242
|
host.declare(`declare ptr @scr_dyn_typed_ref_materialize(ptr)`);
|
|
1041
1243
|
host.declare(`declare ptr @scr_dyn_typed_ref_cached_cast(ptr, ptr, ${host.sizeType})`);
|
|
1042
|
-
host.declare(`declare void @scr_dyn_typed_ref_cache_cast(ptr, ptr, ${host.sizeType}, ptr, ptr, ptr)`);
|
|
1244
|
+
host.declare(`declare void @scr_dyn_typed_ref_cache_cast(ptr, ptr, ${host.sizeType}, ptr, ptr, ptr, i1)`);
|
|
1043
1245
|
host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
1044
1246
|
host.declare(`declare void @scr_union_release(ptr)`);
|
|
1045
1247
|
const rc = vAdapters(host, t);
|
|
@@ -1078,13 +1280,14 @@ export class LlDyn {
|
|
|
1078
1280
|
const lCache = B.newLabel("dcu.put");
|
|
1079
1281
|
B.condBr(hasCached, lRefresh, lCache);
|
|
1080
1282
|
B.startBlock(lRefresh);
|
|
1081
|
-
[
|
|
1283
|
+
const fields = [
|
|
1082
1284
|
[1, "i32", "tag"],
|
|
1083
1285
|
[2, "ptr", "retain"],
|
|
1084
1286
|
[3, "ptr", "release"],
|
|
1085
1287
|
[4, "ptr", "trace"],
|
|
1086
1288
|
[5, "i64", "slot"],
|
|
1087
|
-
]
|
|
1289
|
+
];
|
|
1290
|
+
fields.forEach(([index, fieldType, fieldName]) => {
|
|
1088
1291
|
const cachedPtr = B.tmp();
|
|
1089
1292
|
const checkedPtr = B.tmp();
|
|
1090
1293
|
const oldValue = B.tmp();
|
|
@@ -1099,7 +1302,7 @@ export class LlDyn {
|
|
|
1099
1302
|
B.line(`call void @scr_union_release(ptr ${checked})`);
|
|
1100
1303
|
B.terminate(`ret ptr ${cached}`);
|
|
1101
1304
|
B.startBlock(lCache);
|
|
1102
|
-
B.line(`call void @scr_dyn_typed_ref_cache_cast(ptr %d, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")}, ptr ${checked}, ptr ${rc.retain}, ptr ${rc.release})`);
|
|
1305
|
+
B.line(`call void @scr_dyn_typed_ref_cache_cast(ptr %d, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")}, ptr ${checked}, ptr ${rc.retain}, ptr ${rc.release}, i1 ${traceAdapter(host, t) !== null ? "true" : "false"})`);
|
|
1103
1306
|
B.terminate(`ret ptr ${checked}`);
|
|
1104
1307
|
B.startBlock(lFail);
|
|
1105
1308
|
B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${want}, ptr %d)`);
|
|
@@ -1140,11 +1343,20 @@ export class LlDyn {
|
|
|
1140
1343
|
host.declare(`declare ptr @scr_box_new_obj(ptr, ptr, ptr)`);
|
|
1141
1344
|
host.declare(`declare void @scr_box_set_ref(ptr, ptr)`);
|
|
1142
1345
|
host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
|
|
1346
|
+
host.declare(`declare void @scr_dyn_trace_v(ptr, ptr, ptr)`);
|
|
1143
1347
|
host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
1144
1348
|
const a = B.tmp();
|
|
1145
1349
|
B.line(`${a} = call ptr @scr_closure_new(ptr @${adapter}, ${host.sizeType} 1)`);
|
|
1350
|
+
const sourceClosure = this.payloadOf(B, "%d", "ptr");
|
|
1351
|
+
const sourceKind = B.tmp();
|
|
1352
|
+
const functionKind = B.tmp();
|
|
1353
|
+
const targetKind = B.tmp();
|
|
1354
|
+
B.line(`${sourceKind} = getelementptr inbounds %ScrClosure, ptr ${sourceClosure}, i64 0, i32 4`);
|
|
1355
|
+
B.line(`${functionKind} = load i32, ptr ${sourceKind}`);
|
|
1356
|
+
B.line(`${targetKind} = getelementptr inbounds %ScrClosure, ptr ${a}, i64 0, i32 4`);
|
|
1357
|
+
B.line(`store i32 ${functionKind}, ptr ${targetKind}`);
|
|
1146
1358
|
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
|
|
1359
|
+
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
1360
|
const capp = B.tmp();
|
|
1149
1361
|
B.line(`${capp} = getelementptr inbounds %ScrClosure, ptr ${a}, i64 1 ; caps[0]`);
|
|
1150
1362
|
B.line(`store ptr ${box}, ptr ${capp}`);
|
|
@@ -1186,6 +1398,48 @@ export class LlDyn {
|
|
|
1186
1398
|
const B = new BlockBuilder();
|
|
1187
1399
|
let sourceAccessor = null;
|
|
1188
1400
|
switch (t.kind) {
|
|
1401
|
+
case "url":
|
|
1402
|
+
case "searchParams": {
|
|
1403
|
+
const native = t.kind === "url" ? "url" : "search_params";
|
|
1404
|
+
host.declare(`declare ptr @scr_dyn_native_${native}(ptr)`);
|
|
1405
|
+
const r = B.tmp();
|
|
1406
|
+
B.line(`${r} = call ptr @scr_dyn_native_${native}(ptr %v)`);
|
|
1407
|
+
B.terminate(`ret ptr ${r}`);
|
|
1408
|
+
break;
|
|
1409
|
+
}
|
|
1410
|
+
case "regex": {
|
|
1411
|
+
host.declare(`declare ptr @scr_dyn_native_regex(ptr)`);
|
|
1412
|
+
const r = B.tmp();
|
|
1413
|
+
B.line(`${r} = call ptr @scr_dyn_native_regex(ptr %v)`);
|
|
1414
|
+
B.terminate(`ret ptr ${r}`);
|
|
1415
|
+
break;
|
|
1416
|
+
}
|
|
1417
|
+
case "map":
|
|
1418
|
+
case "set": {
|
|
1419
|
+
host.declare(`declare ptr @scr_dyn_native_${t.kind}(ptr)`);
|
|
1420
|
+
if (t.kind === "map" ? t.key.kind !== "dyn" || t.value.kind !== "dyn" : t.elem.kind !== "dyn") {
|
|
1421
|
+
host.declare(`declare void @scr_map_dyn_attach(ptr, ptr)`);
|
|
1422
|
+
B.line(`call void @scr_map_dyn_attach(ptr %v, ptr @${this.collectionDynOps(t)})`);
|
|
1423
|
+
}
|
|
1424
|
+
const r = B.tmp();
|
|
1425
|
+
B.line(`${r} = call ptr @scr_dyn_native_${t.kind}(ptr %v)`);
|
|
1426
|
+
B.terminate(`ret ptr ${r}`);
|
|
1427
|
+
break;
|
|
1428
|
+
}
|
|
1429
|
+
case "bigint": {
|
|
1430
|
+
host.declare(`declare ptr @scr_dyn_new_bigint(ptr)`);
|
|
1431
|
+
const r = B.tmp();
|
|
1432
|
+
B.line(`${r} = call ptr @scr_dyn_new_bigint(ptr %v)`);
|
|
1433
|
+
B.terminate(`ret ptr ${r}`);
|
|
1434
|
+
break;
|
|
1435
|
+
}
|
|
1436
|
+
case "symbol": {
|
|
1437
|
+
host.declare(`declare ptr @scr_dyn_new_symbol(ptr)`);
|
|
1438
|
+
const r = B.tmp();
|
|
1439
|
+
B.line(`${r} = call ptr @scr_dyn_new_symbol(ptr %v)`);
|
|
1440
|
+
B.terminate(`ret ptr ${r}`);
|
|
1441
|
+
break;
|
|
1442
|
+
}
|
|
1189
1443
|
case "f64": {
|
|
1190
1444
|
host.declare(`declare ptr @scr_dyn_new_num(double)`);
|
|
1191
1445
|
const r = B.tmp();
|
|
@@ -1207,9 +1461,22 @@ export class LlDyn {
|
|
|
1207
1461
|
B.terminate(`ret ptr ${r}`);
|
|
1208
1462
|
break;
|
|
1209
1463
|
}
|
|
1464
|
+
case "generator": {
|
|
1465
|
+
// Keep the suspended fiber and its channels by identity. Member
|
|
1466
|
+
// calls are generated from the exact capsule key by the frontend.
|
|
1467
|
+
const rc = vAdapters(host, t);
|
|
1468
|
+
const r = B.tmp();
|
|
1469
|
+
const snapshot = `${name}_snapshot`;
|
|
1470
|
+
const message = "property reflection on a native generator through an untyped value is not supported yet";
|
|
1471
|
+
host.declare(`declare void @scr_throw_error_msg_code(i32, ptr, ${host.sizeType}, ptr)`);
|
|
1472
|
+
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`, `}`, ``);
|
|
1473
|
+
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)`);
|
|
1474
|
+
B.terminate(`ret ptr ${r}`);
|
|
1475
|
+
break;
|
|
1476
|
+
}
|
|
1210
1477
|
case "object": {
|
|
1211
1478
|
const className = t.className;
|
|
1212
|
-
if (className
|
|
1479
|
+
if (host.isErrorClass(className)) {
|
|
1213
1480
|
host.declare(`declare ptr @scr_dyn_from_error(ptr)`);
|
|
1214
1481
|
const r = B.tmp();
|
|
1215
1482
|
B.line(`${r} = call ptr @scr_dyn_from_error(ptr %v)`);
|
|
@@ -1222,9 +1489,8 @@ export class LlDyn {
|
|
|
1222
1489
|
const adapter = host.liveDynRefAdapter(t);
|
|
1223
1490
|
const rc = vAdapters(host, t);
|
|
1224
1491
|
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
1492
|
const r = B.tmp();
|
|
1227
|
-
B.line(`${r} = call ptr
|
|
1493
|
+
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
1494
|
B.terminate(`ret ptr ${r}`);
|
|
1229
1495
|
break;
|
|
1230
1496
|
}
|
|
@@ -1233,6 +1499,13 @@ export class LlDyn {
|
|
|
1233
1499
|
B.terminate(`ret ptr ${r}`);
|
|
1234
1500
|
break;
|
|
1235
1501
|
}
|
|
1502
|
+
case "classval": {
|
|
1503
|
+
host.declare(`declare ptr @scr_dyn_new_class(ptr, ptr)`);
|
|
1504
|
+
const r = B.tmp();
|
|
1505
|
+
B.line(`${r} = call ptr @scr_dyn_new_class(ptr %v, ptr ${host.cstr(key)})`);
|
|
1506
|
+
B.terminate(`ret ptr ${r}`);
|
|
1507
|
+
break;
|
|
1508
|
+
}
|
|
1236
1509
|
case "func": {
|
|
1237
1510
|
const r = B.tmp();
|
|
1238
1511
|
B.line(`${r} = call ptr @${this.dynFuncBoxHelper(t)}(ptr %v, ptr null)`);
|
|
@@ -1240,11 +1513,9 @@ export class LlDyn {
|
|
|
1240
1513
|
break;
|
|
1241
1514
|
}
|
|
1242
1515
|
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)`);
|
|
1516
|
+
host.declare(`declare ptr @scr_dyn_new_bytes(ptr)`);
|
|
1246
1517
|
const r = B.tmp();
|
|
1247
|
-
B.line(`${r} = call ptr @
|
|
1518
|
+
B.line(`${r} = call ptr @scr_dyn_new_bytes(ptr %v)`);
|
|
1248
1519
|
B.terminate(`ret ptr ${r}`);
|
|
1249
1520
|
break;
|
|
1250
1521
|
}
|
|
@@ -1268,7 +1539,7 @@ export class LlDyn {
|
|
|
1268
1539
|
host.declare(`declare void @scr_dyn_obj_set(ptr, ptr, ${host.sizeType}, ptr)`);
|
|
1269
1540
|
// CYCLE-CAPABLE shapes guard the deep copy: enter TRAPS on a value
|
|
1270
1541
|
// already being converted (a cyclic value has no finite dyn copy —
|
|
1271
|
-
// SEMANTICS.md
|
|
1542
|
+
// SEMANTICS.md).
|
|
1272
1543
|
const cyclicRec = traceAdapter(host, t) !== null;
|
|
1273
1544
|
if (cyclicRec) {
|
|
1274
1545
|
host.declare(`declare void @scr_dyn_from_enter(ptr)`);
|
|
@@ -1290,12 +1561,14 @@ export class LlDyn {
|
|
|
1290
1561
|
}
|
|
1291
1562
|
if (cyclicRec)
|
|
1292
1563
|
B.line(`call void @scr_dyn_from_leave()`);
|
|
1564
|
+
host.declare(`declare ptr @scr_dyn_mark_snapshot(ptr)`);
|
|
1565
|
+
B.line(`call ptr @scr_dyn_mark_snapshot(ptr ${d})`);
|
|
1293
1566
|
B.terminate(`ret ptr ${d}`);
|
|
1294
1567
|
break;
|
|
1295
1568
|
}
|
|
1296
1569
|
const d = B.tmp();
|
|
1297
1570
|
const carriesListenerIdentity = shape.fields.some((f) => f.name === "handleEvent" && f.type.kind === "func");
|
|
1298
|
-
if (carriesListenerIdentity) {
|
|
1571
|
+
if ((shape.fields.length === 0 && !shape.indexValue) || carriesListenerIdentity) {
|
|
1299
1572
|
const rc = vAdapters(host, t);
|
|
1300
1573
|
sourceAccessor = {
|
|
1301
1574
|
name: `${name}_source_access`,
|
|
@@ -1391,6 +1664,8 @@ export class LlDyn {
|
|
|
1391
1664
|
}
|
|
1392
1665
|
if (cyclicRec)
|
|
1393
1666
|
B.line(`call void @scr_dyn_from_leave()`);
|
|
1667
|
+
host.declare(`declare ptr @scr_dyn_mark_snapshot(ptr)`);
|
|
1668
|
+
B.line(`call ptr @scr_dyn_mark_snapshot(ptr ${d})`);
|
|
1394
1669
|
B.terminate(`ret ptr ${d}`);
|
|
1395
1670
|
break;
|
|
1396
1671
|
}
|
|
@@ -1411,6 +1686,20 @@ export class LlDyn {
|
|
|
1411
1686
|
const len = B.tmp();
|
|
1412
1687
|
B.line(`${len} = call double @scr_arr_len(ptr %v)`);
|
|
1413
1688
|
B.countedLoop(len, (i) => {
|
|
1689
|
+
host.declare(`declare double @scr_arr_state(ptr, double)`);
|
|
1690
|
+
const state = B.tmp();
|
|
1691
|
+
const undefinedState = B.tmp();
|
|
1692
|
+
const undefinedLabel = B.newLabel("tda.undefined");
|
|
1693
|
+
const valueLabel = B.newLabel("tda.value");
|
|
1694
|
+
const doneLabel = B.newLabel("tda.done");
|
|
1695
|
+
B.line(`${state} = call double @scr_arr_state(ptr %v, double ${i})`);
|
|
1696
|
+
B.line(`${undefinedState} = fcmp oeq double ${state}, 2.0`); // SCR_ARR_UNDEFINED
|
|
1697
|
+
B.terminate(`br i1 ${undefinedState}, label %${undefinedLabel}, label %${valueLabel}`);
|
|
1698
|
+
B.startBlock(undefinedLabel);
|
|
1699
|
+
const retained = this.retainDyn(B, this.undef(B));
|
|
1700
|
+
B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${retained})`);
|
|
1701
|
+
B.terminate(`br label %${doneLabel}`);
|
|
1702
|
+
B.startBlock(valueLabel);
|
|
1414
1703
|
if (elem.kind === "f64" || elem.kind === "bool") {
|
|
1415
1704
|
const acc = elem.kind;
|
|
1416
1705
|
const accTy = elem.kind === "f64" ? "double" : "i1";
|
|
@@ -1437,9 +1726,15 @@ export class LlDyn {
|
|
|
1437
1726
|
B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${conv})`);
|
|
1438
1727
|
B.line(`call void ${releaseSym(host, elem)}(ptr ${e})`);
|
|
1439
1728
|
}
|
|
1729
|
+
B.terminate(`br label %${doneLabel}`);
|
|
1730
|
+
B.startBlock(doneLabel);
|
|
1440
1731
|
});
|
|
1732
|
+
host.declare(`declare void @scr_arr_copy_metadata(ptr, ptr)`);
|
|
1733
|
+
B.line(`call void @scr_arr_copy_metadata(ptr %v, ptr ${d})`);
|
|
1441
1734
|
if (cyclicArr)
|
|
1442
1735
|
B.line(`call void @scr_dyn_from_leave()`);
|
|
1736
|
+
host.declare(`declare ptr @scr_dyn_mark_snapshot(ptr)`);
|
|
1737
|
+
B.line(`call ptr @scr_dyn_mark_snapshot(ptr ${d})`);
|
|
1443
1738
|
B.terminate(`ret ptr ${d}`);
|
|
1444
1739
|
break;
|
|
1445
1740
|
}
|
|
@@ -1549,7 +1844,7 @@ export class LlDyn {
|
|
|
1549
1844
|
}
|
|
1550
1845
|
this.defs.push(`define internal ptr @${name}(${this.valTy(t)} %v) ${FN_ATTRS} { ; to-dyn ${key}`, B.render(), `}`, ``);
|
|
1551
1846
|
if (sourceAccessor) {
|
|
1552
|
-
this.defs.push(`define internal ptr @${sourceAccessor.name}(ptr %v, i1 %materialize) ${FN_ATTRS} { ;
|
|
1847
|
+
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
1848
|
}
|
|
1554
1849
|
return name;
|
|
1555
1850
|
}
|
|
@@ -1571,9 +1866,10 @@ export class LlDyn {
|
|
|
1571
1866
|
const B = new BlockBuilder();
|
|
1572
1867
|
host.declare(`declare void @scr_promise_fulfill_ref(ptr, ptr, ptr, ptr, ptr)`);
|
|
1573
1868
|
host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
|
|
1869
|
+
host.declare(`declare void @scr_dyn_trace_v(ptr, ptr, ptr)`);
|
|
1574
1870
|
host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
1575
1871
|
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
|
|
1872
|
+
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
1873
|
};
|
|
1578
1874
|
switch (inner.kind) {
|
|
1579
1875
|
case "void":
|
|
@@ -1660,10 +1956,17 @@ export class LlDyn {
|
|
|
1660
1956
|
const kd = this.kindOf(B, "%d");
|
|
1661
1957
|
const done = B.newLabel("ds.d");
|
|
1662
1958
|
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]) {
|
|
1959
|
+
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
1960
|
labels.set(k, B.newLabel(`ds.k${k}`));
|
|
1665
1961
|
}
|
|
1666
|
-
|
|
1962
|
+
const branches = [];
|
|
1963
|
+
for (const [kind, label] of labels)
|
|
1964
|
+
branches.push(`i32 ${kind}, label %${label}`);
|
|
1965
|
+
B.terminate(`switch i32 ${kd}, label %${done} [ ${branches.join(" ")} ]`);
|
|
1966
|
+
B.startBlock(labels.get(DYN_KIND.PROXY));
|
|
1967
|
+
host.declare(`declare void @scr_dyn_proxy_unsupported(ptr)`);
|
|
1968
|
+
B.line(`call void @scr_dyn_proxy_unsupported(ptr ${host.cstr("string conversion")})`);
|
|
1969
|
+
B.br(done);
|
|
1667
1970
|
B.startBlock(labels.get(DYN_KIND.JSVAL));
|
|
1668
1971
|
{
|
|
1669
1972
|
// Island-held: the engine's own ToString (a bridged failure
|
|
@@ -1696,6 +1999,24 @@ export class LlDyn {
|
|
|
1696
1999
|
B.line(`call void @scr_jb_puts(ptr %b, ptr ${s})`);
|
|
1697
2000
|
B.br(done);
|
|
1698
2001
|
}
|
|
2002
|
+
B.startBlock(labels.get(DYN_KIND.BIGINT));
|
|
2003
|
+
{
|
|
2004
|
+
host.declare(`declare ptr @scr_bigint_to_string(ptr, double)`);
|
|
2005
|
+
const v = this.payloadOf(B, "%d", "ptr");
|
|
2006
|
+
const s = B.tmp();
|
|
2007
|
+
B.line(`${s} = call ptr @scr_bigint_to_string(ptr ${v}, double ${f64Lit(10)})`);
|
|
2008
|
+
this.putScrStr(B, "%b", s);
|
|
2009
|
+
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
2010
|
+
B.br(done);
|
|
2011
|
+
}
|
|
2012
|
+
B.startBlock(labels.get(DYN_KIND.SYMBOL));
|
|
2013
|
+
{
|
|
2014
|
+
host.declare(`declare ptr @scr_dyn_string_coerce(ptr)`);
|
|
2015
|
+
const s = B.tmp();
|
|
2016
|
+
B.line(`${s} = call ptr @scr_dyn_string_coerce(ptr %d)`);
|
|
2017
|
+
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
2018
|
+
B.br(done);
|
|
2019
|
+
}
|
|
1699
2020
|
B.startBlock(labels.get(DYN_KIND.NUM));
|
|
1700
2021
|
{
|
|
1701
2022
|
// String(n): NaN/Infinity spelled out, not the JSON null.
|
|
@@ -1862,35 +2183,11 @@ export class LlDyn {
|
|
|
1862
2183
|
B.br(done);
|
|
1863
2184
|
B.startBlock(lJoin);
|
|
1864
2185
|
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
|
-
});
|
|
2186
|
+
host.declare(`declare ptr @scr_bytes_join(ptr, ptr)`);
|
|
2187
|
+
const joined = B.tmp();
|
|
2188
|
+
B.line(`${joined} = call ptr @scr_bytes_join(ptr ${bts}, ptr ${host.internLiteral(",")})`);
|
|
2189
|
+
this.putScrStr(B, "%b", joined);
|
|
2190
|
+
B.line(`call void @scr_str_release(ptr ${joined})`);
|
|
1894
2191
|
B.br(done);
|
|
1895
2192
|
}
|
|
1896
2193
|
B.startBlock(labels.get(DYN_KIND.FUNC));
|
|
@@ -1914,8 +2211,14 @@ export class LlDyn {
|
|
|
1914
2211
|
B.br(done);
|
|
1915
2212
|
}
|
|
1916
2213
|
B.startBlock(labels.get(DYN_KIND.HANDLE));
|
|
1917
|
-
|
|
1918
|
-
|
|
2214
|
+
{
|
|
2215
|
+
host.declare(`declare ptr @scr_dyn_to_string(ptr, ptr)`);
|
|
2216
|
+
const s = B.tmp();
|
|
2217
|
+
B.line(`${s} = call ptr @scr_dyn_to_string(ptr %d, ptr null)`);
|
|
2218
|
+
this.putScrStr(B, "%b", s);
|
|
2219
|
+
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
2220
|
+
B.br(done);
|
|
2221
|
+
}
|
|
1919
2222
|
B.startBlock(labels.get(DYN_KIND.PROMISE));
|
|
1920
2223
|
// Object.prototype.toString with the Promise @@toStringTag.
|
|
1921
2224
|
this.puts(B, "%b", "[object Promise]");
|
|
@@ -2062,6 +2365,47 @@ export class LlDyn {
|
|
|
2062
2365
|
/* ── the keyed read (dynKeyGetHelper, ported) ──────────────────────── */
|
|
2063
2366
|
/** `sc_dyn_key_get(ptr d, ptr k, i1 opt) -> ptr` — d[k] on a dyn value.
|
|
2064
2367
|
* Result +1; throws on non-optional nullish receivers. */
|
|
2368
|
+
dynComputedKeyGetHelper() {
|
|
2369
|
+
const name = "sc_dyn_computed_key_get";
|
|
2370
|
+
if (this.helperMemo.has(name))
|
|
2371
|
+
return name;
|
|
2372
|
+
this.helperMemo.set(name, name);
|
|
2373
|
+
const B = new BlockBuilder();
|
|
2374
|
+
const host = this.host;
|
|
2375
|
+
const stringHelper = this.dynKeyGetHelper();
|
|
2376
|
+
host.declare(`declare ptr @scr_dyn_property_key_value(ptr)`);
|
|
2377
|
+
host.declare(`declare ptr @scr_dyn_symbol_key_get(ptr, ptr, i1 zeroext)`);
|
|
2378
|
+
host.declare(`declare void @scr_dyn_release(ptr)`);
|
|
2379
|
+
const key = B.tmp();
|
|
2380
|
+
B.line(`${key} = call ptr @scr_dyn_property_key_value(ptr %key)`);
|
|
2381
|
+
const missing = B.tmp();
|
|
2382
|
+
B.line(`${missing} = icmp eq ptr ${key}, null`);
|
|
2383
|
+
const fail = B.newLabel("kg.fail");
|
|
2384
|
+
const dispatch = B.newLabel("kg.dispatch");
|
|
2385
|
+
B.condBr(missing, fail, dispatch);
|
|
2386
|
+
B.startBlock(fail);
|
|
2387
|
+
B.terminate("ret ptr null");
|
|
2388
|
+
B.startBlock(dispatch);
|
|
2389
|
+
const kind = this.kindOf(B, key);
|
|
2390
|
+
const symbol = B.tmp();
|
|
2391
|
+
B.line(`${symbol} = icmp eq i32 ${kind}, ${DYN_KIND.SYMBOL}`);
|
|
2392
|
+
const sym = B.newLabel("kg.symbol");
|
|
2393
|
+
const str = B.newLabel("kg.string");
|
|
2394
|
+
B.condBr(symbol, sym, str);
|
|
2395
|
+
B.startBlock(sym);
|
|
2396
|
+
const sv = B.tmp();
|
|
2397
|
+
B.line(`${sv} = call ptr @scr_dyn_symbol_key_get(ptr %d, ptr ${key}, i1 %opt)`);
|
|
2398
|
+
B.line(`call void @scr_dyn_release(ptr ${key})`);
|
|
2399
|
+
B.terminate(`ret ptr ${sv}`);
|
|
2400
|
+
B.startBlock(str);
|
|
2401
|
+
const text = this.payloadOf(B, key, "ptr");
|
|
2402
|
+
const value = B.tmp();
|
|
2403
|
+
B.line(`${value} = call ptr @${stringHelper}(ptr %d, ptr ${text}, i1 %opt)`);
|
|
2404
|
+
B.line(`call void @scr_dyn_release(ptr ${key})`);
|
|
2405
|
+
B.terminate(`ret ptr ${value}`);
|
|
2406
|
+
this.defs.push(`define internal ptr @${name}(ptr %d, ptr %key, i1 zeroext %opt) ${FN_ATTRS} {`, B.render(), "}", "");
|
|
2407
|
+
return name;
|
|
2408
|
+
}
|
|
2065
2409
|
dynKeyGetHelper() {
|
|
2066
2410
|
const memoKey = "%dynKeyGet";
|
|
2067
2411
|
const existing = this.dynBuilders.get(memoKey);
|
|
@@ -2122,6 +2466,19 @@ export class LlDyn {
|
|
|
2122
2466
|
B.terminate(`ret ptr null`);
|
|
2123
2467
|
B.startBlock(lNext);
|
|
2124
2468
|
}
|
|
2469
|
+
{
|
|
2470
|
+
const isSymbol = B.tmp();
|
|
2471
|
+
B.line(`${isSymbol} = icmp eq i32 ${kd}, ${DYN_KIND.SYMBOL}`);
|
|
2472
|
+
const lSymbol = B.newLabel("kg.sym");
|
|
2473
|
+
const lNext = B.newLabel("kg.n");
|
|
2474
|
+
B.condBr(isSymbol, lSymbol, lNext);
|
|
2475
|
+
B.startBlock(lSymbol);
|
|
2476
|
+
host.declare(`declare ptr @scr_dyn_symbol_get(ptr, ptr)`);
|
|
2477
|
+
const r = B.tmp();
|
|
2478
|
+
B.line(`${r} = call ptr @scr_dyn_symbol_get(ptr %d, ptr %k)`);
|
|
2479
|
+
B.terminate(`ret ptr ${r}`);
|
|
2480
|
+
B.startBlock(lNext);
|
|
2481
|
+
}
|
|
2125
2482
|
// Typed stream capsules expose their one cached, refreshed dyn view to
|
|
2126
2483
|
// ordinary property reads while the capsule itself keeps identity.
|
|
2127
2484
|
{
|
|
@@ -2144,6 +2501,19 @@ export class LlDyn {
|
|
|
2144
2501
|
// ISLAND-held receivers: o[k] reads the REAL engine property (getters
|
|
2145
2502
|
// included, throws bridged catchably) and the result wraps back
|
|
2146
2503
|
// scalar-normalized — the routed keyed read that retired the fence.
|
|
2504
|
+
{
|
|
2505
|
+
const isProxy = B.tmp();
|
|
2506
|
+
B.line(`${isProxy} = icmp eq i32 ${kd}, ${DYN_KIND.PROXY}`);
|
|
2507
|
+
const lProxy = B.newLabel("kg.proxy");
|
|
2508
|
+
const lNext = B.newLabel("kg.n");
|
|
2509
|
+
B.condBr(isProxy, lProxy, lNext);
|
|
2510
|
+
B.startBlock(lProxy);
|
|
2511
|
+
host.declare(`declare ptr @scr_dyn_proxy_get(ptr, ptr)`);
|
|
2512
|
+
const r = B.tmp();
|
|
2513
|
+
B.line(`${r} = call ptr @scr_dyn_proxy_get(ptr %d, ptr %k)`);
|
|
2514
|
+
B.terminate(`ret ptr ${r}`);
|
|
2515
|
+
B.startBlock(lNext);
|
|
2516
|
+
}
|
|
2147
2517
|
{
|
|
2148
2518
|
const isJv = B.tmp();
|
|
2149
2519
|
B.line(`${isJv} = icmp eq i32 ${kd}, ${DYN_KIND.JSVAL}`);
|
|
@@ -2288,45 +2658,10 @@ export class LlDyn {
|
|
|
2288
2658
|
const lNext = B.newLabel("kg.n");
|
|
2289
2659
|
B.condBr(isB, lB, lNext);
|
|
2290
2660
|
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();
|
|
2661
|
+
host.declare(`declare ptr @scr_dyn_bytes_key_get(ptr, ptr)`);
|
|
2662
|
+
const result = B.tmp();
|
|
2663
|
+
B.line(`${result} = call ptr @scr_dyn_bytes_key_get(ptr %d, ptr %k)`);
|
|
2664
|
+
B.terminate(`ret ptr ${result}`);
|
|
2330
2665
|
B.startBlock(lNext);
|
|
2331
2666
|
}
|
|
2332
2667
|
// FUNC: own props (defineProperties writes), then name/length.
|
|
@@ -2429,6 +2764,15 @@ export class LlDyn {
|
|
|
2429
2764
|
B.line(`call void @scr_str_release(ptr ${ch})`);
|
|
2430
2765
|
B.terminate(`ret ptr ${r2}`);
|
|
2431
2766
|
B.startBlock(lMiss);
|
|
2767
|
+
const lArrNamed = B.newLabel("kg.an");
|
|
2768
|
+
const lOther = B.newLabel("kg.ao");
|
|
2769
|
+
B.condBr(isA, lArrNamed, lOther);
|
|
2770
|
+
B.startBlock(lArrNamed);
|
|
2771
|
+
host.declare(`declare ptr @scr_dyn_arr_named_get(ptr, ptr)`);
|
|
2772
|
+
const named = B.tmp();
|
|
2773
|
+
B.line(`${named} = call ptr @scr_dyn_arr_named_get(ptr %d, ptr %k)`);
|
|
2774
|
+
B.terminate(`ret ptr ${named}`);
|
|
2775
|
+
B.startBlock(lOther);
|
|
2432
2776
|
retainUndef();
|
|
2433
2777
|
}
|
|
2434
2778
|
B.startBlock(lNext);
|
|
@@ -2529,14 +2873,13 @@ export class LlDyn {
|
|
|
2529
2873
|
const materialized = B.tmp();
|
|
2530
2874
|
const out = B.tmp();
|
|
2531
2875
|
B.line(`${materialized} = call ptr @scr_dyn_typed_ref_materialize(ptr %d)`);
|
|
2532
|
-
B.line(`${out} = call ptr @${name}(ptr ${materialized}, ${host.sizeType} %n)`);
|
|
2876
|
+
B.line(`${out} = call ptr @${name}(ptr ${materialized}, ${host.sizeType} %n, ptr %spelling)`);
|
|
2533
2877
|
B.line(`call void @scr_dyn_release_v(ptr ${materialized})`);
|
|
2534
2878
|
B.terminate(`ret ptr ${out}`);
|
|
2535
2879
|
B.startBlock(lNext);
|
|
2536
2880
|
}
|
|
2537
|
-
//
|
|
2538
|
-
//
|
|
2539
|
-
// dyn-routing-ops).
|
|
2881
|
+
// Island-held sources keep the engine's iterator and IteratorClose
|
|
2882
|
+
// behavior while returning checked values for the destructuring slots.
|
|
2540
2883
|
{
|
|
2541
2884
|
const isJv = B.tmp();
|
|
2542
2885
|
B.line(`${isJv} = icmp eq i32 ${kd}, ${DYN_KIND.JSVAL}`);
|
|
@@ -2544,10 +2887,12 @@ export class LlDyn {
|
|
|
2544
2887
|
const lNotJv = B.newLabel("din.njv");
|
|
2545
2888
|
B.condBr(isJv, lJv, lNotJv);
|
|
2546
2889
|
B.startBlock(lJv);
|
|
2547
|
-
host.declare(`declare
|
|
2548
|
-
const
|
|
2549
|
-
|
|
2550
|
-
B.
|
|
2890
|
+
host.declare(`declare ptr @scr_dyn_jsval_iter_n(ptr, double)`);
|
|
2891
|
+
const count = B.tmp();
|
|
2892
|
+
const out = B.tmp();
|
|
2893
|
+
B.line(`${count} = uitofp ${host.sizeType} %n to double`);
|
|
2894
|
+
B.line(`${out} = call ptr @scr_dyn_jsval_iter_n(ptr %d, double ${count})`);
|
|
2895
|
+
B.terminate(`ret ptr ${out}`);
|
|
2551
2896
|
B.startBlock(lNotJv);
|
|
2552
2897
|
}
|
|
2553
2898
|
const okA = B.tmp();
|
|
@@ -2568,6 +2913,17 @@ export class LlDyn {
|
|
|
2568
2913
|
const buf = "%dib";
|
|
2569
2914
|
B.entryAllocas.push(`${buf} = alloca %ScrJsonBuf`);
|
|
2570
2915
|
B.line(`call void @scr_jb_init(ptr ${buf})`);
|
|
2916
|
+
const hasSpelling = B.tmp();
|
|
2917
|
+
B.line(`${hasSpelling} = icmp ne ptr %spelling, null`);
|
|
2918
|
+
const named = B.newLabel("din.named"), unnamed = B.newLabel("din.unnamed");
|
|
2919
|
+
B.condBr(hasSpelling, named, unnamed);
|
|
2920
|
+
B.startBlock(named);
|
|
2921
|
+
B.line(`call void @scr_jb_puts(ptr ${buf}, ptr %spelling)`);
|
|
2922
|
+
const namedMessage = B.tmp();
|
|
2923
|
+
B.line(`${namedMessage} = call ptr @scr_jb_finish(ptr ${buf})`);
|
|
2924
|
+
B.line(`call void @scr_throw_error(i32 1, ptr ${namedMessage})`);
|
|
2925
|
+
B.terminate(`ret ptr null`);
|
|
2926
|
+
B.startBlock(unnamed);
|
|
2571
2927
|
const lU = B.newLabel("din.u");
|
|
2572
2928
|
const lN = B.newLabel("din.n");
|
|
2573
2929
|
const lB2 = B.newLabel("din.b");
|
|
@@ -2647,7 +3003,7 @@ export class LlDyn {
|
|
|
2647
3003
|
B.line(`store ptr ${r2}, ptr ${itemSlot}`);
|
|
2648
3004
|
B.br(lPush);
|
|
2649
3005
|
}
|
|
2650
|
-
// BYTES: by
|
|
3006
|
+
// BYTES: by numeric element.
|
|
2651
3007
|
B.startBlock(lBy);
|
|
2652
3008
|
{
|
|
2653
3009
|
const bts = this.payloadOf(B, "%d", "ptr");
|
|
@@ -2661,17 +3017,12 @@ export class LlDyn {
|
|
|
2661
3017
|
const lMiss = B.newLabel("din.bm");
|
|
2662
3018
|
B.condBr(inR, lHit, lMiss);
|
|
2663
3019
|
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();
|
|
3020
|
+
host.declare(`declare double @scr_bytes_get(ptr, double)`);
|
|
3021
|
+
const index = B.tmp();
|
|
2670
3022
|
const bd = B.tmp();
|
|
2671
3023
|
const r = B.tmp();
|
|
2672
|
-
B.line(`${
|
|
2673
|
-
B.line(`${
|
|
2674
|
-
B.line(`${bd} = uitofp i8 ${bv} to double`);
|
|
3024
|
+
B.line(`${index} = uitofp ${host.sizeType} ${i} to double`);
|
|
3025
|
+
B.line(`${bd} = call double @scr_bytes_get(ptr ${bts}, double ${index})`);
|
|
2675
3026
|
B.line(`${r} = call ptr @scr_dyn_new_num(double ${bd})`);
|
|
2676
3027
|
B.line(`store ptr ${r}, ptr ${itemSlot}`);
|
|
2677
3028
|
B.br(lPush);
|
|
@@ -2752,7 +3103,7 @@ export class LlDyn {
|
|
|
2752
3103
|
B.line(`call void @scr_dyn_arr_push(ptr ${out}, ptr ${item}) ; push takes ownership`);
|
|
2753
3104
|
});
|
|
2754
3105
|
B.terminate(`ret ptr ${out}`);
|
|
2755
|
-
this.defs.push(`define internal ptr @${name}(ptr %d, ${host.sizeType} %n) ${FN_ATTRS} { ; destructuring GetIterator + N steps`, B.render(), `}`, ``);
|
|
3106
|
+
this.defs.push(`define internal ptr @${name}(ptr %d, ${host.sizeType} %n, ptr %spelling) ${FN_ATTRS} { ; destructuring GetIterator + N steps`, B.render(), `}`, ``);
|
|
2756
3107
|
return name;
|
|
2757
3108
|
}
|
|
2758
3109
|
/* ── the checked-dynamic function boundary (ported) ────────────────── */
|
|
@@ -2793,7 +3144,55 @@ export class LlDyn {
|
|
|
2793
3144
|
const host = this.host;
|
|
2794
3145
|
const B = new BlockBuilder();
|
|
2795
3146
|
const argNames = [];
|
|
3147
|
+
const typedRest = t.rest === true && t.restAbi === "typed";
|
|
3148
|
+
const packTail = (start) => {
|
|
3149
|
+
host.declare(`declare ptr @scr_dyn_new_arr()`);
|
|
3150
|
+
host.declare(`declare void @scr_dyn_arr_push(ptr, ptr)`);
|
|
3151
|
+
const packed = B.tmp();
|
|
3152
|
+
B.line(`${packed} = call ptr @scr_dyn_new_arr()`);
|
|
3153
|
+
const riSlot = B.slot();
|
|
3154
|
+
B.entryAllocas.push(`${riSlot} = alloca ${host.sizeType}`);
|
|
3155
|
+
B.line(`store ${host.sizeType} ${start}, ptr ${riSlot}`);
|
|
3156
|
+
const lc = B.newLabel("dfk.rc");
|
|
3157
|
+
const lb = B.newLabel("dfk.rb");
|
|
3158
|
+
const le = B.newLabel("dfk.re");
|
|
3159
|
+
B.br(lc);
|
|
3160
|
+
B.startBlock(lc);
|
|
3161
|
+
const ri = B.tmp();
|
|
3162
|
+
const cont = B.tmp();
|
|
3163
|
+
B.line(`${ri} = load ${host.sizeType}, ptr ${riSlot}`);
|
|
3164
|
+
B.line(`${cont} = icmp ult ${host.sizeType} ${ri}, %argc`);
|
|
3165
|
+
B.condBr(cont, lb, le);
|
|
3166
|
+
B.startBlock(lb);
|
|
3167
|
+
const ap = B.tmp();
|
|
3168
|
+
const av = B.tmp();
|
|
3169
|
+
B.line(`${ap} = getelementptr inbounds ptr, ptr %args, ${host.sizeType} ${ri}`);
|
|
3170
|
+
B.line(`${av} = load ptr, ptr ${ap}`);
|
|
3171
|
+
const rv = this.retainDyn(B, av);
|
|
3172
|
+
B.line(`call void @scr_dyn_arr_push(ptr ${packed}, ptr ${rv})`);
|
|
3173
|
+
const ri2 = B.tmp();
|
|
3174
|
+
B.line(`${ri2} = add ${host.sizeType} ${ri}, 1`);
|
|
3175
|
+
B.line(`store ${host.sizeType} ${ri2}, ptr ${riSlot}`);
|
|
3176
|
+
B.br(lc);
|
|
3177
|
+
B.startBlock(le);
|
|
3178
|
+
return packed;
|
|
3179
|
+
};
|
|
2796
3180
|
t.params.forEach((p, i) => {
|
|
3181
|
+
if (typedRest && i === t.params.length - 1) {
|
|
3182
|
+
const packed = packTail(i);
|
|
3183
|
+
const a = B.tmp();
|
|
3184
|
+
B.line(`${a} = call ${this.valTy(p)} @${this.dynCheckHelper(p)}(ptr ${packed}, ptr null)`);
|
|
3185
|
+
host.declare(`declare void @scr_dyn_release(ptr)`);
|
|
3186
|
+
B.line(`call void @scr_dyn_release(ptr ${packed})`);
|
|
3187
|
+
this.pendingBail(B, "dfk.rest", () => {
|
|
3188
|
+
t.params.slice(0, i).forEach((q, j) => {
|
|
3189
|
+
if (isRefCounted(q))
|
|
3190
|
+
B.line(`call void ${releaseSym(host, q)}(ptr ${argNames[j]})`);
|
|
3191
|
+
});
|
|
3192
|
+
}, "ptr null");
|
|
3193
|
+
argNames.push(a);
|
|
3194
|
+
return;
|
|
3195
|
+
}
|
|
2797
3196
|
// JS arity: a missing argument IS the undefined dyn value.
|
|
2798
3197
|
const adSlot = B.slot();
|
|
2799
3198
|
B.entryAllocas.push(`${adSlot} = alloca ptr`);
|
|
@@ -2867,38 +3266,7 @@ export class LlDyn {
|
|
|
2867
3266
|
});
|
|
2868
3267
|
// VARIADIC (rest-marked) signatures: one extra trailing dyn-array
|
|
2869
3268
|
// 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
|
-
}
|
|
3269
|
+
const rest = t.rest && !typedRest ? packTail(t.argumentsAll ? 0 : t.params.length) : null;
|
|
2902
3270
|
// The closure CONSUMES its params (+1 each moved in).
|
|
2903
3271
|
const fnp = B.tmp();
|
|
2904
3272
|
const fn = B.tmp();
|
|
@@ -2948,7 +3316,7 @@ export class LlDyn {
|
|
|
2948
3316
|
host.declare(`declare ptr @scr_closure_retain_v(ptr)`);
|
|
2949
3317
|
host.declare(`declare ptr @scr_dyn_new_func(ptr, ptr, i32, ptr, ptr)`);
|
|
2950
3318
|
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`, `}`, ``);
|
|
3319
|
+
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
3320
|
return name;
|
|
2953
3321
|
}
|
|
2954
3322
|
/** The adapter closure body for one TARGET signature: caps[0] is an
|
|
@@ -2977,7 +3345,30 @@ export class LlDyn {
|
|
|
2977
3345
|
// argument (borrowed by the conversion) and releases.
|
|
2978
3346
|
let argsPtr = "null";
|
|
2979
3347
|
const argVals = [];
|
|
2980
|
-
|
|
3348
|
+
const checkedRest = t.rest === true && t.restAbi === undefined;
|
|
3349
|
+
let packed = null;
|
|
3350
|
+
if (checkedRest) {
|
|
3351
|
+
host.declare(`declare ptr @scr_dyn_apply(ptr, ptr, ptr)`);
|
|
3352
|
+
host.declare(`declare ptr @scr_dyn_new_arr()`);
|
|
3353
|
+
host.declare(`declare void @scr_dyn_arr_push(ptr, ptr)`);
|
|
3354
|
+
host.declare(`declare void @scr_dyn_arr_push_spread(ptr, ptr, ptr)`);
|
|
3355
|
+
packed = t.argumentsAll ? "%rest" : B.tmp();
|
|
3356
|
+
if (!t.argumentsAll)
|
|
3357
|
+
B.line(`${packed} = call ptr @scr_dyn_new_arr()`);
|
|
3358
|
+
t.params.forEach((p, i) => {
|
|
3359
|
+
if (!t.argumentsAll) {
|
|
3360
|
+
const v = this.toDynExpr(B, p, `%a${i}`);
|
|
3361
|
+
B.line(`call void @scr_dyn_arr_push(ptr ${packed}, ptr ${v})`);
|
|
3362
|
+
}
|
|
3363
|
+
if (isRefCounted(p))
|
|
3364
|
+
B.line(`call void ${releaseSym(host, p)}(ptr %a${i})`);
|
|
3365
|
+
});
|
|
3366
|
+
if (!t.argumentsAll) {
|
|
3367
|
+
B.line(`call void @scr_dyn_arr_push_spread(ptr ${packed}, ptr %rest, ptr ${host.cstr("")})`);
|
|
3368
|
+
B.line(`call void @scr_dyn_release(ptr %rest)`);
|
|
3369
|
+
}
|
|
3370
|
+
}
|
|
3371
|
+
else if (t.params.length > 0) {
|
|
2981
3372
|
const arr = B.slot();
|
|
2982
3373
|
B.entryAllocas.push(`${arr} = alloca [${t.params.length} x ptr]`);
|
|
2983
3374
|
t.params.forEach((p, i) => {
|
|
@@ -2994,7 +3385,12 @@ export class LlDyn {
|
|
|
2994
3385
|
// The kind is FUNC by construction; `what` is unreachable — spelled
|
|
2995
3386
|
// anyway (the C's "value").
|
|
2996
3387
|
const r = B.tmp();
|
|
2997
|
-
|
|
3388
|
+
if (packed) {
|
|
3389
|
+
B.line(`${r} = call ptr @scr_dyn_apply(ptr ${fnv}, ptr ${packed}, ptr ${host.cstr("value")})`);
|
|
3390
|
+
B.line(`call void @scr_dyn_release(ptr ${packed})`);
|
|
3391
|
+
}
|
|
3392
|
+
else
|
|
3393
|
+
B.line(`${r} = call ptr @scr_dyn_call(ptr ${fnv}, ptr ${argsPtr}, ${host.sizeType} ${t.params.length}, ptr ${host.cstr("value")})`);
|
|
2998
3394
|
B.line(`call void @scr_dyn_release(ptr ${fnv})`);
|
|
2999
3395
|
for (const v of argVals)
|
|
3000
3396
|
B.line(`call void @scr_dyn_release(ptr ${v})`);
|
|
@@ -3014,7 +3410,7 @@ export class LlDyn {
|
|
|
3014
3410
|
B.line(`call void @scr_dyn_release(ptr ${r})`);
|
|
3015
3411
|
B.terminate(`ret ${this.valTy(t.ret)} ${out}`);
|
|
3016
3412
|
}
|
|
3017
|
-
const params = ["ptr %sc_env", ...t.params.map((p, i) => `${this.valTy(p)} %a${i}`)].join(", ");
|
|
3413
|
+
const params = ["ptr %sc_env", ...t.params.map((p, i) => `${this.valTy(p)} %a${i}`), ...(checkedRest ? ["ptr %rest"] : [])].join(", ");
|
|
3018
3414
|
this.defs.push(`define internal ${retTy === "i1" ? "zeroext i1" : retTy} @${name}(${params}) ${FN_ATTRS} { ; dyn fn adapter to ${key}`, B.render(), `}`, ``);
|
|
3019
3415
|
return name;
|
|
3020
3416
|
}
|