@scriptc/compiler 0.4.6 → 0.4.7
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/node-fallback/events.d.ts +6 -1
- package/ambient/node-fallback/fs-promises.d.ts +1 -1
- package/ambient/node-fallback/fs.d.ts +54 -10
- package/ambient/node-fallback/http.d.ts +3 -1
- package/ambient/node-fallback/net.d.ts +19 -0
- package/ambient/node-fallback/querystring.d.ts +3 -3
- package/ambient/scriptc-node-fallback.d.ts +58 -13
- package/dist/backend/executable-features.js +13 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +12 -1
- package/dist/backend/immutability.js +50 -4
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/immutability.test.js +95 -1
- package/dist/backend/immutability.test.js.map +1 -1
- package/dist/backend/library-pack.js +2 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/linker.d.ts +11 -0
- package/dist/backend/linker.js +31 -3
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +7 -2
- package/dist/backend/lld.js +5 -3
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +10 -4
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +50 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.js +6 -5
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +53 -1
- package/dist/backend/llvm/dyn.js +221 -9
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +1 -1
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +148 -50
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.js +39 -19
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +29 -2
- package/dist/backend/llvm/emitter.js +86 -7
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +4 -1
- package/dist/backend/llvm/expr-calls.js +20 -4
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +209 -16
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +94 -11
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
- package/dist/backend/llvm/expr-stream-bridges.js +42 -2
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
- package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/integer-values.d.ts +2 -0
- package/dist/backend/llvm/integer-values.js +6 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +38 -0
- package/dist/backend/llvm/js-ic.js +295 -1
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +20 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +116 -11
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +136 -24
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +70 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +67 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
- package/dist/backend/llvm/loop-entry-versions.js +43 -21
- package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +7 -1
- package/dist/backend/llvm/loop-state.js +20 -2
- package/dist/backend/llvm/loop-state.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
- package/dist/backend/llvm/map-number-lookup.js +7 -3
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +52 -11
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
- package/dist/backend/llvm/receiver-brackets.test.js +68 -0
- package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
- package/dist/backend/llvm/record-views.d.ts +22 -2
- package/dist/backend/llvm/record-views.js +139 -10
- package/dist/backend/llvm/record-views.js.map +1 -1
- package/dist/backend/llvm/record-views.test.js +76 -0
- package/dist/backend/llvm/record-views.test.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +1 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +3 -0
- package/dist/backend/llvm/shapes.js +18 -3
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +4 -0
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +10 -1
- package/dist/backend/llvm/speculative-integers.js +59 -8
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +3 -3
- package/dist/backend/llvm/unwind-abi.js +8 -3
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/walkers.js +1 -1
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +54 -0
- package/dist/backend/native/executable.js +87 -5
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -1
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.js +5 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen.js +3 -0
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +43 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.js +1 -0
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-profile.d.ts +4 -1
- package/dist/backend/native-profile.js +12 -1
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +10 -0
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/publication.d.ts +4 -1
- package/dist/backend/publication.js +4 -2
- package/dist/backend/publication.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 +31 -7
- package/dist/backend/runtime-pack-core.js +21 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +18 -1
- package/dist/backend/runtime-pack-native.js +138 -29
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.js +166 -4
- package/dist/backend/runtime-pack-native.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +3 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +7 -0
- package/dist/backend/runtime-pack.js +25 -3
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +3 -11
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/vendor-archives.d.ts +4 -1
- package/dist/backend/vendor-archives.js +264 -3
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +36 -0
- package/dist/backend/vendor-inputs.js +42 -0
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +28 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +2 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +7 -1
- package/dist/compat/fetch-profile.js +23 -10
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.d.ts +3 -0
- package/dist/contracts/check.js +18 -5
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -1
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/codes.d.ts +6 -0
- package/dist/diagnostics/codes.js +6 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +50 -0
- package/dist/diagnostics/diagnostic.js +142 -3
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.js +3 -1
- package/dist/diagnostics/dynamic-tier.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +29 -0
- package/dist/executable/executable-cache.js +18 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +5 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +13 -3
- package/dist/executable/prepare.js +271 -18
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/early-errors.d.ts +14 -0
- package/dist/frontend/early-errors.js +305 -0
- package/dist/frontend/early-errors.js.map +1 -0
- package/dist/frontend/early-errors.test.d.ts +1 -0
- package/dist/frontend/early-errors.test.js +42 -0
- package/dist/frontend/early-errors.test.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.js +23 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +47 -0
- package/dist/frontend/input-tracker.js +173 -36
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +86 -2
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/js-inference.d.ts +2 -0
- package/dist/frontend/js-inference.js +18 -0
- package/dist/frontend/js-inference.js.map +1 -0
- package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
- package/dist/frontend/lowering/binding-analysis.js +65 -1
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.js +9 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +1 -1
- package/dist/frontend/lowering/builtin-namespaces.js +19 -2
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js +50 -10
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.js +5 -1
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
- package/dist/frontend/lowering/builtins/dates.js +23 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
- package/dist/frontend/lowering/builtins/environment.js +213 -2
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +47 -16
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
- package/dist/frontend/lowering/builtins/filesystem.js +185 -16
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +39 -2
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +3 -2
- package/dist/frontend/lowering/builtins/operating-system.js +5 -4
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +17 -1
- package/dist/frontend/lowering/builtins/process.js +285 -19
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
- package/dist/frontend/lowering/builtins/querystring.js +202 -18
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.js +21 -3
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +60 -1
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +20 -1
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
- package/dist/frontend/lowering/builtins/v8.js +7 -5
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
- package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
- package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +77 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js +5 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +5 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +114 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +59 -10
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js +15 -0
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-views.d.ts +13 -0
- package/dist/frontend/lowering/class-views.js +51 -0
- package/dist/frontend/lowering/class-views.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +54 -10
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +7 -0
- package/dist/frontend/lowering/coercions/state.js +7 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +60 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +29 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +132 -28
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +16 -5
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +16 -0
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +4 -0
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +11 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +53 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.d.ts +14 -0
- package/dist/frontend/lowering/expressions/array-literals.js +26 -10
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +104 -12
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +121 -4
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +143 -3
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +25 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
- package/dist/frontend/lowering/expressions/object-literals.js +778 -229
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +66 -20
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +31 -0
- package/dist/frontend/lowering/expressions/property-access.js +796 -12
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +29 -1
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +17 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +132 -17
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +6 -0
- package/dist/frontend/lowering/frozen-records.js +10 -4
- package/dist/frontend/lowering/frozen-records.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
- package/dist/frontend/lowering/frozen-records.test.js +44 -0
- package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
- package/dist/frontend/lowering/function-names.d.ts +9 -0
- package/dist/frontend/lowering/function-names.js +95 -0
- package/dist/frontend/lowering/function-names.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +5 -3
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +49 -0
- package/dist/frontend/lowering/generic-functions.js +365 -7
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-values.d.ts +9 -0
- package/dist/frontend/lowering/global-values.js +44 -0
- package/dist/frontend/lowering/global-values.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.js +34 -1
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
- package/dist/frontend/lowering/key-order-witness.js +546 -5
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +14 -0
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +110 -1
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
- package/dist/frontend/lowering/lower-builtin-values.js +332 -58
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +22 -1
- package/dist/frontend/lowering/lower-calls.js +427 -48
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-calls.test.js +78 -0
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
- package/dist/frontend/lowering/lower-classes.d.ts +16 -5
- package/dist/frontend/lowering/lower-classes.js +168 -51
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -0
- package/dist/frontend/lowering/lower-event-emitter.js +383 -41
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +14 -0
- package/dist/frontend/lowering/lower-exprs.js +25 -0
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +2 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +80 -33
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +87 -25
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
- package/dist/frontend/lowering/lower-node-island.js +456 -61
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +160 -9
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-shared-modules.js +13 -1
- package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
- package/dist/frontend/lowering/lower-stdlib.js +32 -18
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +21 -4
- package/dist/frontend/lowering/lower-stmts.js +580 -103
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +126 -8
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +133 -21
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +139 -3
- package/dist/frontend/lowering/lowerer.js +579 -43
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +1 -1
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.js +15 -0
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/new-target.js +2 -2
- package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
- package/dist/frontend/lowering/partial-assertions.d.ts +39 -0
- package/dist/frontend/lowering/partial-assertions.js +195 -0
- package/dist/frontend/lowering/partial-assertions.js.map +1 -0
- package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
- package/dist/frontend/lowering/primitive-wrappers.js +220 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
- package/dist/frontend/lowering/private-statics.d.ts +46 -0
- package/dist/frontend/lowering/private-statics.js +322 -0
- package/dist/frontend/lowering/private-statics.js.map +1 -0
- package/dist/frontend/lowering/record-sources.d.ts +12 -1
- package/dist/frontend/lowering/record-sources.js +60 -0
- package/dist/frontend/lowering/record-sources.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.d.ts +4 -0
- package/dist/frontend/lowering/strict-equality.js +14 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +27 -0
- package/dist/frontend/lowering/surfaces.js +135 -62
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +128 -17
- package/dist/frontend/lowering/unit-journal.js +310 -53
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +91 -3
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
- package/dist/frontend/lowering/unit-reuse.js +1008 -0
- package/dist/frontend/lowering/unit-reuse.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +12 -0
- package/dist/frontend/npm-file-import.test.d.ts +1 -0
- package/dist/frontend/npm-file-import.test.js +76 -0
- package/dist/frontend/npm-file-import.test.js.map +1 -0
- package/dist/frontend/npm-static.js +17 -2
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.d.ts +9 -0
- package/dist/frontend/npm.js +82 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/pipeline-native.js +2 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +4 -0
- package/dist/frontend/pipeline.js +68 -7
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-node.d.ts +3 -0
- package/dist/frontend/program-node.js +13 -6
- package/dist/frontend/program-node.js.map +1 -1
- package/dist/frontend/program.d.ts +9 -0
- package/dist/frontend/program.js +159 -7
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/provenance-core.js +4 -0
- package/dist/frontend/provenance-core.js.map +1 -1
- package/dist/frontend/services.d.ts +14 -0
- package/dist/frontend/services.js +52 -2
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +61 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +5 -0
- package/dist/frontend/shape-inference/analyze.js +104 -4
- package/dist/frontend/shape-inference/analyze.js.map +1 -1
- package/dist/frontend/shape-inference/domain.js +0 -1
- package/dist/frontend/shape-inference/domain.js.map +1 -1
- package/dist/frontend/shape-inference/index.js +5 -1
- package/dist/frontend/shape-inference/index.js.map +1 -1
- package/dist/frontend/shape-inference/memo.d.ts +2 -1
- package/dist/frontend/shape-inference/memo.js +6 -2
- package/dist/frontend/shape-inference/memo.js.map +1 -1
- package/dist/frontend/shape-inference/overlay.d.ts +1 -1
- package/dist/frontend/shape-inference/overlay.js +116 -2
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- package/dist/frontend/shape-inference/static-objects.js +11 -6
- package/dist/frontend/shape-inference/static-objects.js.map +1 -1
- package/dist/frontend/source-phase-imports.test.d.ts +1 -0
- package/dist/frontend/source-phase-imports.test.js +37 -0
- package/dist/frontend/source-phase-imports.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +6 -1
- package/dist/frontend/ts7/ast-node.js +12 -0
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
- package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.js +3 -5
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +13 -0
- package/dist/frontend/ts7/checker-backend.js +84 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +126 -2
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +22 -1
- package/dist/frontend/ts7/program-host.js +49 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +83 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.d.ts +16 -1
- package/dist/frontend/ts7/rpc-process.js +170 -92
- package/dist/frontend/ts7/rpc-process.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.test.js +49 -21
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
- package/dist/frontend/tsc-codes.js +70 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +7 -2
- package/dist/frontend/type-mapper.js +148 -1
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +152 -8
- package/dist/index.js.map +1 -1
- package/dist/ir/api.d.ts +1 -1
- package/dist/ir/api.js +1 -1
- package/dist/ir/api.js.map +1 -1
- package/dist/ir/build.d.ts +3 -2
- package/dist/ir/build.js +4 -2
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +53 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +211 -10
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/codec.d.ts +82 -0
- package/dist/ir/codec.generated.d.ts +13 -0
- package/dist/ir/codec.generated.js +5274 -0
- package/dist/ir/codec.generated.js.map +1 -0
- package/dist/ir/codec.js +325 -0
- package/dist/ir/codec.js.map +1 -0
- package/dist/ir/codec.test.d.ts +1 -0
- package/dist/ir/codec.test.js +225 -0
- package/dist/ir/codec.test.js.map +1 -0
- package/dist/ir/fields.generated.d.ts +20 -10
- package/dist/ir/fields.generated.js +1031 -11
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/fields.test.js +46 -2
- package/dist/ir/fields.test.js.map +1 -1
- package/dist/ir/function-references.d.ts +5 -4
- package/dist/ir/function-references.js +8 -4
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +7 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/inline-array-sources.js +4 -1
- package/dist/ir/inline-array-sources.js.map +1 -1
- package/dist/ir/inline-array-views.d.ts +13 -0
- package/dist/ir/inline-array-views.js +944 -0
- package/dist/ir/inline-array-views.js.map +1 -0
- package/dist/ir/inline-arrays.d.ts +7 -0
- package/dist/ir/inline-arrays.js +190 -55
- package/dist/ir/inline-arrays.js.map +1 -1
- package/dist/ir/inline-arrays.test.js +140 -2
- package/dist/ir/inline-arrays.test.js.map +1 -1
- package/dist/ir/integer-ranges.js +16 -6
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/ir.d.ts +75 -44
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-ic.d.ts +10 -9
- package/dist/ir/js-ic.js +28 -20
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +10 -2
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/jsval.js +374 -63
- package/dist/ir/jsval.js.map +1 -1
- package/dist/ir/jsval.test.js +96 -2
- package/dist/ir/jsval.test.js.map +1 -1
- package/dist/ir/loop-entry-ranges.js +112 -9
- package/dist/ir/loop-entry-ranges.js.map +1 -1
- package/dist/ir/loop-entry-ranges.test.js +40 -0
- package/dist/ir/loop-entry-ranges.test.js.map +1 -1
- package/dist/ir/parameter-versions.d.ts +2 -1
- package/dist/ir/parameter-versions.js +3 -1
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/receiver-readers.js +58 -2
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +60 -1
- package/dist/ir/runtime-features.js +277 -2
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +165 -1
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/saturating-loop-jams.d.ts +8 -1
- package/dist/ir/saturating-loop-jams.js +46 -7
- package/dist/ir/saturating-loop-jams.js.map +1 -1
- package/dist/ir/saturating-loop-jams.test.js +39 -1
- package/dist/ir/saturating-loop-jams.test.js.map +1 -1
- package/dist/ir/self-captures.js +8 -1
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/self-captures.test.js +15 -0
- package/dist/ir/self-captures.test.js.map +1 -1
- package/dist/ir/serialize.d.ts +3 -2
- package/dist/ir/serialize.js +6 -2
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/validate.js +82 -4
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +46 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/ir-policy.js +3 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cache.js +2 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cli.js +2 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +8 -2
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/prepare.js +32 -3
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.js +53 -3
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +88 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.js +9 -2
- package/dist/native/toolchain.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +25 -1
- package/dist/node-islands/boundary.js +28 -2
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/detect.d.ts +18 -1
- package/dist/node-islands/detect.js +365 -40
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +151 -4
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/effect-gate.js +30 -20
- package/dist/node-islands/effect-gate.js.map +1 -1
- package/dist/node-islands/effect-gate.test.js +4 -1
- package/dist/node-islands/effect-gate.test.js.map +1 -1
- package/dist/node-islands/libnode.d.ts +1 -1
- package/dist/node-islands/libnode.js +1 -1
- package/dist/node-islands/libnode.js.map +1 -1
- package/dist/node-islands/modules.d.ts +28 -0
- package/dist/node-islands/modules.js +156 -0
- package/dist/node-islands/modules.js.map +1 -1
- package/dist/node-islands/modules.test.js +105 -1
- package/dist/node-islands/modules.test.js.map +1 -1
- package/dist/node-islands/policy.js +2 -3
- package/dist/node-islands/policy.js.map +1 -1
- package/dist/node-islands/probe-recorder.d.ts +1 -0
- package/dist/node-islands/probe-recorder.js +596 -0
- package/dist/node-islands/probe-recorder.js.map +1 -0
- package/dist/node-islands/probe-recorder.test.d.ts +1 -0
- package/dist/node-islands/probe-recorder.test.js +80 -0
- package/dist/node-islands/probe-recorder.test.js.map +1 -0
- package/dist/node-islands/report.test.js +2 -0
- package/dist/node-islands/report.test.js.map +1 -1
- package/dist/node-islands/rules.js +4 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +7 -1
- package/dist/node-islands/scan.js +51 -2
- package/dist/node-islands/scan.js.map +1 -1
- package/dist/node-islands/snapshot.d.ts +38 -1
- package/dist/node-islands/snapshot.js +165 -161
- package/dist/node-islands/snapshot.js.map +1 -1
- package/dist/node-islands/snapshot.test.js +63 -2
- package/dist/node-islands/snapshot.test.js.map +1 -1
- package/dist/node-islands/summary.js +8 -0
- package/dist/node-islands/summary.js.map +1 -1
- package/dist/node-islands/type-strip.d.ts +11 -0
- package/dist/node-islands/type-strip.js +157 -0
- package/dist/node-islands/type-strip.js.map +1 -0
- package/dist/node-islands/type-strip.test.d.ts +1 -0
- package/dist/node-islands/type-strip.test.js +31 -0
- package/dist/node-islands/type-strip.test.js.map +1 -0
- package/dist/project-config.d.ts +4 -0
- package/dist/project-config.js +19 -0
- package/dist/project-config.js.map +1 -1
- package/dist/project-config.test.js +10 -0
- package/dist/project-config.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +43 -11
|
@@ -11,12 +11,13 @@ import { isSafeToDiscard } from "../expressions/evaluation-safety.js";
|
|
|
11
11
|
import { resultIsDiscarded } from "../call-position.js";
|
|
12
12
|
import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "../optional-arguments.js";
|
|
13
13
|
import { voidizedCallback } from "../lower-server.js";
|
|
14
|
-
import { BOOL, BYTES_U8, DYN, F64, PROCSTREAM_T, STRING, UNDEFINED_T, VOID, arrayOf, canBoxFuncIntoDyn, funcOf, } from "../../../ir/ir.js";
|
|
14
|
+
import { BOOL, BYTES_U8, DYN, F64, PROCSTREAM_T, STRING, UNDEFINED_T, VOID, arrayOf, canBoxFuncIntoDyn, funcOf, isUnitType, } from "../../../ir/ir.js";
|
|
15
15
|
import { lowerBuiltinLoaderValue } from "../lower-builtin-values.js";
|
|
16
16
|
import { builtinFunctionValue } from "../lower-exprs.js";
|
|
17
17
|
import { canonicalBuiltinModule } from "../../builtin-modules.js";
|
|
18
18
|
import { lowerProcessIpcSend, ipcMessageListener, ipcDisconnectListener } from "./ipc.js";
|
|
19
19
|
import { lowerDiagnosticsSubscriber, lowerTracingArguments } from "./async-context.js";
|
|
20
|
+
import { isCheckerPanic } from "../../../diagnostics/diagnostic.js";
|
|
20
21
|
/** Whether the process has an IPC channel, Node's test for defining
|
|
21
22
|
* process.send and process.disconnect: a channel this fork child opened
|
|
22
23
|
* (programs with fork targets only), or a non-empty NODE_CHANNEL_FD from a
|
|
@@ -157,6 +158,66 @@ export function programReadsExitCode(lowerer) {
|
|
|
157
158
|
lowerer.readsExitCode = found;
|
|
158
159
|
return found;
|
|
159
160
|
}
|
|
161
|
+
/** Whether any program file replaces a process output stream's write
|
|
162
|
+
* method: `process.stdout.write = …` / `process.stderr.write = …`, or the
|
|
163
|
+
* same assignment through a first-class alias of the stream (a value whose
|
|
164
|
+
* type maps to the process stream). Such a program routes its typed
|
|
165
|
+
* stdout/stderr writes through the stream object, so the replacement sees
|
|
166
|
+
* them with their arguments, as in Node. Cached per program; the first
|
|
167
|
+
* site found is recorded for the executable planner's SC8020 check. */
|
|
168
|
+
export function programPatchesStdio(lowerer) {
|
|
169
|
+
if (lowerer.patchesStdio !== null)
|
|
170
|
+
return lowerer.patchesStdio;
|
|
171
|
+
let found = false;
|
|
172
|
+
// undefined: not an output stream; null: a first-class alias of one.
|
|
173
|
+
const streamOf = (recv) => {
|
|
174
|
+
if (ts.isPropertyAccessExpression(recv)) {
|
|
175
|
+
const direct = lowerer.stdlibGlobalMember(recv, "process");
|
|
176
|
+
if (direct === "stdout" || direct === "stderr")
|
|
177
|
+
return direct;
|
|
178
|
+
}
|
|
179
|
+
// An arbitrary receiver's mapping is a query, never a commit: a checker
|
|
180
|
+
// panic (the type has no readable form) is not a patch site. The type
|
|
181
|
+
// cannot say WHICH output stream an alias holds.
|
|
182
|
+
try {
|
|
183
|
+
return lowerer.mapTypeOf(lowerer.typeOf(recv))?.kind === "procStream" ? null : undefined;
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
if (!isCheckerPanic(e))
|
|
187
|
+
throw e;
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
const walk = (node) => {
|
|
192
|
+
if (found)
|
|
193
|
+
return;
|
|
194
|
+
if (ts.isBinaryExpression(node) &&
|
|
195
|
+
node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
196
|
+
ts.isPropertyAccessExpression(node.left) &&
|
|
197
|
+
node.left.name.text === "write") {
|
|
198
|
+
const recv = node.left.expression;
|
|
199
|
+
const direct = ts.isPropertyAccessExpression(recv)
|
|
200
|
+
? lowerer.stdlibGlobalMember(recv, "process")
|
|
201
|
+
: null;
|
|
202
|
+
const stream = direct === "stdout" || direct === "stderr" ? direct : streamOf(recv);
|
|
203
|
+
if (stream !== undefined) {
|
|
204
|
+
found = true;
|
|
205
|
+
lowerer.stdioPatchSites.push({ stream, loc: locOf(node) });
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
ts.forEachChild(node, walk);
|
|
210
|
+
};
|
|
211
|
+
for (const sf of lowerer.program.getImplementationSourceFiles()) {
|
|
212
|
+
if (sf.isDeclarationFile)
|
|
213
|
+
continue;
|
|
214
|
+
walk(sf);
|
|
215
|
+
if (found)
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
lowerer.patchesStdio = found;
|
|
219
|
+
return found;
|
|
220
|
+
}
|
|
160
221
|
/** The pinned Node release the runtime reports as process.versions.node
|
|
161
222
|
* (packages/runtime/src/scr_lib.c SCR_NODE_COMPAT_VERSION, kept equal to
|
|
162
223
|
* internal/compatibility/node-v24.json by test/node-pin.test.ts). */
|
|
@@ -215,9 +276,10 @@ export function lowerProcStreamMethodCall(lowerer, call, access) {
|
|
|
215
276
|
lowerer.noLowering(`WritableStream.${name}`, call, "write(data) with one string and getWindowSize() are the supported stream-value methods", lowerer.checker.getSymbolAtLocation(access.name));
|
|
216
277
|
}
|
|
217
278
|
/** Standard streams expose optional terminal properties: pipes have no
|
|
218
|
-
* isTTY, columns, or rows
|
|
279
|
+
* isTTY, columns, or rows, and only a TTY stdin has a raw-mode flag. The
|
|
280
|
+
* declarations do not prove their presence. */
|
|
219
281
|
export function isOptionalProcessStreamProperty(lowerer, expr) {
|
|
220
|
-
if (!["isTTY", "columns", "rows"].includes(expr.name.text))
|
|
282
|
+
if (!["isTTY", "columns", "rows", "isRaw"].includes(expr.name.text))
|
|
221
283
|
return false;
|
|
222
284
|
let recv = expr.expression;
|
|
223
285
|
while (ts.isParenthesizedExpression(recv) || ts.isAsExpression(recv) || ts.isTypeAssertion(recv))
|
|
@@ -226,7 +288,7 @@ export function isOptionalProcessStreamProperty(lowerer, expr) {
|
|
|
226
288
|
const stream = lowerer.stdlibGlobalMember(recv, "process");
|
|
227
289
|
if (stream === "stdout" ||
|
|
228
290
|
stream === "stderr" ||
|
|
229
|
-
(stream === "stdin" && expr.name.text === "isTTY"))
|
|
291
|
+
(stream === "stdin" && (expr.name.text === "isTTY" || expr.name.text === "isRaw")))
|
|
230
292
|
return true;
|
|
231
293
|
}
|
|
232
294
|
return lowerer.mapTypeOf(lowerer.typeOf(expr.expression))?.kind === "procStream";
|
|
@@ -297,6 +359,26 @@ export function lowerProcessStreamProperty(lowerer, expr) {
|
|
|
297
359
|
loc: locOf(expr),
|
|
298
360
|
};
|
|
299
361
|
}
|
|
362
|
+
// The write method as a VALUE in TypeScript (`const original =
|
|
363
|
+
// process.stdout.write`, `process.stdout.write.bind(process.stdout)`):
|
|
364
|
+
// the stream object's current write slot, a checked-dynamic function
|
|
365
|
+
// (the native method until a program replaces it).
|
|
366
|
+
if (member === "write" && (direct === "stdout" || direct === "stderr")) {
|
|
367
|
+
const loc = locOf(expr);
|
|
368
|
+
return {
|
|
369
|
+
kind: "dynKeyGet",
|
|
370
|
+
value: {
|
|
371
|
+
kind: "libCall",
|
|
372
|
+
fn: "process.stdioSlot",
|
|
373
|
+
args: [numLit(direct === "stdout" ? 1 : 2, loc)],
|
|
374
|
+
type: DYN,
|
|
375
|
+
loc,
|
|
376
|
+
},
|
|
377
|
+
key: strLit("write", locOf(expr.name)),
|
|
378
|
+
type: DYN,
|
|
379
|
+
loc,
|
|
380
|
+
};
|
|
381
|
+
}
|
|
300
382
|
// `if (process.stdin.setRawMode)`: Node's stdin has the method only
|
|
301
383
|
// when it is a TTY. The runtime's stream object answers the same
|
|
302
384
|
// presence (the method or undefined); calls keep their direct lowering.
|
|
@@ -312,7 +394,11 @@ export function lowerProcessStreamProperty(lowerer, expr) {
|
|
|
312
394
|
if (member !== "isTTY" &&
|
|
313
395
|
member !== "columns" &&
|
|
314
396
|
member !== "rows" &&
|
|
315
|
-
member !== "writableLength"
|
|
397
|
+
member !== "writableLength" &&
|
|
398
|
+
member !== "fd" &&
|
|
399
|
+
member !== "isRaw" &&
|
|
400
|
+
member !== "writableHighWaterMark" &&
|
|
401
|
+
member !== "writableNeedDrain")
|
|
316
402
|
return null;
|
|
317
403
|
let recv = expr.expression;
|
|
318
404
|
while (ts.isParenthesizedExpression(recv) || ts.isAsExpression(recv) || ts.isTypeAssertion(recv))
|
|
@@ -340,12 +426,21 @@ export function lowerProcessStreamProperty(lowerer, expr) {
|
|
|
340
426
|
// nothing is ever queued and Node's number is always 0. The other
|
|
341
427
|
// members stay keyed reads — the runtime stream answers their live
|
|
342
428
|
// values (isatty columns/rows, stdin readableLength).
|
|
343
|
-
if (member === "writableLength"
|
|
429
|
+
if (member === "writableLength" ||
|
|
430
|
+
member === "writableHighWaterMark" ||
|
|
431
|
+
member === "writableNeedDrain") {
|
|
344
432
|
// The receiver still EVALUATES: a call or property read that hands
|
|
345
433
|
// back the stream runs its own side effects — and throws where Node
|
|
346
434
|
// throws — before the constant answers, exactly as the read of the
|
|
347
435
|
// member would. A pure receiver (the alias above) folds away.
|
|
348
|
-
const answer =
|
|
436
|
+
const answer = member === "writableNeedDrain"
|
|
437
|
+
? { kind: "boolLit", value: false, type: BOOL, loc: locOf(expr) }
|
|
438
|
+
: {
|
|
439
|
+
kind: "numLit",
|
|
440
|
+
value: member === "writableLength" ? 0 : 65536,
|
|
441
|
+
type: F64,
|
|
442
|
+
loc: locOf(expr),
|
|
443
|
+
};
|
|
349
444
|
const effect = lowerer.lowerExpr(expr.expression);
|
|
350
445
|
if (isSafeToDiscard(effect))
|
|
351
446
|
return answer;
|
|
@@ -353,7 +448,7 @@ export function lowerProcessStreamProperty(lowerer, expr) {
|
|
|
353
448
|
kind: "seqExpr",
|
|
354
449
|
stmts: [{ kind: "exprStmt", expr: effect, loc: locOf(expr.expression) }],
|
|
355
450
|
result: answer,
|
|
356
|
-
type:
|
|
451
|
+
type: answer.type,
|
|
357
452
|
loc: locOf(expr),
|
|
358
453
|
};
|
|
359
454
|
}
|
|
@@ -385,6 +480,18 @@ export function lowerProcessStreamProperty(lowerer, expr) {
|
|
|
385
480
|
// correct; the write itself never defers.
|
|
386
481
|
if (member === "writableLength")
|
|
387
482
|
return { kind: "numLit", value: 0, type: F64, loc };
|
|
483
|
+
// Node's default high-water mark for the process streams, and the
|
|
484
|
+
// drain flag a synchronous write never sets.
|
|
485
|
+
if (member === "writableHighWaterMark") {
|
|
486
|
+
if (stream === "stdin")
|
|
487
|
+
return null;
|
|
488
|
+
return { kind: "numLit", value: 65536, type: F64, loc };
|
|
489
|
+
}
|
|
490
|
+
if (member === "writableNeedDrain") {
|
|
491
|
+
if (stream === "stdin")
|
|
492
|
+
return null;
|
|
493
|
+
return { kind: "boolLit", value: false, type: BOOL, loc };
|
|
494
|
+
}
|
|
388
495
|
if (member === "isTTY") {
|
|
389
496
|
const type = lowerer.withUndefinedArm(BOOL);
|
|
390
497
|
return {
|
|
@@ -396,8 +503,30 @@ export function lowerProcessStreamProperty(lowerer, expr) {
|
|
|
396
503
|
loc,
|
|
397
504
|
};
|
|
398
505
|
}
|
|
399
|
-
if (
|
|
400
|
-
|
|
506
|
+
if (member === "fd") {
|
|
507
|
+
// The process streams are built over fd 0/1/2 (Node answers those on
|
|
508
|
+
// a TTY, a pipe, and a redirected file alike).
|
|
509
|
+
return {
|
|
510
|
+
kind: "numLit",
|
|
511
|
+
value: stream === "stdin" ? 0 : stream === "stdout" ? 1 : 2,
|
|
512
|
+
type: F64,
|
|
513
|
+
loc,
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
if (stream === "stdin") {
|
|
517
|
+
if (member !== "isRaw")
|
|
518
|
+
return null;
|
|
519
|
+
// Node answers the raw-mode flag of a TTY stdin and undefined on
|
|
520
|
+
// anything else (a pipe-backed stdin); the runtime sentinel carries
|
|
521
|
+
// both (scr_process_stdin_is_raw).
|
|
522
|
+
return {
|
|
523
|
+
kind: "libCall",
|
|
524
|
+
fn: "process.stdinIsRaw",
|
|
525
|
+
args: [],
|
|
526
|
+
type: lowerer.withUndefinedArm(BOOL),
|
|
527
|
+
loc,
|
|
528
|
+
};
|
|
529
|
+
}
|
|
401
530
|
const want = lowerer.withUndefinedArm(F64);
|
|
402
531
|
return {
|
|
403
532
|
kind: "libCall",
|
|
@@ -499,9 +628,10 @@ export function lowerProcessProperty(lowerer, expr) {
|
|
|
499
628
|
// The capability-probe members that honestly DON'T EXIST in a
|
|
500
629
|
// compiled binary — each reads undefined (their declared types carry
|
|
501
630
|
// the undefined arm), so feature probes take their documented
|
|
502
|
-
// fallbacks: no gyp build config (process.config.variables.* — no
|
|
503
|
-
//
|
|
504
|
-
//
|
|
631
|
+
// fallbacks: no gyp build config (process.config.variables.* — no QUIC
|
|
632
|
+
// — and process.config.target_defaults; v8_enable_i18n_support is the
|
|
633
|
+
// exception below, answered from the binary's linked ICU), no feature
|
|
634
|
+
// flags (process.features.* — no inspector, not a debug build).
|
|
505
635
|
if (!expr.questionDotToken && ts.isPropertyAccessExpression(expr.expression)) {
|
|
506
636
|
const container = lowerer.stdlibGlobalMember(expr.expression, "process");
|
|
507
637
|
if (container === "features") {
|
|
@@ -520,6 +650,13 @@ export function lowerProcessProperty(lowerer, expr) {
|
|
|
520
650
|
if (ts.isPropertyAccessExpression(expr.expression.expression) &&
|
|
521
651
|
expr.expression.name.text === "variables" &&
|
|
522
652
|
lowerer.stdlibGlobalMember(expr.expression.expression, "process") === "config") {
|
|
653
|
+
// The one variable a compiled binary can answer truthfully:
|
|
654
|
+
// v8_enable_i18n_support. Node bundles ICU and answers the number 1;
|
|
655
|
+
// this read selects the `icu` runtime feature (scr_intl.c), so a
|
|
656
|
+
// binary that reports ICU is a binary that carries it.
|
|
657
|
+
if (expr.name.text === "v8_enable_i18n_support") {
|
|
658
|
+
return { kind: "libCall", fn: "icu.i18nSupport", args: [], type: F64, loc: locOf(expr) };
|
|
659
|
+
}
|
|
523
660
|
return { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc: locOf(expr) };
|
|
524
661
|
}
|
|
525
662
|
}
|
|
@@ -650,7 +787,16 @@ export function lowerProcessProperty(lowerer, expr) {
|
|
|
650
787
|
return { kind: "libCall", fn: "process.execPath", args: [], type: STRING, loc };
|
|
651
788
|
}
|
|
652
789
|
if (member === "env") {
|
|
653
|
-
|
|
790
|
+
let mapped = lowerer.mapTypeOf(lowerer.typeOf(expr));
|
|
791
|
+
// `(globalThis as { process?: { env?: E } }).process?.env`: the cast
|
|
792
|
+
// types env as optional, but Node always defines it. Snapshot into the
|
|
793
|
+
// record arm; the caller's coercion wraps it into the optional type.
|
|
794
|
+
if (mapped?.kind === "union") {
|
|
795
|
+
const arms = lowerer.unions.get(mapped.unionId)?.arms ?? [];
|
|
796
|
+
const records = arms.filter((arm) => arm.kind === "record");
|
|
797
|
+
if (records.length === 1 && arms.every((arm) => arm.kind === "record" || isUnitType(arm)))
|
|
798
|
+
mapped = records[0];
|
|
799
|
+
}
|
|
654
800
|
if (mapped?.kind === "record") {
|
|
655
801
|
const helper = envSnapshotHelper(lowerer, mapped.shapeId, loc);
|
|
656
802
|
if (helper !== null) {
|
|
@@ -814,6 +960,50 @@ export function lowerProcessMethodCall(lowerer, call, access) {
|
|
|
814
960
|
}
|
|
815
961
|
return { kind: "libCall", fn: "process.stdinSetRawMode", args: [mode], type: VOID, loc };
|
|
816
962
|
}
|
|
963
|
+
// process.stdout/stderr.on("drain", fn) and its spellings: Node emits
|
|
964
|
+
// 'drain' only after a write() returned false, and these writes are
|
|
965
|
+
// synchronous (they never return false), so the listener can never run.
|
|
966
|
+
// Registering it is therefore observably a no-op: the receiver and the
|
|
967
|
+
// listener are evaluated for their effects and nothing is retained.
|
|
968
|
+
// listenerCount/listeners/eventNames on the process streams stay
|
|
969
|
+
// refused, so the missing registration cannot be observed.
|
|
970
|
+
if ([
|
|
971
|
+
"on",
|
|
972
|
+
"once",
|
|
973
|
+
"off",
|
|
974
|
+
"addListener",
|
|
975
|
+
"removeListener",
|
|
976
|
+
"prependListener",
|
|
977
|
+
"prependOnceListener",
|
|
978
|
+
].includes(access.name.text) &&
|
|
979
|
+
ts.isPropertyAccessExpression(access.expression) &&
|
|
980
|
+
call.arguments.nodes.length === 2 &&
|
|
981
|
+
!call.arguments.nodes.some(ts.isSpreadElement)) {
|
|
982
|
+
const stream = lowerer.stdlibGlobalMember(access.expression, "process");
|
|
983
|
+
const evT = lowerer.typeOf(call.arguments.nodes[0]);
|
|
984
|
+
if ((stream === "stdout" || stream === "stderr") &&
|
|
985
|
+
evT.isStringLiteralType() &&
|
|
986
|
+
evT.value === "drain") {
|
|
987
|
+
const loc = locOf(call);
|
|
988
|
+
const parent = call.parent;
|
|
989
|
+
const discarded = ts.isExpressionStatement(parent) || (ts.isArrowFunction(parent) && parent.body === call);
|
|
990
|
+
if (!discarded) {
|
|
991
|
+
lowerer.unsupported("SC1090", call, `using the result of process.${stream}.${access.name.text}("drain", ...) (register it as its own statement)`);
|
|
992
|
+
}
|
|
993
|
+
const stmts = [];
|
|
994
|
+
for (const arg of call.arguments.nodes) {
|
|
995
|
+
const value = lowerer.lowerExprExpecting(arg, DYN);
|
|
996
|
+
if (!isSafeToDiscard(value))
|
|
997
|
+
stmts.push({ kind: "exprStmt", expr: value, loc: value.loc });
|
|
998
|
+
}
|
|
999
|
+
// The call's value is discarded (statement position or a void arrow
|
|
1000
|
+
// body), so the lowering is the evaluated arguments alone; a bare
|
|
1001
|
+
// unitLit has no standalone IR value, so the no-op result is the
|
|
1002
|
+
// dynamic undefined a discarded call leaves.
|
|
1003
|
+
const result = dynUndefinedExpr(loc);
|
|
1004
|
+
return stmts.length === 0 ? result : { kind: "seqExpr", stmts, result, type: DYN, loc };
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
817
1007
|
// process.stdout.on("resize", cb) (and once/off/removeListener/
|
|
818
1008
|
// addListener, stderr too): the terminal resize event, registered on the
|
|
819
1009
|
// runtime's process stream object (a SIGWINCH listener that emits when a
|
|
@@ -936,6 +1126,33 @@ export function lowerProcessMethodCall(lowerer, call, access) {
|
|
|
936
1126
|
if (stream === "stdout" || stream === "stderr") {
|
|
937
1127
|
const loc = locOf(call);
|
|
938
1128
|
const args = call.arguments.nodes;
|
|
1129
|
+
// In a program that replaces a process stream's write, a write call is
|
|
1130
|
+
// what Node makes it: a call of the stream's CURRENT write property,
|
|
1131
|
+
// with the arguments as passed (the replacement sees byte chunks,
|
|
1132
|
+
// encodings and callbacks). The native method behind the slot is the
|
|
1133
|
+
// same synchronous write, so an unpatched stream behaves as before.
|
|
1134
|
+
if (programPatchesStdio(lowerer) && !args.some(ts.isSpreadElement)) {
|
|
1135
|
+
const handle = {
|
|
1136
|
+
kind: "libCall",
|
|
1137
|
+
fn: "process.stdioSlot",
|
|
1138
|
+
args: [numLit(stream === "stdout" ? 1 : 2, loc)],
|
|
1139
|
+
type: DYN,
|
|
1140
|
+
loc,
|
|
1141
|
+
};
|
|
1142
|
+
const invoke = {
|
|
1143
|
+
kind: "dynInvoke",
|
|
1144
|
+
recv: handle,
|
|
1145
|
+
method: "write",
|
|
1146
|
+
calleeName: ts.getTextOfNode(access),
|
|
1147
|
+
args: args.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
|
|
1148
|
+
type: DYN,
|
|
1149
|
+
loc,
|
|
1150
|
+
};
|
|
1151
|
+
// The declared boolean: a replacement returning something else
|
|
1152
|
+
// throws at a use that needs the boolean (types do not lie); a
|
|
1153
|
+
// discarded result is not converted.
|
|
1154
|
+
return resultIsDiscarded(call) ? invoke : lowerer.coerceToExpected(invoke, BOOL);
|
|
1155
|
+
}
|
|
939
1156
|
if (args.length < 1 || args.length > 3 || args.some(ts.isSpreadElement)) {
|
|
940
1157
|
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");
|
|
941
1158
|
}
|
|
@@ -1020,6 +1237,22 @@ export function lowerProcessMethodCall(lowerer, call, access) {
|
|
|
1020
1237
|
if (data.type.kind === "dyn" && isJsSourceFile(ts.getSourceFileOfNode(call))) {
|
|
1021
1238
|
data = { kind: "dynCheck", value: data, type: STRING, loc };
|
|
1022
1239
|
}
|
|
1240
|
+
// A chunk known only at run time (`any`, or a string | Uint8Array
|
|
1241
|
+
// union): the runtime dispatches on the value — a string or a
|
|
1242
|
+
// Uint8Array/Buffer writes, null throws ERR_STREAM_NULL_VALUES, any
|
|
1243
|
+
// other value throws ERR_INVALID_ARG_TYPE, as Node's Writable.write
|
|
1244
|
+
// does before writing anything. Only the one-argument form.
|
|
1245
|
+
if (args.length === 1 &&
|
|
1246
|
+
(data.type.kind === "dyn" || data.type.kind === "union") &&
|
|
1247
|
+
(data.type.kind === "dyn" || lowerer.dynConvertible(data.type))) {
|
|
1248
|
+
return {
|
|
1249
|
+
kind: "libCall",
|
|
1250
|
+
fn: "process.stdioWriteDyn",
|
|
1251
|
+
args: [numLit(stream === "stdout" ? 1 : 2, loc), lowerer.coerceToExpected(data, DYN)],
|
|
1252
|
+
type: BOOL,
|
|
1253
|
+
loc,
|
|
1254
|
+
};
|
|
1255
|
+
}
|
|
1023
1256
|
const isBytes = data.type.kind === "bytes" && data.type.elem === "u8";
|
|
1024
1257
|
if (!isBytes && data.type.kind !== "string") {
|
|
1025
1258
|
lowerer.noLowering(`process.${stream}.write of non-string data`, args[0], "strings and Buffer/Uint8Array values write; narrow unions first");
|
|
@@ -1141,13 +1374,25 @@ export function lowerProcessMethodCall(lowerer, call, access) {
|
|
|
1141
1374
|
// the listener to a const so both sites see the same value), and
|
|
1142
1375
|
// `removeListener` IS `off` — Node aliases them.
|
|
1143
1376
|
const isOff = member === "off" || member === "removeListener";
|
|
1144
|
-
|
|
1377
|
+
// process.prependListener(event, cb): Node's front-of-list registration.
|
|
1378
|
+
// The signal, 'exit', and 'uncaughtException'/'uncaughtExceptionMonitor'
|
|
1379
|
+
// registries have a prepend entry; every other family registers by
|
|
1380
|
+
// appending only, so it refuses rather than reordering silently.
|
|
1381
|
+
// prependOnceListener has no runtime entry at all.
|
|
1382
|
+
const isPrepend = member === "prependListener";
|
|
1383
|
+
if (member === "prependOnceListener") {
|
|
1384
|
+
lowerer.noLowering("process.prependOnceListener", access, "use prependListener or once (prependOnceListener has no lowering)");
|
|
1385
|
+
}
|
|
1386
|
+
if (member === "on" || member === "once" || isOff || isPrepend) {
|
|
1145
1387
|
if (call.arguments.nodes.length !== 2) {
|
|
1146
1388
|
lowerer.noLowering(`process.${member} with ${call.arguments.nodes.length} arguments`, call);
|
|
1147
1389
|
}
|
|
1148
1390
|
const evT = lowerer.typeOf(call.arguments.nodes[0]);
|
|
1149
1391
|
const event = evT.isStringLiteralType() ? evT.value : null;
|
|
1150
1392
|
if ((event === "message" || event === "disconnect") && !isOff) {
|
|
1393
|
+
if (isPrepend) {
|
|
1394
|
+
lowerer.noLowering(`process.prependListener("${event}", ...)`, call, "prependListener is supported for signals, 'exit', and 'uncaughtException' (register these families with on/once)");
|
|
1395
|
+
}
|
|
1151
1396
|
if (!resultIsDiscarded(call)) {
|
|
1152
1397
|
lowerer.unsupported("SC1090", call, "chaining process IPC listener registration (register each listener as its own statement)");
|
|
1153
1398
|
}
|
|
@@ -1170,8 +1415,16 @@ export function lowerProcessMethodCall(lowerer, call, access) {
|
|
|
1170
1415
|
const monitor = boolLit(event === "uncaughtExceptionMonitor", loc);
|
|
1171
1416
|
return {
|
|
1172
1417
|
kind: "libCall",
|
|
1173
|
-
fn: isOff
|
|
1174
|
-
|
|
1418
|
+
fn: isOff
|
|
1419
|
+
? "process.offUncaughtException"
|
|
1420
|
+
: isPrepend
|
|
1421
|
+
? "process.prependUncaughtException"
|
|
1422
|
+
: "process.onUncaughtException",
|
|
1423
|
+
args: isOff
|
|
1424
|
+
? [cb, monitor]
|
|
1425
|
+
: isPrepend
|
|
1426
|
+
? [cb, monitor]
|
|
1427
|
+
: [cb, boolLit(member === "once", loc), monitor],
|
|
1175
1428
|
type: VOID,
|
|
1176
1429
|
loc,
|
|
1177
1430
|
};
|
|
@@ -1185,6 +1438,9 @@ export function lowerProcessMethodCall(lowerer, call, access) {
|
|
|
1185
1438
|
// a handler attached after delivery fires it once, synchronously
|
|
1186
1439
|
// with the promise.
|
|
1187
1440
|
if (event === "unhandledRejection" || event === "rejectionHandled") {
|
|
1441
|
+
if (isPrepend) {
|
|
1442
|
+
lowerer.noLowering(`process.prependListener("${event}", ...)`, call, "prependListener is supported for signals, 'exit', and 'uncaughtException' (register these families with on/once)");
|
|
1443
|
+
}
|
|
1188
1444
|
if (!resultIsDiscarded(call)) {
|
|
1189
1445
|
lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
|
|
1190
1446
|
}
|
|
@@ -1203,6 +1459,9 @@ export function lowerProcessMethodCall(lowerer, call, access) {
|
|
|
1203
1459
|
// util.deprecate dispatch on the next tick. off/removeListener remove
|
|
1204
1460
|
// by closure identity.
|
|
1205
1461
|
if (event === "warning" && (member === "on" || isOff)) {
|
|
1462
|
+
if (isPrepend) {
|
|
1463
|
+
lowerer.noLowering('process.prependListener("warning", ...)', call, "prependListener is supported for signals, 'exit', and 'uncaughtException' (register this family with on)");
|
|
1464
|
+
}
|
|
1206
1465
|
if (!resultIsDiscarded(call)) {
|
|
1207
1466
|
lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
|
|
1208
1467
|
}
|
|
@@ -1229,8 +1488,12 @@ export function lowerProcessMethodCall(lowerer, call, access) {
|
|
|
1229
1488
|
const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments.nodes[1]);
|
|
1230
1489
|
return {
|
|
1231
1490
|
kind: "libCall",
|
|
1232
|
-
fn: isOff ? "process.offSignal" : "process.onSignal",
|
|
1233
|
-
args: isOff
|
|
1491
|
+
fn: isOff ? "process.offSignal" : isPrepend ? "process.prependSignal" : "process.onSignal",
|
|
1492
|
+
args: isOff
|
|
1493
|
+
? [signal, cb]
|
|
1494
|
+
: isPrepend
|
|
1495
|
+
? [signal, cb]
|
|
1496
|
+
: [signal, cb, boolLit(member === "once", loc)],
|
|
1234
1497
|
type: VOID,
|
|
1235
1498
|
loc,
|
|
1236
1499
|
};
|
|
@@ -1282,6 +1545,9 @@ export function lowerProcessMethodCall(lowerer, call, access) {
|
|
|
1282
1545
|
if (isOff) {
|
|
1283
1546
|
return { kind: "libCall", fn: "process.offExit", args: [cb], type: VOID, loc };
|
|
1284
1547
|
}
|
|
1548
|
+
if (isPrepend) {
|
|
1549
|
+
return { kind: "libCall", fn: "process.prependExit", args: [cb], type: VOID, loc };
|
|
1550
|
+
}
|
|
1285
1551
|
return { kind: "libCall", fn: "process.onExit", args: [cb, onceArg], type: VOID, loc };
|
|
1286
1552
|
}
|
|
1287
1553
|
// process.emitWarning(...): the argument vector crosses as ONE dyn
|