@scriptc/compiler 0.2.4 → 0.2.6
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 +972 -245
- 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 +3 -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.d.ts +2 -0
- package/dist/backend/link-plan-core.js +10 -2
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +2 -1
- package/dist/backend/link-plan.js +7 -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.js.map +1 -1
- 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.js +38 -5
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- package/dist/backend/llvm/byte-windows.d.ts +31 -0
- package/dist/backend/llvm/byte-windows.js +334 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -0
- package/dist/backend/llvm/byte-windows.test.d.ts +1 -0
- package/dist/backend/llvm/byte-windows.test.js +244 -0
- package/dist/backend/llvm/byte-windows.test.js.map +1 -0
- package/dist/backend/llvm/bytes-bounds.js +73 -22
- package/dist/backend/llvm/bytes-bounds.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +5 -2
- package/dist/backend/llvm/call-lifetimes.js +72 -19
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +159 -28
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.d.ts +4 -0
- package/dist/backend/llvm/checked-value-lifetimes.js +14 -4
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +14 -1
- package/dist/backend/llvm/classes.js +94 -19
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.d.ts +1 -0
- package/dist/backend/llvm/classes.test.js +99 -0
- package/dist/backend/llvm/classes.test.js.map +1 -0
- package/dist/backend/llvm/common.js +4 -1
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +11 -0
- package/dist/backend/llvm/constant-callbacks.js +213 -0
- package/dist/backend/llvm/constant-callbacks.js.map +1 -0
- package/dist/backend/llvm/constant-callbacks.test.d.ts +1 -0
- package/dist/backend/llvm/constant-callbacks.test.js +124 -0
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -0
- package/dist/backend/llvm/counted-loops.js +10 -3
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- 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.d.ts +1 -1
- package/dist/backend/llvm/dyn.js +75 -56
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +28 -3
- package/dist/backend/llvm/emitter.js +506 -145
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +247 -50
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +25 -6
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +24 -4
- 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 +110 -31
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +2 -0
- package/dist/backend/llvm/expr-containers.js +112 -41
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +1 -3
- 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 +55 -7
- 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 +95 -19
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +44 -2
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +10 -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-remainder.d.ts +7 -0
- package/dist/backend/llvm/integer-remainder.js +26 -0
- package/dist/backend/llvm/integer-remainder.js.map +1 -0
- package/dist/backend/llvm/integer-values.js +15 -4
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/integer-views.js +23 -7
- package/dist/backend/llvm/integer-views.js.map +1 -1
- package/dist/backend/llvm/integer-views.test.js +42 -7
- package/dist/backend/llvm/integer-views.test.js.map +1 -1
- package/dist/backend/llvm/layouts.js +1 -1
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lib-abi.js +20 -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 +42 -38
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +33 -18
- 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 +122 -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 +9 -2
- package/dist/backend/llvm/local-array-reads.js +176 -89
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +394 -62
- 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/loop-array-borrows.d.ts +11 -0
- package/dist/backend/llvm/loop-array-borrows.js +70 -0
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -0
- package/dist/backend/llvm/loop-array-borrows.test.d.ts +1 -0
- package/dist/backend/llvm/loop-array-borrows.test.js +145 -0
- package/dist/backend/llvm/loop-array-borrows.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -2
- package/dist/backend/llvm/map-read-lifetimes.js +64 -19
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +89 -17
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.d.ts +5 -3
- package/dist/backend/llvm/reference-effects.js +74 -36
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-effects.test.js +92 -9
- package/dist/backend/llvm/reference-effects.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +4 -1
- package/dist/backend/llvm/shapes.js +82 -24
- 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-loops.d.ts +48 -0
- package/dist/backend/llvm/split-loops.js +183 -0
- package/dist/backend/llvm/split-loops.js.map +1 -0
- package/dist/backend/llvm/split.js +4 -11
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +80 -8
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-callbacks.d.ts +14 -0
- package/dist/backend/llvm/stack-callbacks.js +73 -0
- package/dist/backend/llvm/stack-callbacks.js.map +1 -0
- package/dist/backend/llvm/stack-captures.d.ts +25 -0
- package/dist/backend/llvm/stack-captures.js +150 -0
- package/dist/backend/llvm/stack-captures.js.map +1 -0
- 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 +151 -32
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.js.map +1 -1
- package/dist/backend/llvm/string-construction.test.js +32 -7
- package/dist/backend/llvm/string-construction.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.js +14 -8
- package/dist/backend/llvm/string-lifetimes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +119 -29
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +20 -0
- package/dist/backend/llvm/string-slices.js +87 -0
- package/dist/backend/llvm/string-slices.js.map +1 -0
- package/dist/backend/llvm/string-slices.test.d.ts +1 -0
- package/dist/backend/llvm/string-slices.test.js +98 -0
- package/dist/backend/llvm/string-slices.test.js.map +1 -0
- 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.d.ts +4 -14
- package/dist/backend/llvm/walkers.js +58 -313
- 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 +119 -23
- 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 +316 -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 +1275 -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 +165 -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.d.ts +6 -0
- package/dist/backend/native-codegen-core.js +23 -1
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +5 -1
- package/dist/backend/native-codegen.js +52 -25
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +59 -11
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +1 -0
- 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.d.ts +3 -1
- package/dist/backend/native-tools.js +30 -9
- 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-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +1 -0
- package/dist/backend/runtime-pack-core.js +104 -50
- 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 +126 -17
- 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 +51 -25
- 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 +2 -1
- package/dist/executable/executable-cache.js +79 -48
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +90 -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.d.ts +5 -0
- package/dist/frontend/fork-target.js +55 -18
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.d.ts +1 -0
- package/dist/frontend/fork-target.test.js +59 -0
- package/dist/frontend/fork-target.test.js.map +1 -0
- 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 +6 -0
- package/dist/frontend/lowering/builtins/atomics.js +82 -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 +35 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +725 -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 +308 -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/builtins/workers.d.ts +5 -0
- package/dist/frontend/lowering/builtins/workers.js +65 -0
- package/dist/frontend/lowering/builtins/workers.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-assertions.d.ts +7 -0
- package/dist/frontend/lowering/class-assertions.js +96 -0
- package/dist/frontend/lowering/class-assertions.js.map +1 -0
- 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-protocols.d.ts +17 -0
- package/dist/frontend/lowering/class-protocols.js +126 -0
- package/dist/frontend/lowering/class-protocols.js.map +1 -0
- 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 +355 -72
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +88 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +1611 -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 +430 -138
- 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 +601 -160
- 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 +588 -165
- 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 +271 -0
- package/dist/frontend/lowering/generic-functions.js +1730 -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/instantiation-path.d.ts +8 -0
- package/dist/frontend/lowering/instantiation-path.js +10 -0
- package/dist/frontend/lowering/instantiation-path.js.map +1 -0
- package/dist/frontend/lowering/instantiation-path.test.d.ts +1 -0
- package/dist/frontend/lowering/instantiation-path.test.js +23 -0
- package/dist/frontend/lowering/instantiation-path.test.js.map +1 -0
- 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 +430 -77
- 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 +2628 -5669
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +248 -242
- package/dist/frontend/lowering/lower-classes.js +1820 -775
- 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 +323 -86
- 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 +3473 -1160
- 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 +366 -274
- 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 +95 -94
- package/dist/frontend/lowering/lower-modules.js +655 -329
- 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 +2324 -994
- 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 +363 -91
- 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 +34 -352
- package/dist/frontend/lowering/lowerer.js +1074 -2712
- 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/split-consumers.d.ts +7 -0
- package/dist/frontend/lowering/split-consumers.js +64 -0
- package/dist/frontend/lowering/split-consumers.js.map +1 -0
- 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 +45 -46
- package/dist/frontend/lowering/surfaces.js +1129 -256
- 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-source-candidates.d.ts +10 -0
- package/dist/frontend/module-source-candidates.js +40 -0
- package/dist/frontend/module-source-candidates.js.map +1 -0
- package/dist/frontend/module-source-candidates.test.d.ts +1 -0
- package/dist/frontend/module-source-candidates.test.js +53 -0
- package/dist/frontend/module-source-candidates.test.js.map +1 -0
- 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-analysis.d.ts +2 -0
- package/dist/frontend/program-analysis.js +2 -0
- package/dist/frontend/program-analysis.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 +248 -127
- 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 +490 -172
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +150 -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 +5 -1
- package/dist/frontend/ts7/ast-wire.js +83 -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.d.ts +2 -1
- package/dist/frontend/ts7/ast.js +53 -30
- 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.d.ts +8 -2
- package/dist/frontend/ts7/checker.js +46 -8
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +96 -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.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +33 -6
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +72 -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.d.ts +3 -0
- package/dist/frontend/type-mapper.js +589 -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/frontend/worker-target.d.ts +6 -0
- package/dist/frontend/worker-target.js +108 -0
- package/dist/frontend/worker-target.js.map +1 -0
- package/dist/frontend/worker-target.test.d.ts +1 -0
- package/dist/frontend/worker-target.test.js +71 -0
- package/dist/frontend/worker-target.test.js.map +1 -0
- package/dist/index.d.ts +9 -8
- package/dist/index.js +174 -88
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +95 -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 +643 -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 +3397 -0
- package/dist/ir/builtin-signatures.js.map +1 -0
- package/dist/ir/byte-numbers.js +67 -16
- package/dist/ir/byte-numbers.js.map +1 -1
- package/dist/ir/byte-numbers.test.js +17 -4
- package/dist/ir/byte-numbers.test.js.map +1 -1
- 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.js +85 -30
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +76 -13
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.js +93 -21
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +199 -21
- 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 +15 -2160
- package/dist/ir/ir.js +160 -1396
- 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/numeric-call-specialization.d.ts +8 -0
- package/dist/ir/numeric-call-specialization.js +198 -0
- package/dist/ir/numeric-call-specialization.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +221 -0
- package/dist/ir/runtime-features.js +552 -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.d.ts +1 -1
- package/dist/ir/serialize.js +7 -5
- 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 +869 -1910
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +697 -114
- 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 +137 -61
- 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 +234 -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 +29 -18
- 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 +191 -54
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +134 -33
- 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 +121 -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 +78 -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 +68 -26
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +59 -20
- 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 +30 -2
- package/dist/frontend/lowering/lower-builtins.d.ts +0 -601
- package/dist/frontend/lowering/lower-builtins.js +0 -8986
- 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 -7344
- package/dist/frontend/lowering/lower-containers.js.map +0 -1
|
@@ -0,0 +1,1138 @@
|
|
|
1
|
+
import { envSnapshotHelper, lowerProcessLoadEnvFile } from "./environment.js";
|
|
2
|
+
import { dynUndefinedExpr, boolLit, numLit, strLit, varRef } from "../../../ir/build.js";
|
|
3
|
+
import { timerStyleCallback } from "../lower-timers.js";
|
|
4
|
+
import * as ts from "../../ts7/adapter.js";
|
|
5
|
+
import { own } from "../lowerer.js";
|
|
6
|
+
import { isJsSourceFile, locOf } from "../../program.js";
|
|
7
|
+
import { isSafeToDiscard } from "../expressions/evaluation-safety.js";
|
|
8
|
+
import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "../optional-arguments.js";
|
|
9
|
+
import { voidizedCallback } from "../lower-server.js";
|
|
10
|
+
import { BOOL, BYTES_U8, DYN, F64, PROCSTREAM_T, STRING, UNDEFINED_T, VOID, arrayOf, canBoxFuncIntoDyn, funcOf, typeKey, } from "../../../ir/ir.js";
|
|
11
|
+
import { lowerBuiltinLoaderValue } from "../lower-builtin-values.js";
|
|
12
|
+
import { lowerProcessIpcSend, ipcMessageListener, ipcDisconnectListener } from "./ipc.js";
|
|
13
|
+
import { lowerDiagnosticsSubscriber, lowerTracingArguments } from "./async-context.js";
|
|
14
|
+
/** Method calls on first-class process-stream receivers (procStream —
|
|
15
|
+
* a WritableStream-typed value like prefixStream's `output` param):
|
|
16
|
+
* write(data) with one string, dispatched at runtime onto the exact
|
|
17
|
+
* stdout/stderr write paths (the fd IS the value). Everything else
|
|
18
|
+
* @types/node declares on WritableStream fences member-qualified.
|
|
19
|
+
* Null for non-procStream receivers. */
|
|
20
|
+
export function lowerProcStreamMethodCall(lowerer, call, access) {
|
|
21
|
+
if (lowerer.chainBlocked(call, access))
|
|
22
|
+
return null;
|
|
23
|
+
if (lowerer.mapTypeOf(lowerer.typeOf(access.expression))?.kind !== "procStream")
|
|
24
|
+
return null;
|
|
25
|
+
if (!lowerer.isStdlibMember(access))
|
|
26
|
+
return null;
|
|
27
|
+
const name = access.name.text;
|
|
28
|
+
const loc = locOf(call);
|
|
29
|
+
if (isJsSourceFile(call.getSourceFile())) {
|
|
30
|
+
const receiver = lowerer.lowerExpr(access.expression);
|
|
31
|
+
if (receiver.type.kind === "dyn") {
|
|
32
|
+
return {
|
|
33
|
+
kind: "dynInvoke",
|
|
34
|
+
recv: receiver,
|
|
35
|
+
method: name,
|
|
36
|
+
calleeName: call.expression.getText(),
|
|
37
|
+
args: call.arguments.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
|
|
38
|
+
type: DYN,
|
|
39
|
+
loc,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (name === "write" && call.arguments.length === 1) {
|
|
44
|
+
const receiver = lowerer.lowerExpr(access.expression);
|
|
45
|
+
const data = lowerer.lowerExpr(call.arguments[0]);
|
|
46
|
+
if (data.type.kind !== "string") {
|
|
47
|
+
lowerer.noLowering(`write of '${lowerer.fmt(data.type)}' data on a stream value`, call.arguments[0], "one string is the supported form here — narrow unions first");
|
|
48
|
+
}
|
|
49
|
+
return { kind: "libCall", fn: "procStream.write", args: [receiver, data], type: BOOL, loc };
|
|
50
|
+
}
|
|
51
|
+
lowerer.noLowering(`WritableStream.${name}`, call, "write(data) with one string is the supported stream-value member", lowerer.checker.getSymbolAtLocation(access.name));
|
|
52
|
+
}
|
|
53
|
+
/** `process.stdin/stdout/stderr.isTTY` → isatty(3) on the stream's fd
|
|
54
|
+
* (a REAL boolean: Node's non-TTY streams expose `undefined` here — the
|
|
55
|
+
* documented divergence; truthiness tests, the actual usage, agree), and
|
|
56
|
+
* `process.stdout/stderr.columns/rows` → ioctl(TIOCGWINSZ) on the fd, with
|
|
57
|
+
* Node's non-TTY answer intact: the read is `number | undefined` and a
|
|
58
|
+
* non-TTY (or ioctl-refusing) stream yields the undefined arm. The
|
|
59
|
+
* receiver match sees through parens and as-casts to the SYMBOL —
|
|
60
|
+
* `(process.stderr as typeof process.stderr & { columns?: number })
|
|
61
|
+
* .columns` is the wild widening pattern (@types/node declares a plain
|
|
62
|
+
* `number`, so honest code casts the undefined possibility back in), and
|
|
63
|
+
* the cast changes the expression's TYPE, never the value. columns sites
|
|
64
|
+
* whose checker type does NOT admit undefined are fenced with that exact
|
|
65
|
+
* fix instead of lowering to a lie. Null for anything else, so the
|
|
66
|
+
* property chain keeps trying. */
|
|
67
|
+
export function lowerProcessStreamProperty(lowerer, expr) {
|
|
68
|
+
if (expr.questionDotToken)
|
|
69
|
+
return null;
|
|
70
|
+
const member = expr.name.text;
|
|
71
|
+
const direct = ts.isPropertyAccessExpression(expr.expression)
|
|
72
|
+
? lowerer.stdlibGlobalMember(expr.expression, "process")
|
|
73
|
+
: null;
|
|
74
|
+
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
75
|
+
(direct === "stdin" ||
|
|
76
|
+
direct === "stdout" ||
|
|
77
|
+
direct === "stderr" ||
|
|
78
|
+
lowerer.mapTypeOf(lowerer.typeOf(expr.expression))?.kind === "procStream")) {
|
|
79
|
+
const value = lowerer.lowerExpr(expr.expression);
|
|
80
|
+
if (value.type.kind === "dyn")
|
|
81
|
+
return {
|
|
82
|
+
kind: "dynKeyGet",
|
|
83
|
+
value,
|
|
84
|
+
key: strLit(member, locOf(expr.name)),
|
|
85
|
+
type: DYN,
|
|
86
|
+
loc: locOf(expr),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (member !== "isTTY" && member !== "columns" && member !== "rows")
|
|
90
|
+
return null;
|
|
91
|
+
let recv = expr.expression;
|
|
92
|
+
while (ts.isParenthesizedExpression(recv) || ts.isAsExpression(recv) || ts.isTypeAssertion(recv))
|
|
93
|
+
recv = recv.expression;
|
|
94
|
+
// Browser-compatible packages commonly write
|
|
95
|
+
// `(process.stdout || {}).isTTY`. Node's stream object is always
|
|
96
|
+
// present and truthy, so the fallback cannot run; match the left
|
|
97
|
+
// receiver exactly as the value-level always-truthy `||` lowering
|
|
98
|
+
// does, preserving the native isatty/columns answer.
|
|
99
|
+
if (ts.isBinaryExpression(recv) && recv.operatorToken.kind === ts.SyntaxKind.BarBarToken) {
|
|
100
|
+
let left = recv.left;
|
|
101
|
+
while (ts.isParenthesizedExpression(left) ||
|
|
102
|
+
ts.isAsExpression(left) ||
|
|
103
|
+
ts.isTypeAssertion(left))
|
|
104
|
+
left = left.expression;
|
|
105
|
+
if (ts.isPropertyAccessExpression(left))
|
|
106
|
+
recv = left;
|
|
107
|
+
}
|
|
108
|
+
if (!ts.isPropertyAccessExpression(recv))
|
|
109
|
+
return null;
|
|
110
|
+
const stream = lowerer.stdlibGlobalMember(recv, "process");
|
|
111
|
+
if (stream !== "stdin" && stream !== "stdout" && stream !== "stderr")
|
|
112
|
+
return null;
|
|
113
|
+
const loc = locOf(expr);
|
|
114
|
+
const fd = {
|
|
115
|
+
kind: "numLit",
|
|
116
|
+
value: stream === "stdin" ? 0 : stream === "stdout" ? 1 : 2,
|
|
117
|
+
type: F64,
|
|
118
|
+
loc,
|
|
119
|
+
};
|
|
120
|
+
if (member === "isTTY") {
|
|
121
|
+
return { kind: "libCall", fn: "process.isTTY", args: [fd], type: BOOL, loc };
|
|
122
|
+
}
|
|
123
|
+
if (stream === "stdin")
|
|
124
|
+
return null; // no geometry on a ReadStream — generic fences apply
|
|
125
|
+
const declared = lowerer.mapTypeOf(lowerer.typeOf(expr));
|
|
126
|
+
const want = lowerer.withUndefinedArm(F64);
|
|
127
|
+
// JS files skip the annotation fence: there is no annotation to fix —
|
|
128
|
+
// the read IS Node's `number | undefined` and lowers to exactly that
|
|
129
|
+
// (commander's `isTTY ? columns : undefined` help-width probes).
|
|
130
|
+
if ((!declared || typeKey(declared) !== typeKey(want)) && !isJsSourceFile(expr.getSourceFile())) {
|
|
131
|
+
lowerer.noLowering(`process.${stream}.${member} as a plain number`, expr, `on a non-TTY stream Node's .${member} is undefined — type the read to admit it: ` +
|
|
132
|
+
`(process.${stream} as typeof process.${stream} & { ${member}?: number }).${member}`);
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
kind: "libCall",
|
|
136
|
+
fn: member === "rows" ? "process.rows" : "process.columns",
|
|
137
|
+
args: [fd],
|
|
138
|
+
type: want,
|
|
139
|
+
loc,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/** `process.argv` / `process.platform` / `process.pid` property READS
|
|
143
|
+
* lower to zero-arg libCalls (argv returns +1 on one interned array —
|
|
144
|
+
* identity and mutation semantics match Node's stable process.argv).
|
|
145
|
+
* `process.env` as a WHOLE value lowers to a fresh SNAPSHOT record —
|
|
146
|
+
* `{ [k: string]: string | undefined }` built over environ by the
|
|
147
|
+
* interned %env.snapshot helper: `{ ...process.env }`, Object.keys, and
|
|
148
|
+
* spawn-env flows all snapshot at the read, exactly what Node's own
|
|
149
|
+
* spread does (and nothing in a compiled program mutates environ between
|
|
150
|
+
* a snapshot and its use except process.env writes, which precede the
|
|
151
|
+
* read in source order). Method members referenced without a call are
|
|
152
|
+
* rejected specifically. Null for non-process receivers (the chain keeps
|
|
153
|
+
* trying other property lowerings). */
|
|
154
|
+
export function lowerProcessProperty(lowerer, expr) {
|
|
155
|
+
if (!expr.questionDotToken &&
|
|
156
|
+
expr.name.text === "bigint" &&
|
|
157
|
+
ts.isPropertyAccessExpression(expr.expression) &&
|
|
158
|
+
lowerer.stdlibGlobalMember(expr.expression, "process") === "hrtime") {
|
|
159
|
+
const loc = locOf(expr);
|
|
160
|
+
return {
|
|
161
|
+
kind: "dynKeyGet",
|
|
162
|
+
value: { kind: "libCall", fn: "process.hrtimeValue", args: [], type: DYN, loc },
|
|
163
|
+
key: { kind: "strLit", value: "bigint", type: STRING, loc },
|
|
164
|
+
type: DYN,
|
|
165
|
+
loc,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// node and openssl name the compatibility target, not linked engines.
|
|
169
|
+
// Read the stable object so descriptor edits through aliases stay visible.
|
|
170
|
+
if ((expr.name.text === "node" || expr.name.text === "openssl") &&
|
|
171
|
+
!expr.questionDotToken &&
|
|
172
|
+
ts.isPropertyAccessExpression(expr.expression) &&
|
|
173
|
+
lowerer.stdlibGlobalMember(expr.expression, "process") === "versions") {
|
|
174
|
+
// versions.openssl answers the compat target's string for the same
|
|
175
|
+
// reason versions.node does: Boolean(versions.openssl) is Node's own
|
|
176
|
+
// "is crypto available" probe, and the crypto module exists here
|
|
177
|
+
// (unsupported members fence per site). SEMANTICS.md documents that
|
|
178
|
+
// the string names the compat target, not a linked library.
|
|
179
|
+
const loc = locOf(expr);
|
|
180
|
+
return lowerer.coerceToExpected({
|
|
181
|
+
kind: "dynKeyGet",
|
|
182
|
+
key: { kind: "strLit", value: expr.name.text, type: STRING, loc },
|
|
183
|
+
value: { kind: "libCall", fn: "process.versions", args: [], type: DYN, loc },
|
|
184
|
+
type: DYN,
|
|
185
|
+
loc,
|
|
186
|
+
}, STRING);
|
|
187
|
+
}
|
|
188
|
+
// Other components begin absent. Consult the same object even for the
|
|
189
|
+
// capability probes: users can define or delete their own entries.
|
|
190
|
+
if (ts.isPropertyAccessExpression(expr.expression) &&
|
|
191
|
+
lowerer.stdlibGlobalMember(expr.expression, "process") === "versions") {
|
|
192
|
+
const loc = locOf(expr);
|
|
193
|
+
return {
|
|
194
|
+
kind: "dynKeyGet",
|
|
195
|
+
key: { kind: "strLit", value: expr.name.text, type: STRING, loc },
|
|
196
|
+
value: { kind: "libCall", fn: "process.versions", args: [], type: DYN, loc },
|
|
197
|
+
type: DYN,
|
|
198
|
+
loc,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
// The capability-probe members that honestly DON'T EXIST in a
|
|
202
|
+
// compiled binary — each reads undefined (their declared types carry
|
|
203
|
+
// the undefined arm), so feature probes take their documented
|
|
204
|
+
// fallbacks: no gyp build config (process.config.variables.* — no ICU,
|
|
205
|
+
// no QUIC — and process.config.target_defaults), no feature flags
|
|
206
|
+
// (process.features.* — no inspector, not a debug build).
|
|
207
|
+
if (!expr.questionDotToken && ts.isPropertyAccessExpression(expr.expression)) {
|
|
208
|
+
const container = lowerer.stdlibGlobalMember(expr.expression, "process");
|
|
209
|
+
if (container === "features") {
|
|
210
|
+
return { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc: locOf(expr) };
|
|
211
|
+
}
|
|
212
|
+
if (container === "config" &&
|
|
213
|
+
(expr.name.text === "variables" || expr.name.text === "target_defaults")) {
|
|
214
|
+
// `target_defaults` reads undefined directly. `variables` only
|
|
215
|
+
// appears as the receiver of a member read — that OUTER access is
|
|
216
|
+
// the undefined answer (below); a bare `variables` value fences.
|
|
217
|
+
if (expr.name.text === "target_defaults") {
|
|
218
|
+
return { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc: locOf(expr) };
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// process.config.variables.<name> — the full chain.
|
|
222
|
+
if (ts.isPropertyAccessExpression(expr.expression.expression) &&
|
|
223
|
+
expr.expression.name.text === "variables" &&
|
|
224
|
+
lowerer.stdlibGlobalMember(expr.expression.expression, "process") === "config") {
|
|
225
|
+
return { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc: locOf(expr) };
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const member = lowerer.stdlibGlobalMember(expr, "process");
|
|
229
|
+
if (member === null)
|
|
230
|
+
return null;
|
|
231
|
+
const loc = locOf(expr);
|
|
232
|
+
if (member === "versions") {
|
|
233
|
+
return { kind: "libCall", fn: "process.versions", args: [], type: DYN, loc };
|
|
234
|
+
}
|
|
235
|
+
if (member === "hrtime") {
|
|
236
|
+
return { kind: "libCall", fn: "process.hrtimeValue", args: [], type: DYN, loc };
|
|
237
|
+
}
|
|
238
|
+
if (member === "getBuiltinModule") {
|
|
239
|
+
// Keep the native loader's argument validation when the function is
|
|
240
|
+
// stored. The declaration's string signature must not insert a checked
|
|
241
|
+
// adapter before the loader gets to report Node's invalid-id error.
|
|
242
|
+
return { kind: "dynFrom", value: lowerBuiltinLoaderValue(lowerer, loc), type: DYN, loc };
|
|
243
|
+
}
|
|
244
|
+
if (member === "argv") {
|
|
245
|
+
return { kind: "libCall", fn: "process.argv", args: [], type: arrayOf(STRING), loc };
|
|
246
|
+
}
|
|
247
|
+
if (member === "connected") {
|
|
248
|
+
return { kind: "libCall", fn: "process.connected", args: [], type: BOOL, loc };
|
|
249
|
+
}
|
|
250
|
+
// process.execArgv: the extra CLI arguments Node itself consumed — a
|
|
251
|
+
// compiled binary consumed none, so the honest answer is a fresh [].
|
|
252
|
+
if (member === "execArgv") {
|
|
253
|
+
return { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
|
|
254
|
+
}
|
|
255
|
+
// process._exiting — the runtime's exit-sequence flag (true while
|
|
256
|
+
// 'exit' listeners run), Node's own undocumented member.
|
|
257
|
+
if (member === "_exiting") {
|
|
258
|
+
return { kind: "libCall", fn: "process.exiting", args: [], type: BOOL, loc };
|
|
259
|
+
}
|
|
260
|
+
if (member === "platform") {
|
|
261
|
+
return { kind: "libCall", fn: "process.platform", args: [], type: STRING, loc };
|
|
262
|
+
}
|
|
263
|
+
// process.arch: the compiled binary's OWN architecture ("arm64",
|
|
264
|
+
// "x64") — the same answer Node gives for its own build on the same
|
|
265
|
+
// machine.
|
|
266
|
+
if (member === "arch") {
|
|
267
|
+
return { kind: "libCall", fn: "process.arch", args: [], type: STRING, loc };
|
|
268
|
+
}
|
|
269
|
+
if (member === "pid") {
|
|
270
|
+
return { kind: "libCall", fn: "process.pid", args: [], type: F64, loc };
|
|
271
|
+
}
|
|
272
|
+
// process.execPath: the compiled binary's own resolved absolute path —
|
|
273
|
+
// the honest answer where Node's is the node executable's (SEMANTICS.md
|
|
274
|
+
// divergence 12, the argv[0]/argv[1] precedent).
|
|
275
|
+
if (member === "execPath") {
|
|
276
|
+
return { kind: "libCall", fn: "process.execPath", args: [], type: STRING, loc };
|
|
277
|
+
}
|
|
278
|
+
if (member === "env") {
|
|
279
|
+
const mapped = lowerer.mapTypeOf(lowerer.typeOf(expr));
|
|
280
|
+
if (mapped?.kind === "record") {
|
|
281
|
+
const helper = envSnapshotHelper(lowerer, mapped.shapeId, loc);
|
|
282
|
+
if (helper !== null) {
|
|
283
|
+
return { kind: "call", callee: helper, args: [], type: mapped, loc };
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
lowerer.unsupported("SC1090", expr, "process.env as a value of this type (read one variable: process.env.NAME or process.env[name])");
|
|
287
|
+
}
|
|
288
|
+
if (member === "exit" || member === "cwd" || member === "getuid" || member === "kill") {
|
|
289
|
+
lowerer.unsupported("SC1090", expr, `process methods as values (call '${member}' directly)`);
|
|
290
|
+
}
|
|
291
|
+
// process.stdout / process.stderr as first-class VALUES (flowing into
|
|
292
|
+
// a `NodeJS.WritableStream` slot — the prefixStream idiom): the
|
|
293
|
+
// procStream scalar, minted as the stream's fd. Member reads
|
|
294
|
+
// (`process.stdout.isTTY`, `.write(...)`) never reach here — their
|
|
295
|
+
// OUTER expressions dispatch first.
|
|
296
|
+
if (member === "stdin" ||
|
|
297
|
+
((member === "stdout" || member === "stderr") && isJsSourceFile(expr.getSourceFile()))) {
|
|
298
|
+
return {
|
|
299
|
+
kind: "libCall",
|
|
300
|
+
fn: "process.stdio",
|
|
301
|
+
args: [numLit(member === "stdin" ? 0 : member === "stdout" ? 1 : 2, loc)],
|
|
302
|
+
type: DYN,
|
|
303
|
+
loc,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
if (member === "stdout" || member === "stderr") {
|
|
307
|
+
return { kind: "numLit", value: member === "stdout" ? 1 : 2, type: PROCSTREAM_T, loc };
|
|
308
|
+
}
|
|
309
|
+
// Other members: type errors under the fallback declarations; with
|
|
310
|
+
// @types/node they typecheck and fall through to stdlibMemberFence
|
|
311
|
+
// (SC2020 naming process.<member>, with the console.log hint for
|
|
312
|
+
// stdout/stderr).
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
/** `process.exit(code)` / `process.cwd()` → libCall. The fallback
|
|
316
|
+
* declaration makes exit's code required; @types/node declares it
|
|
317
|
+
* optional. A bare `process.exit()` uses the current exitCode, or zero
|
|
318
|
+
* when unset. */
|
|
319
|
+
export function lowerProcessMethodCall(lowerer, call, access) {
|
|
320
|
+
if (call.questionDotToken)
|
|
321
|
+
return null;
|
|
322
|
+
if (isJsSourceFile(call.getSourceFile()) && ts.isPropertyAccessExpression(access.expression)) {
|
|
323
|
+
const stream = lowerer.stdlibGlobalMember(access.expression, "process");
|
|
324
|
+
if (stream === "stdin" || stream === "stdout" || stream === "stderr") {
|
|
325
|
+
if (call.arguments.some(ts.isSpreadElement))
|
|
326
|
+
lowerer.noLowering("process stream spread arguments", call);
|
|
327
|
+
return {
|
|
328
|
+
kind: "dynInvoke",
|
|
329
|
+
recv: lowerer.lowerExpr(access.expression),
|
|
330
|
+
method: access.name.text,
|
|
331
|
+
calleeName: access.getText(),
|
|
332
|
+
args: call.arguments.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
|
|
333
|
+
type: DYN,
|
|
334
|
+
loc: locOf(call),
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
const directProcessMember = lowerer.stdlibGlobalMember(access, "process");
|
|
339
|
+
if (directProcessMember === "loadEnvFile")
|
|
340
|
+
return lowerProcessLoadEnvFile(lowerer, call);
|
|
341
|
+
if (directProcessMember === "hrtime") {
|
|
342
|
+
if (call.arguments.some(ts.isSpreadElement))
|
|
343
|
+
lowerer.noLowering("process.hrtime with spread arguments", call);
|
|
344
|
+
const loc = locOf(call);
|
|
345
|
+
return {
|
|
346
|
+
kind: "dynCall",
|
|
347
|
+
callee: { kind: "libCall", fn: "process.hrtimeValue", args: [], type: DYN, loc },
|
|
348
|
+
args: call.arguments.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
|
|
349
|
+
calleeName: "process.hrtime",
|
|
350
|
+
type: DYN,
|
|
351
|
+
loc,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
if (directProcessMember === "getBuiltinModule") {
|
|
355
|
+
if (call.arguments.some(ts.isSpreadElement))
|
|
356
|
+
lowerer.noLowering("process.getBuiltinModule with spread arguments", call);
|
|
357
|
+
const loc = locOf(call);
|
|
358
|
+
const id = call.arguments[0]
|
|
359
|
+
? lowerer.lowerExprExpecting(call.arguments[0], DYN)
|
|
360
|
+
: dynUndefinedExpr(loc);
|
|
361
|
+
const binding = lowerer.declareHiddenLocal("%builtinId", DYN);
|
|
362
|
+
return {
|
|
363
|
+
kind: "seqExpr",
|
|
364
|
+
stmts: [
|
|
365
|
+
{ kind: "varDecl", localId: binding.id, init: id, loc },
|
|
366
|
+
...call.arguments.slice(1).map((arg) => ({
|
|
367
|
+
kind: "exprStmt",
|
|
368
|
+
expr: lowerer.lowerExpr(arg),
|
|
369
|
+
loc: locOf(arg),
|
|
370
|
+
})),
|
|
371
|
+
],
|
|
372
|
+
result: {
|
|
373
|
+
kind: "callValue",
|
|
374
|
+
callee: lowerBuiltinLoaderValue(lowerer, loc),
|
|
375
|
+
args: [varRef(binding.id, DYN, loc)],
|
|
376
|
+
type: DYN,
|
|
377
|
+
loc,
|
|
378
|
+
},
|
|
379
|
+
type: DYN,
|
|
380
|
+
loc,
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
if (directProcessMember === "send")
|
|
384
|
+
return lowerProcessIpcSend(lowerer, call);
|
|
385
|
+
if (directProcessMember === "disconnect") {
|
|
386
|
+
if (call.arguments.length !== 0) {
|
|
387
|
+
lowerer.noLowering(`process.disconnect with ${call.arguments.length} arguments`, call);
|
|
388
|
+
}
|
|
389
|
+
if (!ts.isExpressionStatement(call.parent)) {
|
|
390
|
+
lowerer.unsupported("SC1090", call, "using the result of process.disconnect() (call it as its own statement)");
|
|
391
|
+
}
|
|
392
|
+
return { kind: "libCall", fn: "process.disconnect", args: [], type: VOID, loc: locOf(call) };
|
|
393
|
+
}
|
|
394
|
+
// process.stdout.write(s[, encoding][, callback]) and stderr's twin:
|
|
395
|
+
// raw bytes, no newline or formatting. stdout shares console.log's
|
|
396
|
+
// promptly-submitted stream, preserving source order. Node's boolean
|
|
397
|
+
// is a backpressure signal; this synchronous write is constantly true.
|
|
398
|
+
// String encodings are compile-time-known BufferEncoding spellings;
|
|
399
|
+
// byte chunks evaluate but ignore the encoding like Node. Completion
|
|
400
|
+
// callbacks ride the next-tick queue and receive the success `null`.
|
|
401
|
+
// process.stdin.destroy(): a deliberate no-op — no stream machinery
|
|
402
|
+
// exists to tear down, and no other stdin surface observes the
|
|
403
|
+
// destroyed state (SEMANTICS.md documents it).
|
|
404
|
+
if (access.name.text === "destroy" &&
|
|
405
|
+
ts.isPropertyAccessExpression(access.expression) &&
|
|
406
|
+
lowerer.stdlibGlobalMember(access.expression, "process") === "stdin") {
|
|
407
|
+
if (call.arguments.length !== 0) {
|
|
408
|
+
lowerer.noLowering("stdin.destroy with arguments", call);
|
|
409
|
+
}
|
|
410
|
+
return { kind: "libCall", fn: "process.stdinDestroy", args: [], type: VOID, loc: locOf(call) };
|
|
411
|
+
}
|
|
412
|
+
// process.stdin.setRawMode(mode): termios raw mode when stdin IS a
|
|
413
|
+
// TTY (libuv's UV_TTY_MODE_RAW — the flag set Node applies; false
|
|
414
|
+
// restores the entry state). When stdin is NOT a TTY, Node's
|
|
415
|
+
// process.stdin is a Socket with no setRawMode member at all, so the
|
|
416
|
+
// call throws Node's exact catchable TypeError — the portless
|
|
417
|
+
// exit-hook wraps it in try/catch and relies on exactly that. Node
|
|
418
|
+
// returns `this` for chaining; that composition has no lowering, so
|
|
419
|
+
// statement position (or a concise arrow body) is required.
|
|
420
|
+
if (access.name.text === "setRawMode" &&
|
|
421
|
+
ts.isPropertyAccessExpression(access.expression) &&
|
|
422
|
+
lowerer.stdlibGlobalMember(access.expression, "process") === "stdin") {
|
|
423
|
+
const loc = locOf(call);
|
|
424
|
+
if (!ts.isExpressionStatement(call.parent) && !ts.isArrowFunction(call.parent)) {
|
|
425
|
+
lowerer.unsupported("SC1090", call, "using the result of stdin.setRawMode(...) (the ReadStream chain — call it as its own statement)");
|
|
426
|
+
}
|
|
427
|
+
if (call.arguments.length !== 1) {
|
|
428
|
+
lowerer.noLowering(`stdin.setRawMode with ${call.arguments.length} arguments`, call, "the supported form is setRawMode(mode) with one boolean");
|
|
429
|
+
}
|
|
430
|
+
const mode = lowerer.lowerExpr(call.arguments[0]);
|
|
431
|
+
if (mode.type.kind !== "bool") {
|
|
432
|
+
lowerer.noLowering(`stdin.setRawMode of '${lowerer.fmt(mode.type)}' modes`, call.arguments[0], "the mode is a boolean here — narrow unions first");
|
|
433
|
+
}
|
|
434
|
+
return { kind: "libCall", fn: "process.stdinSetRawMode", args: [mode], type: VOID, loc };
|
|
435
|
+
}
|
|
436
|
+
// process.stdin.on/once("data" | "end" | "error", cb): the piped-stdin
|
|
437
|
+
// event slice. A 'data' listener keeps the event loop alive until EOF
|
|
438
|
+
// (Node's flowing stdin); 'end'/'error' listeners alone do not. `once`
|
|
439
|
+
// auto-removes after the first delivery. Listener shapes are pinned
|
|
440
|
+
// per event — the runtime adapters cover exactly these.
|
|
441
|
+
if ((access.name.text === "on" || access.name.text === "once") &&
|
|
442
|
+
ts.isPropertyAccessExpression(access.expression) &&
|
|
443
|
+
lowerer.stdlibGlobalMember(access.expression, "process") === "stdin") {
|
|
444
|
+
const loc = locOf(call);
|
|
445
|
+
const once = access.name.text === "once";
|
|
446
|
+
if (call.arguments.length !== 2) {
|
|
447
|
+
lowerer.noLowering(`stdin.${access.name.text} with ${call.arguments.length} arguments`, call);
|
|
448
|
+
}
|
|
449
|
+
const evT = lowerer.typeOf(call.arguments[0]);
|
|
450
|
+
const event = evT.isStringLiteralType() ? evT.value : null;
|
|
451
|
+
if (event !== "data" && event !== "end" && event !== "error") {
|
|
452
|
+
lowerer.noLowering(`stdin.${access.name.text}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, call.arguments[0], '"data", "end", and "error" are the supported stdin events (as literals)');
|
|
453
|
+
}
|
|
454
|
+
if (!ts.isExpressionStatement(call.parent)) {
|
|
455
|
+
lowerer.unsupported("SC1090", call, "chaining stdin listener registration (the result is void here — register each listener as its own statement)");
|
|
456
|
+
}
|
|
457
|
+
const cb = lowerer.lowerExpr(call.arguments[1]);
|
|
458
|
+
if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 1) {
|
|
459
|
+
lowerer.unsupported("SC1090", call.arguments[1], "stdin listeners with more than one parameter or a return value");
|
|
460
|
+
}
|
|
461
|
+
const param = cb.type.params[0];
|
|
462
|
+
const onceArg = { kind: "boolLit", value: once, type: BOOL, loc };
|
|
463
|
+
if (event === "data") {
|
|
464
|
+
if (param !== undefined && !(param.kind === "bytes" && param.elem === "u8")) {
|
|
465
|
+
lowerer.unsupported("SC1090", call.arguments[1], `data listeners whose parameter is not 'Uint8Array' (got '${lowerer.fmt(param)}')`);
|
|
466
|
+
}
|
|
467
|
+
return { kind: "libCall", fn: "stdin.onData", args: [cb, onceArg], type: VOID, loc };
|
|
468
|
+
}
|
|
469
|
+
if (event === "end") {
|
|
470
|
+
if (param !== undefined) {
|
|
471
|
+
lowerer.unsupported("SC1090", call.arguments[1], "end listeners with parameters (use ())");
|
|
472
|
+
}
|
|
473
|
+
return { kind: "libCall", fn: "stdin.onEnd", args: [cb, onceArg], type: VOID, loc };
|
|
474
|
+
}
|
|
475
|
+
if (param !== undefined && !(param.kind === "object" && param.className === "%Error")) {
|
|
476
|
+
lowerer.unsupported("SC1090", call.arguments[1], `error listeners whose parameter is not 'Error' (got '${lowerer.fmt(param)}')`);
|
|
477
|
+
}
|
|
478
|
+
return { kind: "libCall", fn: "stdin.onError", args: [cb, onceArg], type: VOID, loc };
|
|
479
|
+
}
|
|
480
|
+
if (access.name.text === "write" && ts.isPropertyAccessExpression(access.expression)) {
|
|
481
|
+
const stream = lowerer.stdlibGlobalMember(access.expression, "process");
|
|
482
|
+
if (stream === "stdout" || stream === "stderr") {
|
|
483
|
+
const loc = locOf(call);
|
|
484
|
+
const args = call.arguments;
|
|
485
|
+
if (args.length < 1 || args.length > 3 || args.some(ts.isSpreadElement)) {
|
|
486
|
+
lowerer.noLowering(`process.${stream}.write with ${args.length} arguments`, call, "the supported forms are write(data[, encoding][, callback]) with a static BufferEncoding and completion callback");
|
|
487
|
+
}
|
|
488
|
+
const secondNode = args[1];
|
|
489
|
+
const thirdNode = args[2];
|
|
490
|
+
const secondUndefined = secondNode
|
|
491
|
+
? lowerStaticallyUndefinedArgument(lowerer, secondNode)
|
|
492
|
+
: null;
|
|
493
|
+
const thirdUndefined = thirdNode
|
|
494
|
+
? lowerStaticallyUndefinedArgument(lowerer, thirdNode)
|
|
495
|
+
: null;
|
|
496
|
+
const secondT = secondNode && !secondUndefined ? lowerer.mapTypeOf(lowerer.typeOf(secondNode)) : undefined;
|
|
497
|
+
const callbackNode = args.length === 3 && !thirdUndefined
|
|
498
|
+
? thirdNode
|
|
499
|
+
: args.length === 2 && secondT?.kind === "func"
|
|
500
|
+
? secondNode
|
|
501
|
+
: undefined;
|
|
502
|
+
const encodingNode = (args.length === 3 || (args.length === 2 && callbackNode === undefined)) && !secondUndefined
|
|
503
|
+
? secondNode
|
|
504
|
+
: undefined;
|
|
505
|
+
// Node's BufferEncoding aliases normalize before bytes are made.
|
|
506
|
+
// Preserve an effectful literal-typed expression even when its
|
|
507
|
+
// spelling folds (for example a function returning `"binary"`).
|
|
508
|
+
const encoding = (() => {
|
|
509
|
+
const defaultEncoding = {
|
|
510
|
+
kind: "strLit",
|
|
511
|
+
value: "utf8",
|
|
512
|
+
type: STRING,
|
|
513
|
+
loc,
|
|
514
|
+
};
|
|
515
|
+
if (secondUndefined) {
|
|
516
|
+
return defaultAfterUndefined(secondUndefined, defaultEncoding);
|
|
517
|
+
}
|
|
518
|
+
if (!encodingNode) {
|
|
519
|
+
return defaultEncoding;
|
|
520
|
+
}
|
|
521
|
+
const aliases = {
|
|
522
|
+
utf8: "utf8",
|
|
523
|
+
"utf-8": "utf8",
|
|
524
|
+
hex: "hex",
|
|
525
|
+
base64: "base64",
|
|
526
|
+
base64url: "base64url",
|
|
527
|
+
latin1: "latin1",
|
|
528
|
+
binary: "latin1",
|
|
529
|
+
ascii: "ascii",
|
|
530
|
+
utf16le: "utf16le",
|
|
531
|
+
"utf-16le": "utf16le",
|
|
532
|
+
ucs2: "utf16le",
|
|
533
|
+
"ucs-2": "utf16le",
|
|
534
|
+
};
|
|
535
|
+
const t = lowerer.typeOf(encodingNode);
|
|
536
|
+
const raw = t.isStringLiteralType() ? t.value : undefined;
|
|
537
|
+
const canonical = raw !== undefined ? own(aliases, raw) : undefined;
|
|
538
|
+
if (canonical === undefined) {
|
|
539
|
+
lowerer.noLowering(`process.${stream}.write with this encoding`, encodingNode, 'use a literal "utf8", "hex", "base64", "base64url", "latin1", "binary", "ascii", "utf16le", or "ucs2" encoding');
|
|
540
|
+
}
|
|
541
|
+
const evaluated = lowerer.lowerExprExpecting(encodingNode, STRING);
|
|
542
|
+
if (canonical === raw)
|
|
543
|
+
return evaluated;
|
|
544
|
+
const normalized = {
|
|
545
|
+
kind: "strLit",
|
|
546
|
+
value: canonical,
|
|
547
|
+
type: STRING,
|
|
548
|
+
loc: locOf(encodingNode),
|
|
549
|
+
};
|
|
550
|
+
return isSafeToDiscard(evaluated)
|
|
551
|
+
? normalized
|
|
552
|
+
: {
|
|
553
|
+
kind: "seqExpr",
|
|
554
|
+
stmts: [{ kind: "exprStmt", expr: evaluated, loc: evaluated.loc }],
|
|
555
|
+
result: normalized,
|
|
556
|
+
type: STRING,
|
|
557
|
+
loc: evaluated.loc,
|
|
558
|
+
};
|
|
559
|
+
})();
|
|
560
|
+
let data = lowerer.lowerExpr(args[0]);
|
|
561
|
+
// A checked-dynamic argument in a JS file takes the validated
|
|
562
|
+
// string exit (the trust-but-verify boundary: commander's
|
|
563
|
+
// `writeOut: (str) => process.stdout.write(str)` — str untyped):
|
|
564
|
+
// a runtime string writes; anything else throws the dynCheck's
|
|
565
|
+
// honest TypeError at the call.
|
|
566
|
+
if (data.type.kind === "dyn" && isJsSourceFile(call.getSourceFile())) {
|
|
567
|
+
data = { kind: "dynCheck", value: data, type: STRING, loc };
|
|
568
|
+
}
|
|
569
|
+
const isBytes = data.type.kind === "bytes" && data.type.elem === "u8";
|
|
570
|
+
if (!isBytes && data.type.kind !== "string") {
|
|
571
|
+
lowerer.noLowering(`process.${stream}.write of non-string data`, args[0], "strings and Buffer/Uint8Array values write; narrow unions first");
|
|
572
|
+
}
|
|
573
|
+
let callback;
|
|
574
|
+
if (callbackNode) {
|
|
575
|
+
callback = lowerer.lowerExpr(callbackNode);
|
|
576
|
+
if (callback.type.kind === "dyn" && isJsSourceFile(call.getSourceFile())) {
|
|
577
|
+
callback = {
|
|
578
|
+
kind: "dynCheck",
|
|
579
|
+
value: callback,
|
|
580
|
+
type: funcOf([DYN], VOID),
|
|
581
|
+
loc: locOf(callbackNode),
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
let callbackOk = callback.type.kind === "func" && callback.type.params.length <= 1;
|
|
585
|
+
if (callbackOk && callback.type.kind === "func" && callback.type.params.length === 1) {
|
|
586
|
+
const param = callback.type.params[0];
|
|
587
|
+
if (param.kind !== "dyn") {
|
|
588
|
+
const def = param.kind === "union" ? lowerer.unions.get(param.unionId) : undefined;
|
|
589
|
+
callbackOk =
|
|
590
|
+
!!def &&
|
|
591
|
+
def.arms.some((a) => a.kind === "nullT") &&
|
|
592
|
+
def.arms.some((a) => a.kind === "object" && a.className === "%Error") &&
|
|
593
|
+
def.arms.every((a) => a.kind === "nullT" ||
|
|
594
|
+
a.kind === "undefinedT" ||
|
|
595
|
+
(a.kind === "object" && a.className === "%Error"));
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
if (!callbackOk) {
|
|
599
|
+
lowerer.unsupported("SC1090", callbackNode, "process output completion callbacks must accept at most one Error | null parameter");
|
|
600
|
+
}
|
|
601
|
+
callback = voidizedCallback(lowerer, callback, locOf(callbackNode));
|
|
602
|
+
}
|
|
603
|
+
// Encoding- or callback-bearing writes use one fixed byte ABI. For
|
|
604
|
+
// strings, Buffer.from's encoder runs after data/encoding evaluation
|
|
605
|
+
// and before the callback expression; only its pure allocation moves
|
|
606
|
+
// earlier than Node's internal write conversion.
|
|
607
|
+
if (callback || args.length > 1 || isBytes) {
|
|
608
|
+
const bytes = isBytes
|
|
609
|
+
? data
|
|
610
|
+
: {
|
|
611
|
+
kind: "libCall",
|
|
612
|
+
fn: "buffer.fromStr",
|
|
613
|
+
args: [data, encoding],
|
|
614
|
+
type: BYTES_U8,
|
|
615
|
+
loc,
|
|
616
|
+
};
|
|
617
|
+
const defaultRuntimeEncoding = {
|
|
618
|
+
kind: "strLit",
|
|
619
|
+
value: "utf8",
|
|
620
|
+
type: STRING,
|
|
621
|
+
loc,
|
|
622
|
+
};
|
|
623
|
+
let runtimeEncoding = isBytes ? encoding : defaultRuntimeEncoding;
|
|
624
|
+
// An explicitly-undefined third argument is still evaluated after
|
|
625
|
+
// data and encoding, even though it schedules no callback. Strings
|
|
626
|
+
// already evaluate encoding while producing `bytes`; byte chunks
|
|
627
|
+
// fold both ignored argument effects into this final ABI slot.
|
|
628
|
+
if (thirdUndefined && !isSafeToDiscard(thirdUndefined)) {
|
|
629
|
+
const effects = isBytes
|
|
630
|
+
? [encoding, thirdUndefined].filter((effect) => !isSafeToDiscard(effect))
|
|
631
|
+
: [thirdUndefined];
|
|
632
|
+
runtimeEncoding = {
|
|
633
|
+
kind: "seqExpr",
|
|
634
|
+
stmts: effects.map((effect) => ({ kind: "exprStmt", expr: effect, loc: effect.loc })),
|
|
635
|
+
result: defaultRuntimeEncoding,
|
|
636
|
+
type: STRING,
|
|
637
|
+
loc: thirdUndefined.loc,
|
|
638
|
+
};
|
|
639
|
+
}
|
|
640
|
+
if (callback) {
|
|
641
|
+
return {
|
|
642
|
+
kind: "libCall",
|
|
643
|
+
fn: stream === "stdout" ? "process.stdoutWriteBytesCb" : "process.stderrWriteBytesCb",
|
|
644
|
+
args: [bytes, runtimeEncoding, callback],
|
|
645
|
+
type: BOOL,
|
|
646
|
+
loc,
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
return {
|
|
650
|
+
kind: "libCall",
|
|
651
|
+
fn: stream === "stdout" ? "process.stdoutWriteBytes" : "process.stderrWriteBytes",
|
|
652
|
+
args: [bytes, runtimeEncoding],
|
|
653
|
+
type: BOOL,
|
|
654
|
+
loc,
|
|
655
|
+
};
|
|
656
|
+
}
|
|
657
|
+
return {
|
|
658
|
+
kind: "libCall",
|
|
659
|
+
fn: stream === "stdout" ? "process.stdoutWrite" : "process.stderrWrite",
|
|
660
|
+
args: [data],
|
|
661
|
+
type: BOOL,
|
|
662
|
+
loc,
|
|
663
|
+
};
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
const member = lowerer.stdlibGlobalMember(access, "process");
|
|
667
|
+
if (member === null)
|
|
668
|
+
return null;
|
|
669
|
+
const loc = locOf(call);
|
|
670
|
+
// process.on/once/off: the CLI event slice — named OS
|
|
671
|
+
// signal handlers and the 'exit' hook. Signal listeners run as
|
|
672
|
+
// macrotasks at loop turns, replace the default disposition while
|
|
673
|
+
// registered (removing the last restores Ctrl-C death), and never
|
|
674
|
+
// keep the loop alive; 'exit' listeners run synchronously at
|
|
675
|
+
// termination (normal exit, process.exit, the exit-1 paths) with the
|
|
676
|
+
// exit code. `once` auto-removes; `off` removes by identity (bind
|
|
677
|
+
// the listener to a const so both sites see the same value), and
|
|
678
|
+
// `removeListener` IS `off` — Node aliases them.
|
|
679
|
+
const isOff = member === "off" || member === "removeListener";
|
|
680
|
+
if (member === "on" || member === "once" || isOff) {
|
|
681
|
+
if (call.arguments.length !== 2) {
|
|
682
|
+
lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
|
|
683
|
+
}
|
|
684
|
+
const evT = lowerer.typeOf(call.arguments[0]);
|
|
685
|
+
const event = evT.isStringLiteralType() ? evT.value : null;
|
|
686
|
+
if ((event === "message" || event === "disconnect") && !isOff) {
|
|
687
|
+
if (!ts.isExpressionStatement(call.parent)) {
|
|
688
|
+
lowerer.unsupported("SC1090", call, "chaining process IPC listener registration (register each listener as its own statement)");
|
|
689
|
+
}
|
|
690
|
+
const callback = event === "message"
|
|
691
|
+
? ipcMessageListener(lowerer, call.arguments[1])
|
|
692
|
+
: ipcDisconnectListener(lowerer, call.arguments[1]);
|
|
693
|
+
return {
|
|
694
|
+
kind: "libCall",
|
|
695
|
+
fn: event === "message" ? "process.onMessage" : "process.onDisconnect",
|
|
696
|
+
args: [callback, boolLit(member === "once", loc)],
|
|
697
|
+
type: VOID,
|
|
698
|
+
loc,
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
if (event === "uncaughtException" || event === "uncaughtExceptionMonitor") {
|
|
702
|
+
if (!ts.isExpressionStatement(call.parent)) {
|
|
703
|
+
lowerer.unsupported("SC1090", call, "chaining process exception listener registration");
|
|
704
|
+
}
|
|
705
|
+
const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
|
|
706
|
+
const monitor = boolLit(event === "uncaughtExceptionMonitor", loc);
|
|
707
|
+
return {
|
|
708
|
+
kind: "libCall",
|
|
709
|
+
fn: isOff ? "process.offUncaughtException" : "process.onUncaughtException",
|
|
710
|
+
args: isOff ? [cb, monitor] : [cb, boolLit(member === "once", loc), monitor],
|
|
711
|
+
type: VOID,
|
|
712
|
+
loc,
|
|
713
|
+
};
|
|
714
|
+
}
|
|
715
|
+
// 'unhandledRejection': the listener crosses as a dyn function and
|
|
716
|
+
// the completed-checkpoint report dispatches it (reason, promise) per
|
|
717
|
+
// never-observed rejection instead of printing and exiting 1
|
|
718
|
+
// (scr_async.c). `once` auto-removes after one delivery and
|
|
719
|
+
// `off`/`removeListener` remove by closure identity — the warning
|
|
720
|
+
// registry's story. 'rejectionHandled' is the sibling registry:
|
|
721
|
+
// a handler attached after delivery fires it once, synchronously
|
|
722
|
+
// with the promise.
|
|
723
|
+
if (event === "unhandledRejection" || event === "rejectionHandled") {
|
|
724
|
+
if (!ts.isExpressionStatement(call.parent)) {
|
|
725
|
+
lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
|
|
726
|
+
}
|
|
727
|
+
const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
|
|
728
|
+
const onceArg = { kind: "boolLit", value: member === "once", type: BOOL, loc };
|
|
729
|
+
const fn = event === "unhandledRejection"
|
|
730
|
+
? isOff
|
|
731
|
+
? "process.offUnhandledRejection"
|
|
732
|
+
: "process.onUnhandledRejection"
|
|
733
|
+
: isOff
|
|
734
|
+
? "process.offRejectionHandled"
|
|
735
|
+
: "process.onRejectionHandled";
|
|
736
|
+
return { kind: "libCall", fn, args: isOff ? [cb] : [cb, onceArg], type: VOID, loc };
|
|
737
|
+
}
|
|
738
|
+
// 'warning': the listener crosses as a dyn function; emitWarning
|
|
739
|
+
// and the runtime deprecation sites dispatch synchronously
|
|
740
|
+
// (SEMANTICS.md). off/removeListener remove by closure identity.
|
|
741
|
+
if (event === "warning" && (member === "on" || isOff)) {
|
|
742
|
+
if (!ts.isExpressionStatement(call.parent)) {
|
|
743
|
+
lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
|
|
744
|
+
}
|
|
745
|
+
const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
|
|
746
|
+
return {
|
|
747
|
+
kind: "libCall",
|
|
748
|
+
fn: isOff ? "process.offWarning" : "process.onWarning",
|
|
749
|
+
args: [cb],
|
|
750
|
+
type: VOID,
|
|
751
|
+
loc,
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
if (event === null || event.startsWith("SIG")) {
|
|
755
|
+
if (!ts.isExpressionStatement(call.parent)) {
|
|
756
|
+
lowerer.unsupported("SC1090", call, "chaining process signal listener registration");
|
|
757
|
+
}
|
|
758
|
+
const name = lowerer.coerceToExpected(lowerer.lowerExpr(call.arguments[0]), STRING);
|
|
759
|
+
if (name.type.kind !== "string" && name.type.kind !== "dyn") {
|
|
760
|
+
lowerer.noLowering("process signal event name that is not a string", call.arguments[0]);
|
|
761
|
+
}
|
|
762
|
+
const signal = name.type.kind === "string"
|
|
763
|
+
? name
|
|
764
|
+
: { kind: "dynCheck", value: name, type: STRING, loc };
|
|
765
|
+
const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
|
|
766
|
+
return {
|
|
767
|
+
kind: "libCall",
|
|
768
|
+
fn: isOff ? "process.offSignal" : "process.onSignal",
|
|
769
|
+
args: isOff ? [signal, cb] : [signal, cb, boolLit(member === "once", loc)],
|
|
770
|
+
type: VOID,
|
|
771
|
+
loc,
|
|
772
|
+
};
|
|
773
|
+
}
|
|
774
|
+
if (event !== "exit") {
|
|
775
|
+
lowerer.noLowering(`process.${member}("${event}", ...)`, call.arguments[0]);
|
|
776
|
+
}
|
|
777
|
+
if (!ts.isExpressionStatement(call.parent)) {
|
|
778
|
+
lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
|
|
779
|
+
}
|
|
780
|
+
let cb = lowerer.lowerExpr(call.arguments[1]);
|
|
781
|
+
// The checked-dynamic listener (test/common's `process.on('exit',
|
|
782
|
+
// runCallChecks)` — an implicit-any JS function, func(dyn)=>dyn, or
|
|
783
|
+
// a dyn VALUE that rode an untyped binding): adapt through the dyn
|
|
784
|
+
// function boundary to the registry's exact shape — box (dynFrom)
|
|
785
|
+
// when needed, then dynCheck into (number)=>void / ()=>void. The
|
|
786
|
+
// adapter delivers the exit code as a dyn argument and releases the
|
|
787
|
+
// result; a non-function dyn value throws the catchable TypeError
|
|
788
|
+
// at REGISTRATION (Node's ERR_INVALID_ARG_TYPE moment).
|
|
789
|
+
{
|
|
790
|
+
const target = funcOf([F64], VOID);
|
|
791
|
+
const exact = cb.type.kind === "func" &&
|
|
792
|
+
cb.type.ret.kind === "void" &&
|
|
793
|
+
cb.type.params.length <= 1 &&
|
|
794
|
+
(cb.type.params[0] === undefined || cb.type.params[0].kind === "f64");
|
|
795
|
+
if (!exact) {
|
|
796
|
+
if (cb.type.kind === "dyn") {
|
|
797
|
+
cb = { kind: "dynCheck", value: cb, type: target, loc };
|
|
798
|
+
}
|
|
799
|
+
else if (cb.type.kind === "func" &&
|
|
800
|
+
canBoxFuncIntoDyn(cb.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))) {
|
|
801
|
+
cb = {
|
|
802
|
+
kind: "dynCheck",
|
|
803
|
+
value: { kind: "dynFrom", value: cb, type: DYN, loc },
|
|
804
|
+
type: target,
|
|
805
|
+
loc,
|
|
806
|
+
};
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 1) {
|
|
811
|
+
lowerer.unsupported("SC1090", call.arguments[1], "process listeners with more than one parameter or a return value");
|
|
812
|
+
}
|
|
813
|
+
const param = cb.type.params[0];
|
|
814
|
+
const onceArg = { kind: "boolLit", value: member === "once", type: BOOL, loc };
|
|
815
|
+
if (param !== undefined && param.kind !== "f64") {
|
|
816
|
+
lowerer.unsupported("SC1090", call.arguments[1], `exit listeners whose parameter is not 'number' (got '${lowerer.fmt(param)}')`);
|
|
817
|
+
}
|
|
818
|
+
if (isOff) {
|
|
819
|
+
return { kind: "libCall", fn: "process.offExit", args: [cb], type: VOID, loc };
|
|
820
|
+
}
|
|
821
|
+
return { kind: "libCall", fn: "process.onExit", args: [cb, onceArg], type: VOID, loc };
|
|
822
|
+
}
|
|
823
|
+
// process.emitWarning(...): the argument vector crosses as ONE dyn
|
|
824
|
+
// array and the runtime applies Node's full grammar (string or Error
|
|
825
|
+
// warning; type/ctor/options second; code/ctor third — wrong kinds
|
|
826
|
+
// throw ERR_INVALID_ARG_TYPE). A single SPREAD of a checked-dynamic
|
|
827
|
+
// array passes that array directly (the suite's forEach-spread
|
|
828
|
+
// shape: `.forEach((args) => process.emitWarning(...args))`).
|
|
829
|
+
if (member === "emitWarning") {
|
|
830
|
+
let argsArr = null;
|
|
831
|
+
if (call.arguments.length === 1 && ts.isSpreadElement(call.arguments[0])) {
|
|
832
|
+
const spread = lowerer.lowerExpr(call.arguments[0].expression);
|
|
833
|
+
if (spread.type.kind === "dyn") {
|
|
834
|
+
argsArr = spread;
|
|
835
|
+
}
|
|
836
|
+
else {
|
|
837
|
+
lowerer.noLowering("process.emitWarning with a typed spread argument", call.arguments[0], "spread an untyped (checked-dynamic) array, or write the arguments positionally");
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
else {
|
|
841
|
+
argsArr = lowerTracingArguments(lowerer, call.arguments, loc);
|
|
842
|
+
}
|
|
843
|
+
return { kind: "libCall", fn: "process.emitWarning", args: [argsArr], type: VOID, loc };
|
|
844
|
+
}
|
|
845
|
+
if (member === "cwd") {
|
|
846
|
+
return { kind: "libCall", fn: "process.cwd", args: [], type: STRING, loc };
|
|
847
|
+
}
|
|
848
|
+
// process.nextTick(cb, ...args): the user tick queue — callbacks
|
|
849
|
+
// drain before promise jobs at every loop checkpoint (Node's tick-
|
|
850
|
+
// then-microtask order; the station-time divergence for ticks
|
|
851
|
+
// scheduled by station listeners is SEMANTICS.md territory). The
|
|
852
|
+
// callback adapts exactly like setImmediate's: zero-param passes
|
|
853
|
+
// through, boxable parameterized shapes ride the checked-dynamic
|
|
854
|
+
// boundary, trailing call arguments ride the interned dyn thunk.
|
|
855
|
+
if (member === "nextTick") {
|
|
856
|
+
if (call.arguments.length === 0) {
|
|
857
|
+
lowerer.noLowering("process.nextTick with 0 arguments", call, "the supported form is process.nextTick(callback, ...args)");
|
|
858
|
+
}
|
|
859
|
+
const cb = timerStyleCallback(lowerer, call.arguments, "process.nextTick", loc);
|
|
860
|
+
return { kind: "libCall", fn: "process.nextTick", args: [cb], type: VOID, loc };
|
|
861
|
+
}
|
|
862
|
+
// The process introspection statics — plain reads of the process's
|
|
863
|
+
// own clocks and counters, Node's shapes exactly.
|
|
864
|
+
if (member === "uptime" || member === "availableMemory" || member === "constrainedMemory") {
|
|
865
|
+
if (call.arguments.length !== 0) {
|
|
866
|
+
lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
|
|
867
|
+
}
|
|
868
|
+
const fn = member === "uptime"
|
|
869
|
+
? "process.uptime"
|
|
870
|
+
: member === "availableMemory"
|
|
871
|
+
? "process.availableMemory"
|
|
872
|
+
: "process.constrainedMemory";
|
|
873
|
+
return { kind: "libCall", fn, args: [], type: F64, loc };
|
|
874
|
+
}
|
|
875
|
+
// process.cpuUsage(prev?) / process.threadCpuUsage(prev?) — the
|
|
876
|
+
// {user, system} microsecond records (getrusage / the thread clock).
|
|
877
|
+
// The prev form validates Node-style (prevValue.user then .system,
|
|
878
|
+
// the ERR_INVALID_ARG_VALUE RangeError with the received number) and
|
|
879
|
+
// answers the per-field diffs; the record evaluates ONCE through an
|
|
880
|
+
// interned helper (the X509Certificate precedent). Typed non-record
|
|
881
|
+
// prevs (Node's ERR_INVALID_ARG_TYPE shapes) keep a pointed fence.
|
|
882
|
+
if (member === "cpuUsage" || member === "threadCpuUsage") {
|
|
883
|
+
const prefix = member === "cpuUsage" ? "cpu" : "threadCpu";
|
|
884
|
+
const t = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
885
|
+
if (t?.kind !== "record")
|
|
886
|
+
lowerer.badType(call, lowerer.typeOf(call));
|
|
887
|
+
const shape = lowerer.shapes.get(t.shapeId);
|
|
888
|
+
if (!shape || shape.fields.length !== 2 || !shape.fields.every((f) => f.type.kind === "f64")) {
|
|
889
|
+
lowerer.badType(call, lowerer.typeOf(call));
|
|
890
|
+
}
|
|
891
|
+
const sampleField = (name) => ({
|
|
892
|
+
kind: "libCall",
|
|
893
|
+
fn: (name === "user" ? `process.${prefix}User` : `process.${prefix}System`),
|
|
894
|
+
args: [],
|
|
895
|
+
type: F64,
|
|
896
|
+
loc,
|
|
897
|
+
});
|
|
898
|
+
if (call.arguments.length === 0) {
|
|
899
|
+
return {
|
|
900
|
+
kind: "recordLit",
|
|
901
|
+
fields: shape.fields.map((f) => ({ name: f.name, value: sampleField(f.name) })),
|
|
902
|
+
type: t,
|
|
903
|
+
loc,
|
|
904
|
+
};
|
|
905
|
+
}
|
|
906
|
+
if (call.arguments.length !== 1) {
|
|
907
|
+
lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
|
|
908
|
+
}
|
|
909
|
+
const prev = lowerer.lowerExpr(call.arguments[0]);
|
|
910
|
+
const prevShape = prev.type.kind === "record" ? lowerer.shapes.get(prev.type.shapeId) : undefined;
|
|
911
|
+
const prevOk = prevShape !== undefined &&
|
|
912
|
+
["user", "system"].every((n) => prevShape.fields.some((f) => f.name === n && f.type.kind === "f64"));
|
|
913
|
+
if (prev.type.kind !== "record" || !prevOk) {
|
|
914
|
+
lowerer.noLowering(`process.${member} of a '${lowerer.fmt(prev.type)}' previous value`, call.arguments[0], "the previous value is the record a prior call answered ({ user, system } numbers) — Node's ERR_INVALID_ARG_TYPE shapes have no lowering");
|
|
915
|
+
}
|
|
916
|
+
const prevT = prev.type;
|
|
917
|
+
const key = `${prefix}usage.diff:${prevT.shapeId}:${t.shapeId}`;
|
|
918
|
+
let helper = lowerer.valueHelpers.get(key);
|
|
919
|
+
if (!helper) {
|
|
920
|
+
helper = `%${prefix}usage.diff.${lowerer.valueHelpers.size}`;
|
|
921
|
+
lowerer.valueHelpers.set(key, helper);
|
|
922
|
+
const pRef = { kind: "varRef", localId: "p.0", type: prevT, loc };
|
|
923
|
+
const fieldOf = (name) => ({
|
|
924
|
+
kind: "recordGet",
|
|
925
|
+
obj: pRef,
|
|
926
|
+
shapeId: prevT.shapeId,
|
|
927
|
+
field: name,
|
|
928
|
+
type: F64,
|
|
929
|
+
loc,
|
|
930
|
+
});
|
|
931
|
+
const diffField = (name) => ({
|
|
932
|
+
kind: "libCall",
|
|
933
|
+
fn: (name === "user"
|
|
934
|
+
? `process.${prefix}UserDiff`
|
|
935
|
+
: `process.${prefix}SystemDiff`),
|
|
936
|
+
args: [fieldOf(name)],
|
|
937
|
+
type: F64,
|
|
938
|
+
loc,
|
|
939
|
+
});
|
|
940
|
+
lowerer.liftedFns.push({
|
|
941
|
+
name: helper,
|
|
942
|
+
params: [{ localId: "p.0", name: "p", type: prevT }],
|
|
943
|
+
returnType: t,
|
|
944
|
+
locals: [{ id: "p.0", name: "p", type: prevT, mutable: false }],
|
|
945
|
+
body: [
|
|
946
|
+
// Node validates prevValue.user THEN prevValue.system, before
|
|
947
|
+
// any sampling — the RangeError order the suite pins.
|
|
948
|
+
{
|
|
949
|
+
kind: "exprStmt",
|
|
950
|
+
expr: {
|
|
951
|
+
kind: "libCall",
|
|
952
|
+
fn: "process.cpuPrevValidate",
|
|
953
|
+
args: [fieldOf("user"), fieldOf("system")],
|
|
954
|
+
type: VOID,
|
|
955
|
+
loc,
|
|
956
|
+
},
|
|
957
|
+
loc,
|
|
958
|
+
},
|
|
959
|
+
{
|
|
960
|
+
kind: "return",
|
|
961
|
+
value: {
|
|
962
|
+
kind: "recordLit",
|
|
963
|
+
fields: shape.fields.map((f) => ({ name: f.name, value: diffField(f.name) })),
|
|
964
|
+
type: t,
|
|
965
|
+
loc,
|
|
966
|
+
},
|
|
967
|
+
loc,
|
|
968
|
+
},
|
|
969
|
+
],
|
|
970
|
+
loc,
|
|
971
|
+
});
|
|
972
|
+
}
|
|
973
|
+
return { kind: "call", callee: helper, args: [prev], type: t, loc };
|
|
974
|
+
}
|
|
975
|
+
// process.resourceUsage() — getrusage's 16 fields in Node's names and
|
|
976
|
+
// units (CPU times in microseconds, maxRSS in kilobytes).
|
|
977
|
+
if (member === "resourceUsage") {
|
|
978
|
+
if (call.arguments.length !== 0) {
|
|
979
|
+
lowerer.noLowering(`process.resourceUsage with ${call.arguments.length} arguments`, call);
|
|
980
|
+
}
|
|
981
|
+
const t = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
982
|
+
if (t?.kind !== "record")
|
|
983
|
+
lowerer.badType(call, lowerer.typeOf(call));
|
|
984
|
+
const shape = lowerer.shapes.get(t.shapeId);
|
|
985
|
+
const RUSAGE_FIELDS = [
|
|
986
|
+
"userCPUTime",
|
|
987
|
+
"systemCPUTime",
|
|
988
|
+
"maxRSS",
|
|
989
|
+
"sharedMemorySize",
|
|
990
|
+
"unsharedDataSize",
|
|
991
|
+
"unsharedStackSize",
|
|
992
|
+
"minorPageFault",
|
|
993
|
+
"majorPageFault",
|
|
994
|
+
"swappedOut",
|
|
995
|
+
"fsRead",
|
|
996
|
+
"fsWrite",
|
|
997
|
+
"ipcSent",
|
|
998
|
+
"ipcReceived",
|
|
999
|
+
"signalsCount",
|
|
1000
|
+
"voluntaryContextSwitches",
|
|
1001
|
+
"involuntaryContextSwitches",
|
|
1002
|
+
];
|
|
1003
|
+
if (!shape ||
|
|
1004
|
+
!shape.fields.every((f) => RUSAGE_FIELDS.includes(f.name) && f.type.kind === "f64")) {
|
|
1005
|
+
lowerer.badType(call, lowerer.typeOf(call));
|
|
1006
|
+
}
|
|
1007
|
+
return {
|
|
1008
|
+
kind: "recordLit",
|
|
1009
|
+
fields: shape.fields.map((f) => ({
|
|
1010
|
+
name: f.name,
|
|
1011
|
+
value: {
|
|
1012
|
+
kind: "libCall",
|
|
1013
|
+
fn: "process.rusage",
|
|
1014
|
+
args: [{ kind: "numLit", value: RUSAGE_FIELDS.indexOf(f.name), type: F64, loc }],
|
|
1015
|
+
type: F64,
|
|
1016
|
+
loc,
|
|
1017
|
+
},
|
|
1018
|
+
})),
|
|
1019
|
+
type: t,
|
|
1020
|
+
loc,
|
|
1021
|
+
};
|
|
1022
|
+
}
|
|
1023
|
+
// process.getActiveResourcesInfo() — the loop's own bookkeeping:
|
|
1024
|
+
// 'Timeout' per armed timer (a firing, uncleared one included —
|
|
1025
|
+
// Node's lifetime) and 'Immediate' per queued, unfired immediate.
|
|
1026
|
+
// DIVERGENCE (SEMANTICS.md): resources this runtime does not model
|
|
1027
|
+
// as loop handles (TCP wraps, FS requests) are absent from the answer.
|
|
1028
|
+
if (member === "getActiveResourcesInfo") {
|
|
1029
|
+
if (call.arguments.length !== 0) {
|
|
1030
|
+
lowerer.noLowering(`process.getActiveResourcesInfo with ${call.arguments.length} arguments`, call);
|
|
1031
|
+
}
|
|
1032
|
+
return { kind: "libCall", fn: "process.activeResources", args: [], type: arrayOf(STRING), loc };
|
|
1033
|
+
}
|
|
1034
|
+
// umask(2): the no-argument form reads without setting (the frontend
|
|
1035
|
+
// completes it to the -1 read sentinel); umask(mask) sets and answers
|
|
1036
|
+
// the previous mask, Node's shape either way.
|
|
1037
|
+
if (member === "umask") {
|
|
1038
|
+
if (call.arguments.length > 1) {
|
|
1039
|
+
lowerer.noLowering(`process.umask with ${call.arguments.length} arguments`, call);
|
|
1040
|
+
}
|
|
1041
|
+
const mask = call.arguments.length === 1
|
|
1042
|
+
? lowerer.lowerExpr(call.arguments[0])
|
|
1043
|
+
: { kind: "numLit", value: -1, type: F64, loc };
|
|
1044
|
+
if (mask.type.kind !== "f64") {
|
|
1045
|
+
lowerer.noLowering("process.umask of non-number masks", call.arguments[0]);
|
|
1046
|
+
}
|
|
1047
|
+
return { kind: "libCall", fn: "process.umask", args: [mask], type: F64, loc };
|
|
1048
|
+
}
|
|
1049
|
+
// chdir(2) — throws Node's fs-shaped error on failure.
|
|
1050
|
+
if (member === "chdir") {
|
|
1051
|
+
if (call.arguments.length !== 1) {
|
|
1052
|
+
lowerer.noLowering(`process.chdir with ${call.arguments.length} arguments`, call);
|
|
1053
|
+
}
|
|
1054
|
+
const dir = lowerer.lowerExpr(call.arguments[0]);
|
|
1055
|
+
if (dir.type.kind !== "string") {
|
|
1056
|
+
lowerer.noLowering("process.chdir of non-string paths", call.arguments[0]);
|
|
1057
|
+
}
|
|
1058
|
+
return { kind: "libCall", fn: "process.chdir", args: [dir], type: VOID, loc };
|
|
1059
|
+
}
|
|
1060
|
+
// getuid(2): POSIX-only target, so the call always answers a number —
|
|
1061
|
+
// the plain-f64 result is honest here even though @types/node declares
|
|
1062
|
+
// the member optional (that optionality covers Windows). The `?.()`
|
|
1063
|
+
// spelling routes here through lowerProcessOptionalMethodCall.
|
|
1064
|
+
if (member === "getuid" || member === "getgid") {
|
|
1065
|
+
if (call.arguments.length !== 0) {
|
|
1066
|
+
lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
|
|
1067
|
+
}
|
|
1068
|
+
return {
|
|
1069
|
+
kind: "libCall",
|
|
1070
|
+
fn: member === "getuid" ? "process.getuid" : "process.getgid",
|
|
1071
|
+
args: [],
|
|
1072
|
+
type: F64,
|
|
1073
|
+
loc,
|
|
1074
|
+
};
|
|
1075
|
+
}
|
|
1076
|
+
// process.kill(pid, signal?) — Node's semantics exactly: the signal is
|
|
1077
|
+
// a name string (the runtime resolves Node's signal table; unknown
|
|
1078
|
+
// names throw the ERR_UNKNOWN_SIGNAL TypeError), a number (0 probes),
|
|
1079
|
+
// or omitted (SIGTERM); a non-int32 pid throws Node's
|
|
1080
|
+
// ERR_INVALID_ARG_TYPE TypeError text, and kill(2) failures throw
|
|
1081
|
+
// Node's `kill ESRCH`/`kill EPERM` Error. The result is Node's
|
|
1082
|
+
// constant true.
|
|
1083
|
+
if (member === "kill") {
|
|
1084
|
+
if (call.arguments.length < 1 || call.arguments.length > 2) {
|
|
1085
|
+
lowerer.noLowering(`process.kill with ${call.arguments.length} arguments`, call);
|
|
1086
|
+
}
|
|
1087
|
+
const pid = lowerer.lowerExprExpecting(call.arguments[0], F64);
|
|
1088
|
+
const sigNode = call.arguments[1];
|
|
1089
|
+
if (!sigNode) {
|
|
1090
|
+
const dflt = { kind: "strLit", value: "SIGTERM", type: STRING, loc };
|
|
1091
|
+
return { kind: "libCall", fn: "process.kill", args: [pid, dflt], type: BOOL, loc };
|
|
1092
|
+
}
|
|
1093
|
+
const sig = lowerer.lowerExpr(sigNode);
|
|
1094
|
+
if (sig.type.kind === "f64") {
|
|
1095
|
+
return { kind: "libCall", fn: "process.killNum", args: [pid, sig], type: BOOL, loc };
|
|
1096
|
+
}
|
|
1097
|
+
if (sig.type.kind === "string") {
|
|
1098
|
+
return { kind: "libCall", fn: "process.kill", args: [pid, sig], type: BOOL, loc };
|
|
1099
|
+
}
|
|
1100
|
+
lowerer.noLowering(`process.kill with a '${lowerer.fmt(sig.type)}' signal`, sigNode, "pass a signal name string or number (narrow unions first)");
|
|
1101
|
+
}
|
|
1102
|
+
if (member === "exit") {
|
|
1103
|
+
const arg = call.arguments[0];
|
|
1104
|
+
const code = arg !== undefined
|
|
1105
|
+
? lowerer.lowerExprExpecting(arg, F64)
|
|
1106
|
+
: { kind: "libCall", fn: "process.currentExitCode", args: [], type: F64, loc };
|
|
1107
|
+
return { kind: "libCall", fn: "process.exit", args: [code], type: VOID, loc };
|
|
1108
|
+
}
|
|
1109
|
+
return null; // process.argv(...) etc. are tsc errors before lowering
|
|
1110
|
+
}
|
|
1111
|
+
/** `process.getuid?.()` — the optional call of an optional process
|
|
1112
|
+
* method. On a POSIX target the member always exists, so the `?.` IS the
|
|
1113
|
+
* call (the checker's undefined arm covers Windows, which scriptc does
|
|
1114
|
+
* not target) and the honest result is the plain number. Intercepted
|
|
1115
|
+
* BEFORE the optional-chain machinery: `process.getuid` has no value
|
|
1116
|
+
* lowering for the chain to guard. Null when this isn't that shape. */
|
|
1117
|
+
export function lowerProcessOptionalMethodCall(lowerer, expr) {
|
|
1118
|
+
if (!expr.questionDotToken)
|
|
1119
|
+
return null;
|
|
1120
|
+
if (!ts.isPropertyAccessExpression(expr.expression))
|
|
1121
|
+
return null;
|
|
1122
|
+
const member = lowerer.stdlibGlobalMember(expr.expression, "process");
|
|
1123
|
+
if (member === "send")
|
|
1124
|
+
return lowerProcessIpcSend(lowerer, expr);
|
|
1125
|
+
if (member !== "getuid" && member !== "getgid")
|
|
1126
|
+
return null;
|
|
1127
|
+
if (expr.arguments.length !== 0) {
|
|
1128
|
+
lowerer.noLowering(`process.${member} with ${expr.arguments.length} arguments`, expr);
|
|
1129
|
+
}
|
|
1130
|
+
return {
|
|
1131
|
+
kind: "libCall",
|
|
1132
|
+
fn: member === "getuid" ? "process.getuid" : "process.getgid",
|
|
1133
|
+
args: [],
|
|
1134
|
+
type: F64,
|
|
1135
|
+
loc: locOf(expr),
|
|
1136
|
+
};
|
|
1137
|
+
}
|
|
1138
|
+
//# sourceMappingURL=process.js.map
|