@scriptc/compiler 0.4.7 → 0.4.8
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/child_process.d.ts +71 -22
- package/ambient/node-fallback/crypto.d.ts +15 -7
- package/ambient/node-fallback/events.d.ts +23 -5
- package/ambient/node-fallback/fs.d.ts +3 -2
- package/ambient/node-fallback/http.d.ts +23 -17
- package/ambient/node-fallback/https.d.ts +5 -2
- package/ambient/node-fallback/net.d.ts +6 -0
- package/ambient/node-fallback/os.d.ts +11 -1
- package/ambient/node-fallback/path-posix.d.ts +6 -0
- package/ambient/node-fallback/path-win32.d.ts +5 -0
- package/ambient/node-fallback/path.d.ts +2 -0
- package/ambient/node-fallback/zlib.d.ts +31 -2
- package/ambient/scriptc-node-fallback.d.ts +37 -7
- package/ambient/scriptc.d.ts +7 -2
- package/dist/backend/executable-features.js +11 -3
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.d.ts +6 -0
- package/dist/backend/library-pack.js +17 -6
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/library-pack.test.d.ts +1 -0
- package/dist/backend/library-pack.test.js +28 -0
- package/dist/backend/library-pack.test.js.map +1 -0
- package/dist/backend/linker.d.ts +9 -2
- package/dist/backend/linker.js +190 -32
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +8 -4
- package/dist/backend/lld.js +19 -13
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +3 -1
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -2
- package/dist/backend/llvm/alloc.js +172 -36
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +69 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/arenas.d.ts +17 -4
- package/dist/backend/llvm/arenas.js +105 -10
- package/dist/backend/llvm/arenas.js.map +1 -1
- package/dist/backend/llvm/arenas.test.js +229 -0
- package/dist/backend/llvm/arenas.test.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.js +10 -1
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-headers.js +6 -0
- package/dist/backend/llvm/bytes-headers.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.js +10 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -9
- package/dist/backend/llvm/classes.js +142 -37
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +42 -0
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
- package/dist/backend/llvm/cpu-dispatch.js +31 -7
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +12 -3
- package/dist/backend/llvm/dyn.js +31 -7
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +67 -4
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +90 -39
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.d.ts +1 -0
- package/dist/backend/llvm/emit-module.test.js +52 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -0
- package/dist/backend/llvm/emit-statements.js +99 -15
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +113 -8
- package/dist/backend/llvm/emitter.js +438 -67
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +31 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +16 -1
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +18 -2
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +31 -10
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +31 -3
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +124 -56
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +17 -0
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/js-groups.d.ts +21 -0
- package/dist/backend/llvm/js-groups.js +277 -0
- package/dist/backend/llvm/js-groups.js.map +1 -0
- package/dist/backend/llvm/js-ic.d.ts +19 -1
- package/dist/backend/llvm/js-ic.js +96 -23
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +132 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +33 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +44 -3
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +69 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +32 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-state.js +7 -2
- package/dist/backend/llvm/loop-state.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
- package/dist/backend/llvm/map-entry-fusion.js +3 -3
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +6 -6
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +7 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +4 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/receivers.js +3 -0
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
- package/dist/backend/llvm/record-entry-fusion.js +217 -0
- package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +5 -2
- package/dist/backend/llvm/record-results.js +13 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-views.js +12 -6
- package/dist/backend/llvm/record-views.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +1 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +3 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-ir.js +1 -0
- package/dist/backend/llvm/region-ir.js.map +1 -1
- package/dist/backend/llvm/region-sites.d.ts +18 -0
- package/dist/backend/llvm/region-sites.js +79 -1
- package/dist/backend/llvm/region-sites.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +53 -6
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +33 -3
- package/dist/backend/llvm/shapes.js +183 -13
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +1 -2
- package/dist/backend/llvm/stack-objects.js +8 -5
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +12 -0
- package/dist/backend/llvm/walkers.js +46 -2
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +12 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +13 -0
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +48 -8
- package/dist/backend/native/executable.js +55 -13
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/helper-identity-record.d.ts +11 -0
- package/dist/backend/native/helper-identity-record.js +76 -0
- package/dist/backend/native/helper-identity-record.js.map +1 -0
- package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
- package/dist/backend/native/helper-identity-record.test.js +101 -0
- package/dist/backend/native/helper-identity-record.test.js.map +1 -0
- package/dist/backend/native/library.js +9 -1
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.js +4 -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-core.d.ts +13 -10
- package/dist/backend/native-codegen-core.js +26 -13
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.js +27 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +110 -14
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +37 -8
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/runtime-pack-core.d.ts +17 -2
- package/dist/backend/runtime-pack-core.js +18 -3
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +211 -2
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/tree-classes.d.ts +42 -0
- package/dist/backend/tree-classes.js +723 -0
- package/dist/backend/tree-classes.js.map +1 -0
- package/dist/backend/tree-classes.test.d.ts +1 -0
- package/dist/backend/tree-classes.test.js +338 -0
- package/dist/backend/tree-classes.test.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +5 -1
- package/dist/backend/vendor-archives.js +51 -7
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +25 -4
- package/dist/backend/vendor-inputs.js +68 -4
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +35 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -1
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.js +2 -2
- package/dist/coverage/report.js +47 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -1
- package/dist/diagnostics/codes.d.ts +8 -0
- package/dist/diagnostics/codes.js +8 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +27 -9
- package/dist/diagnostics/diagnostic.js +60 -19
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +18 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +21 -2
- package/dist/executable/executable-cache.js +21 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +123 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +199 -248
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +200 -18
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +4 -0
- package/dist/frontend/builtin-modules.js +10 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/early-errors.d.ts +12 -2
- package/dist/frontend/early-errors.js +535 -4
- package/dist/frontend/early-errors.js.map +1 -1
- package/dist/frontend/early-errors.test.js +165 -0
- package/dist/frontend/early-errors.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.test.js +65 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
- package/dist/frontend/jsx-opinion-sites.test.js +86 -0
- package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
- package/dist/frontend/lib-exports.d.ts +23 -4
- package/dist/frontend/lib-exports.js +98 -26
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.js +21 -3
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/buffers.d.ts +8 -0
- package/dist/frontend/lowering/buffers.js +43 -0
- package/dist/frontend/lowering/buffers.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.js +4 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
- package/dist/frontend/lowering/builtin-namespaces.js +24 -3
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
- package/dist/frontend/lowering/builtin-statics.js +407 -0
- package/dist/frontend/lowering/builtin-statics.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +12 -0
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
- package/dist/frontend/lowering/builtins/atomics.js +87 -1
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +2 -2
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
- package/dist/frontend/lowering/builtins/child-process.js +560 -27
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
- package/dist/frontend/lowering/builtins/compression.js +41 -21
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +7 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +28 -2
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +4 -0
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +3 -1
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
- package/dist/frontend/lowering/builtins/numbers.js +10 -2
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +6 -3
- package/dist/frontend/lowering/builtins/operating-system.js +96 -16
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +2 -2
- package/dist/frontend/lowering/builtins/process.js +103 -8
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +169 -8
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.js +6 -2
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
- package/dist/frontend/lowering/builtins/readline.js +180 -36
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +35 -12
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +2 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.d.ts +10 -0
- package/dist/frontend/lowering/call-arguments.js +37 -2
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +10 -0
- package/dist/frontend/lowering/call-signatures.js +103 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +14 -2
- package/dist/frontend/lowering/class-construction.js +99 -5
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +9 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1283 -1030
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +20 -15
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +20 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +21 -4
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +9 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +8 -0
- package/dist/frontend/lowering/coercions/state.js +17 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +20 -5
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +10 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
- package/dist/frontend/lowering/coercions/unions.js +54 -10
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
- package/dist/frontend/lowering/constructor-returns.js +284 -58
- package/dist/frontend/lowering/constructor-returns.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +156 -62
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +21 -3
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.js +139 -3
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
- package/dist/frontend/lowering/containers/array-iteration.js +24 -7
- package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +14 -11
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
- package/dist/frontend/lowering/containers/bytes.js +446 -86
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +5 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +21 -12
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +52 -17
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +5 -5
- package/dist/frontend/lowering/dispatch-sites.js +3 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +40 -0
- package/dist/frontend/lowering/divergences.js +239 -20
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/effect-free.d.ts +12 -0
- package/dist/frontend/lowering/effect-free.js +44 -0
- package/dist/frontend/lowering/effect-free.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/array-literals.js +62 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +115 -5
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +151 -7
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +31 -2
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
- package/dist/frontend/lowering/expressions/narrowing.js +175 -22
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +173 -11
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +5 -1
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +8 -0
- package/dist/frontend/lowering/expressions/property-access.js +379 -109
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +237 -7
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +8 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
- package/dist/frontend/lowering/expressions/union-fields.js +103 -13
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +74 -55
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +37 -10
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.js +5 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
- package/dist/frontend/lowering/generator-delegation.js +301 -118
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +27 -1
- package/dist/frontend/lowering/generic-functions.js +432 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-function-values.d.ts +25 -0
- package/dist/frontend/lowering/global-function-values.js +193 -0
- package/dist/frontend/lowering/global-function-values.js.map +1 -0
- package/dist/frontend/lowering/global-values.d.ts +6 -4
- package/dist/frontend/lowering/global-values.js +24 -10
- package/dist/frontend/lowering/global-values.js.map +1 -1
- package/dist/frontend/lowering/host-global-values.d.ts +31 -0
- package/dist/frontend/lowering/host-global-values.js +121 -0
- package/dist/frontend/lowering/host-global-values.js.map +1 -0
- package/dist/frontend/lowering/host-globals.d.ts +74 -0
- package/dist/frontend/lowering/host-globals.js +344 -0
- package/dist/frontend/lowering/host-globals.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +46 -17
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
- package/dist/frontend/lowering/iterator-prototype.js +160 -0
- package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.js +43 -22
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +11 -3
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +30 -15
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
- package/dist/frontend/lowering/lower-async-iteration.js +15 -0
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +11 -1
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +25 -0
- package/dist/frontend/lowering/lower-calls.js +929 -227
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.js +59 -16
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +20 -0
- package/dist/frontend/lowering/lower-classes.js +468 -44
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -2
- package/dist/frontend/lowering/lower-event-emitter.js +253 -83
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +1 -1
- package/dist/frontend/lowering/lower-exprs.js +71 -20
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +25 -6
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +57 -10
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
- package/dist/frontend/lowering/lower-global-value.js +14 -5
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
- package/dist/frontend/lowering/lower-inspect.js +638 -64
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +48 -2
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +18 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.js +16 -6
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +303 -87
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +45 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +14 -11
- package/dist/frontend/lowering/lower-stmts.js +270 -52
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +110 -27
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +6 -3
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +227 -21
- package/dist/frontend/lowering/lowerer.js +651 -92
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +18 -0
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
- package/dist/frontend/lowering/lowering-facts.js +323 -0
- package/dist/frontend/lowering/lowering-facts.js.map +1 -0
- package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
- package/dist/frontend/lowering/lowering-facts.test.js +100 -0
- package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
- package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
- package/dist/frontend/lowering/nan-coded-reads.js +112 -9
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
- package/dist/frontend/lowering/optional-arguments.js +26 -2
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.d.ts +0 -3
- package/dist/frontend/lowering/partial-assertions.js +9 -15
- package/dist/frontend/lowering/partial-assertions.js.map +1 -1
- package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
- package/dist/frontend/lowering/primitive-throws.js +241 -0
- package/dist/frontend/lowering/primitive-throws.js.map +1 -0
- package/dist/frontend/lowering/primitive-wrappers.js +1 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
- package/dist/frontend/lowering/record-inherited.d.ts +17 -1
- package/dist/frontend/lowering/record-inherited.js +16 -2
- package/dist/frontend/lowering/record-inherited.js.map +1 -1
- package/dist/frontend/lowering/record-links.d.ts +73 -0
- package/dist/frontend/lowering/record-links.js +797 -0
- package/dist/frontend/lowering/record-links.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
- package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
- package/dist/frontend/lowering/runtime-optional-report.js +300 -0
- package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +3 -1
- package/dist/frontend/lowering/static-typeof.js +6 -1
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +1 -5
- package/dist/frontend/lowering/strict-mode.js +4 -30
- package/dist/frontend/lowering/strict-mode.js.map +1 -1
- package/dist/frontend/lowering/structural-instances.d.ts +7 -0
- package/dist/frontend/lowering/structural-instances.js +23 -0
- package/dist/frontend/lowering/structural-instances.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +15 -1
- package/dist/frontend/lowering/surfaces.js +78 -10
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-retag.d.ts +13 -1
- package/dist/frontend/lowering/union-retag.js +55 -1
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +51 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +8 -0
- package/dist/frontend/lowering/unit-journal.js +14 -0
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +36 -1
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/zlib-constants.js +3 -2
- package/dist/frontend/lowering/zlib-constants.js.map +1 -1
- package/dist/frontend/npm-static.js +78 -9
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +95 -2
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +5 -4
- package/dist/frontend/pipeline.js +94 -31
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +68 -11
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program.d.ts +62 -2
- package/dist/frontend/program.js +695 -422
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +37 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/services-node.d.ts +7 -0
- package/dist/frontend/services-node.js +32 -1
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services-node.test.js +51 -0
- package/dist/frontend/services-node.test.js.map +1 -1
- package/dist/frontend/shape-inference/overlay.js +68 -2
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- package/dist/frontend/tier-analysis.d.ts +9 -0
- package/dist/frontend/tier-analysis.js +1 -0
- package/dist/frontend/tier-analysis.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +57 -3
- package/dist/frontend/tsc-codes.js +935 -150
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/tsc-codes.test.js +221 -12
- package/dist/frontend/tsc-codes.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +91 -9
- package/dist/frontend/type-mapper.js +622 -181
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +80 -15
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +60 -0
- package/dist/index.test.js.map +1 -0
- package/dist/ir/builtin-effects.js +43 -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 +242 -16
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +3 -2
- package/dist/ir/callback-specialization.js +35 -25
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.d.ts +8 -4
- package/dist/ir/capture-values.js +9 -6
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +6 -2
- package/dist/ir/char-unit-locals.js +11 -2
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/class-key-index.d.ts +18 -0
- package/dist/ir/class-key-index.js +29 -0
- package/dist/ir/class-key-index.js.map +1 -0
- package/dist/ir/class-key-index.test.d.ts +1 -0
- package/dist/ir/class-key-index.test.js +25 -0
- package/dist/ir/class-key-index.test.js.map +1 -0
- package/dist/ir/codec.generated.d.ts +1 -1
- package/dist/ir/codec.generated.js +724 -648
- package/dist/ir/codec.generated.js.map +1 -1
- package/dist/ir/constant-globals.d.ts +5 -2
- package/dist/ir/constant-globals.js +25 -27
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +4 -2
- package/dist/ir/expression-inlining.js +8 -2
- package/dist/ir/expression-inlining.js.map +1 -1
- package/dist/ir/field-values.d.ts +5 -2
- package/dist/ir/field-values.js +32 -21
- package/dist/ir/field-values.js.map +1 -1
- package/dist/ir/fields.generated.d.ts +11 -2
- package/dist/ir/fields.generated.js +8 -0
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/final-fields.js +1 -1
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +5 -4
- package/dist/ir/function-references.js +7 -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/init-only-globals.d.ts +4 -2
- package/dist/ir/init-only-globals.js +17 -18
- package/dist/ir/init-only-globals.js.map +1 -1
- package/dist/ir/inline-array-views.js +1 -0
- package/dist/ir/inline-array-views.js.map +1 -1
- package/dist/ir/int32-slots.js +7 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/ir.d.ts +59 -4
- package/dist/ir/ir.js +7 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-groups.d.ts +51 -0
- package/dist/ir/js-groups.js +394 -0
- package/dist/ir/js-groups.js.map +1 -0
- package/dist/ir/js-groups.test.d.ts +1 -0
- package/dist/ir/js-groups.test.js +555 -0
- package/dist/ir/js-groups.test.js.map +1 -0
- package/dist/ir/js-ic.js +30 -5
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +27 -1
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +23 -6
- package/dist/ir/node-index.js +126 -49
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +4 -2
- package/dist/ir/numeric-call-specialization.js +40 -26
- package/dist/ir/numeric-call-specialization.js.map +1 -1
- package/dist/ir/paired-while-loops.d.ts +4 -2
- package/dist/ir/paired-while-loops.js +8 -2
- package/dist/ir/paired-while-loops.js.map +1 -1
- package/dist/ir/parameter-versions.d.ts +13 -4
- package/dist/ir/parameter-versions.js +63 -42
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/property-bags.d.ts +4 -2
- package/dist/ir/property-bags.js +22 -17
- package/dist/ir/property-bags.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +4 -2
- package/dist/ir/row-pairs.js +12 -11
- package/dist/ir/row-pairs.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +87 -12
- package/dist/ir/runtime-features.js +263 -160
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +109 -139
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/runtime-jam-loops.d.ts +35 -0
- package/dist/ir/runtime-jam-loops.js +604 -0
- package/dist/ir/runtime-jam-loops.js.map +1 -0
- package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
- package/dist/ir/runtime-jam-loops.test.js +565 -0
- package/dist/ir/runtime-jam-loops.test.js.map +1 -0
- package/dist/ir/saturating-loop-jams.d.ts +4 -2
- package/dist/ir/saturating-loop-jams.js +11 -10
- package/dist/ir/saturating-loop-jams.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +5 -2
- package/dist/ir/scalar-records.js +12 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/self-captures.d.ts +4 -2
- package/dist/ir/self-captures.js +32 -27
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/serialize.d.ts +6 -1
- package/dist/ir/serialize.js +87 -23
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +26 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/typed-argument-clones.d.ts +30 -0
- package/dist/ir/typed-argument-clones.js +789 -0
- package/dist/ir/typed-argument-clones.js.map +1 -0
- package/dist/ir/union-arm-loops.d.ts +3 -0
- package/dist/ir/union-arm-loops.js +373 -0
- package/dist/ir/union-arm-loops.js.map +1 -0
- package/dist/ir/union-arm-loops.test.d.ts +1 -0
- package/dist/ir/union-arm-loops.test.js +230 -0
- package/dist/ir/union-arm-loops.test.js.map +1 -0
- package/dist/ir/validate.js +88 -18
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/compiler-self-identity.d.ts +8 -2
- package/dist/library/compiler-self-identity.js +92 -18
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.js +150 -3
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/int-infer.d.ts +5 -0
- package/dist/library/int-infer.js +15 -3
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/ir-policy.js +1 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +4 -0
- package/dist/library/library-cache.js +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +26 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/prepare.js +99 -31
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cache.d.ts +7 -0
- package/dist/native/cache.js +47 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +13 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +1 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +18 -3
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache-open.test.js +31 -5
- package/dist/native/executable-cache-open.test.js.map +1 -1
- package/dist/native/executable-cache.d.ts +6 -1
- package/dist/native/executable-cache.js +7 -1
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +3 -0
- package/dist/native/prepare.js +43 -26
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +25 -3
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.js +10 -1
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +7 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +12 -0
- package/dist/node-islands/boundary.js +38 -6
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.d.ts +1 -0
- package/dist/node-islands/boundary.test.js +76 -0
- package/dist/node-islands/boundary.test.js.map +1 -0
- package/dist/node-islands/detect.d.ts +9 -0
- package/dist/node-islands/detect.js +110 -0
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +24 -0
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/graph-islands.d.ts +40 -0
- package/dist/node-islands/graph-islands.js +128 -0
- package/dist/node-islands/graph-islands.js.map +1 -0
- package/dist/node-islands/growth.d.ts +57 -0
- package/dist/node-islands/growth.js +205 -0
- package/dist/node-islands/growth.js.map +1 -0
- package/dist/node-islands/report.d.ts +12 -0
- package/dist/node-islands/report.js +28 -0
- package/dist/node-islands/report.js.map +1 -1
- 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 +5 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +11 -2
- package/dist/node-islands/scan.js +61 -9
- package/dist/node-islands/scan.js.map +1 -1
- package/dist/wasm/translate.js +11 -5
- package/dist/wasm/translate.js.map +1 -1
- package/dist/wasm/translate.test.js +35 -0
- package/dist/wasm/translate.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +184 -117
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { recordToEnvPairs } from "./environment.js";
|
|
2
|
-
import { boolLit, numLit } from "../../../ir/build.js";
|
|
2
|
+
import { boolLit, numLit, strLit, varRef } from "../../../ir/build.js";
|
|
3
|
+
import { keyedHelperName } from "../stable-names.js";
|
|
4
|
+
import { InternalCompilerError } from "../../../errors.js";
|
|
3
5
|
import { resolve } from "node:path";
|
|
4
6
|
import * as ts from "../../ts7/adapter.js";
|
|
5
7
|
import {} from "../lowerer.js";
|
|
6
8
|
import { locOf } from "../../program.js";
|
|
7
9
|
import { conditionalSpreadOf } from "../expressions/object-literals.js";
|
|
8
|
-
import { BOOL, CHILD_T, DYN, F64, SPAWNRES_T, STRING, arrayOf, } from "../../../ir/ir.js";
|
|
10
|
+
import { BOOL, CHILD_T, DYN, F64, SPAWNRES_T, STRING, UNDEFINED_T, arrayOf, } from "../../../ir/ir.js";
|
|
9
11
|
import { staticForkModulePath } from "../../fork-target.js";
|
|
10
12
|
import { tsgoPath } from "../../dts-paths.js";
|
|
11
13
|
import { optionMember, stripTypeCasts } from "./arguments.js";
|
|
@@ -23,6 +25,18 @@ export function lowerChildArgsArg(lowerer, node, loc) {
|
|
|
23
25
|
}
|
|
24
26
|
return lowerer.lowerExprExpecting(node, arrayOf(STRING));
|
|
25
27
|
}
|
|
28
|
+
/** True when the args slot is statically empty (omitted, `undefined`, or an
|
|
29
|
+
* empty array literal): the shape the shell forms accept. Node joins the
|
|
30
|
+
* arguments unescaped and warns DEP0190 whenever a non-empty list meets
|
|
31
|
+
* `shell: true`, and a native build has no warning channel to match it. */
|
|
32
|
+
function staticallyEmptyArgs(node) {
|
|
33
|
+
if (!node)
|
|
34
|
+
return true;
|
|
35
|
+
const bare = stripTypeCasts(node);
|
|
36
|
+
if (ts.isIdentifier(bare) && bare.text === "undefined")
|
|
37
|
+
return true;
|
|
38
|
+
return ts.isArrayLiteralExpression(bare) && bare.elements.nodes.length === 0;
|
|
39
|
+
}
|
|
26
40
|
/** The signal names Node's table (and the runtime's twin) resolves —
|
|
27
41
|
* killSignal literals are validated HERE so an unknown name is a
|
|
28
42
|
* compile-time fence instead of Node's runtime ERR_UNKNOWN_SIGNAL. */
|
|
@@ -71,10 +85,16 @@ const NODE_SIGNAL_NAMES = new Set([
|
|
|
71
85
|
* literal, validated against Node's table), `stdio` (the "pipe"/
|
|
72
86
|
* "ignore"/"inherit" string form or a 3-tuple of those — non-piped
|
|
73
87
|
* outputs read "" where Node types them null, spawnSync's documented
|
|
74
|
-
* stance),
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
88
|
+
* stance), `env` (a REPLACEMENT environment), `cwd` (the child's
|
|
89
|
+
* directory), `input` (the string piped to its stdin, `| undefined`
|
|
90
|
+
* meaning absent), `shell` (a boolean literal: the complete command line
|
|
91
|
+
* runs through /bin/sh -c, with an empty args list only — Node warns
|
|
92
|
+
* DEP0190 for separate shell args), and
|
|
93
|
+
* `windowsHide` (a POSIX no-op, evaluated for side effects). Everything
|
|
94
|
+
* else (maxBuffer, ...) fences by name. A TYPED options value
|
|
95
|
+
* (SpawnSyncOptionsWithStringEncoding) reads its members at the call.
|
|
96
|
+
* The bare `{ encoding: "utf8" }` shape keeps its historical
|
|
97
|
+
* cp.spawnSync lowering. */
|
|
78
98
|
export function lowerSpawnSyncCall(lowerer, expr, loc) {
|
|
79
99
|
if (expr.arguments.nodes.length > 3 || expr.arguments.nodes.some(ts.isSpreadElement)) {
|
|
80
100
|
lowerer.noLowering("spawnSync with this argument shape", expr, "the supported form is spawnSync(command, args?, options?)");
|
|
@@ -88,21 +108,67 @@ export function lowerSpawnSyncCall(lowerer, expr, loc) {
|
|
|
88
108
|
// no input and "ignore" both read nothing), 2 = inherit; stdout/
|
|
89
109
|
// stderr 0 = capture, 1 = ignore, 2 = inherit.
|
|
90
110
|
let inMode = 0, outMode = 0, errMode = 0;
|
|
111
|
+
// stdio[0] is a pipe only when the option never says otherwise: "ignore"
|
|
112
|
+
// and "inherit" both take the child's fd 0 away, and Node drops `input`
|
|
113
|
+
// there instead of piping it.
|
|
114
|
+
let stdinPiped = true;
|
|
91
115
|
// A RUNTIME stdio string (the defaultRunner idiom: `options?.stdio ??
|
|
92
116
|
// "pipe"`) — accepted when its TYPE proves every arm is a supported
|
|
93
117
|
// literal; the runtime maps the value to the modes at the call.
|
|
94
118
|
let stdioStr = null;
|
|
95
119
|
// The `env` option's [k,v,...] pairs, which replace the child's environment.
|
|
96
120
|
let envPairs = null;
|
|
121
|
+
// `cwd` and `input` (the SCR_CHILD_CP_OPTIONS build). Presence rides
|
|
122
|
+
// apart from the value: "" is an ABSENT cwd (the runtime's len-0 test
|
|
123
|
+
// — a real empty cwd is invalid anyway) and undefined input means no
|
|
124
|
+
// stdin pipe at all, where "" pipes one that ends immediately.
|
|
125
|
+
const emptyStr = { kind: "strLit", value: "", type: STRING, loc };
|
|
126
|
+
let cwd = emptyStr;
|
|
127
|
+
let input = emptyStr;
|
|
128
|
+
let hasInput = boolLit(false, loc);
|
|
129
|
+
// Node's shell form: the command line runs through /bin/sh -c.
|
|
130
|
+
let shell = boolLit(false, loc);
|
|
131
|
+
let extOptions = false; // cwd, input, or shell present: the extended entry point
|
|
97
132
|
let plain = true; // no behavior-changing option: the historical libCall
|
|
133
|
+
// A union-typed `input` is read once into a hidden local that its
|
|
134
|
+
// presence test and its value share, so a getter or a call in the
|
|
135
|
+
// member runs exactly once, as the options object's evaluation does.
|
|
136
|
+
let inputRead = null;
|
|
137
|
+
// The options whose values reach the call, in source order: the
|
|
138
|
+
// extended entry point's prelude evaluates them in this order.
|
|
139
|
+
const optionOrder = [];
|
|
98
140
|
if (optsNode) {
|
|
99
141
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
100
|
-
|
|
142
|
+
const runtime = lowerSpawnSyncRuntimeOptions(lowerer, optsNode, expr.arguments.nodes[1], loc);
|
|
143
|
+
if (runtime) {
|
|
144
|
+
return {
|
|
145
|
+
kind: "libCall",
|
|
146
|
+
fn: "cp.spawnSyncExt",
|
|
147
|
+
args: [
|
|
148
|
+
cmd,
|
|
149
|
+
argv,
|
|
150
|
+
runtime.timeout,
|
|
151
|
+
killSignal,
|
|
152
|
+
runtime.inMode,
|
|
153
|
+
runtime.outMode,
|
|
154
|
+
runtime.errMode,
|
|
155
|
+
runtime.cwd,
|
|
156
|
+
runtime.input,
|
|
157
|
+
runtime.hasInput,
|
|
158
|
+
runtime.shell,
|
|
159
|
+
],
|
|
160
|
+
type: SPAWNRES_T,
|
|
161
|
+
loc,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
lowerer.noLowering("spawnSync with a non-literal options argument", optsNode, "pass the options inline so each member can be checked, or give them the SpawnSyncOptionsWithStringEncoding type (env and killSignal stay literal)");
|
|
101
165
|
}
|
|
102
166
|
const applyStdio = (node) => {
|
|
103
167
|
const modeOf = (v, fd) => {
|
|
104
168
|
if (v === "pipe")
|
|
105
169
|
return; // the default modes
|
|
170
|
+
if (fd === 0)
|
|
171
|
+
stdinPiped = false;
|
|
106
172
|
if (v === "ignore") {
|
|
107
173
|
if (fd === 1)
|
|
108
174
|
outMode = 1;
|
|
@@ -164,6 +230,7 @@ export function lowerSpawnSyncCall(lowerer, expr, loc) {
|
|
|
164
230
|
}
|
|
165
231
|
case "timeout":
|
|
166
232
|
timeout = lowerer.lowerExprExpecting(m.value, F64);
|
|
233
|
+
optionOrder.push("timeout");
|
|
167
234
|
plain = false;
|
|
168
235
|
break;
|
|
169
236
|
case "killSignal": {
|
|
@@ -185,10 +252,97 @@ export function lowerSpawnSyncCall(lowerer, expr, loc) {
|
|
|
185
252
|
case "env":
|
|
186
253
|
// A REPLACEMENT environment, as for spawn and execFileSync.
|
|
187
254
|
envPairs = recordToEnvPairs(lowerer, m.value);
|
|
255
|
+
optionOrder.push("env");
|
|
256
|
+
plain = false;
|
|
257
|
+
break;
|
|
258
|
+
case "cwd":
|
|
259
|
+
cwd = lowerer.lowerExprExpecting(m.value, STRING);
|
|
260
|
+
optionOrder.push("cwd");
|
|
261
|
+
extOptions = true;
|
|
262
|
+
plain = false;
|
|
263
|
+
break;
|
|
264
|
+
case "shell":
|
|
265
|
+
if (m.value.kind === ts.SyntaxKind.TrueKeyword) {
|
|
266
|
+
// Node joins [command, ...args] with single spaces and warns
|
|
267
|
+
// DEP0190 for a non-empty list; a native build has no warning
|
|
268
|
+
// channel, so it refuses the form instead of dropping the
|
|
269
|
+
// warning Node prints.
|
|
270
|
+
if (!staticallyEmptyArgs(expr.arguments.nodes[1])) {
|
|
271
|
+
lowerer.noLowering("spawnSync with shell enabled and separate arguments", expr.arguments.nodes[1], "put the complete shell command in the first argument and pass [] (Node warns DEP0190 for unescaped shell arguments, and a native build cannot report that warning)");
|
|
272
|
+
}
|
|
273
|
+
shell = boolLit(true, loc);
|
|
274
|
+
extOptions = true;
|
|
275
|
+
plain = false;
|
|
276
|
+
}
|
|
277
|
+
else if (m.value.kind === ts.SyntaxKind.FalseKeyword) {
|
|
278
|
+
shell = boolLit(false, loc); // Node's default
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
lowerer.noLowering("spawnSync with a non-literal shell option", m.value, "shell must be a boolean literal");
|
|
282
|
+
}
|
|
283
|
+
break;
|
|
284
|
+
case "input": {
|
|
285
|
+
// string | undefined, Node's exact member semantics (see
|
|
286
|
+
// execFileSync): the undefined arm is an ABSENT option. The
|
|
287
|
+
// presence test and the value share ONE read (the hidden local
|
|
288
|
+
// below), so any expression qualifies and a getter or call in it
|
|
289
|
+
// runs exactly once, as the options object's evaluation does.
|
|
290
|
+
if (lowerer.typeOf(m.value).flags & ts.TypeFlags.Undefined)
|
|
291
|
+
break;
|
|
292
|
+
const it = lowerer.mapTypeOf(lowerer.typeOf(m.value));
|
|
293
|
+
const uTag = it?.kind === "union" ? lowerer.armTag(it.unionId, UNDEFINED_T) : -1;
|
|
294
|
+
const sTag = it?.kind === "union" ? lowerer.armTag(it.unionId, STRING) : -1;
|
|
295
|
+
if (it?.kind === "union" && uTag >= 0 && sTag >= 0) {
|
|
296
|
+
const readValue = lowerer.lowerExpr(m.value);
|
|
297
|
+
const slot = lowerer.declareHiddenLocal("%spawnSyncInput", readValue.type);
|
|
298
|
+
inputRead = { id: slot.id, init: readValue };
|
|
299
|
+
const read = varRef(slot.id, readValue.type, loc);
|
|
300
|
+
hasInput = {
|
|
301
|
+
kind: "unionIsTag",
|
|
302
|
+
unionId: it.unionId,
|
|
303
|
+
tag: uTag,
|
|
304
|
+
negated: true,
|
|
305
|
+
value: read,
|
|
306
|
+
type: BOOL,
|
|
307
|
+
loc,
|
|
308
|
+
};
|
|
309
|
+
input = {
|
|
310
|
+
kind: "ternary",
|
|
311
|
+
cond: {
|
|
312
|
+
kind: "unionIsTag",
|
|
313
|
+
unionId: it.unionId,
|
|
314
|
+
tag: uTag,
|
|
315
|
+
negated: false,
|
|
316
|
+
value: read,
|
|
317
|
+
type: BOOL,
|
|
318
|
+
loc,
|
|
319
|
+
},
|
|
320
|
+
then: emptyStr,
|
|
321
|
+
else_: {
|
|
322
|
+
kind: "unionNarrow",
|
|
323
|
+
unionId: it.unionId,
|
|
324
|
+
tag: sTag,
|
|
325
|
+
value: read,
|
|
326
|
+
type: STRING,
|
|
327
|
+
loc,
|
|
328
|
+
},
|
|
329
|
+
type: STRING,
|
|
330
|
+
loc,
|
|
331
|
+
};
|
|
332
|
+
optionOrder.push("input");
|
|
333
|
+
extOptions = true;
|
|
334
|
+
plain = false;
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
input = lowerer.lowerExprExpecting(m.value, STRING);
|
|
338
|
+
optionOrder.push("input");
|
|
339
|
+
hasInput = boolLit(true, loc);
|
|
340
|
+
extOptions = true;
|
|
188
341
|
plain = false;
|
|
189
342
|
break;
|
|
343
|
+
}
|
|
190
344
|
default:
|
|
191
|
-
lowerer.noLowering(`spawnSync option '${m.name}'`, p, "encoding, timeout, killSignal, stdio, env, and windowsHide are the supported options");
|
|
345
|
+
lowerer.noLowering(`spawnSync option '${m.name}'`, p, "encoding, timeout, killSignal, stdio, env, cwd, input, shell, and windowsHide are the supported options");
|
|
192
346
|
}
|
|
193
347
|
}
|
|
194
348
|
}
|
|
@@ -199,6 +353,9 @@ export function lowerSpawnSyncCall(lowerer, expr, loc) {
|
|
|
199
353
|
lowerer.noLowering("spawnSync with a runtime stdio value and env", optsNode, 'pass stdio as a "pipe"/"ignore"/"inherit" literal when env is set');
|
|
200
354
|
}
|
|
201
355
|
if (stdioStr !== null) {
|
|
356
|
+
if (extOptions) {
|
|
357
|
+
lowerer.noLowering("spawnSync with a runtime stdio value and cwd, input, or shell", optsNode, 'pass stdio as a "pipe"/"ignore"/"inherit" literal when cwd, input, or shell is set');
|
|
358
|
+
}
|
|
202
359
|
return {
|
|
203
360
|
kind: "libCall",
|
|
204
361
|
fn: "cp.spawnSyncStdioStr",
|
|
@@ -207,6 +364,70 @@ export function lowerSpawnSyncCall(lowerer, expr, loc) {
|
|
|
207
364
|
loc,
|
|
208
365
|
};
|
|
209
366
|
}
|
|
367
|
+
if (extOptions) {
|
|
368
|
+
// Node ignores `input` when stdio[0] takes the child's fd 0 away
|
|
369
|
+
// ("ignore" is /dev/null, "inherit" the parent's): the option is dead
|
|
370
|
+
// there, not a pipe. Its expression still runs — Node evaluates the
|
|
371
|
+
// member before the call — so it stays an argument, and `has_input`
|
|
372
|
+
// false keeps it out of the child's stdin.
|
|
373
|
+
const ignoreInput = !stdinPiped;
|
|
374
|
+
// The call's prelude evaluates the command, the arguments and the
|
|
375
|
+
// options in source order, each into a hidden local the call reads, so
|
|
376
|
+
// an earlier option that changes a later one's value (a getter, a call)
|
|
377
|
+
// is seen as in Node. A union `input` lands in the hidden local its tag
|
|
378
|
+
// test and its value share. Literals need no local.
|
|
379
|
+
const prelude = [];
|
|
380
|
+
const bind = (name, value) => {
|
|
381
|
+
if (value.kind === "strLit" || value.kind === "numLit" || value.kind === "boolLit")
|
|
382
|
+
return value;
|
|
383
|
+
const local = lowerer.declareHiddenLocal(name, value.type);
|
|
384
|
+
prelude.push({ kind: "varDecl", localId: local.id, init: value, loc });
|
|
385
|
+
return varRef(local.id, value.type, loc);
|
|
386
|
+
};
|
|
387
|
+
const cmdArg = bind("%spawnSyncCmd", cmd);
|
|
388
|
+
const argvArg = bind("%spawnSyncArgs", argv);
|
|
389
|
+
let timeoutArg = timeout;
|
|
390
|
+
let cwdArg = cwd;
|
|
391
|
+
let inputArg = input;
|
|
392
|
+
let envArg = envPairs;
|
|
393
|
+
for (const option of optionOrder) {
|
|
394
|
+
if (option === "timeout")
|
|
395
|
+
timeoutArg = bind("%spawnSyncTimeout", timeout);
|
|
396
|
+
else if (option === "cwd")
|
|
397
|
+
cwdArg = bind("%spawnSyncCwd", cwd);
|
|
398
|
+
else if (option === "env" && envPairs !== null)
|
|
399
|
+
envArg = bind("%spawnSyncEnv", envPairs);
|
|
400
|
+
else if (option === "input") {
|
|
401
|
+
if (inputRead !== null)
|
|
402
|
+
prelude.push({ kind: "varDecl", localId: inputRead.id, init: inputRead.init, loc });
|
|
403
|
+
else
|
|
404
|
+
inputArg = bind("%spawnSyncInput", input);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
const call = {
|
|
408
|
+
kind: "libCall",
|
|
409
|
+
fn: envPairs !== null ? "cp.spawnSyncExtEnv" : "cp.spawnSyncExt",
|
|
410
|
+
args: [
|
|
411
|
+
cmdArg,
|
|
412
|
+
argvArg,
|
|
413
|
+
timeoutArg,
|
|
414
|
+
killSignal,
|
|
415
|
+
numLit(inMode, loc),
|
|
416
|
+
numLit(outMode, loc),
|
|
417
|
+
numLit(errMode, loc),
|
|
418
|
+
cwdArg,
|
|
419
|
+
inputArg,
|
|
420
|
+
ignoreInput ? boolLit(false, loc) : hasInput,
|
|
421
|
+
shell,
|
|
422
|
+
...(envArg !== null ? [envArg] : []),
|
|
423
|
+
],
|
|
424
|
+
type: SPAWNRES_T,
|
|
425
|
+
loc,
|
|
426
|
+
};
|
|
427
|
+
return prelude.length === 0
|
|
428
|
+
? call
|
|
429
|
+
: { kind: "seqExpr", stmts: prelude, result: call, type: SPAWNRES_T, loc };
|
|
430
|
+
}
|
|
210
431
|
return {
|
|
211
432
|
kind: "libCall",
|
|
212
433
|
fn: envPairs !== null ? "cp.spawnSyncEnv" : "cp.spawnSyncOpts",
|
|
@@ -224,6 +445,277 @@ export function lowerSpawnSyncCall(lowerer, expr, loc) {
|
|
|
224
445
|
loc,
|
|
225
446
|
};
|
|
226
447
|
}
|
|
448
|
+
/** The RUNTIME half of the spawnSync options story: a non-literal
|
|
449
|
+
* options argument whose type mapped to the interned spawnSync options
|
|
450
|
+
* record (SpawnSyncOptionsWithStringEncoding). cwd/input/timeout/shell
|
|
451
|
+
* read their fields with the literal path's defaults on the undefined
|
|
452
|
+
* arm; the stdio modes compute through an interned helper over the
|
|
453
|
+
* record, and a runtime mode outside "pipe"/"ignore"/"inherit" throws
|
|
454
|
+
* the catchable TypeError the literal path fences at compile time. The
|
|
455
|
+
* options expression re-reads per member, so only side-effect-free reads
|
|
456
|
+
* qualify (the exec-options reader's discipline). Null when the shape
|
|
457
|
+
* isn't the spawnSync options record (the caller keeps its fence). */
|
|
458
|
+
function lowerSpawnSyncRuntimeOptions(lowerer, optsNode, argsNode, loc) {
|
|
459
|
+
const opts = lowerer.lowerExpr(optsNode);
|
|
460
|
+
if (opts.type.kind !== "record")
|
|
461
|
+
return null;
|
|
462
|
+
const shapeId = opts.type.shapeId;
|
|
463
|
+
const shape = lowerer.shapes.get(shapeId);
|
|
464
|
+
const names = shape?.fields.map((f) => f.name).join(",");
|
|
465
|
+
if (names !== "cwd,encoding,input,shell,stdio,timeout,windowsHide")
|
|
466
|
+
return null;
|
|
467
|
+
if (opts.kind !== "varRef" && opts.kind !== "recordGet" && opts.kind !== "fieldGet") {
|
|
468
|
+
lowerer.noLowering("spawnSync with a computed options argument", optsNode, "the member reads re-read the options — bind the object to a const first");
|
|
469
|
+
}
|
|
470
|
+
// The record carries `shell`, so the call MAY enable the shell at run
|
|
471
|
+
// time. Node joins a non-empty args list unescaped and warns DEP0190
|
|
472
|
+
// there; only an empty list provably never triggers that warning, so the
|
|
473
|
+
// value form accepts the command-line idiom and refuses separate args.
|
|
474
|
+
if (!staticallyEmptyArgs(argsNode)) {
|
|
475
|
+
lowerer.noLowering("spawnSync with a typed options value and separate arguments", argsNode, "the options record may enable shell, where Node warns DEP0190 for unescaped arguments — put the complete command in the first argument and pass no args");
|
|
476
|
+
}
|
|
477
|
+
const fieldType = (name) => shape.fields.find((f) => f.name === name).type;
|
|
478
|
+
// field ?? default — the undefined arm takes the literal path's default.
|
|
479
|
+
const readOpt = (name, dflt, armT) => {
|
|
480
|
+
const ft = fieldType(name);
|
|
481
|
+
if (ft.kind !== "union")
|
|
482
|
+
return { kind: "recordGet", obj: opts, shapeId, field: name, type: ft, loc };
|
|
483
|
+
const uTag = lowerer.armTag(ft.unionId, UNDEFINED_T);
|
|
484
|
+
const vTag = lowerer.armTag(ft.unionId, armT);
|
|
485
|
+
const read = { kind: "recordGet", obj: opts, shapeId, field: name, type: ft, loc };
|
|
486
|
+
return {
|
|
487
|
+
kind: "ternary",
|
|
488
|
+
cond: {
|
|
489
|
+
kind: "unionIsTag",
|
|
490
|
+
unionId: ft.unionId,
|
|
491
|
+
tag: uTag,
|
|
492
|
+
negated: false,
|
|
493
|
+
value: read,
|
|
494
|
+
type: BOOL,
|
|
495
|
+
loc,
|
|
496
|
+
},
|
|
497
|
+
then: dflt,
|
|
498
|
+
else_: { kind: "unionNarrow", unionId: ft.unionId, tag: vTag, value: read, type: armT, loc },
|
|
499
|
+
type: armT,
|
|
500
|
+
loc,
|
|
501
|
+
};
|
|
502
|
+
};
|
|
503
|
+
const emptyStr = strLit("", loc);
|
|
504
|
+
const modeCall = (fd) => ({
|
|
505
|
+
kind: "call",
|
|
506
|
+
callee: spawnSyncStdioModeHelper(lowerer, shapeId, fieldType("stdio"), fd, loc),
|
|
507
|
+
args: [opts],
|
|
508
|
+
type: F64,
|
|
509
|
+
loc,
|
|
510
|
+
});
|
|
511
|
+
const inMode = modeCall(0);
|
|
512
|
+
// input's PRESENCE rides separately (undefined = the option is absent —
|
|
513
|
+
// no stdin pipe; "" pipes empty stdin), and Node IGNORES it when
|
|
514
|
+
// stdio[0] takes the child's fd 0 away ("ignore"/"inherit"): the option
|
|
515
|
+
// is dead there, not a pipe. Mode 0 is the only stdin mode that honors
|
|
516
|
+
// it.
|
|
517
|
+
const inputT = fieldType("input");
|
|
518
|
+
const hasInputField = inputT.kind === "union"
|
|
519
|
+
? {
|
|
520
|
+
kind: "unionIsTag",
|
|
521
|
+
unionId: inputT.unionId,
|
|
522
|
+
tag: lowerer.armTag(inputT.unionId, UNDEFINED_T),
|
|
523
|
+
negated: true,
|
|
524
|
+
value: { kind: "recordGet", obj: opts, shapeId, field: "input", type: inputT, loc },
|
|
525
|
+
type: BOOL,
|
|
526
|
+
loc,
|
|
527
|
+
}
|
|
528
|
+
: boolLit(true, loc);
|
|
529
|
+
return {
|
|
530
|
+
cwd: readOpt("cwd", emptyStr, STRING),
|
|
531
|
+
input: readOpt("input", emptyStr, STRING),
|
|
532
|
+
hasInput: {
|
|
533
|
+
kind: "logical",
|
|
534
|
+
op: "&&",
|
|
535
|
+
left: hasInputField,
|
|
536
|
+
right: {
|
|
537
|
+
kind: "bin",
|
|
538
|
+
op: "===",
|
|
539
|
+
left: inMode,
|
|
540
|
+
right: numLit(0, loc),
|
|
541
|
+
type: BOOL,
|
|
542
|
+
loc,
|
|
543
|
+
},
|
|
544
|
+
type: BOOL,
|
|
545
|
+
loc,
|
|
546
|
+
},
|
|
547
|
+
timeout: readOpt("timeout", numLit(0, loc), F64),
|
|
548
|
+
shell: readOpt("shell", boolLit(false, loc), BOOL),
|
|
549
|
+
inMode,
|
|
550
|
+
outMode: modeCall(1),
|
|
551
|
+
errMode: modeCall(2),
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
/** Interned `%cp.spawnSyncStdioMode.<fd>` — the runtime stdio-mode
|
|
555
|
+
* computation over the spawnSync options record: undefined stdio keeps
|
|
556
|
+
* the default (every fd piped/captured), a single "pipe"/"ignore"/
|
|
557
|
+
* "inherit" string applies to all three fds, an array reads its fd's
|
|
558
|
+
* entry ("pipe" when the array is short — Node's default per fd). Any
|
|
559
|
+
* other runtime string throws the catchable TypeError the literal path
|
|
560
|
+
* fences at compile time. Mode 0 = pipe (capture for fds 1/2, /dev/null
|
|
561
|
+
* that still honors `input` for fd 0), 1 = ignore, 2 = inherit. */
|
|
562
|
+
function spawnSyncStdioModeHelper(lowerer, shapeId, stdioT, fd, loc) {
|
|
563
|
+
const key = `cp.spawnsyncstdiomode:${shapeId}:${fd}`;
|
|
564
|
+
const existing = lowerer.arrHofHelpers.get(key);
|
|
565
|
+
if (existing)
|
|
566
|
+
return existing;
|
|
567
|
+
const name = keyedHelperName(lowerer, `%cp.spawnSyncStdioMode.${fd}`, key);
|
|
568
|
+
lowerer.arrHofHelpers.set(key, name);
|
|
569
|
+
const optsT = { kind: "record", shapeId };
|
|
570
|
+
const strEq = (l, r) => ({
|
|
571
|
+
kind: "strEq",
|
|
572
|
+
negated: false,
|
|
573
|
+
left: l,
|
|
574
|
+
right: strLit(r, loc),
|
|
575
|
+
type: BOOL,
|
|
576
|
+
loc,
|
|
577
|
+
});
|
|
578
|
+
const throwType = (msg) => ({
|
|
579
|
+
kind: "throw",
|
|
580
|
+
value: {
|
|
581
|
+
kind: "libCall",
|
|
582
|
+
fn: "error.new",
|
|
583
|
+
args: [msg],
|
|
584
|
+
type: { kind: "object", className: "%TypeError" },
|
|
585
|
+
loc,
|
|
586
|
+
},
|
|
587
|
+
loc,
|
|
588
|
+
});
|
|
589
|
+
const concat = (l, r) => ({
|
|
590
|
+
kind: "strConcat",
|
|
591
|
+
left: l,
|
|
592
|
+
right: r,
|
|
593
|
+
type: STRING,
|
|
594
|
+
loc,
|
|
595
|
+
});
|
|
596
|
+
const o = varRef("o.0", optsT, loc);
|
|
597
|
+
const locals = [
|
|
598
|
+
{ id: "o.0", name: "o", type: optsT, mutable: false },
|
|
599
|
+
{ id: "s.0", name: "s", type: STRING, mutable: false },
|
|
600
|
+
{ id: "a.0", name: "a", type: arrayOf(STRING), mutable: false },
|
|
601
|
+
];
|
|
602
|
+
const modeStmts = (s) => [
|
|
603
|
+
{
|
|
604
|
+
kind: "if",
|
|
605
|
+
cond: strEq(s, "pipe"),
|
|
606
|
+
then: [{ kind: "return", value: numLit(0, loc), loc }],
|
|
607
|
+
else_: null,
|
|
608
|
+
loc,
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
kind: "if",
|
|
612
|
+
cond: strEq(s, "ignore"),
|
|
613
|
+
then: [{ kind: "return", value: numLit(1, loc), loc }],
|
|
614
|
+
else_: null,
|
|
615
|
+
loc,
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
kind: "if",
|
|
619
|
+
cond: strEq(s, "inherit"),
|
|
620
|
+
then: [{ kind: "return", value: numLit(2, loc), loc }],
|
|
621
|
+
else_: null,
|
|
622
|
+
loc,
|
|
623
|
+
},
|
|
624
|
+
throwType(concat(concat(strLit('spawnSync stdio "', loc), s), strLit('" has no static lowering ("pipe", "ignore", and "inherit" are the supported modes)', loc))),
|
|
625
|
+
];
|
|
626
|
+
if (stdioT.kind !== "union")
|
|
627
|
+
throw new InternalCompilerError("emitter bug: spawnSync stdio is not a union");
|
|
628
|
+
const uTag = lowerer.armTag(stdioT.unionId, UNDEFINED_T);
|
|
629
|
+
const sTag = lowerer.armTag(stdioT.unionId, STRING);
|
|
630
|
+
const aTag = lowerer.armTag(stdioT.unionId, arrayOf(STRING));
|
|
631
|
+
const sd = { kind: "recordGet", obj: o, shapeId, field: "stdio", type: stdioT, loc };
|
|
632
|
+
const body = [
|
|
633
|
+
{
|
|
634
|
+
kind: "if",
|
|
635
|
+
cond: {
|
|
636
|
+
kind: "unionIsTag",
|
|
637
|
+
unionId: stdioT.unionId,
|
|
638
|
+
tag: uTag,
|
|
639
|
+
negated: false,
|
|
640
|
+
value: sd,
|
|
641
|
+
type: BOOL,
|
|
642
|
+
loc,
|
|
643
|
+
},
|
|
644
|
+
then: [{ kind: "return", value: numLit(0, loc), loc }],
|
|
645
|
+
else_: null,
|
|
646
|
+
loc,
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
kind: "if",
|
|
650
|
+
cond: {
|
|
651
|
+
kind: "unionIsTag",
|
|
652
|
+
unionId: stdioT.unionId,
|
|
653
|
+
tag: sTag,
|
|
654
|
+
negated: false,
|
|
655
|
+
value: sd,
|
|
656
|
+
type: BOOL,
|
|
657
|
+
loc,
|
|
658
|
+
},
|
|
659
|
+
then: [
|
|
660
|
+
{
|
|
661
|
+
kind: "varDecl",
|
|
662
|
+
localId: "s.0",
|
|
663
|
+
init: {
|
|
664
|
+
kind: "unionNarrow",
|
|
665
|
+
unionId: stdioT.unionId,
|
|
666
|
+
tag: sTag,
|
|
667
|
+
value: sd,
|
|
668
|
+
type: STRING,
|
|
669
|
+
loc,
|
|
670
|
+
},
|
|
671
|
+
loc,
|
|
672
|
+
},
|
|
673
|
+
...modeStmts(varRef("s.0", STRING, loc)),
|
|
674
|
+
],
|
|
675
|
+
else_: null,
|
|
676
|
+
loc,
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
kind: "varDecl",
|
|
680
|
+
localId: "a.0",
|
|
681
|
+
init: {
|
|
682
|
+
kind: "unionNarrow",
|
|
683
|
+
unionId: stdioT.unionId,
|
|
684
|
+
tag: aTag,
|
|
685
|
+
value: sd,
|
|
686
|
+
type: arrayOf(STRING),
|
|
687
|
+
loc,
|
|
688
|
+
},
|
|
689
|
+
loc,
|
|
690
|
+
},
|
|
691
|
+
];
|
|
692
|
+
const aRef = varRef("a.0", arrayOf(STRING), loc);
|
|
693
|
+
const lenGt = {
|
|
694
|
+
kind: "bin",
|
|
695
|
+
op: "<",
|
|
696
|
+
left: numLit(fd, loc),
|
|
697
|
+
right: { kind: "arrIntrinsic", method: "length", receiver: aRef, args: [], type: F64, loc },
|
|
698
|
+
type: BOOL,
|
|
699
|
+
loc,
|
|
700
|
+
};
|
|
701
|
+
body.push({
|
|
702
|
+
kind: "if",
|
|
703
|
+
cond: { kind: "unary", op: "!", operand: lenGt, type: BOOL, loc },
|
|
704
|
+
then: [{ kind: "return", value: numLit(0, loc), loc }],
|
|
705
|
+
else_: null,
|
|
706
|
+
loc,
|
|
707
|
+
});
|
|
708
|
+
body.push(...modeStmts({ kind: "arrayGet", arr: aRef, index: numLit(fd, loc), type: STRING, loc }));
|
|
709
|
+
lowerer.liftedFns.push({
|
|
710
|
+
name,
|
|
711
|
+
params: [{ localId: "o.0", name: "o", type: optsT }],
|
|
712
|
+
returnType: F64,
|
|
713
|
+
locals,
|
|
714
|
+
body,
|
|
715
|
+
loc,
|
|
716
|
+
});
|
|
717
|
+
return name;
|
|
718
|
+
}
|
|
227
719
|
/** `spawn(command, args?, options)` → one cp.spawn / cp.spawnOpts
|
|
228
720
|
* libCall. Computed options use native runtime normalization. Inline
|
|
229
721
|
* stdio accepts "ignore", "inherit", or "pipe" as the scalar,
|
|
@@ -436,11 +928,13 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
436
928
|
inMode = outMode = errMode = 3;
|
|
437
929
|
plain = false;
|
|
438
930
|
}
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
931
|
+
// Node joins [command, ...args] with single spaces for the shell form, and
|
|
932
|
+
// reports DEP0190 ("passing args to a child process with shell option
|
|
933
|
+
// true ... the arguments are not escaped, only concatenated") on stderr.
|
|
934
|
+
// A native build has no warning channel, so it refuses the form rather
|
|
935
|
+
// than silently skipping the warning Node prints.
|
|
936
|
+
if (shellEnabled && !staticallyEmptyArgs(argsNode)) {
|
|
937
|
+
lowerer.noLowering("spawn with shell enabled and separate arguments", argsNode ?? expr, "put the complete shell command in the first argument and pass [] (Node warns DEP0190 for unescaped shell arguments, and a native build cannot report that warning)");
|
|
444
938
|
}
|
|
445
939
|
const argv = lowerChildArgsArg(lowerer, argsNode, loc);
|
|
446
940
|
if (plain) {
|
|
@@ -621,18 +1115,14 @@ export function lowerExecFileCall(lowerer, expr, loc, shell = false) {
|
|
|
621
1115
|
}
|
|
622
1116
|
const first = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
|
|
623
1117
|
const callbackNode = expr.arguments.nodes[expr.arguments.nodes.length - 1];
|
|
624
|
-
// exec: /bin/sh -c <command>, execSync's
|
|
625
|
-
// command line back from argv[1] for
|
|
626
|
-
//
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
type: arrayOf(STRING),
|
|
633
|
-
loc,
|
|
634
|
-
}
|
|
635
|
-
: lowerChildArgsArg(lowerer, expr.arguments.nodes.length >= 3 ? expr.arguments.nodes[1] : undefined, loc);
|
|
1118
|
+
// exec already IS the shell form: /bin/sh -c <command>, execSync's
|
|
1119
|
+
// lowering (the runtime reads the command line back from argv[1] for
|
|
1120
|
+
// failure messages). execFile's `shell: true` below turns it into the
|
|
1121
|
+
// same shape, so the launch values are final only after the options.
|
|
1122
|
+
let execShell = false;
|
|
1123
|
+
// `cwd` (the SCR_CHILD_CP_OPTIONS build): the child's directory, the
|
|
1124
|
+
// one launch member the callback slice lacked.
|
|
1125
|
+
let cwd = null;
|
|
636
1126
|
const optionsNode = expr.arguments.nodes.length === (shell ? 3 : 4)
|
|
637
1127
|
? expr.arguments.nodes[shell ? 1 : 2]
|
|
638
1128
|
: undefined;
|
|
@@ -667,11 +1157,45 @@ export function lowerExecFileCall(lowerer, expr, loc, shell = false) {
|
|
|
667
1157
|
lowerer.noLowering(`${what} with a non-literal maxBuffer`, member.value, "pass a numeric literal or literal arithmetic (the native capture grows without enforcing this limit)");
|
|
668
1158
|
}
|
|
669
1159
|
}
|
|
1160
|
+
else if (member.name === "cwd") {
|
|
1161
|
+
cwd = lowerer.lowerExprExpecting(member.value, STRING);
|
|
1162
|
+
}
|
|
1163
|
+
else if (member.name === "shell" && !shell) {
|
|
1164
|
+
// Node's shell form: [file, ...args].join(" ") through /bin/sh -c.
|
|
1165
|
+
// exec itself already IS the shell form, so its member stays out.
|
|
1166
|
+
if (member.value.kind === ts.SyntaxKind.TrueKeyword)
|
|
1167
|
+
execShell = true;
|
|
1168
|
+
else if (member.value.kind !== ts.SyntaxKind.FalseKeyword) {
|
|
1169
|
+
lowerer.noLowering(`${what} with a non-literal shell option`, member.value, "shell must be a boolean literal");
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
670
1172
|
else {
|
|
671
|
-
lowerer.noLowering(`${what} option '${member.name}'`, property, "
|
|
1173
|
+
lowerer.noLowering(`${what} option '${member.name}'`, property, "encoding: 'utf8', a pure numeric maxBuffer, cwd, and shell: true are the supported options in the callback form");
|
|
672
1174
|
}
|
|
673
1175
|
}
|
|
674
1176
|
}
|
|
1177
|
+
// The launch values, final now that `shell: true` is known.
|
|
1178
|
+
const shellForm = shell || execShell;
|
|
1179
|
+
const cmd = shellForm ? { kind: "strLit", value: "/bin/sh", type: STRING, loc } : first;
|
|
1180
|
+
// Node joins [file, ...args] with single spaces for the shell form and
|
|
1181
|
+
// reports DEP0190 on stderr; a native build has no warning channel, so it
|
|
1182
|
+
// refuses separate arguments here rather than silently skipping it.
|
|
1183
|
+
if (execShell &&
|
|
1184
|
+
!staticallyEmptyArgs(expr.arguments.nodes.length >= 3 ? expr.arguments.nodes[1] : undefined)) {
|
|
1185
|
+
lowerer.noLowering(`${what} with shell enabled and separate arguments`, expr.arguments.nodes[1], "put the complete shell command in the first argument and pass [] (Node warns DEP0190 for unescaped shell arguments, and a native build cannot report that warning)");
|
|
1186
|
+
}
|
|
1187
|
+
let argv;
|
|
1188
|
+
if (shellForm) {
|
|
1189
|
+
argv = {
|
|
1190
|
+
kind: "arrayLit",
|
|
1191
|
+
elems: [{ kind: "strLit", value: "-c", type: STRING, loc }, first],
|
|
1192
|
+
type: arrayOf(STRING),
|
|
1193
|
+
loc,
|
|
1194
|
+
};
|
|
1195
|
+
}
|
|
1196
|
+
else {
|
|
1197
|
+
argv = lowerChildArgsArg(lowerer, expr.arguments.nodes.length >= 3 ? expr.arguments.nodes[1] : undefined, loc);
|
|
1198
|
+
}
|
|
675
1199
|
const callback = lowerer.lowerExpr(callbackNode);
|
|
676
1200
|
if (callback.type.kind !== "func" ||
|
|
677
1201
|
callback.type.rest === true ||
|
|
@@ -697,10 +1221,19 @@ export function lowerExecFileCall(lowerer, expr, loc, shell = false) {
|
|
|
697
1221
|
lowerer.unsupported("SC1090", callbackNode, `${what} callbacks whose ${i === 1 ? "stdout" : "stderr"} parameter is not 'string'`);
|
|
698
1222
|
}
|
|
699
1223
|
}
|
|
1224
|
+
if (cwd !== null) {
|
|
1225
|
+
return {
|
|
1226
|
+
kind: "libCall",
|
|
1227
|
+
fn: "cp.execFileCwd",
|
|
1228
|
+
args: [cmd, argv, callback, boolLit(shellForm, loc), cwd],
|
|
1229
|
+
type: CHILD_T,
|
|
1230
|
+
loc,
|
|
1231
|
+
};
|
|
1232
|
+
}
|
|
700
1233
|
return {
|
|
701
1234
|
kind: "libCall",
|
|
702
1235
|
fn: "cp.execFile",
|
|
703
|
-
args: [cmd, argv, callback, boolLit(
|
|
1236
|
+
args: [cmd, argv, callback, boolLit(shellForm, loc)],
|
|
704
1237
|
type: CHILD_T,
|
|
705
1238
|
loc,
|
|
706
1239
|
};
|