@scriptc/compiler 0.2.3 → 0.2.5
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 +915 -215
- package/ambient/scriptc-overrides.d.ts +5 -1
- package/ambient/scriptc.d.ts +22 -2
- package/dist/backend/build-cache.d.ts +4 -0
- package/dist/backend/build-cache.js +16 -2
- package/dist/backend/build-cache.js.map +1 -1
- package/dist/backend/cycle-analysis.js +17 -5
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +50 -11
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/debug-symbols.js.map +1 -1
- package/dist/backend/executable-features.js +2 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/external-c.d.ts +13 -6
- package/dist/backend/external-c.js +15 -3
- package/dist/backend/external-c.js.map +1 -1
- package/dist/backend/ffi-callbacks.js +6 -9
- package/dist/backend/ffi-callbacks.js.map +1 -1
- package/dist/backend/library-identity-markers.js.map +1 -1
- package/dist/backend/library-pack.d.ts +1 -1
- package/dist/backend/library-pack.js +81 -24
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/link-plan-core.js +9 -2
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +1 -1
- package/dist/backend/link-plan.js +4 -5
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/linker.d.ts +1 -1
- package/dist/backend/linker.js +42 -23
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/literals.js +5 -4
- package/dist/backend/literals.js.map +1 -1
- package/dist/backend/literals.test.js +30 -5
- package/dist/backend/literals.test.js.map +1 -1
- package/dist/backend/llvm/blocks.test.js +5 -2
- package/dist/backend/llvm/blocks.test.js.map +1 -1
- package/dist/backend/llvm/borrowed-inputs.d.ts +15 -0
- package/dist/backend/llvm/borrowed-inputs.js +28 -0
- package/dist/backend/llvm/borrowed-inputs.js.map +1 -0
- package/dist/backend/llvm/borrowed-receivers.js +43 -19
- package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
- package/dist/backend/llvm/byte-numbers.d.ts +10 -0
- package/dist/backend/llvm/byte-numbers.js +240 -0
- package/dist/backend/llvm/byte-numbers.js.map +1 -0
- package/dist/backend/llvm/bytes-bounds.d.ts +9 -0
- package/dist/backend/llvm/bytes-bounds.js +240 -0
- package/dist/backend/llvm/bytes-bounds.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +10 -0
- package/dist/backend/llvm/call-lifetimes.js +83 -20
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +203 -18
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.d.ts +13 -0
- package/dist/backend/llvm/checked-value-lifetimes.js +45 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -0
- package/dist/backend/llvm/classes.js +16 -12
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.js +4 -1
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +6 -0
- package/dist/backend/llvm/counted-loops.js +35 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -0
- package/dist/backend/llvm/debug-info.js +33 -13
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/debug-info.test.js +28 -6
- package/dist/backend/llvm/debug-info.test.js.map +1 -1
- package/dist/backend/llvm/dyn.js +68 -22
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +34 -12
- package/dist/backend/llvm/emitter.js +357 -124
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +237 -46
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +28 -8
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +4 -4
- package/dist/backend/llvm/expr-bytes.js +78 -36
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +10 -4
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +40 -21
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +4 -1
- package/dist/backend/llvm/expr-containers.js +157 -76
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +11 -0
- package/dist/backend/llvm/expr-control.js +27 -8
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +3 -1
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +50 -33
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-island.js +26 -6
- package/dist/backend/llvm/expr-island.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +139 -37
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +43 -1
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +16 -9
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +44 -26
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +51 -14
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +34 -14
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/integer-values.d.ts +10 -0
- package/dist/backend/llvm/integer-values.js +52 -0
- package/dist/backend/llvm/integer-values.js.map +1 -0
- package/dist/backend/llvm/integer-views.d.ts +7 -0
- package/dist/backend/llvm/integer-views.js +83 -0
- package/dist/backend/llvm/integer-views.js.map +1 -0
- package/dist/backend/llvm/integer-views.test.d.ts +1 -0
- package/dist/backend/llvm/integer-views.test.js +69 -0
- package/dist/backend/llvm/integer-views.test.js.map +1 -0
- package/dist/backend/llvm/lib-abi.js +13 -4
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-connect.js +7 -1
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +35 -10
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +36 -15
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +38 -23
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +60 -15
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +12 -5
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +97 -31
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +57 -14
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +107 -31
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +33 -14
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +21 -7
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +69 -20
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +3 -4
- package/dist/backend/llvm/local-array-reads.js +100 -121
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +379 -71
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +25 -0
- package/dist/backend/llvm/local-union-storage.js +109 -0
- package/dist/backend/llvm/local-union-storage.js.map +1 -0
- package/dist/backend/llvm/local-union-storage.test.d.ts +1 -0
- package/dist/backend/llvm/local-union-storage.test.js +210 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +6 -2
- package/dist/backend/llvm/map-read-lifetimes.js +46 -16
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +93 -17
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.d.ts +23 -0
- package/dist/backend/llvm/reference-effects.js +179 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -0
- package/dist/backend/llvm/reference-effects.test.d.ts +1 -0
- package/dist/backend/llvm/reference-effects.test.js +157 -0
- package/dist/backend/llvm/reference-effects.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +7 -4
- package/dist/backend/llvm/shapes.js +82 -22
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +3 -1
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/split.js +4 -4
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +14 -6
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.js +14 -5
- package/dist/backend/llvm/stack-unions.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +172 -32
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.d.ts +10 -0
- package/dist/backend/llvm/string-construction.js +38 -0
- package/dist/backend/llvm/string-construction.js.map +1 -0
- package/dist/backend/llvm/string-construction.test.d.ts +1 -0
- package/dist/backend/llvm/string-construction.test.js +90 -0
- package/dist/backend/llvm/string-construction.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.d.ts +2 -2
- package/dist/backend/llvm/string-lifetimes.js +19 -11
- package/dist/backend/llvm/string-lifetimes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +127 -32
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.d.ts +9 -0
- package/dist/backend/llvm/switch-dispatch.js +114 -0
- package/dist/backend/llvm/switch-dispatch.js.map +1 -0
- package/dist/backend/llvm/switch-dispatch.test.d.ts +1 -0
- package/dist/backend/llvm/switch-dispatch.test.js +83 -0
- package/dist/backend/llvm/switch-dispatch.test.js.map +1 -0
- package/dist/backend/llvm/unsupported.js.map +1 -1
- package/dist/backend/llvm/walkers.js +6 -3
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/mangle.js +9 -3
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.js +18 -8
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +118 -22
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/artifact-stamps.d.ts +39 -0
- package/dist/backend/native/artifact-stamps.js +371 -0
- package/dist/backend/native/artifact-stamps.js.map +1 -0
- package/dist/backend/native/cache-warm.d.ts +24 -0
- package/dist/backend/native/cache-warm.js +80 -0
- package/dist/backend/native/cache-warm.js.map +1 -0
- package/dist/backend/native/compiler-fingerprint.d.ts +19 -0
- package/dist/backend/native/compiler-fingerprint.js +357 -0
- package/dist/backend/native/compiler-fingerprint.js.map +1 -0
- package/dist/backend/native/contracts.d.ts +314 -0
- package/dist/backend/native/contracts.js +2 -0
- package/dist/backend/native/contracts.js.map +1 -0
- package/dist/backend/native/dependency-files.d.ts +5 -0
- package/dist/backend/native/dependency-files.js +83 -0
- package/dist/backend/native/dependency-files.js.map +1 -0
- package/dist/backend/native/driver.d.ts +50 -0
- package/dist/backend/native/driver.js +294 -0
- package/dist/backend/native/driver.js.map +1 -0
- package/dist/backend/native/executable.d.ts +18 -0
- package/dist/backend/native/executable.js +1267 -0
- package/dist/backend/native/executable.js.map +1 -0
- package/dist/backend/native/library.d.ts +2 -0
- package/dist/backend/native/library.js +614 -0
- package/dist/backend/native/library.js.map +1 -0
- package/dist/backend/native/linker-fingerprint.d.ts +8 -0
- package/dist/backend/native/linker-fingerprint.js +174 -0
- package/dist/backend/native/linker-fingerprint.js.map +1 -0
- package/dist/backend/native/object-merge.d.ts +2 -0
- package/dist/backend/native/object-merge.js +154 -0
- package/dist/backend/native/object-merge.js.map +1 -0
- package/dist/backend/native/process.d.ts +17 -0
- package/dist/backend/native/process.js +42 -0
- package/dist/backend/native/process.js.map +1 -0
- package/dist/backend/native/program-shards.d.ts +21 -0
- package/dist/backend/native/program-shards.js +99 -0
- package/dist/backend/native/program-shards.js.map +1 -0
- package/dist/backend/native/runtime-inputs.d.ts +12 -0
- package/dist/backend/native/runtime-inputs.js +163 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -0
- package/dist/backend/native/runtime-inputs.test.d.ts +1 -0
- package/dist/backend/native/runtime-inputs.test.js +64 -0
- package/dist/backend/native/runtime-inputs.test.js.map +1 -0
- package/dist/backend/native/runtime-objects.d.ts +16 -0
- package/dist/backend/native/runtime-objects.js +122 -0
- package/dist/backend/native/runtime-objects.js.map +1 -0
- package/dist/backend/native/session.d.ts +12 -0
- package/dist/backend/native/session.js +31 -0
- package/dist/backend/native/session.js.map +1 -0
- package/dist/backend/native/tool-identity.d.ts +37 -0
- package/dist/backend/native/tool-identity.js +310 -0
- package/dist/backend/native/tool-identity.js.map +1 -0
- package/dist/backend/native/trace-paths.d.ts +12 -0
- package/dist/backend/native/trace-paths.js +73 -0
- package/dist/backend/native/trace-paths.js.map +1 -0
- package/dist/backend/native/vendor.d.ts +1 -0
- package/dist/backend/native/vendor.js +12 -0
- package/dist/backend/native/vendor.js.map +1 -0
- package/dist/backend/native-codegen-core.js +2 -1
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +1 -1
- package/dist/backend/native-codegen.js +24 -13
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +12 -9
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.js +9 -5
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.js +14 -5
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +58 -13
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +17 -450
- package/dist/backend/native-toolchain.js +17 -3971
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +103 -72
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/native-tools.js +27 -8
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/object-localize.js +17 -14
- package/dist/backend/object-localize.js.map +1 -1
- package/dist/backend/object-localize.test.js +59 -12
- package/dist/backend/object-localize.test.js.map +1 -1
- package/dist/backend/runtime-pack-core.js +96 -49
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.js +5 -3
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +87 -15
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +1 -1
- package/dist/backend/runtime-pack.js +11 -12
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +40 -24
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/source-locations.js.map +1 -1
- package/dist/backend/source-locations.test.js +7 -2
- package/dist/backend/source-locations.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +44 -14
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +93 -20
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/backend/targets.js +230 -86
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +32 -18
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/backend/toolchain-environment.js +5 -1
- package/dist/backend/toolchain-environment.js.map +1 -1
- package/dist/backend/vendor-archives.d.ts +2 -2
- package/dist/backend/vendor-archives.js +84 -35
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.js +13 -1
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/warm-cache.d.ts +1 -1
- package/dist/backend/warm-cache.js +33 -9
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +39 -9
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/output-options.js +14 -4
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/paths.js.map +1 -1
- package/dist/cli/wasi-runner.js.map +1 -1
- package/dist/compat/fetch-profile.js +36 -35
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/coverage/report.js +16 -17
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +112 -26
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.js +55 -16
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +1 -1
- package/dist/executable/executable-cache.js +78 -48
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +75 -26
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +2 -2
- package/dist/executable/prepare.js.map +1 -1
- package/dist/ffi/ffi-manifest.js +78 -20
- package/dist/ffi/ffi-manifest.js.map +1 -1
- package/dist/ffi/ffi-manifest.test.js +96 -16
- package/dist/ffi/ffi-manifest.test.js.map +1 -1
- package/dist/format-integer.js.map +1 -1
- package/dist/frontend/analysis.js +12 -2
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/arguments-usage.js.map +1 -1
- package/dist/frontend/binding-source.js +9 -3
- package/dist/frontend/binding-source.js.map +1 -1
- package/dist/frontend/builtin-modules.js +46 -2
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/cjs-resolve.js +40 -17
- package/dist/frontend/cjs-resolve.js.map +1 -1
- package/dist/frontend/cjs-syntax.js +31 -10
- package/dist/frontend/cjs-syntax.js.map +1 -1
- package/dist/frontend/comptime-node.test.js +10 -11
- package/dist/frontend/comptime-node.test.js.map +1 -1
- package/dist/frontend/dts-paths.js +7 -3
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/fork-target.js +17 -12
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/function-completion.js +11 -6
- package/dist/frontend/function-completion.js.map +1 -1
- package/dist/frontend/helper-tokens.js +53 -6
- package/dist/frontend/helper-tokens.js.map +1 -1
- package/dist/frontend/helper-tokens.test.js +18 -2
- package/dist/frontend/helper-tokens.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.js +32 -12
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.test.js +11 -15
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/input-tracker.js +11 -11
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +4 -1
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lib-contract.js +38 -9
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/literal-values.js.map +1 -1
- package/dist/frontend/literal-values.test.js +28 -8
- package/dist/frontend/literal-values.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.js +53 -10
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.d.ts +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +108 -106
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +37 -14
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +50 -0
- package/dist/frontend/lowering/binding-analysis.js +376 -0
- package/dist/frontend/lowering/binding-analysis.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.d.ts +9 -0
- package/dist/frontend/lowering/builtin-calls.js +60 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.d.ts +43 -0
- package/dist/frontend/lowering/builtins/arguments.js +247 -0
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -0
- package/dist/frontend/lowering/builtins/async-context.d.ts +52 -0
- package/dist/frontend/lowering/builtins/async-context.js +436 -0
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -0
- package/dist/frontend/lowering/builtins/atomics.d.ts +15 -0
- package/dist/frontend/lowering/builtins/atomics.js +46 -0
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.d.ts +13 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +87 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-async.d.ts +18 -0
- package/dist/frontend/lowering/builtins/child-process-async.js +245 -0
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +21 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js +362 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-sync.d.ts +4 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js +639 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process.d.ts +55 -0
- package/dist/frontend/lowering/builtins/child-process.js +669 -0
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +7 -0
- package/dist/frontend/lowering/builtins/compression.js +115 -0
- package/dist/frontend/lowering/builtins/compression.js.map +1 -0
- package/dist/frontend/lowering/builtins/console.d.ts +10 -0
- package/dist/frontend/lowering/builtins/console.js +38 -0
- package/dist/frontend/lowering/builtins/console.js.map +1 -0
- package/dist/frontend/lowering/builtins/constants.d.ts +24 -0
- package/dist/frontend/lowering/builtins/constants.js +141 -0
- package/dist/frontend/lowering/builtins/constants.js.map +1 -0
- package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
- package/dist/frontend/lowering/builtins/crypto.js +517 -0
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -0
- package/dist/frontend/lowering/builtins/dates.d.ts +7 -0
- package/dist/frontend/lowering/builtins/dates.js +101 -0
- package/dist/frontend/lowering/builtins/dates.js.map +1 -0
- package/dist/frontend/lowering/builtins/environment.d.ts +34 -0
- package/dist/frontend/lowering/builtins/environment.js +95 -0
- package/dist/frontend/lowering/builtins/environment.js.map +1 -0
- package/dist/frontend/lowering/builtins/errors.d.ts +14 -0
- package/dist/frontend/lowering/builtins/errors.js +83 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +32 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +678 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -0
- package/dist/frontend/lowering/builtins/filesystem.d.ts +108 -0
- package/dist/frontend/lowering/builtins/filesystem.js +1061 -0
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -0
- package/dist/frontend/lowering/builtins/ipc.d.ts +8 -0
- package/dist/frontend/lowering/builtins/ipc.js +76 -0
- package/dist/frontend/lowering/builtins/ipc.js.map +1 -0
- package/dist/frontend/lowering/builtins/json.d.ts +12 -0
- package/dist/frontend/lowering/builtins/json.js +387 -0
- package/dist/frontend/lowering/builtins/json.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +85 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +346 -0
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-calls.js +303 -0
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +38 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +344 -0
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -0
- package/dist/frontend/lowering/builtins/numbers.d.ts +15 -0
- package/dist/frontend/lowering/builtins/numbers.js +124 -0
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -0
- package/dist/frontend/lowering/builtins/operating-system.d.ts +13 -0
- package/dist/frontend/lowering/builtins/operating-system.js +148 -0
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -0
- package/dist/frontend/lowering/builtins/performance.d.ts +13 -0
- package/dist/frontend/lowering/builtins/performance.js +100 -0
- package/dist/frontend/lowering/builtins/performance.js.map +1 -0
- package/dist/frontend/lowering/builtins/process.d.ts +50 -0
- package/dist/frontend/lowering/builtins/process.js +1138 -0
- package/dist/frontend/lowering/builtins/process.js.map +1 -0
- package/dist/frontend/lowering/builtins/promises.d.ts +14 -0
- package/dist/frontend/lowering/builtins/promises.js +356 -0
- package/dist/frontend/lowering/builtins/promises.js.map +1 -0
- package/dist/frontend/lowering/builtins/properties.d.ts +11 -0
- package/dist/frontend/lowering/builtins/properties.js +186 -0
- package/dist/frontend/lowering/builtins/properties.js.map +1 -0
- package/dist/frontend/lowering/builtins/querystring.d.ts +19 -0
- package/dist/frontend/lowering/builtins/querystring.js +150 -0
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -0
- package/dist/frontend/lowering/builtins/readline.d.ts +13 -0
- package/dist/frontend/lowering/builtins/readline.js +138 -0
- package/dist/frontend/lowering/builtins/readline.js.map +1 -0
- package/dist/frontend/lowering/builtins/receiver-types.d.ts +5 -0
- package/dist/frontend/lowering/builtins/receiver-types.js +15 -0
- package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -0
- package/dist/frontend/lowering/builtins/reflection.d.ts +13 -0
- package/dist/frontend/lowering/builtins/reflection.js +95 -0
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -0
- package/dist/frontend/lowering/builtins/strings.d.ts +14 -0
- package/dist/frontend/lowering/builtins/strings.js +121 -0
- package/dist/frontend/lowering/builtins/strings.js.map +1 -0
- package/dist/frontend/lowering/builtins/text-codecs.d.ts +29 -0
- package/dist/frontend/lowering/builtins/text-codecs.js +590 -0
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -0
- package/dist/frontend/lowering/builtins/timers.d.ts +22 -0
- package/dist/frontend/lowering/builtins/timers.js +180 -0
- package/dist/frontend/lowering/builtins/timers.js.map +1 -0
- package/dist/frontend/lowering/builtins/url.d.ts +37 -0
- package/dist/frontend/lowering/builtins/url.js +596 -0
- package/dist/frontend/lowering/builtins/url.js.map +1 -0
- package/dist/frontend/lowering/builtins/util-types.d.ts +7 -0
- package/dist/frontend/lowering/builtins/util-types.js +31 -0
- package/dist/frontend/lowering/builtins/util-types.js.map +1 -0
- package/dist/frontend/lowering/call-arguments.d.ts +72 -0
- package/dist/frontend/lowering/call-arguments.js +618 -0
- package/dist/frontend/lowering/call-arguments.js.map +1 -0
- package/dist/frontend/lowering/call-signatures.d.ts +115 -0
- package/dist/frontend/lowering/call-signatures.js +719 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -0
- package/dist/frontend/lowering/callback-arg.js.map +1 -1
- package/dist/frontend/lowering/checked-iterable-spread.js +53 -10
- package/dist/frontend/lowering/checked-iterable-spread.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.js +41 -9
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +1 -1
- package/dist/frontend/lowering/class-callbacks.js +130 -27
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +1 -1
- package/dist/frontend/lowering/class-construction.js +247 -50
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.js +109 -29
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +2471 -465
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +284 -44
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +17 -5
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +199 -51
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +345 -86
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js +80 -17
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-static-data.js +76 -16
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/coercions/builders.d.ts +13 -0
- package/dist/frontend/lowering/coercions/builders.js +77 -0
- package/dist/frontend/lowering/coercions/builders.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +58 -0
- package/dist/frontend/lowering/coercions/function-adapters.js +430 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -0
- package/dist/frontend/lowering/coercions/island.d.ts +37 -0
- package/dist/frontend/lowering/coercions/island.js +350 -0
- package/dist/frontend/lowering/coercions/island.js.map +1 -0
- package/dist/frontend/lowering/coercions/state.d.ts +14 -0
- package/dist/frontend/lowering/coercions/state.js +16 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural-plans.d.ts +40 -0
- package/dist/frontend/lowering/coercions/structural-plans.js +447 -0
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural.d.ts +63 -0
- package/dist/frontend/lowering/coercions/structural.js +616 -0
- package/dist/frontend/lowering/coercions/structural.js.map +1 -0
- package/dist/frontend/lowering/coercions/unions.d.ts +65 -0
- package/dist/frontend/lowering/coercions/unions.js +318 -0
- package/dist/frontend/lowering/coercions/unions.js.map +1 -0
- package/dist/frontend/lowering/collection-ingestion.js +359 -67
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +92 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +1646 -0
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-construction.d.ts +42 -0
- package/dist/frontend/lowering/containers/array-construction.js +1044 -0
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -0
- package/dist/frontend/lowering/containers/array-iteration.d.ts +16 -0
- package/dist/frontend/lowering/containers/array-iteration.js +95 -0
- package/dist/frontend/lowering/containers/array-iteration.js.map +1 -0
- package/dist/frontend/lowering/containers/array-methods.d.ts +27 -0
- package/dist/frontend/lowering/containers/array-methods.js +1854 -0
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.d.ts +17 -17
- package/dist/frontend/lowering/containers/bytes.js +419 -105
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +26 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +179 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -0
- package/dist/frontend/lowering/containers/collection-grouping.d.ts +19 -0
- package/dist/frontend/lowering/containers/collection-grouping.js +297 -0
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -0
- package/dist/frontend/lowering/containers/collection-methods.d.ts +57 -0
- package/dist/frontend/lowering/containers/collection-methods.js +1314 -0
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -0
- package/dist/frontend/lowering/containers/dynamic-receivers.d.ts +18 -0
- package/dist/frontend/lowering/containers/dynamic-receivers.js +114 -0
- package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -0
- package/dist/frontend/lowering/containers/for-of.d.ts +60 -0
- package/dist/frontend/lowering/containers/for-of.js +643 -0
- package/dist/frontend/lowering/containers/for-of.js.map +1 -0
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +132 -0
- package/dist/frontend/lowering/containers/indexed-objects.js +1743 -0
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -0
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +20 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js +809 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +585 -157
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +213 -63
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.js +263 -64
- package/dist/frontend/lowering/crypto-tables.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +172 -68
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +41 -8
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/error-methods.js +339 -65
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/evaluation-safety.js +3 -2
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/global-symbols.js +2 -1
- package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -1
- package/dist/frontend/lowering/expressions/native-proxy.js +11 -5
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +67 -13
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +589 -162
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +68 -17
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.js +45 -18
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
- package/dist/frontend/lowering/function-context.js +5 -1
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.d.ts +67 -0
- package/dist/frontend/lowering/function-returns.js +392 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -0
- package/dist/frontend/lowering/generator-delegation.d.ts +1 -1
- package/dist/frontend/lowering/generator-delegation.js +171 -39
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +176 -36
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +274 -0
- package/dist/frontend/lowering/generic-functions.js +1727 -0
- package/dist/frontend/lowering/generic-functions.js.map +1 -0
- package/dist/frontend/lowering/import-meta.d.ts +1 -1
- package/dist/frontend/lowering/import-meta.js +37 -14
- package/dist/frontend/lowering/import-meta.js.map +1 -1
- package/dist/frontend/lowering/indexed-comparison.js +6 -2
- package/dist/frontend/lowering/indexed-comparison.js.map +1 -1
- package/dist/frontend/lowering/iterator-consumption.d.ts +9 -0
- package/dist/frontend/lowering/iterator-consumption.js +91 -0
- package/dist/frontend/lowering/iterator-consumption.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.js +40 -17
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.test.js +49 -11
- package/dist/frontend/lowering/lib-boundary.test.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.d.ts +0 -19
- package/dist/frontend/lowering/lower-array-sort.js +331 -566
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +248 -43
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +71 -16
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +420 -71
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +39 -558
- package/dist/frontend/lowering/lower-calls.js +2593 -5667
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +243 -242
- package/dist/frontend/lowering/lower-classes.js +1704 -727
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +35 -35
- package/dist/frontend/lowering/lower-comptime.js +39 -37
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +59 -31
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.js +5 -2
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +322 -85
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.js +19 -7
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +194 -194
- package/dist/frontend/lowering/lower-exprs.js +3455 -1153
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +23 -0
- package/dist/frontend/lowering/lower-functions.js +449 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -0
- package/dist/frontend/lowering/lower-generators.js +121 -32
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +15 -4
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +479 -89
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +79 -79
- package/dist/frontend/lowering/lower-island.js +365 -273
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-island.test.js +7 -2
- package/dist/frontend/lowering/lower-island.test.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +17 -8
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +94 -94
- package/dist/frontend/lowering/lower-modules.js +612 -321
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +91 -20
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +25 -8
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.js +115 -34
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +1210 -290
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +148 -148
- package/dist/frontend/lowering/lower-stmts.js +2312 -984
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js +13 -5
- package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +362 -90
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-system-errors.js +30 -8
- package/dist/frontend/lowering/lower-system-errors.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +40 -13
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.d.ts +31 -0
- package/dist/frontend/lowering/lower-timers.js +336 -0
- package/dist/frontend/lowering/lower-timers.js.map +1 -0
- package/dist/frontend/lowering/lower-url.d.ts +1 -1
- package/dist/frontend/lowering/lower-url.js +46 -13
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +21 -351
- package/dist/frontend/lowering/lowerer.js +1031 -2704
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +85 -17
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.js +43 -8
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.d.ts +21 -1
- package/dist/frontend/lowering/native-ffi.js +487 -18
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js +55 -10
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
- package/dist/frontend/lowering/object-factory-new.d.ts +1 -1
- package/dist/frontend/lowering/object-factory-new.js +36 -11
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/optional-arguments.js +49 -20
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +66 -14
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-locals.js +3 -1
- package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.js +4 -1
- package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.test.js +86 -18
- package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -1
- package/dist/frontend/lowering/static-this.js +13 -6
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/string-index.js +32 -10
- package/dist/frontend/lowering/string-index.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +42 -42
- package/dist/frontend/lowering/surfaces.js +1094 -249
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.js +40 -15
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/symbol-methods.js.map +1 -1
- package/dist/frontend/lowering/text-decoder-encoding.js +236 -24
- package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
- package/dist/frontend/lowering/text-decoder-encoding.test.js +84 -12
- package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.js +59 -16
- package/dist/frontend/lowering/union-narrow.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.test.js +24 -7
- package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
- package/dist/frontend/lowering/union-retag.js +155 -40
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +131 -33
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unregistered-class-types.js.map +1 -1
- package/dist/frontend/lowering/unregistered-class-types.test.js +34 -8
- package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
- package/dist/frontend/module-syntax.js +21 -8
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/module-syntax.test.js +37 -13
- package/dist/frontend/module-syntax.test.js.map +1 -1
- package/dist/frontend/npm-fetch-analysis.js +13 -4
- package/dist/frontend/npm-fetch-analysis.js.map +1 -1
- package/dist/frontend/npm-fetch-analysis.test.js +33 -10
- package/dist/frontend/npm-fetch-analysis.test.js.map +1 -1
- package/dist/frontend/npm-fetch-node.js.map +1 -1
- package/dist/frontend/npm-fetch-syntax.js +4 -9
- package/dist/frontend/npm-fetch-syntax.js.map +1 -1
- package/dist/frontend/npm-node.js +3 -1
- package/dist/frontend/npm-node.js.map +1 -1
- package/dist/frontend/npm-static-bundled-cjs.js +88 -29
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
- package/dist/frontend/npm-static-bundled-cjs.test.js +29 -10
- package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -1
- package/dist/frontend/npm-static-declaration-syntax.js +148 -56
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
- package/dist/frontend/npm-static-declarations.d.ts +1 -1
- package/dist/frontend/npm-static-declarations.js.map +1 -1
- package/dist/frontend/npm-static-declarations.test.js +33 -7
- package/dist/frontend/npm-static-declarations.test.js.map +1 -1
- package/dist/frontend/npm-static-prune.js +26 -12
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-prune.test.js +17 -3
- package/dist/frontend/npm-static-prune.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.js +2 -3
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +64 -21
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static-rewrite.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.js +9 -4
- package/dist/frontend/npm-static-subtyping.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.test.js +30 -6
- package/dist/frontend/npm-static-subtyping.test.js.map +1 -1
- package/dist/frontend/npm-static.js +15 -4
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.js +122 -36
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.js +30 -10
- package/dist/frontend/npm.test.js.map +1 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.js +25 -8
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +21 -7
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-node.js +5 -3
- package/dist/frontend/program-node.js.map +1 -1
- package/dist/frontend/program.d.ts +2 -2
- package/dist/frontend/program.js +234 -101
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +27 -27
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/provenance-core.js +8 -4
- package/dist/frontend/provenance-core.js.map +1 -1
- package/dist/frontend/provenance-registry.js +1 -4
- package/dist/frontend/provenance-registry.js.map +1 -1
- package/dist/frontend/resolve.js +32 -20
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +1 -1
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/runtime-resolve.js +13 -4
- package/dist/frontend/runtime-resolve.js.map +1 -1
- package/dist/frontend/runtime-resolve.test.js +25 -9
- package/dist/frontend/runtime-resolve.test.js.map +1 -1
- package/dist/frontend/services-node.js +6 -2
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services-node.test.js +18 -6
- package/dist/frontend/services-node.test.js.map +1 -1
- package/dist/frontend/services.js +8 -4
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +6 -2
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/ts7/api.js +12 -4
- package/dist/frontend/ts7/api.js.map +1 -1
- package/dist/frontend/ts7/ast-bytes.js +10 -3
- package/dist/frontend/ts7/ast-bytes.js.map +1 -1
- package/dist/frontend/ts7/ast-bytes.test.js +23 -4
- package/dist/frontend/ts7/ast-bytes.test.js.map +1 -1
- package/dist/frontend/ts7/ast-guards.test.js +14 -5
- package/dist/frontend/ts7/ast-guards.test.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +6 -1
- package/dist/frontend/ts7/ast-node.js +484 -164
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +109 -36
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-text.js +13 -3
- package/dist/frontend/ts7/ast-text.js.map +1 -1
- package/dist/frontend/ts7/ast-text.test.js.map +1 -1
- package/dist/frontend/ts7/ast-types.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +1 -1
- package/dist/frontend/ts7/ast-wire.js +55 -20
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.test.js +53 -8
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
- package/dist/frontend/ts7/ast.js +47 -28
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/census-check.js +1 -1
- package/dist/frontend/ts7/census-check.js.map +1 -1
- package/dist/frontend/ts7/checker-cache.js.map +1 -1
- package/dist/frontend/ts7/checker.js +5 -3
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +54 -17
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/enums.test.js +9 -4
- package/dist/frontend/ts7/enums.test.js.map +1 -1
- package/dist/frontend/ts7/native-api.js.map +1 -1
- package/dist/frontend/ts7/native-host.js.map +1 -1
- package/dist/frontend/ts7/native-process.js +9 -3
- package/dist/frontend/ts7/native-process.js.map +1 -1
- package/dist/frontend/ts7/program-adapter.js +1 -1
- package/dist/frontend/ts7/program-adapter.js.map +1 -1
- package/dist/frontend/ts7/program-host.js +7 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +43 -11
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-api.js +3 -1
- package/dist/frontend/ts7/rpc-api.js.map +1 -1
- package/dist/frontend/ts7/rpc-client.js +15 -5
- package/dist/frontend/ts7/rpc-client.js.map +1 -1
- package/dist/frontend/ts7/rpc-client.test.js +26 -8
- package/dist/frontend/ts7/rpc-client.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
- package/dist/frontend/ts7/rpc-filesystem.test.js +43 -10
- package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.js +16 -6
- package/dist/frontend/ts7/rpc-process.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-wire.d.ts +1 -0
- package/dist/frontend/ts7/rpc-wire.js +41 -14
- package/dist/frontend/ts7/rpc-wire.js.map +1 -1
- package/dist/frontend/ts7/rpc-wire.test.js +36 -6
- package/dist/frontend/ts7/rpc-wire.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.js +209 -68
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.test.js +29 -14
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.js +7 -1
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.test.js +17 -3
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.js +147 -51
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +72 -19
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +2 -2
- package/dist/frontend/ts7/session-cache.js +10 -3
- package/dist/frontend/ts7/session-cache.js.map +1 -1
- package/dist/frontend/ts7/session-cache.test.js +13 -4
- package/dist/frontend/ts7/session-cache.test.js.map +1 -1
- package/dist/frontend/ts7/session-path.js +25 -10
- package/dist/frontend/ts7/session-path.js.map +1 -1
- package/dist/frontend/ts7/session-path.test.js +47 -4
- package/dist/frontend/ts7/session-path.test.js.map +1 -1
- package/dist/frontend/ts7/session-timing.js +22 -3
- package/dist/frontend/ts7/session-timing.js.map +1 -1
- package/dist/frontend/ts7/session-timing.test.js +12 -3
- package/dist/frontend/ts7/session-timing.test.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +1 -0
- package/dist/frontend/ts7/session.js +109 -35
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/session.test.js +69 -15
- package/dist/frontend/ts7/session.test.js.map +1 -1
- package/dist/frontend/ts7/source-parser.js +17 -6
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +32 -9
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/tsc-codes.js +56 -11
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/tsc-codes.test.d.ts +1 -0
- package/dist/frontend/tsc-codes.test.js +16 -0
- package/dist/frontend/tsc-codes.test.js.map +1 -0
- package/dist/frontend/type-mapper.js +547 -206
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +108 -33
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend/union-discriminants.js +8 -2
- package/dist/frontend/union-discriminants.js.map +1 -1
- package/dist/frontend/union-discriminants.test.js +77 -20
- package/dist/frontend/union-discriminants.test.js.map +1 -1
- package/dist/index.d.ts +9 -8
- package/dist/index.js +150 -81
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +97 -38
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +91 -15
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/api.d.ts +4 -0
- package/dist/ir/api.js +6 -0
- package/dist/ir/api.js.map +1 -0
- package/dist/ir/build.d.ts +7 -0
- package/dist/ir/build.js +27 -1
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.d.ts +9 -0
- package/dist/ir/builtin-effects.js +631 -0
- package/dist/ir/builtin-effects.js.map +1 -0
- package/dist/ir/builtin-signatures.d.ts +15 -0
- package/dist/ir/builtin-signatures.js +3396 -0
- package/dist/ir/builtin-signatures.js.map +1 -0
- package/dist/ir/byte-numbers.d.ts +20 -0
- package/dist/ir/byte-numbers.js +116 -0
- package/dist/ir/byte-numbers.js.map +1 -0
- package/dist/ir/byte-numbers.test.d.ts +1 -0
- package/dist/ir/byte-numbers.test.js +55 -0
- package/dist/ir/byte-numbers.test.js.map +1 -0
- package/dist/ir/constant-tables.js +13 -5
- package/dist/ir/constant-tables.js.map +1 -1
- package/dist/ir/constant-tables.test.js +47 -7
- package/dist/ir/constant-tables.test.js.map +1 -1
- package/dist/ir/control-flow.js +2 -1
- package/dist/ir/control-flow.js.map +1 -1
- package/dist/ir/control-flow.test.js +35 -11
- package/dist/ir/control-flow.test.js.map +1 -1
- package/dist/ir/initializer-bindings.d.ts +9 -0
- package/dist/ir/initializer-bindings.js +115 -0
- package/dist/ir/initializer-bindings.js.map +1 -0
- package/dist/ir/initializer-bindings.test.d.ts +1 -0
- package/dist/ir/initializer-bindings.test.js +118 -0
- package/dist/ir/initializer-bindings.test.js.map +1 -0
- package/dist/ir/integer-loop-facts.d.ts +12 -0
- package/dist/ir/integer-loop-facts.js +137 -0
- package/dist/ir/integer-loop-facts.js.map +1 -0
- package/dist/ir/integer-loops.d.ts +19 -0
- package/dist/ir/integer-loops.js +172 -11
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +122 -9
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +8 -6
- package/dist/ir/integer-ranges.js +416 -90
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +239 -10
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/intrinsic-signatures.d.ts +20 -0
- package/dist/ir/intrinsic-signatures.js +57 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -0
- package/dist/ir/ir.d.ts +14 -2155
- package/dist/ir/ir.js +169 -1394
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +98 -77
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +221 -0
- package/dist/ir/runtime-features.js +551 -0
- package/dist/ir/runtime-features.js.map +1 -0
- package/dist/ir/runtime-features.test.d.ts +1 -0
- package/dist/ir/runtime-features.test.js +98 -0
- package/dist/ir/runtime-features.test.js.map +1 -0
- package/dist/ir/scalar-records.js +130 -40
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/scalar-records.test.js +146 -27
- package/dist/ir/scalar-records.test.js.map +1 -1
- package/dist/ir/serialize.js +4 -2
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +44 -9
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/traverse.js +156 -43
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/traverse.test.js +99 -24
- package/dist/ir/traverse.test.js.map +1 -1
- package/dist/ir/validate.d.ts +1 -31
- package/dist/ir/validate.js +826 -1915
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +627 -111
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/cache-primitives.js +9 -10
- package/dist/library/cache-primitives.js.map +1 -1
- package/dist/library/cache-reset.test.js +2 -1
- package/dist/library/cache-reset.test.js.map +1 -1
- package/dist/library/compiler-self-identity.js +11 -5
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.js +10 -3
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/fence-eval.js +24 -7
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/fence-eval.test.js +31 -7
- package/dist/library/fence-eval.test.js.map +1 -1
- package/dist/library/int-infer.js +199 -59
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/int-infer.test.js +133 -57
- package/dist/library/int-infer.test.js.map +1 -1
- package/dist/library/ir-policy.d.ts +27 -0
- package/dist/library/ir-policy.js +232 -0
- package/dist/library/ir-policy.js.map +1 -0
- package/dist/library/library-cache.js +40 -17
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +24 -13
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/library-profile.js +68 -13
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +48 -20
- package/dist/library/prepare.js.map +1 -1
- package/dist/library/semantic-source.js +16 -14
- package/dist/library/semantic-source.js.map +1 -1
- package/dist/library/semantic-source.test.js +9 -14
- package/dist/library/semantic-source.test.js.map +1 -1
- package/dist/library/sidecar-validate.js +53 -12
- package/dist/library/sidecar-validate.js.map +1 -1
- package/dist/library/sidecar.js +85 -24
- package/dist/library/sidecar.js.map +1 -1
- package/dist/library/trap-teaching.js +11 -2
- package/dist/library/trap-teaching.js.map +1 -1
- package/dist/native/cache.js +10 -4
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cli.js +34 -9
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +167 -43
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +129 -32
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/comptime.js +23 -7
- package/dist/native/comptime.js.map +1 -1
- package/dist/native/comptime.test.js +26 -6
- package/dist/native/comptime.test.js.map +1 -1
- package/dist/native/executable-cache.js +77 -27
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/executable-cache.test.js +41 -6
- package/dist/native/executable-cache.test.js.map +1 -1
- package/dist/native/file-identity.js +9 -2
- package/dist/native/file-identity.js.map +1 -1
- package/dist/native/file-identity.test.js.map +1 -1
- package/dist/native/library.js +50 -12
- package/dist/native/library.js.map +1 -1
- package/dist/native/prepare.js +119 -34
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +22 -6
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/runtime-typescript.js +24 -11
- package/dist/native/runtime-typescript.js.map +1 -1
- package/dist/native/runtime-typescript.test.js.map +1 -1
- package/dist/native/sanitizer.js +71 -18
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +77 -20
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/task.js.map +1 -1
- package/dist/native/task.test.js +7 -2
- package/dist/native/task.test.js.map +1 -1
- package/dist/native/toolchain.js +74 -29
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +95 -18
- package/dist/native/toolchain.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -1
- package/dist/startup-cache.js +1 -1
- package/dist/startup-cache.js.map +1 -1
- package/dist/timing.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +0 -601
- package/dist/frontend/lowering/lower-builtins.js +0 -8984
- package/dist/frontend/lowering/lower-builtins.js.map +0 -1
- package/dist/frontend/lowering/lower-containers.d.ts +0 -382
- package/dist/frontend/lowering/lower-containers.js +0 -7366
- package/dist/frontend/lowering/lower-containers.js.map +0 -1
|
@@ -21,43 +21,52 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
21
21
|
import { deflateRawSync } from "node:zlib";
|
|
22
22
|
import { endsWithJump, matchStringSelfConcat, streamTypedRefEligible } from "../../ir/analysis.js";
|
|
23
23
|
import { emitLibraryIdentityLines } from "../library-identity-markers.js";
|
|
24
|
-
import { CAUGHT, ffiCallbackType, isDynTypedRefType, isFfiContextParam, isRefCounted, isUnitType,
|
|
25
|
-
import {
|
|
24
|
+
import { CAUGHT, ffiCallbackType, isDynTypedRefType, isFfiContextParam, isRefCounted, isUnitType, POINTER_KINDS, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, typeKey, VOID, } from "../../ir/ir.js";
|
|
25
|
+
import { moduleRuntimeFeatures, moduleEmbedsBuiltin, moduleEmbedsCompressedNpm, NPM_COMPRESS_MIN, } from "../../ir/runtime-features.js";
|
|
26
|
+
import { matchIntegerArrayForLoop, matchIntegerBytesForLoop, matchIntegerCountedForLoop, } from "../../ir/integer-loops.js";
|
|
27
|
+
import { emitCountedLoopLimit } from "./counted-loops.js";
|
|
28
|
+
import { emitLiteralSwitch } from "./switch-dispatch.js";
|
|
29
|
+
import { findBytesBounds } from "./bytes-bounds.js";
|
|
26
30
|
import { scalarizeNumericRecords } from "../../ir/scalar-records.js";
|
|
27
31
|
import { everyStmtList } from "../../ir/traverse.js";
|
|
28
32
|
import { analyzeIntegerRanges } from "../../ir/integer-ranges.js";
|
|
33
|
+
import { findIntegerViews } from "./integer-views.js";
|
|
34
|
+
import { findInitializerBindings, withInitializerBindings } from "../../ir/initializer-bindings.js";
|
|
29
35
|
import { findConstantNumericTables } from "../../ir/constant-tables.js";
|
|
30
|
-
import { allocateFfiCallbackAdapters, hasForeignFfiCallback, hasRetainedFfiCallback } from "../ffi-callbacks.js";
|
|
36
|
+
import { allocateFfiCallbackAdapters, hasForeignFfiCallback, hasRetainedFfiCallback, } from "../ffi-callbacks.js";
|
|
31
37
|
import { RUNTIME_ABI_MARKER } from "../runtime-abi.js";
|
|
32
38
|
import { computeMayThrow } from "../may-throw.js";
|
|
33
|
-
import { mangleArgPack, mangleAsyncSpawn, mangleBorrowedFunction, mangleClassObj, mangleClassStruct, mangleFnClosure, mangleFunction, mangleGenDrop, mangleGenSpawn, mangleGlobal, mangleLocal, mangleRecordStruct, mangleTrampoline, mangleWrapper, mangleVtInstance } from "../mangle.js";
|
|
39
|
+
import { mangleArgPack, mangleAsyncSpawn, mangleBorrowedFunction, mangleClassObj, mangleClassStruct, mangleFnClosure, mangleFunction, mangleGenDrop, mangleGenSpawn, mangleGlobal, mangleLocal, mangleRecordStruct, mangleTrampoline, mangleWrapper, mangleVtInstance, } from "../mangle.js";
|
|
34
40
|
import { analyzeCallLifetimes } from "./call-lifetimes.js";
|
|
35
|
-
import { emitStackUnion, findLocalStackUnions } from "./stack-unions.js";
|
|
41
|
+
import { canStackUnion, emitStackUnion, findLocalStackUnions } from "./stack-unions.js";
|
|
42
|
+
import { allocateLocalUnion, findLocalUnionStorage, storeLocalUnion, } from "./local-union-storage.js";
|
|
36
43
|
import { BlockBuilder } from "./blocks.js";
|
|
37
|
-
import { emitLocalArrayRead,
|
|
38
|
-
import { emitStackMapRead, findMapReadLifetimes } from "./map-read-lifetimes.js";
|
|
44
|
+
import { emitLocalArrayRead, findLocalArrayReads, findCallArrayReads, OptionalArrayReads, } from "./local-array-reads.js";
|
|
45
|
+
import { emitStackMapRead, findMapReadLifetimes, matchMapRead, } from "./map-read-lifetimes.js";
|
|
39
46
|
import { emitBorrowedFieldSequence } from "./borrowed-receivers.js";
|
|
47
|
+
import { emitBorrowedInput } from "./borrowed-inputs.js";
|
|
48
|
+
import { ReferenceEffects } from "./reference-effects.js";
|
|
40
49
|
import { LlvmDebugInfo } from "./debug-info.js";
|
|
41
|
-
import { f64Lit, ffiNativeTypeLl, ffiNativeParamLl, ffiNativeReturnLl, llvmCommentText } from "./common.js";
|
|
50
|
+
import { f64Lit, ffiNativeTypeLl, ffiNativeParamLl, ffiNativeReturnLl, llvmCommentText, } from "./common.js";
|
|
42
51
|
import { ffiExtendsNarrowIntegers } from "../targets.js";
|
|
43
|
-
import { emitLiteralExpr, emitOperatorExpr, emitStringExpr, emitContainerExpr, emitRecordExpr } from "./expr-primitives.js";
|
|
52
|
+
import { emitLiteralExpr, emitOperatorExpr, emitStringExpr, emitContainerExpr, emitRecordExpr, } from "./expr-primitives.js";
|
|
44
53
|
import { emitControlExpr } from "./expr-control.js";
|
|
45
54
|
import { emitCallExpr } from "./expr-calls.js";
|
|
46
55
|
import { emitDynamicExpr } from "./expr-dynamic.js";
|
|
47
56
|
import { emitIntrinsicExpr, emitSerializationExpr, emitAsyncExpr } from "./expr-async.js";
|
|
48
57
|
import { emitJsInteropExpr, emitExpr } from "./expr-dispatch.js";
|
|
49
|
-
import { emitJsMarshal, emitJsOp, emitJsExit, islandAdapter, islandTypedAdapter } from "./expr-island.js";
|
|
50
|
-
import { dynKind, raceAdapterFor, genResultThunkFor, childExitThunkFor, childExitSignalThunkFor, childDataThunkFor, execFileThunkFor, ipcMessageThunkFor, ipcSendThunkFor, emitterFixedAdapter, wrapEmitterListener, unwrapNullableClosure, closeBindThunkFor, closeOverrideWrapFor } from "./expr-callbacks.js";
|
|
51
|
-
import { streamDataAdapter, streamDoneFnFor, cryptoBytesThunkFor, fsRenameThunkFor, streamCbThunkFor, zlibBytesThunkFor } from "./expr-stream-callbacks.js";
|
|
52
|
-
import { emitStableReceiver, resolveThunkFor, tagInSet, arrPush, emitArrayCopyLoop, emitStrIntrinsic, emitArrIntrinsic, wrapNullable, emitMapNew, mapSet, emitMapLikeIntrinsic, emitSetNew } from "./expr-containers.js";
|
|
53
|
-
import { emitIntegerLoopIndex, emitBytesIndex, emitBytesData, emitBytesLength, emitBytesGet, emitToUint32, emitBytesSet, emitBytesIntrinsic } from "./expr-bytes.js";
|
|
58
|
+
import { emitJsMarshal, emitJsOp, emitJsExit, islandAdapter, islandTypedAdapter, } from "./expr-island.js";
|
|
59
|
+
import { dynKind, raceAdapterFor, genResultThunkFor, childExitThunkFor, childExitSignalThunkFor, childDataThunkFor, execFileThunkFor, ipcMessageThunkFor, ipcSendThunkFor, emitterFixedAdapter, wrapEmitterListener, unwrapNullableClosure, closeBindThunkFor, closeOverrideWrapFor, } from "./expr-callbacks.js";
|
|
60
|
+
import { streamDataAdapter, streamDoneFnFor, cryptoBytesThunkFor, fsRenameThunkFor, streamCbThunkFor, zlibBytesThunkFor, } from "./expr-stream-callbacks.js";
|
|
61
|
+
import { emitStableReceiver, resolveThunkFor, tagInSet, arrPush, emitArrayCopyLoop, emitStrIntrinsic, emitArrIntrinsic, wrapNullable, emitMapNew, mapSet, emitMapLikeIntrinsic, emitSetNew, } from "./expr-containers.js";
|
|
62
|
+
import { emitIntegerLoopIndex, emitBytesIndex, emitBytesData, emitBytesLength, emitBytesGet, emitToUint32, emitBytesSet, emitBytesIntrinsic, } from "./expr-bytes.js";
|
|
54
63
|
import { emitRegexIntrinsic, emitRecordKeyGet, keyedRecordReadInto } from "./expr-records.js";
|
|
55
|
-
import { dynPromiseAdapter, streamTypedRefCommitAdapter, liveDynUnionRefAdapter, streamTypedRefBoxValue, streamTypedRefMaterializeAdapter, streamFromArrayAdapter } from "./expr-stream-bridges.js";
|
|
56
|
-
import { emitWebLibCall, emitDynamicLibCall, emitFilesystemLibCall, emitPathUrlLibCall, emitPrimitiveLibCall } from "./lib-filesystem.js";
|
|
57
|
-
import { emitChildProcessLibCall, emitAsyncContextLibCall, emitProcessLibCall, emitErrorsEventsLibCall } from "./lib-process.js";
|
|
64
|
+
import { dynPromiseAdapter, streamTypedRefCommitAdapter, liveDynUnionRefAdapter, streamTypedRefBoxValue, streamTypedRefMaterializeAdapter, streamFromArrayAdapter, } from "./expr-stream-bridges.js";
|
|
65
|
+
import { emitWebLibCall, emitDynamicLibCall, emitFilesystemLibCall, emitPathUrlLibCall, emitPrimitiveLibCall, } from "./lib-filesystem.js";
|
|
66
|
+
import { emitChildProcessLibCall, emitAsyncContextLibCall, emitProcessLibCall, emitErrorsEventsLibCall, } from "./lib-process.js";
|
|
58
67
|
import { emitStreamLibCall } from "./lib-stream.js";
|
|
59
68
|
import { emitNetworkHttpLibCall } from "./lib-network.js";
|
|
60
|
-
import { emitAssertInspectLibCall, emitIoLibCall, emitGenericLibCall, emitLibCall } from "./lib-dispatch.js";
|
|
69
|
+
import { emitAssertInspectLibCall, emitIoLibCall, emitGenericLibCall, emitLibCall, } from "./lib-dispatch.js";
|
|
61
70
|
import { buildClassGraph, classEnvironmentIndex, classFieldIndex, classStructSym, } from "./classes.js";
|
|
62
71
|
import { LlDyn } from "./dyn.js";
|
|
63
72
|
import { LlvmUnsupportedError } from "./unsupported.js";
|
|
@@ -99,7 +108,7 @@ export function emitLlvmModuleSource(mod, options = {}) {
|
|
|
99
108
|
const length = parts.reduce((total, part) => total + part.length, Math.max(0, parts.length - 1));
|
|
100
109
|
if (length <= 256 * 1024 * 1024)
|
|
101
110
|
return parts.join("\n");
|
|
102
|
-
return parts.flatMap((part, index) => index === 0 ? [part] : ["\n", part]);
|
|
111
|
+
return parts.flatMap((part, index) => (index === 0 ? [part] : ["\n", part]));
|
|
103
112
|
}
|
|
104
113
|
function llStrBytes(text) {
|
|
105
114
|
return llBytes(Buffer.from(text, "utf8"));
|
|
@@ -108,6 +117,8 @@ export class LlEmitter {
|
|
|
108
117
|
mod;
|
|
109
118
|
localArrayReads = new Map();
|
|
110
119
|
localStackUnions = new Map();
|
|
120
|
+
localUnionStorageProofs = new Map();
|
|
121
|
+
localUnionStorage = new Map();
|
|
111
122
|
integerArrayBindings = new Set();
|
|
112
123
|
fieldAliasTags = new Map();
|
|
113
124
|
fieldPointerTags = new Map();
|
|
@@ -156,6 +167,7 @@ export class LlEmitter {
|
|
|
156
167
|
* immortal (rc == SIZE_MAX) static per (union, unit tag).
|
|
157
168
|
* RC entry points and the collector skip immortals. */
|
|
158
169
|
unitInstances = new Map();
|
|
170
|
+
immortalValues = new Set();
|
|
159
171
|
/** Regex literal templates: "<flags>/<pattern>" → { symbol, interned
|
|
160
172
|
* source/flags literal refs } — one immortal ScrRegex template per distinct
|
|
161
173
|
* (pattern, flags) pair; the bytecode slot starts null and the runtime
|
|
@@ -189,12 +201,13 @@ export class LlEmitter {
|
|
|
189
201
|
needsBadKey = false;
|
|
190
202
|
needsRetainBox = false;
|
|
191
203
|
fnByName = new Map();
|
|
192
|
-
|
|
204
|
+
referenceEffects;
|
|
193
205
|
optionalArrayReads;
|
|
194
206
|
callArrayReads = new Map();
|
|
195
207
|
mapReadLifetimes = { locals: new Map(), arguments: new Map() };
|
|
196
208
|
callLifetimes;
|
|
197
209
|
borrowedParameters = new Set();
|
|
210
|
+
stableCallBindings = new Set();
|
|
198
211
|
/** Manifest-bound native imports, used by ffiCall emission. */
|
|
199
212
|
ffiByName = new Map();
|
|
200
213
|
/** C-ABI callback trampolines and (for raw/no-userdata callbacks) their
|
|
@@ -275,10 +288,15 @@ export class LlEmitter {
|
|
|
275
288
|
* for blocks and switches. */
|
|
276
289
|
jumpTargets = [];
|
|
277
290
|
currentLocals = new Map();
|
|
291
|
+
initializerBindings;
|
|
292
|
+
numericLocals = new Map();
|
|
278
293
|
captureIds = new Set();
|
|
279
|
-
/** Active
|
|
294
|
+
/** Active induction bindings retain their width independently of size_t. */
|
|
280
295
|
integerLoopBindings = new Map();
|
|
296
|
+
countedLoopsEnabled = false;
|
|
281
297
|
integerRanges = new Map();
|
|
298
|
+
bytesBounds = new Set();
|
|
299
|
+
integerViews = new Map();
|
|
282
300
|
/** Enclosing try-with-FINALLY regions, innermost last: a `return`
|
|
283
301
|
* inside one runs every crossed finally (innermost first) before the
|
|
284
302
|
* actual ret — the runtime ABI’s pending-return path, with the finally
|
|
@@ -312,12 +330,18 @@ export class LlEmitter {
|
|
|
312
330
|
constructor(mod, options) {
|
|
313
331
|
this.mod = mod;
|
|
314
332
|
this.stackTraces = mod.functions.some((fn) => !everyStmtList(fn.body, {
|
|
315
|
-
stmt: () => true,
|
|
333
|
+
stmt: () => true,
|
|
334
|
+
expr: (expr) => !(expr.kind === "libCall" && expr.fn === "error.stack"),
|
|
316
335
|
}));
|
|
317
|
-
this.debug =
|
|
336
|
+
this.debug =
|
|
337
|
+
options.debugSources === undefined
|
|
338
|
+
? null
|
|
339
|
+
: new LlvmDebugInfo(mod.sourceFile, options.debugSources, options.pointerBits, mod.unions);
|
|
318
340
|
this.constantNumericTables = findConstantNumericTables(mod);
|
|
341
|
+
this.initializerBindings = findInitializerBindings(mod);
|
|
319
342
|
this.sizeType = options.pointerBits === 32 ? "i32" : "i64";
|
|
320
|
-
this.ffiExtendNarrowIntegers =
|
|
343
|
+
this.ffiExtendNarrowIntegers =
|
|
344
|
+
options.wasi === true || ffiExtendsNarrowIntegers(options.targetTriple);
|
|
321
345
|
this.wasi = options.wasi === true;
|
|
322
346
|
this.emitLibraryIdentity = options.emitLibraryIdentity !== false;
|
|
323
347
|
this.runtimeAbiMarker = options.runtimeAbiMarker === true;
|
|
@@ -345,7 +369,7 @@ export class LlEmitter {
|
|
|
345
369
|
for (const u of mod.unions ?? [])
|
|
346
370
|
this.unionsById.set(u.id, u);
|
|
347
371
|
this.optionalArrayReads = new OptionalArrayReads(this.fnByName, this.unionsById);
|
|
348
|
-
this.
|
|
372
|
+
this.referenceEffects = new ReferenceEffects(this.fnByName, (call) => this.optionalArrayReads.get(call) !== null);
|
|
349
373
|
this.callLifetimes = analyzeCallLifetimes(this.fnByName);
|
|
350
374
|
for (const r of mod.records ?? [])
|
|
351
375
|
this.recordsById.set(r.id, r);
|
|
@@ -372,7 +396,9 @@ export class LlEmitter {
|
|
|
372
396
|
isErrorClass: (name) => this.classMeta.get(name)?.root.def.name === "%Error",
|
|
373
397
|
classSubtypes: (name) => {
|
|
374
398
|
const target = this.classMetaOf(name);
|
|
375
|
-
return [...this.classMeta.values()]
|
|
399
|
+
return [...this.classMeta.values()]
|
|
400
|
+
.filter((meta) => target.pre <= meta.pre && meta.pre <= target.post)
|
|
401
|
+
.map((meta) => meta.def.name);
|
|
376
402
|
},
|
|
377
403
|
};
|
|
378
404
|
this.walkers = new LlWalkers(this.shapeHost);
|
|
@@ -492,8 +518,10 @@ export class LlEmitter {
|
|
|
492
518
|
return [`${ffiNativeParamLl(param, this.ffiExtendNarrowIntegers)} %a${i}`];
|
|
493
519
|
});
|
|
494
520
|
if (cb.invoke === "foreign") {
|
|
495
|
-
if (adapter.table === null ||
|
|
496
|
-
cb.params.some(
|
|
521
|
+
if (adapter.table === null ||
|
|
522
|
+
!cb.params.some(isFfiContextParam) ||
|
|
523
|
+
cb.returns !== "void" ||
|
|
524
|
+
cb.params.some((param) => param === "i64" || param === "u64" || param === "pointer")) {
|
|
497
525
|
throw new InternalCompilerError("llvm emitter bug: invalid foreign FFI callback descriptor");
|
|
498
526
|
}
|
|
499
527
|
const dispatch = `${adapter.symbol}_dispatch`;
|
|
@@ -678,7 +706,9 @@ export class LlEmitter {
|
|
|
678
706
|
defs.push(` %invoke_pin = call ptr @scr_closure_retain_v(ptr %cb)`);
|
|
679
707
|
}
|
|
680
708
|
if (cb.returns === "void") {
|
|
681
|
-
defs.push(` call void %fn(${callArgs})`, ...(cb.lifetime === "retained"
|
|
709
|
+
defs.push(` call void %fn(${callArgs})`, ...(cb.lifetime === "retained"
|
|
710
|
+
? [` call void @scr_closure_release_v(ptr %invoke_pin)`]
|
|
711
|
+
: []), ` ret void`, `}`, ``);
|
|
682
712
|
continue;
|
|
683
713
|
}
|
|
684
714
|
defs.push(` %result = call ${internalRet} %fn(${callArgs})`);
|
|
@@ -833,18 +863,18 @@ export class LlEmitter {
|
|
|
833
863
|
// Stream-surface programs fill the loop's stream hook (the deferred
|
|
834
864
|
// next-tick emissions) and the emitter's post-registration flow kick
|
|
835
865
|
// before %main — scr_stream.c links only when the line is emitted
|
|
836
|
-
// (native
|
|
866
|
+
// (native/executable.ts gates on the same predicate).
|
|
837
867
|
const usesStream = runtimeFeatures.stream;
|
|
838
868
|
// Net-surface programs fill the loop's net hooks (and the netSocket
|
|
839
869
|
// handle-dispatch ops for the checked-dynamic boundary); http-surface
|
|
840
870
|
// programs additionally stamp the httpReq/httpRes ops — the C main's
|
|
841
|
-
// install lines, gated on the same predicates native
|
|
871
|
+
// install lines, gated on the same predicates native/executable.ts links by.
|
|
842
872
|
const usesNet = runtimeFeatures.net;
|
|
843
873
|
const usesDgram = runtimeFeatures.dgram;
|
|
844
874
|
const usesHttp2 = runtimeFeatures.http2;
|
|
845
875
|
const usesHttp = runtimeFeatures.http;
|
|
846
876
|
// Fetch-referencing programs register the native fetch bridge before
|
|
847
|
-
// any island entry (the engine's lazy boot consults it) — native
|
|
877
|
+
// any island entry (the engine's lazy boot consults it) — native/executable.ts
|
|
848
878
|
// compiles scr_fetch.c on the same predicate.
|
|
849
879
|
const usesFetch = runtimeFeatures.fetch;
|
|
850
880
|
const embedsZlib = moduleEmbedsBuiltin(this.mod, "node:zlib");
|
|
@@ -852,7 +882,8 @@ export class LlEmitter {
|
|
|
852
882
|
moduleEmbedsBuiltin(this.mod, "node:https") ||
|
|
853
883
|
moduleEmbedsBuiltin(this.mod, "node:net") ||
|
|
854
884
|
moduleEmbedsBuiltin(this.mod, "node:tls");
|
|
855
|
-
const snapshotsTlsCa = runtimeFeatures.tls ||
|
|
885
|
+
const snapshotsTlsCa = runtimeFeatures.tls ||
|
|
886
|
+
runtimeFeatures.tlsCa ||
|
|
856
887
|
moduleEmbedsBuiltin(this.mod, "node:https") ||
|
|
857
888
|
moduleEmbedsBuiltin(this.mod, "node:tls");
|
|
858
889
|
// The process verdict has the same precedence as the C reference
|
|
@@ -865,10 +896,14 @@ export class LlEmitter {
|
|
|
865
896
|
this.declare(`declare void @scr_events_install()`);
|
|
866
897
|
if (usesChildProcess)
|
|
867
898
|
this.declare(`declare void @scr_child_dyn_install()`);
|
|
868
|
-
const childStreamBoxes = usesChildProcess &&
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
899
|
+
const childStreamBoxes = usesChildProcess &&
|
|
900
|
+
usesStream &&
|
|
901
|
+
this.classMeta.has("%Readable") &&
|
|
902
|
+
this.classMeta.has("%Writable")
|
|
903
|
+
? [
|
|
904
|
+
this.dyn.toDynHelper({ kind: "object", className: "%Readable" }),
|
|
905
|
+
this.dyn.toDynHelper({ kind: "object", className: "%Writable" }),
|
|
906
|
+
]
|
|
872
907
|
: null;
|
|
873
908
|
if (childStreamBoxes) {
|
|
874
909
|
this.declare(`@scr_stream_child_ops = external constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }`);
|
|
@@ -1159,9 +1194,7 @@ export class LlEmitter {
|
|
|
1159
1194
|
// entry points). Every dense slot is present; reads retain immortal
|
|
1160
1195
|
// strings — a no-op.
|
|
1161
1196
|
const n = inst.slots.length;
|
|
1162
|
-
const present = n === 0
|
|
1163
|
-
? "zeroinitializer"
|
|
1164
|
-
: `[ ${inst.slots.map(() => "i8 1").join(", ")} ]`;
|
|
1197
|
+
const present = n === 0 ? "zeroinitializer" : `[ ${inst.slots.map(() => "i8 1").join(", ")} ]`;
|
|
1165
1198
|
out.push(`@${inst.sym}_data = internal constant [${n} x ptr] [ ${inst.slots.map((s) => `ptr ${s}`).join(", ")} ]`, `@${inst.sym}_present = internal constant [${n} x i8] ${present}`, `@${inst.sym} = internal global %ScrArr { ${this.sizeType} -1, ${this.sizeType} ${n}, ${this.sizeType} ${n}, i32 2, ptr null, ptr null, ptr null, ptr @${inst.sym}_data, ptr @${inst.sym}_present, ptr null, ${this.sizeType} 0, ${this.sizeType} 0, ptr null, ${this.sizeType} 0, ${this.sizeType} 0, ptr null }`);
|
|
1166
1199
|
}
|
|
1167
1200
|
if (this.templateStringsInstances.size > 0)
|
|
@@ -1189,13 +1222,17 @@ export class LlEmitter {
|
|
|
1189
1222
|
const esm = stored.esm === null
|
|
1190
1223
|
? `ptr null, ${this.sizeType} 0, ${this.sizeType} 0`
|
|
1191
1224
|
: `ptr @sc_npm_esm_${i}, ${this.sizeType} ${stored.esm.bytes.length}, ${this.sizeType} ${stored.esm.raw}`;
|
|
1192
|
-
return `%ScrIslandModule { ptr @sc_npm_key_${i}, ptr @sc_npm_src_${i}, ` +
|
|
1225
|
+
return (`%ScrIslandModule { ptr @sc_npm_key_${i}, ptr @sc_npm_src_${i}, ` +
|
|
1193
1226
|
`${this.sizeType} ${stored.src.bytes.length}, ${this.sizeType} ${stored.src.raw}, ` +
|
|
1194
|
-
`i32 ${fmt[m.format]}, ${esm} }
|
|
1227
|
+
`i32 ${fmt[m.format]}, ${esm} }`);
|
|
1195
1228
|
});
|
|
1196
1229
|
out.push(`@sc_npm_modules = internal constant [${moduleRows.length} x %ScrIslandModule] [ ${moduleRows.join(", ")} ]`);
|
|
1197
1230
|
embedded.edges.forEach((edge, i) => {
|
|
1198
|
-
const parts = [
|
|
1231
|
+
const parts = [
|
|
1232
|
+
["from", edge.from],
|
|
1233
|
+
["spec", edge.specifier],
|
|
1234
|
+
["to", edge.to],
|
|
1235
|
+
];
|
|
1199
1236
|
for (const [part, text] of parts) {
|
|
1200
1237
|
const bytes = Buffer.from(text, "utf8");
|
|
1201
1238
|
out.push(`@sc_npm_edge_${i}_${part} = internal constant [${bytes.length + 1} x i8] c"${llBytes(bytes)}"`);
|
|
@@ -1250,7 +1287,10 @@ export class LlEmitter {
|
|
|
1250
1287
|
// The exception epilogue is emitted when the entry may throw.
|
|
1251
1288
|
const stamps = [...errorViews];
|
|
1252
1289
|
for (const iv of this.errorIntervals) {
|
|
1253
|
-
const fields = [
|
|
1290
|
+
const fields = [
|
|
1291
|
+
[0, iv.pre],
|
|
1292
|
+
[1, iv.post],
|
|
1293
|
+
];
|
|
1254
1294
|
for (const [field, value] of fields) {
|
|
1255
1295
|
stamps.push(` store ${this.sizeType} ${value}, ptr getelementptr inbounds ([${RUNTIME_ERROR_CLASSES.size} x %ScrVt], ptr @scr_error_vts, i64 0, i64 ${iv.kind}, i32 ${field})${field === 1 ? ` ; ${iv.lib}` : ""}`);
|
|
1256
1296
|
}
|
|
@@ -1306,8 +1346,12 @@ export class LlEmitter {
|
|
|
1306
1346
|
out.push(`define i32 @${this.wasi ? "__main_argc_argv" : "main"}(i32 %argc, ptr %argv) ${FN_ATTRS} {`, `entry:`, ...(this.runtimeAbiMarker ? [` call void @${RUNTIME_ABI_MARKER}()`] : []), ` call void @scr_init()`, ...stamps,
|
|
1307
1347
|
// Event-surface programs (signal/exit listeners) fill the loop's
|
|
1308
1348
|
// nullable event hooks before %main — scr_events.c links only when
|
|
1309
|
-
// this line is emitted (native
|
|
1310
|
-
...(usesEvents ? [` call void @scr_events_install()`] : []), ...(usesChildProcess ? [` call void @scr_child_dyn_install()`] : []), ...(childStreamBoxes
|
|
1349
|
+
// this line is emitted (native/executable.ts gates on the same predicate).
|
|
1350
|
+
...(usesEvents ? [` call void @scr_events_install()`] : []), ...(usesChildProcess ? [` call void @scr_child_dyn_install()`] : []), ...(childStreamBoxes
|
|
1351
|
+
? [
|
|
1352
|
+
` call void @scr_child_dyn_streams_install(ptr @scr_stream_child_ops, ptr @${childStreamBoxes[0]}, ptr @${childStreamBoxes[1]})`,
|
|
1353
|
+
]
|
|
1354
|
+
: []),
|
|
1311
1355
|
// fs.watch programs fill the loop's watch hooks the same way —
|
|
1312
1356
|
// scr_watch.c links only when this line is emitted.
|
|
1313
1357
|
...(usesFsWatch ? [` call void @scr_watch_install()`] : []), ...(this.ffiHasForeignCallback ? [` call void @scr_ffi_install()`] : []), ...(snapshotsTlsCa ? [` call void @scr_tls_ca_install()`] : []), ...(usesFetch ? [` call void @scr_fetch_install()`] : []), ...(embedsZlib ? [` call void @scr_zlib_island_install()`] : []), ...(embedsNet ? [` call void @scr_net_island_install()`] : []), ...(usesNet ? [` call void @scr_net_install()`, ` call void @scr_net_dyn_install()`] : []), ...(usesHttp ? [` call void @scr_http_dyn_install()`] : []), ...(usesDgram ? [` call void @scr_dgram_install()`] : []), ...(usesHttp2 ? [` call void @scr_http2_dyn_install()`] : []), ...(usesStream ? [` call void @scr_stream_install()`] : []), ` call void @scr_lib_init(i32 %argc, ptr %argv)`, ...(usesIsland
|
|
@@ -1520,7 +1564,9 @@ export class LlEmitter {
|
|
|
1520
1564
|
}
|
|
1521
1565
|
for (const e of lib.exports) {
|
|
1522
1566
|
const params = [];
|
|
1523
|
-
const body = [
|
|
1567
|
+
const body = [
|
|
1568
|
+
` call void @scr_library_entry(i1 zeroext ${autoReset ? "true" : "false"}, ptr ${symConst(e.symbol)})`,
|
|
1569
|
+
];
|
|
1524
1570
|
const args = [];
|
|
1525
1571
|
if (e.inboundBytesTrap !== undefined) {
|
|
1526
1572
|
// The bytes-in helper's trap message: the compiler-assembled
|
|
@@ -1879,7 +1925,7 @@ export class LlEmitter {
|
|
|
1879
1925
|
for (const fn of this.mod.functions) {
|
|
1880
1926
|
if (fn.generator === undefined)
|
|
1881
1927
|
continue;
|
|
1882
|
-
const { definitions, pack, lifted, fieldTys, ret, tr, spawnParams, argPackLines
|
|
1928
|
+
const { definitions, pack, lifted, fieldTys, ret, tr, spawnParams, argPackLines } = this.emitArgPackAndTrampolinePrologue(fn);
|
|
1883
1929
|
for (const line of definitions)
|
|
1884
1930
|
out.push(line);
|
|
1885
1931
|
this.declare(`declare zeroext i1 @scr_exc_genret_pending()`);
|
|
@@ -1995,7 +2041,9 @@ export class LlEmitter {
|
|
|
1995
2041
|
lit = { sym: `sc_lit_${this.literals.size}`, len: Buffer.byteLength(text, "utf8") };
|
|
1996
2042
|
this.literals.set(text, lit);
|
|
1997
2043
|
}
|
|
1998
|
-
|
|
2044
|
+
const name = `@${lit.sym}`;
|
|
2045
|
+
this.immortalValues.add(name);
|
|
2046
|
+
return name;
|
|
1999
2047
|
}
|
|
2000
2048
|
/** Interned NUL-terminated C-string constant (the scr_jb_puts /
|
|
2001
2049
|
* stringify-indent currency) — `@`-ref, first-use order. */
|
|
@@ -2025,7 +2073,9 @@ export class LlEmitter {
|
|
|
2025
2073
|
sym = `sc_unit_${this.unitInstances.size}`;
|
|
2026
2074
|
this.unitInstances.set(key, sym);
|
|
2027
2075
|
}
|
|
2028
|
-
|
|
2076
|
+
const name = `@${sym}`;
|
|
2077
|
+
this.immortalValues.add(name);
|
|
2078
|
+
return name;
|
|
2029
2079
|
}
|
|
2030
2080
|
declare(decl) {
|
|
2031
2081
|
this.decls.add(decl);
|
|
@@ -2041,7 +2091,7 @@ export class LlEmitter {
|
|
|
2041
2091
|
}
|
|
2042
2092
|
/** Registers an owned refcounted value on the current statement frame. */
|
|
2043
2093
|
own(v) {
|
|
2044
|
-
if (isRefCounted(v.type))
|
|
2094
|
+
if (isRefCounted(v.type) && !this.immortalValues.has(v.name))
|
|
2045
2095
|
this.currentFrame().push(v);
|
|
2046
2096
|
return v;
|
|
2047
2097
|
}
|
|
@@ -2053,7 +2103,7 @@ export class LlEmitter {
|
|
|
2053
2103
|
}
|
|
2054
2104
|
/** Strike a refcounted temp from its frame: ownership is being moved. */
|
|
2055
2105
|
moveTemp(v) {
|
|
2056
|
-
if (!isRefCounted(v.type))
|
|
2106
|
+
if (!isRefCounted(v.type) || this.immortalValues.has(v.name))
|
|
2057
2107
|
return;
|
|
2058
2108
|
for (let i = this.frames.length - 1; i >= 0; i--) {
|
|
2059
2109
|
const idx = this.frames[i].findIndex((e) => e.name === v.name);
|
|
@@ -2067,6 +2117,8 @@ export class LlEmitter {
|
|
|
2067
2117
|
/** The retained (+1) read of a refcounted value — type-directed through
|
|
2068
2118
|
* the `_v` table (immortals skip, exactly the C retain calls). */
|
|
2069
2119
|
retainValue(name, type) {
|
|
2120
|
+
if (this.immortalValues.has(name))
|
|
2121
|
+
return name;
|
|
2070
2122
|
const t = this.B.tmp();
|
|
2071
2123
|
this.B.line(`${t} = call ptr ${retainSym(this.shapeHost, type)}(ptr ${name})`);
|
|
2072
2124
|
return t;
|
|
@@ -2074,6 +2126,8 @@ export class LlEmitter {
|
|
|
2074
2126
|
/** The release call for one owned refcounted value — type-directed like
|
|
2075
2127
|
* releaseCallC (all runtime releases are NULL-tolerant). */
|
|
2076
2128
|
releaseValue(name, type) {
|
|
2129
|
+
if (this.immortalValues.has(name))
|
|
2130
|
+
return;
|
|
2077
2131
|
this.B.line(`call void ${releaseSym(this.shapeHost, type)}(ptr ${name})`);
|
|
2078
2132
|
}
|
|
2079
2133
|
releaseFrame(frame) {
|
|
@@ -2167,9 +2221,14 @@ export class LlEmitter {
|
|
|
2167
2221
|
}
|
|
2168
2222
|
else {
|
|
2169
2223
|
const t = this.currentReturnType;
|
|
2170
|
-
terminator =
|
|
2171
|
-
|
|
2172
|
-
|
|
2224
|
+
terminator =
|
|
2225
|
+
t.kind === "void"
|
|
2226
|
+
? "ret void"
|
|
2227
|
+
: t.kind === "f64" || t.kind === "date"
|
|
2228
|
+
? `ret double ${f64Lit(0)}`
|
|
2229
|
+
: t.kind === "bool"
|
|
2230
|
+
? "ret i1 false"
|
|
2231
|
+
: "ret ptr null";
|
|
2173
2232
|
}
|
|
2174
2233
|
// Copy the entries now: later declarations extend these lexical scopes.
|
|
2175
2234
|
// Release order and the handler are part of the shared block's identity.
|
|
@@ -2240,7 +2299,10 @@ export class LlEmitter {
|
|
|
2240
2299
|
this.declare(`declare void @scr_throw_obj(ptr, ptr, ptr, ptr)`);
|
|
2241
2300
|
B.line(`call void @scr_throw_obj(ptr ${v.name}, ptr ${rc.retain}, ptr ${rc.release}, ptr ${traceArg(this.shapeHost, t)})`);
|
|
2242
2301
|
}
|
|
2243
|
-
else if (t.kind === "symbol" ||
|
|
2302
|
+
else if (t.kind === "symbol" ||
|
|
2303
|
+
t.kind === "bigint" ||
|
|
2304
|
+
t.kind === "func" ||
|
|
2305
|
+
t.kind === "classval") {
|
|
2244
2306
|
const rc = vAdapters(this.shapeHost, t);
|
|
2245
2307
|
this.declare(`declare void @scr_throw_primitive_ref(ptr, ptr, ptr, ptr)`);
|
|
2246
2308
|
B.line(`call void @scr_throw_primitive_ref(ptr ${v.name}, ptr ${rc.retain}, ptr ${rc.release}, ptr null)`);
|
|
@@ -2911,21 +2973,30 @@ export class LlEmitter {
|
|
|
2911
2973
|
this.unwindCleanups.clear();
|
|
2912
2974
|
this.jumpTargets = [];
|
|
2913
2975
|
this.currentLocals = new Map(fn.locals.map((l) => [l.id, l]));
|
|
2976
|
+
const initializerBindings = this.initializerBindings.get(fn.name) ?? [];
|
|
2977
|
+
const numericFn = withInitializerBindings(fn, initializerBindings);
|
|
2978
|
+
this.numericLocals = new Map(numericFn.locals.map((l) => [l.id, l]));
|
|
2914
2979
|
this.borrowedParameters.clear();
|
|
2915
|
-
|
|
2980
|
+
this.stableCallBindings = this.callLifetimes.bindings.get(fn.name) ?? new Set();
|
|
2981
|
+
const borrowedParameterIndexes = this.callLifetimes.borrowed.get(fn.name);
|
|
2916
2982
|
if (borrowedParameterIndexes) {
|
|
2917
2983
|
for (const index of borrowedParameterIndexes)
|
|
2918
2984
|
this.borrowedParameters.add(fn.params[index].localId);
|
|
2919
2985
|
}
|
|
2920
2986
|
this.captureIds = new Set([...(fn.captures ?? []), ...(fn.classCaptures ?? [])].map((c) => c.localId));
|
|
2921
2987
|
this.integerLoopBindings.clear();
|
|
2988
|
+
this.countedLoopsEnabled = this.debug === null && !fn.async && !fn.generator;
|
|
2989
|
+
this.integerViews.clear();
|
|
2922
2990
|
this.fieldPointerTags.clear();
|
|
2923
2991
|
this.integerArrayBindings.clear();
|
|
2924
|
-
this.localArrayReads = findLocalArrayReads(fn, this.fnByName, this.unionsById, this.
|
|
2925
|
-
this.callArrayReads = findCallArrayReads(fn, this.optionalArrayReads, this.
|
|
2992
|
+
this.localArrayReads = findLocalArrayReads(fn, this.fnByName, this.unionsById, this.referenceEffects.functions, this.callLifetimes, this.optionalArrayReads);
|
|
2993
|
+
this.callArrayReads = findCallArrayReads(fn, this.optionalArrayReads, this.referenceEffects.functions, this.callLifetimes);
|
|
2926
2994
|
this.mapReadLifetimes = findMapReadLifetimes(fn, this.unionsById, this.callLifetimes);
|
|
2927
2995
|
this.localStackUnions = findLocalStackUnions(fn, this.callLifetimes, this.unionsById);
|
|
2928
|
-
this.
|
|
2996
|
+
this.localUnionStorageProofs = findLocalUnionStorage(fn, this.callLifetimes, this.unionsById);
|
|
2997
|
+
this.localUnionStorage = new Map();
|
|
2998
|
+
this.integerRanges = analyzeIntegerRanges(numericFn);
|
|
2999
|
+
this.bytesBounds = findBytesBounds(numericFn, this.integerRanges);
|
|
2929
3000
|
this.chainSlots.clear();
|
|
2930
3001
|
this.finallyStack = [];
|
|
2931
3002
|
this.tryStack = [];
|
|
@@ -2967,6 +3038,20 @@ export class LlEmitter {
|
|
|
2967
3038
|
};
|
|
2968
3039
|
}
|
|
2969
3040
|
const paramIds = new Set(fn.params.map((p) => p.localId));
|
|
3041
|
+
if (this.debug === null) {
|
|
3042
|
+
for (const id of findIntegerViews(numericFn)) {
|
|
3043
|
+
const slot = B.slot();
|
|
3044
|
+
B.entryAllocas.push(`${slot} = alloca i32 ; integer view ${this.numericLocals.get(id).name}`);
|
|
3045
|
+
this.integerViews.set(id, slot);
|
|
3046
|
+
}
|
|
3047
|
+
}
|
|
3048
|
+
for (const global of initializerBindings) {
|
|
3049
|
+
if (!this.integerViews.has(global.id))
|
|
3050
|
+
continue;
|
|
3051
|
+
const value = B.tmp();
|
|
3052
|
+
B.line(`${value} = load double, ptr @${mangleGlobal(global.id)}`);
|
|
3053
|
+
this.storeIntegerView(global.id, { name: value, type: global.type });
|
|
3054
|
+
}
|
|
2970
3055
|
for (const local of fn.locals) {
|
|
2971
3056
|
// Boxed locals' slots hold their capture BOX (a ptr); captured
|
|
2972
3057
|
// (env-borrowed) locals bind the incoming box below. A caught-typed
|
|
@@ -3016,7 +3101,7 @@ export class LlEmitter {
|
|
|
3016
3101
|
// params (callees own their params — callers passed +1). Boxed params
|
|
3017
3102
|
// allocate the shared binding and move the raw value in.
|
|
3018
3103
|
const fnScope = [];
|
|
3019
|
-
const borrowed = this.callLifetimes.
|
|
3104
|
+
const borrowed = this.callLifetimes.borrowed.get(fn.name);
|
|
3020
3105
|
for (const [index, p] of fn.params.entries()) {
|
|
3021
3106
|
const local = this.currentLocals.get(p.localId);
|
|
3022
3107
|
const slot = `%${mangleLocal(p.localId)}`;
|
|
@@ -3029,6 +3114,7 @@ export class LlEmitter {
|
|
|
3029
3114
|
continue;
|
|
3030
3115
|
}
|
|
3031
3116
|
B.line(`store ${this.llType(p.type)} %p_${mangleLocal(p.localId)}, ptr ${slot}`);
|
|
3117
|
+
this.storeIntegerView(p.localId, { name: `%p_${mangleLocal(p.localId)}`, type: p.type });
|
|
3032
3118
|
if (isRefCounted(p.type) && !borrowed?.has(index))
|
|
3033
3119
|
fnScope.push({ slot, type: p.type });
|
|
3034
3120
|
}
|
|
@@ -3132,17 +3218,24 @@ export class LlEmitter {
|
|
|
3132
3218
|
B.terminate(ret === "void" ? "ret void" : `ret ${ret} %result`);
|
|
3133
3219
|
return `define internal ${ret} @${mangleFunction(fn.name)}(${params.join(", ")}) ${FN_ATTRS} {\n${B.render()}\n}`;
|
|
3134
3220
|
}
|
|
3135
|
-
/** A local
|
|
3136
|
-
* and the callee execute.
|
|
3137
|
-
*
|
|
3221
|
+
/** A local stable binding keeps its value alive while later arguments
|
|
3222
|
+
* and the callee execute. A proven local union box cannot escape or be
|
|
3223
|
+
* rebound during a call; its independent payload owner keeps it alive.
|
|
3224
|
+
* Other writable bindings need an owned snapshot. */
|
|
3138
3225
|
canBorrowCallArgument(value) {
|
|
3139
3226
|
if (value.kind === "strLit")
|
|
3140
3227
|
return true;
|
|
3141
3228
|
if (value.kind !== "varRef")
|
|
3142
3229
|
return false;
|
|
3143
3230
|
const binding = this.binding(value.localId);
|
|
3144
|
-
return binding.kind === "local" &&
|
|
3145
|
-
|
|
3231
|
+
return (binding.kind === "local" &&
|
|
3232
|
+
binding.local !== undefined &&
|
|
3233
|
+
(!binding.local.mutable ||
|
|
3234
|
+
this.stableCallBindings.has(value.localId) ||
|
|
3235
|
+
this.borrowedParameters.has(value.localId) ||
|
|
3236
|
+
this.localUnionStorage.has(value.localId)) &&
|
|
3237
|
+
!binding.local.boxed &&
|
|
3238
|
+
!binding.local.tdz);
|
|
3146
3239
|
}
|
|
3147
3240
|
// ── statements ──────────────────────────────────────────────────────────
|
|
3148
3241
|
emitStmts(stmts) {
|
|
@@ -3192,7 +3285,10 @@ export class LlEmitter {
|
|
|
3192
3285
|
B.line(`store ptr ${union.value.name}, ptr ${b.slot}`);
|
|
3193
3286
|
if (union.payload) {
|
|
3194
3287
|
this.moveTemp(union.payload);
|
|
3195
|
-
this.scopes[this.scopes.length - 1].push({
|
|
3288
|
+
this.scopes[this.scopes.length - 1].push({
|
|
3289
|
+
slot: union.payloadSlot,
|
|
3290
|
+
type: union.payload.type,
|
|
3291
|
+
});
|
|
3196
3292
|
}
|
|
3197
3293
|
break;
|
|
3198
3294
|
}
|
|
@@ -3211,6 +3307,19 @@ export class LlEmitter {
|
|
|
3211
3307
|
this.scopes[this.scopes.length - 1].push(result.owner);
|
|
3212
3308
|
break;
|
|
3213
3309
|
}
|
|
3310
|
+
const localStorage = this.localUnionStorageProofs.get(s.localId);
|
|
3311
|
+
if (localStorage && s.init) {
|
|
3312
|
+
const storage = allocateLocalUnion(this, localStorage);
|
|
3313
|
+
this.localUnionStorage.set(s.localId, storage);
|
|
3314
|
+
storeLocalUnion(this, storage, s.init);
|
|
3315
|
+
B.line(`store ptr ${storage.box}, ptr ${b.slot}`);
|
|
3316
|
+
if (storage.owner && storage.ownerType)
|
|
3317
|
+
this.scopes[this.scopes.length - 1].push({
|
|
3318
|
+
slot: storage.owner,
|
|
3319
|
+
type: storage.ownerType,
|
|
3320
|
+
});
|
|
3321
|
+
break;
|
|
3322
|
+
}
|
|
3214
3323
|
if (b.kind === "boxed") {
|
|
3215
3324
|
// Box FIRST, then evaluate the initializer: a named function
|
|
3216
3325
|
// expression's closure captures this box during init evaluation.
|
|
@@ -3248,15 +3357,35 @@ export class LlEmitter {
|
|
|
3248
3357
|
}
|
|
3249
3358
|
break;
|
|
3250
3359
|
}
|
|
3360
|
+
// A lexical const alias cannot outlive its unchanged local owner.
|
|
3361
|
+
// Whole-value uses still retain their own copies, so returning or
|
|
3362
|
+
// storing the alias preserves the ordinary heap representation.
|
|
3363
|
+
// Boxed captures, reassigned sources and projections need ownership.
|
|
3364
|
+
if (b.kind === "local" &&
|
|
3365
|
+
b.local &&
|
|
3366
|
+
!b.local.mutable &&
|
|
3367
|
+
isRefCounted(b.type) &&
|
|
3368
|
+
this.stableCallBindings.has(s.localId) &&
|
|
3369
|
+
this.canBorrowCallArgument(s.init)) {
|
|
3370
|
+
const v = this.emitReadReceiver(s.init);
|
|
3371
|
+
B.line(`store ptr ${v.name}, ptr ${b.slot}`);
|
|
3372
|
+
break;
|
|
3373
|
+
}
|
|
3251
3374
|
const v = this.emitExpr(s.init);
|
|
3252
3375
|
this.moveTemp(v);
|
|
3253
3376
|
B.line(`store ${this.llType(b.type)} ${v.name}, ptr ${b.slot}`);
|
|
3377
|
+
this.storeIntegerView(s.localId, v, s.init);
|
|
3254
3378
|
if (isRefCounted(b.type)) {
|
|
3255
3379
|
this.scopes[this.scopes.length - 1].push({ slot: b.slot, type: b.type });
|
|
3256
3380
|
}
|
|
3257
3381
|
break;
|
|
3258
3382
|
}
|
|
3259
3383
|
case "assign": {
|
|
3384
|
+
const localStorage = this.localUnionStorage.get(s.localId);
|
|
3385
|
+
if (localStorage) {
|
|
3386
|
+
storeLocalUnion(this, localStorage, s.value);
|
|
3387
|
+
break;
|
|
3388
|
+
}
|
|
3260
3389
|
const concat = s.value;
|
|
3261
3390
|
const suffix = matchStringSelfConcat(s.localId, concat);
|
|
3262
3391
|
if (suffix && concat.kind === "strConcat") {
|
|
@@ -3281,6 +3410,7 @@ export class LlEmitter {
|
|
|
3281
3410
|
this.releaseValue(old, b.type);
|
|
3282
3411
|
}
|
|
3283
3412
|
B.line(`store ${this.llType(b.type)} ${v.name}, ptr ${b.slot}`);
|
|
3413
|
+
this.storeIntegerView(s.localId, v, s.value);
|
|
3284
3414
|
break;
|
|
3285
3415
|
}
|
|
3286
3416
|
case "exprStmt":
|
|
@@ -3290,7 +3420,7 @@ export class LlEmitter {
|
|
|
3290
3420
|
// Evaluation order matches JS: array, index, then value. Ownership
|
|
3291
3421
|
// of a refcounted value moves into the array (the runtime releases
|
|
3292
3422
|
// the replaced element itself).
|
|
3293
|
-
const arr = this
|
|
3423
|
+
const arr = emitBorrowedInput(this, s.arr);
|
|
3294
3424
|
const idx = this.emitExpr(s.index);
|
|
3295
3425
|
const v = this.emitExpr(s.value);
|
|
3296
3426
|
if (s.arr.type.kind !== "array")
|
|
@@ -3304,7 +3434,7 @@ export class LlEmitter {
|
|
|
3304
3434
|
break;
|
|
3305
3435
|
}
|
|
3306
3436
|
case "arraySetLength": {
|
|
3307
|
-
const arr = this
|
|
3437
|
+
const arr = emitBorrowedInput(this, s.arr);
|
|
3308
3438
|
const length = this.emitExpr(s.length);
|
|
3309
3439
|
if (s.arr.type.kind !== "array")
|
|
3310
3440
|
throw new InternalCompilerError("llvm emitter bug: arraySetLength on non-array");
|
|
@@ -3315,7 +3445,7 @@ export class LlEmitter {
|
|
|
3315
3445
|
}
|
|
3316
3446
|
case "arraySetUndefined":
|
|
3317
3447
|
case "arrayDelete": {
|
|
3318
|
-
const arr = this
|
|
3448
|
+
const arr = emitBorrowedInput(this, s.arr);
|
|
3319
3449
|
const idx = this.emitExpr(s.index);
|
|
3320
3450
|
if (s.arr.type.kind !== "array")
|
|
3321
3451
|
throw new InternalCompilerError(`llvm emitter bug: ${s.kind} on non-array`);
|
|
@@ -3334,12 +3464,11 @@ export class LlEmitter {
|
|
|
3334
3464
|
// IrBytesElem is static, so never rediscover it through the
|
|
3335
3465
|
// generic runtime switch in a hot loop.
|
|
3336
3466
|
const arr = this.emitStableReceiver(s.arr, [s.index, s.value]);
|
|
3337
|
-
const
|
|
3338
|
-
const idx = integerIndex ?? this.emitExpr(s.index).name;
|
|
3467
|
+
const idx = this.emitExpr(s.index);
|
|
3339
3468
|
const v = this.emitExpr(s.value);
|
|
3340
3469
|
if (s.arr.type.kind !== "bytes")
|
|
3341
3470
|
throw new InternalCompilerError("llvm emitter bug: bytesSet on non-bytes");
|
|
3342
|
-
this.emitBytesSet(s.arr.type.elem, arr.name, idx, v.
|
|
3471
|
+
this.emitBytesSet(s.arr.type.elem, arr.name, idx, v, s.index, s.value, this.bytesBounds.has(s));
|
|
3343
3472
|
break;
|
|
3344
3473
|
}
|
|
3345
3474
|
case "fieldSet":
|
|
@@ -3349,7 +3478,9 @@ export class LlEmitter {
|
|
|
3349
3478
|
// release — a release can trigger a cycle collection, which must
|
|
3350
3479
|
// never see a heap edge whose count was already given up).
|
|
3351
3480
|
// Classes and records share the struct layout, so one emission.
|
|
3352
|
-
const obj = isRefCounted(s.value.type)
|
|
3481
|
+
const obj = isRefCounted(s.value.type)
|
|
3482
|
+
? this.emitExpr(s.obj)
|
|
3483
|
+
: this.emitStableReceiver(s.obj, [s.value]);
|
|
3353
3484
|
const v = this.emitExpr(s.value);
|
|
3354
3485
|
const { ptr, type } = s.kind === "fieldSet"
|
|
3355
3486
|
? this.classFieldPtr(obj.name, s.className, s.field)
|
|
@@ -3364,7 +3495,9 @@ export class LlEmitter {
|
|
|
3364
3495
|
else {
|
|
3365
3496
|
this.storeField(ptr, type, v.name);
|
|
3366
3497
|
}
|
|
3367
|
-
if (s.kind === "fieldSet" &&
|
|
3498
|
+
if (s.kind === "fieldSet" &&
|
|
3499
|
+
s.field === "name" &&
|
|
3500
|
+
this.classMeta.get(s.className)?.root.def.name === "%Error") {
|
|
3368
3501
|
const present = this.classFieldPtr(obj.name, s.className, "%namePresent").ptr;
|
|
3369
3502
|
const enumerable = this.classFieldPtr(obj.name, s.className, "%nameEnumerable").ptr;
|
|
3370
3503
|
const wasPresent = B.tmp(), wasEnumerable = B.tmp(), isPresent = B.tmp(), nextEnumerable = B.tmp();
|
|
@@ -3610,10 +3743,33 @@ export class LlEmitter {
|
|
|
3610
3743
|
case "for": {
|
|
3611
3744
|
// The init's scope wraps the whole loop (break/continue must NOT
|
|
3612
3745
|
// release it — scopeDepth captured after the push, C parity).
|
|
3613
|
-
const integerArrayLoop = this.debug === null
|
|
3614
|
-
|
|
3746
|
+
const integerArrayLoop = this.debug === null
|
|
3747
|
+
? matchIntegerArrayForLoop(s, this.currentLocals, this.integerArrayBindings)
|
|
3748
|
+
: null;
|
|
3749
|
+
const integerLoop = integerArrayLoop ??
|
|
3750
|
+
(this.debug === null ? matchIntegerBytesForLoop(s, this.numericLocals) : null);
|
|
3751
|
+
const countedLoop = !integerLoop && this.countedLoopsEnabled
|
|
3752
|
+
? matchIntegerCountedForLoop(s, this.numericLocals, this.integerRanges)
|
|
3753
|
+
: null;
|
|
3754
|
+
let countedJoin = null;
|
|
3755
|
+
if (countedLoop?.guarded) {
|
|
3756
|
+
const bound = this.emitExpr(countedLoop.limit);
|
|
3757
|
+
const safe = B.tmp();
|
|
3758
|
+
const fast = B.newLabel("counted.fast");
|
|
3759
|
+
const slow = B.newLabel("counted.slow");
|
|
3760
|
+
countedJoin = B.newLabel("counted.done");
|
|
3761
|
+
B.line(`${safe} = fcmp ${countedLoop.step > 0 ? "ole" : "oge"} double ${bound.name}, ${f64Lit(countedLoop.guardLimit)}`);
|
|
3762
|
+
B.condBr(safe, fast, slow);
|
|
3763
|
+
B.startBlock(slow);
|
|
3764
|
+
this.countedLoopsEnabled = false;
|
|
3765
|
+
this.emitStmt(s);
|
|
3766
|
+
this.countedLoopsEnabled = true;
|
|
3767
|
+
B.br(countedJoin);
|
|
3768
|
+
B.startBlock(fast);
|
|
3769
|
+
}
|
|
3615
3770
|
this.scopes.push([]);
|
|
3616
3771
|
let integerSlot = null;
|
|
3772
|
+
let countedLimit = null;
|
|
3617
3773
|
if (integerLoop) {
|
|
3618
3774
|
integerSlot = B.slot();
|
|
3619
3775
|
B.entryAllocas.push(`${integerSlot} = alloca ${this.sizeType} ; integer induction ${this.currentLocals.get(integerLoop.localId).name}`);
|
|
@@ -3625,7 +3781,26 @@ export class LlEmitter {
|
|
|
3625
3781
|
this.integerArrayBindings.add(integerLoop.localId);
|
|
3626
3782
|
}
|
|
3627
3783
|
B.line(`store ${this.sizeType} ${start}, ptr ${integerSlot}`);
|
|
3628
|
-
this.integerLoopBindings.set(integerLoop.localId,
|
|
3784
|
+
this.integerLoopBindings.set(integerLoop.localId, {
|
|
3785
|
+
slot: integerSlot,
|
|
3786
|
+
type: this.sizeType,
|
|
3787
|
+
range: { min: 0, max: integerArrayLoop ? 4294967294 : Number.MAX_SAFE_INTEGER - 1 },
|
|
3788
|
+
});
|
|
3789
|
+
}
|
|
3790
|
+
else if (countedLoop) {
|
|
3791
|
+
integerSlot = B.slot();
|
|
3792
|
+
B.entryAllocas.push(`${integerSlot} = alloca i64 ; integer induction ${this.currentLocals.get(countedLoop.localId).name}`);
|
|
3793
|
+
const startNumber = this.emitExpr(countedLoop.start);
|
|
3794
|
+
const start = B.tmp();
|
|
3795
|
+
B.line(`${start} = fptosi double ${startNumber.name} to i64`);
|
|
3796
|
+
B.line(`store i64 ${start}, ptr ${integerSlot}`);
|
|
3797
|
+
this.integerLoopBindings.set(countedLoop.localId, {
|
|
3798
|
+
slot: integerSlot,
|
|
3799
|
+
type: "i64",
|
|
3800
|
+
signed: true,
|
|
3801
|
+
range: countedLoop.range,
|
|
3802
|
+
});
|
|
3803
|
+
countedLimit = emitCountedLoopLimit(this, countedLoop);
|
|
3629
3804
|
}
|
|
3630
3805
|
else if (s.init) {
|
|
3631
3806
|
// A multi-declarator head shares the loop's scope. Emitting its
|
|
@@ -3680,6 +3855,13 @@ export class LlEmitter {
|
|
|
3680
3855
|
B.line(`${inBounds} = icmp ult ${this.sizeType} ${index}, ${len}`);
|
|
3681
3856
|
B.condBr(inBounds, lb, le);
|
|
3682
3857
|
}
|
|
3858
|
+
else if (countedLoop && integerSlot && countedLimit) {
|
|
3859
|
+
const index = B.tmp();
|
|
3860
|
+
const inBounds = B.tmp();
|
|
3861
|
+
B.line(`${index} = load i64, ptr ${integerSlot}`);
|
|
3862
|
+
B.line(`${inBounds} = icmp ${countedLoop.step > 0 ? "slt" : "sgt"} i64 ${index}, ${countedLimit}`);
|
|
3863
|
+
B.condBr(inBounds, lb, le);
|
|
3864
|
+
}
|
|
3683
3865
|
else if (s.cond)
|
|
3684
3866
|
B.condBr(this.emitCondition(s.cond), lb, le);
|
|
3685
3867
|
else
|
|
@@ -3707,6 +3889,13 @@ export class LlEmitter {
|
|
|
3707
3889
|
B.line(`${next} = add nuw ${this.sizeType} ${old}, 1`);
|
|
3708
3890
|
B.line(`store ${this.sizeType} ${next}, ptr ${integerSlot}`);
|
|
3709
3891
|
}
|
|
3892
|
+
else if (countedLoop && integerSlot) {
|
|
3893
|
+
const old = B.tmp();
|
|
3894
|
+
const next = B.tmp();
|
|
3895
|
+
B.line(`${old} = load i64, ptr ${integerSlot}`);
|
|
3896
|
+
B.line(`${next} = add nsw i64 ${old}, ${countedLoop.step}`);
|
|
3897
|
+
B.line(`store i64 ${next}, ptr ${integerSlot}`);
|
|
3898
|
+
}
|
|
3710
3899
|
else if (s.update)
|
|
3711
3900
|
this.emitStmt(s.update);
|
|
3712
3901
|
B.br(lc);
|
|
@@ -3715,8 +3904,14 @@ export class LlEmitter {
|
|
|
3715
3904
|
this.releaseScope(this.scopes.pop());
|
|
3716
3905
|
if (integerLoop)
|
|
3717
3906
|
this.integerLoopBindings.delete(integerLoop.localId);
|
|
3907
|
+
if (countedLoop)
|
|
3908
|
+
this.integerLoopBindings.delete(countedLoop.localId);
|
|
3718
3909
|
if (integerArrayLoop)
|
|
3719
3910
|
this.integerArrayBindings.delete(integerArrayLoop.localId);
|
|
3911
|
+
if (countedJoin) {
|
|
3912
|
+
B.br(countedJoin);
|
|
3913
|
+
B.startBlock(countedJoin);
|
|
3914
|
+
}
|
|
3720
3915
|
break;
|
|
3721
3916
|
}
|
|
3722
3917
|
case "forOf": {
|
|
@@ -3941,7 +4136,10 @@ export class LlEmitter {
|
|
|
3941
4136
|
const frame = this.frames.pop();
|
|
3942
4137
|
// return/throw already released their frames on the jump path; the
|
|
3943
4138
|
// fall-through releases after them would be dead double-release code.
|
|
3944
|
-
if (s.kind !== "return" &&
|
|
4139
|
+
if (s.kind !== "return" &&
|
|
4140
|
+
s.kind !== "throw" &&
|
|
4141
|
+
s.kind !== "rethrow" &&
|
|
4142
|
+
s.kind !== "runtimeFence") {
|
|
3945
4143
|
this.releaseFrame(frame);
|
|
3946
4144
|
}
|
|
3947
4145
|
}
|
|
@@ -4107,7 +4305,8 @@ export class LlEmitter {
|
|
|
4107
4305
|
}
|
|
4108
4306
|
/** JS-exact switch: lazily evaluated, arbitrary-expression case tests in
|
|
4109
4307
|
* source order, bodies falling through in source order until a break —
|
|
4110
|
-
*
|
|
4308
|
+
* Literal-only tests can use native dispatch; other tests keep a chain
|
|
4309
|
+
* of conditional branches. All case bodies
|
|
4111
4310
|
* share ONE scope; because dispatch can jump PAST a varDecl into a later
|
|
4112
4311
|
* case, refcounted/boxed case-body locals are NULL-reset up front and
|
|
4113
4312
|
* the scope-exit releases rely on NULL tolerance. */
|
|
@@ -4134,33 +4333,34 @@ export class LlEmitter {
|
|
|
4134
4333
|
}
|
|
4135
4334
|
const end = B.newLabel("sw.e");
|
|
4136
4335
|
const caseLabels = s.cases.map(() => B.newLabel("sw.c"));
|
|
4137
|
-
|
|
4138
|
-
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
|
|
4143
|
-
|
|
4144
|
-
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
|
|
4154
|
-
|
|
4155
|
-
|
|
4156
|
-
|
|
4157
|
-
|
|
4158
|
-
|
|
4159
|
-
|
|
4160
|
-
|
|
4161
|
-
|
|
4162
|
-
|
|
4163
|
-
|
|
4336
|
+
const defaultIdx = s.cases.findIndex((c) => c.test === null);
|
|
4337
|
+
const fallback = defaultIdx >= 0 ? caseLabels[defaultIdx] : end;
|
|
4338
|
+
if (!emitLiteralSwitch(this, disc, s.cases, caseLabels, fallback)) {
|
|
4339
|
+
s.cases.forEach((c, i) => {
|
|
4340
|
+
if (c.test === null)
|
|
4341
|
+
return;
|
|
4342
|
+
// Lazy source-order test evaluation (a test after the match never
|
|
4343
|
+
// runs). Each test's temps release right after its comparison.
|
|
4344
|
+
this.frames.push([]);
|
|
4345
|
+
const t = this.emitExpr(c.test);
|
|
4346
|
+
const hit = B.tmp();
|
|
4347
|
+
if (c.test.type.kind === "string") {
|
|
4348
|
+
this.declare(`declare zeroext i1 @scr_str_eq(ptr, ptr)`);
|
|
4349
|
+
B.line(`${hit} = call zeroext i1 @scr_str_eq(ptr ${disc.name}, ptr ${t.name})`);
|
|
4350
|
+
}
|
|
4351
|
+
else if (c.test.type.kind === "bool") {
|
|
4352
|
+
B.line(`${hit} = icmp eq i1 ${disc.name}, ${t.name}`);
|
|
4353
|
+
}
|
|
4354
|
+
else {
|
|
4355
|
+
B.line(`${hit} = fcmp oeq double ${disc.name}, ${t.name}`);
|
|
4356
|
+
}
|
|
4357
|
+
this.releaseFrame(this.frames.pop());
|
|
4358
|
+
const next = B.newLabel("sw.t");
|
|
4359
|
+
B.condBr(hit, caseLabels[i], next);
|
|
4360
|
+
B.startBlock(next);
|
|
4361
|
+
});
|
|
4362
|
+
B.br(fallback);
|
|
4363
|
+
}
|
|
4164
4364
|
this.jumpTargets.push({
|
|
4165
4365
|
kind: "switch",
|
|
4166
4366
|
brkLabel: end,
|
|
@@ -4202,12 +4402,15 @@ export class LlEmitter {
|
|
|
4202
4402
|
* branch and moves the result into `slot`: the chosen value's ownership
|
|
4203
4403
|
* transfers, every other temp the arm allocated releases inside the
|
|
4204
4404
|
* branch. The shared core of ternary/logical. */
|
|
4205
|
-
emitBranchInto(slot, expr) {
|
|
4405
|
+
emitBranchInto(slot, expr, integerSlot) {
|
|
4206
4406
|
this.frames.push([]);
|
|
4207
4407
|
const v = this.emitExpr(expr);
|
|
4208
4408
|
this.moveTemp(v);
|
|
4209
4409
|
this.B.line(`store ${this.llType(expr.type)} ${v.name}, ptr ${slot}`);
|
|
4410
|
+
if (integerSlot !== undefined && v.uint32 !== undefined)
|
|
4411
|
+
this.B.line(`store i32 ${v.uint32}, ptr ${integerSlot}`);
|
|
4210
4412
|
this.releaseFrame(this.frames.pop());
|
|
4413
|
+
return v.uint32 !== undefined;
|
|
4211
4414
|
}
|
|
4212
4415
|
// ── expressions ─────────────────────────────────────────────────────────
|
|
4213
4416
|
emitLiteralExpr(e) {
|
|
@@ -4221,7 +4424,12 @@ export class LlEmitter {
|
|
|
4221
4424
|
this.scopes.push([]);
|
|
4222
4425
|
const result = emitBorrowedFieldSequence(this, e) ?? emitOperatorExpr(this, e);
|
|
4223
4426
|
for (const local of this.scopes.pop()) {
|
|
4224
|
-
this.currentFrame().push({
|
|
4427
|
+
this.currentFrame().push({
|
|
4428
|
+
name: local.slot,
|
|
4429
|
+
type: local.type,
|
|
4430
|
+
slot: true,
|
|
4431
|
+
...(local.boxed ? { boxed: true } : {}),
|
|
4432
|
+
});
|
|
4225
4433
|
}
|
|
4226
4434
|
return result;
|
|
4227
4435
|
}
|
|
@@ -4319,6 +4527,15 @@ export class LlEmitter {
|
|
|
4319
4527
|
this.B.line(`${value} = load ptr, ptr ${binding.slot}`);
|
|
4320
4528
|
return { name: value, type: e.type };
|
|
4321
4529
|
}
|
|
4530
|
+
const read = matchMapRead(e, this.unionsById);
|
|
4531
|
+
if (read) {
|
|
4532
|
+
const result = emitStackMapRead(this, read);
|
|
4533
|
+
if (result.owner)
|
|
4534
|
+
this.ownSlot(result.owner.slot, result.owner.type);
|
|
4535
|
+
return result.value;
|
|
4536
|
+
}
|
|
4537
|
+
if (canStackUnion(e, this.unionsById))
|
|
4538
|
+
return emitStackUnion(this, e).value;
|
|
4322
4539
|
if (e.kind === "unionNarrow") {
|
|
4323
4540
|
const union = this.emitReadReceiver(e.value);
|
|
4324
4541
|
return { name: this.unionPeek(union.name), type: e.type };
|
|
@@ -4339,7 +4556,10 @@ export class LlEmitter {
|
|
|
4339
4556
|
B.entryAllocas.push(`${slot} = alloca ptr`);
|
|
4340
4557
|
const yes = B.newLabel("read.then"), no = B.newLabel("read.else"), join = B.newLabel("read.join");
|
|
4341
4558
|
B.condBr(cond.name, yes, no);
|
|
4342
|
-
for (const [label, value] of [
|
|
4559
|
+
for (const [label, value] of [
|
|
4560
|
+
[yes, e.then],
|
|
4561
|
+
[no, e.else_],
|
|
4562
|
+
]) {
|
|
4343
4563
|
B.startBlock(label);
|
|
4344
4564
|
this.frames.push([]);
|
|
4345
4565
|
const result = this.emitReadReceiver(value);
|
|
@@ -4356,15 +4576,21 @@ export class LlEmitter {
|
|
|
4356
4576
|
}
|
|
4357
4577
|
canBorrowReceiver(e) {
|
|
4358
4578
|
switch (e.kind) {
|
|
4359
|
-
case "varRef":
|
|
4360
|
-
|
|
4579
|
+
case "varRef":
|
|
4580
|
+
return this.binding(e.localId).kind !== "boxed";
|
|
4581
|
+
case "unionNarrow":
|
|
4582
|
+
return this.canBorrowReceiver(e.value);
|
|
4361
4583
|
case "fieldGet":
|
|
4362
|
-
case "recordGet":
|
|
4363
|
-
|
|
4584
|
+
case "recordGet":
|
|
4585
|
+
return this.canBorrowReceiver(e.obj);
|
|
4586
|
+
case "ternary":
|
|
4587
|
+
return this.canBorrowReceiver(e.then) && this.canBorrowReceiver(e.else_);
|
|
4364
4588
|
// The runtime always sets a pending exception; its unreachable
|
|
4365
4589
|
// typed dummy is null and owns no receiver.
|
|
4366
|
-
case "libCall":
|
|
4367
|
-
|
|
4590
|
+
case "libCall":
|
|
4591
|
+
return e.fn === "error.nodeThrow";
|
|
4592
|
+
default:
|
|
4593
|
+
return false;
|
|
4368
4594
|
}
|
|
4369
4595
|
}
|
|
4370
4596
|
emitExpr(e) {
|
|
@@ -4484,8 +4710,8 @@ export class LlEmitter {
|
|
|
4484
4710
|
emitIntegerLoopIndex(expr) {
|
|
4485
4711
|
return emitIntegerLoopIndex(this, expr);
|
|
4486
4712
|
}
|
|
4487
|
-
emitBytesIndex(receiver, index,
|
|
4488
|
-
return emitBytesIndex(this, receiver, index,
|
|
4713
|
+
emitBytesIndex(receiver, index, expr, inBounds = false) {
|
|
4714
|
+
return emitBytesIndex(this, receiver, index, expr, undefined, inBounds);
|
|
4489
4715
|
}
|
|
4490
4716
|
emitBytesData(receiver) {
|
|
4491
4717
|
return emitBytesData(this, receiver);
|
|
@@ -4493,14 +4719,21 @@ export class LlEmitter {
|
|
|
4493
4719
|
emitBytesLength(elem, receiver, bytes) {
|
|
4494
4720
|
return emitBytesLength(this, elem, receiver, bytes);
|
|
4495
4721
|
}
|
|
4496
|
-
emitBytesGet(elem, receiver, index,
|
|
4497
|
-
return emitBytesGet(this, elem, receiver, index,
|
|
4722
|
+
emitBytesGet(elem, receiver, index, expr, inBounds = false) {
|
|
4723
|
+
return emitBytesGet(this, elem, receiver, index, expr, inBounds);
|
|
4724
|
+
}
|
|
4725
|
+
emitToUint32(value, expr, uint32) {
|
|
4726
|
+
return emitToUint32(this, value, expr, uint32);
|
|
4498
4727
|
}
|
|
4499
|
-
|
|
4500
|
-
|
|
4728
|
+
storeIntegerView(localId, value, expr) {
|
|
4729
|
+
const slot = this.integerViews.get(localId);
|
|
4730
|
+
if (slot === undefined)
|
|
4731
|
+
return;
|
|
4732
|
+
const integer = this.emitToUint32(value.name, expr, value.uint32);
|
|
4733
|
+
this.B.line(`store i32 ${integer}, ptr ${slot}`);
|
|
4501
4734
|
}
|
|
4502
|
-
emitBytesSet(elem, receiver, index, value,
|
|
4503
|
-
return emitBytesSet(this, elem, receiver, index, value,
|
|
4735
|
+
emitBytesSet(elem, receiver, index, value, indexExpr, expr, inBounds = false) {
|
|
4736
|
+
return emitBytesSet(this, elem, receiver, index, value, indexExpr, expr, inBounds);
|
|
4504
4737
|
}
|
|
4505
4738
|
emitBytesIntrinsic(e) {
|
|
4506
4739
|
return emitBytesIntrinsic(this, e);
|