@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
|
@@ -220,9 +220,13 @@ function bytesCallbackHelper(lowerer, method, bytesT, resultT, fnRet, arity, has
|
|
|
220
220
|
type: F64,
|
|
221
221
|
loc,
|
|
222
222
|
});
|
|
223
|
+
// A mutable-buffers program's receiver length can shrink inside the
|
|
224
|
+
// callback (the buffer resizes or detaches), while Node's visit captures
|
|
225
|
+
// %TypedArrayLength once: the loop bound is the captured `n` there.
|
|
226
|
+
const bound = () => (lowerer.buffersMutable ? n() : length());
|
|
223
227
|
const inRange = () => backward
|
|
224
228
|
? { kind: "bin", op: ">=", left: i(), right: numLit(0, loc), type: BOOL, loc }
|
|
225
|
-
: { kind: "bin", op: "<", left: i(), right:
|
|
229
|
+
: { kind: "bin", op: "<", left: i(), right: bound(), type: BOOL, loc };
|
|
226
230
|
const advance = () => ({
|
|
227
231
|
kind: "assign",
|
|
228
232
|
localId: "i.0",
|
|
@@ -262,7 +266,26 @@ function bytesCallbackHelper(lowerer, method, bytesT, resultT, fnRet, arity, has
|
|
|
262
266
|
{ localId: "f.0", name: "f", type: fnT },
|
|
263
267
|
...(hasInit ? [{ localId: "z.0", name: "z", type: resultT }] : []),
|
|
264
268
|
];
|
|
265
|
-
|
|
269
|
+
// A mutable-buffers program's visit runs to the captured length even after
|
|
270
|
+
// the buffer shrinks under it, where Node's element Get answers undefined.
|
|
271
|
+
// The typed model has no undefined in an element slot, so an out-of-view
|
|
272
|
+
// index reads as NaN, which is what every numeric use of undefined converts
|
|
273
|
+
// to. The callback still runs, and the result array is independent of the
|
|
274
|
+
// source, so its element Set always stores.
|
|
275
|
+
const inView = () => lowerer.buffersMutable
|
|
276
|
+
? { kind: "bin", op: "<", left: i(), right: length(), type: BOOL, loc }
|
|
277
|
+
: boolLit(true, loc);
|
|
278
|
+
const visit = lowerer.buffersMutable
|
|
279
|
+
? [
|
|
280
|
+
{
|
|
281
|
+
kind: "if",
|
|
282
|
+
cond: inView(),
|
|
283
|
+
then: [{ kind: "assign", localId: "v.0", value: at(i()), loc }],
|
|
284
|
+
else_: [{ kind: "assign", localId: "v.0", value: numLit(NaN, loc), loc }],
|
|
285
|
+
loc,
|
|
286
|
+
},
|
|
287
|
+
]
|
|
288
|
+
: [{ kind: "assign", localId: "v.0", value: at(i()), loc }];
|
|
266
289
|
let seeded = false;
|
|
267
290
|
const prologue = [];
|
|
268
291
|
let epilogue;
|
|
@@ -278,13 +301,8 @@ function bytesCallbackHelper(lowerer, method, bytesT, resultT, fnRet, arity, has
|
|
|
278
301
|
init: { kind: "bytesNew", source: n(), type: bytesT, loc },
|
|
279
302
|
loc,
|
|
280
303
|
});
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
arr: acc(),
|
|
284
|
-
index: i(),
|
|
285
|
-
value: lowerer.coerceToExpected(callback(), F64),
|
|
286
|
-
loc,
|
|
287
|
-
});
|
|
304
|
+
const mapped = lowerer.coerceToExpected(callback(), F64);
|
|
305
|
+
visit.push({ kind: "bytesSet", arr: acc(), index: i(), value: mapped, loc });
|
|
288
306
|
if (bytesT.elem === "u8")
|
|
289
307
|
prologue.push(copyBrand(acc()));
|
|
290
308
|
epilogue = [ret(acc())];
|
|
@@ -490,15 +508,36 @@ export function lowerBytesNew(lowerer, expr, symbol) {
|
|
|
490
508
|
(ts.symbolName(symbol) === "ArrayBuffer" || ts.symbolName(symbol) === "SharedArrayBuffer") &&
|
|
491
509
|
lowerer.isStdlibSymbol(symbol)) {
|
|
492
510
|
const args = expr.arguments?.nodes ?? [];
|
|
493
|
-
|
|
511
|
+
// `new ArrayBuffer(len, { maxByteLength })` is a resizable, growable or
|
|
512
|
+
// detachable buffer (t262-dc C2). Only a JavaScript source may build
|
|
513
|
+
// one: the TypeScript surface keeps the fixed-length refusal.
|
|
514
|
+
const options = args.length === 2 &&
|
|
515
|
+
!args.some(ts.isSpreadElement) &&
|
|
516
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr))
|
|
517
|
+
? args[1]
|
|
518
|
+
: undefined;
|
|
519
|
+
if (args.length > (options ? 2 : 1) || args.some(ts.isSpreadElement)) {
|
|
494
520
|
lowerer.noLowering("resizable ArrayBuffer construction", expr, "fixed-length ArrayBuffers accept a byte length; resizable storage is not supported yet");
|
|
495
521
|
}
|
|
496
522
|
const length = args[0]
|
|
497
523
|
? lowerer.coerceInto(args[0], lowerer.lowerExpr(args[0]), DYN)
|
|
498
524
|
: dynUndefinedExpr(locOf(expr));
|
|
525
|
+
const shared = ts.symbolName(symbol) === "SharedArrayBuffer";
|
|
526
|
+
if (options) {
|
|
527
|
+
// A resizable or growable construction is the mutableBuffers fact by
|
|
528
|
+
// itself: the buffer it builds can change length later.
|
|
529
|
+
lowerer.buffersMutable = true;
|
|
530
|
+
return {
|
|
531
|
+
kind: "libCall",
|
|
532
|
+
fn: shared ? "sharedArrayBuffer.newGrowable" : "arrayBuffer.newResizable",
|
|
533
|
+
args: [length, lowerer.coerceInto(options, lowerer.lowerExpr(options), DYN)],
|
|
534
|
+
type: DYN,
|
|
535
|
+
loc: locOf(expr),
|
|
536
|
+
};
|
|
537
|
+
}
|
|
499
538
|
return {
|
|
500
539
|
kind: "libCall",
|
|
501
|
-
fn:
|
|
540
|
+
fn: shared ? "sharedArrayBuffer.new" : "arrayBuffer.new",
|
|
502
541
|
args: [length],
|
|
503
542
|
type: DYN,
|
|
504
543
|
loc: locOf(expr),
|
|
@@ -970,6 +1009,34 @@ export function lowerBytesMethodCall(lowerer, call, access) {
|
|
|
970
1009
|
return null;
|
|
971
1010
|
const loc = locOf(call);
|
|
972
1011
|
const nArgs = call.arguments.nodes.length;
|
|
1012
|
+
// In JavaScript, copy, toString, slice and subarray called with an offset
|
|
1013
|
+
// that is not statically a number (`b.copy(c, '0')`, `buf.slice('2')`), or
|
|
1014
|
+
// toString with an encoding that is not statically a string, run as the
|
|
1015
|
+
// checked-dynamic Buffer method, which converts them as Node does; the
|
|
1016
|
+
// result returns to the method's static type.
|
|
1017
|
+
const coerced = own(JS_COERCED_OFFSET_SLOTS, name);
|
|
1018
|
+
if (coerced !== undefined &&
|
|
1019
|
+
receiverIr.elem === "u8" &&
|
|
1020
|
+
isJsSourceFile(ts.getSourceFileOfNode(call)) &&
|
|
1021
|
+
!call.arguments.nodes.some(ts.isSpreadElement) &&
|
|
1022
|
+
call.arguments.nodes.some((a, i) => (coerced.slots.includes(i) && !kindOrUndefinedArgument(lowerer, a, "f64")) ||
|
|
1023
|
+
(coerced.encoding === i && !kindOrUndefinedArgument(lowerer, a, "string")))) {
|
|
1024
|
+
const receiver = lowerer.lowerExprExpecting(access.expression, receiverIr);
|
|
1025
|
+
return {
|
|
1026
|
+
kind: "dynCheck",
|
|
1027
|
+
value: {
|
|
1028
|
+
kind: "dynInvoke",
|
|
1029
|
+
recv: { kind: "dynFrom", value: receiver, type: DYN, loc, liveRef: true },
|
|
1030
|
+
method: name,
|
|
1031
|
+
calleeName: ts.getTextOfNode(access),
|
|
1032
|
+
args: call.arguments.nodes.map((a) => lowerer.lowerExprExpecting(a, DYN)),
|
|
1033
|
+
type: DYN,
|
|
1034
|
+
loc,
|
|
1035
|
+
},
|
|
1036
|
+
type: coerced.result,
|
|
1037
|
+
loc,
|
|
1038
|
+
};
|
|
1039
|
+
}
|
|
973
1040
|
// Encoded stream callbacks can receive strings even when JavaScript's
|
|
974
1041
|
// contextual inference still describes their parameter as a Buffer.
|
|
975
1042
|
if (name === "toString" && nArgs <= 1 && isJsSourceFile(ts.getSourceFileOfNode(call))) {
|
|
@@ -1444,6 +1511,134 @@ export function bufEncoding(lowerer, what, encNode) {
|
|
|
1444
1511
|
}
|
|
1445
1512
|
return v;
|
|
1446
1513
|
}
|
|
1514
|
+
/** A literal encoding argument's canonical name: a string literal node — a
|
|
1515
|
+
* JavaScript argument outside the parameter's type widens to `string` — or
|
|
1516
|
+
* a string literal type, in any letter case Node accepts. Undefined for a
|
|
1517
|
+
* run-time value and for a spelling Node does not know. */
|
|
1518
|
+
function literalBufEncoding(lowerer, encNode) {
|
|
1519
|
+
if (ts.isStringLiteralLike(encNode))
|
|
1520
|
+
return knownBufEncoding(encNode.text);
|
|
1521
|
+
const t = lowerer.typeOf(encNode);
|
|
1522
|
+
return t.isStringLiteralType() ? knownBufEncoding(t.value) : undefined;
|
|
1523
|
+
}
|
|
1524
|
+
/** Whether an encoding argument's checker type is a string or a unit type
|
|
1525
|
+
* Node reads as "no encoding". Node's methods disagree on other values
|
|
1526
|
+
* (fill throws ERR_INVALID_ARG_TYPE; getEncodingOps coerces with `+ ''`),
|
|
1527
|
+
* so those keep the refusal. */
|
|
1528
|
+
function stringOrUnitEncodingType(lowerer, encNode) {
|
|
1529
|
+
const t = lowerer.typeOf(encNode);
|
|
1530
|
+
const arms = t.flags & ts.TypeFlags.Union ? constituentTypes(t) : [t];
|
|
1531
|
+
return arms.every((arm) => (arm.flags &
|
|
1532
|
+
(ts.TypeFlags.StringLike |
|
|
1533
|
+
ts.TypeFlags.Undefined |
|
|
1534
|
+
ts.TypeFlags.Null |
|
|
1535
|
+
ts.TypeFlags.Void)) !==
|
|
1536
|
+
0);
|
|
1537
|
+
}
|
|
1538
|
+
const BUF_ENCODING_NORMALIZERS = {
|
|
1539
|
+
strict: "buffer.normalizeEncoding",
|
|
1540
|
+
emptyUtf8: "buffer.normalizeEncodingEmptyUtf8",
|
|
1541
|
+
utf8Fallback: "buffer.normalizeEncodingOrUtf8",
|
|
1542
|
+
};
|
|
1543
|
+
/** The encoding argument of a Buffer surface: a canonical literal, or the
|
|
1544
|
+
* run-time value normalized as `mode` names. Node throws inside the method
|
|
1545
|
+
* for the names `mode` rejects; the normalization runs where Node's does,
|
|
1546
|
+
* after the other arguments evaluate. */
|
|
1547
|
+
function bufEncodingArgument(lowerer, what, encNode, mode, loc) {
|
|
1548
|
+
const literal = literalBufEncoding(lowerer, encNode);
|
|
1549
|
+
if (literal !== undefined)
|
|
1550
|
+
return { literal };
|
|
1551
|
+
const undefinedArg = lowerStaticallyUndefinedArgument(lowerer, encNode);
|
|
1552
|
+
if (undefinedArg)
|
|
1553
|
+
return { literal: "utf8", effects: undefinedArg };
|
|
1554
|
+
if (!stringOrUnitEncodingType(lowerer, encNode)) {
|
|
1555
|
+
lowerer.noLowering(`${what} with this encoding`, encNode, 'a literal "utf8", "hex", "base64", "base64url", "latin1", "binary", "ascii", "utf16le", or "ucs2" spelling, or a string value, is the lowered encoding surface');
|
|
1556
|
+
}
|
|
1557
|
+
const raw = lowerOptionalArgument(lowerer, encNode, STRING, {
|
|
1558
|
+
kind: "strLit",
|
|
1559
|
+
value: "utf8",
|
|
1560
|
+
type: STRING,
|
|
1561
|
+
loc,
|
|
1562
|
+
});
|
|
1563
|
+
return { raw, mode };
|
|
1564
|
+
}
|
|
1565
|
+
/** The run-time normalization Node's method applies to an encoding. */
|
|
1566
|
+
function normalizeBufEncoding(enc, loc) {
|
|
1567
|
+
return {
|
|
1568
|
+
kind: "libCall",
|
|
1569
|
+
fn: BUF_ENCODING_NORMALIZERS[enc.mode],
|
|
1570
|
+
args: [enc.raw],
|
|
1571
|
+
type: STRING,
|
|
1572
|
+
loc,
|
|
1573
|
+
};
|
|
1574
|
+
}
|
|
1575
|
+
/** Bind the arguments a Buffer surface evaluates before its encoding (`prior`,
|
|
1576
|
+
* in source order) and then the normalized encoding to hidden locals, so the
|
|
1577
|
+
* normalization (which can throw) runs once, after every argument, and the
|
|
1578
|
+
* name can be read more than once. `passRaw` hands the value over unnormalized
|
|
1579
|
+
* instead, for a surface whose runtime entry reads the name after its own
|
|
1580
|
+
* checks. A literal encoding keeps the call shape unchanged and evaluates
|
|
1581
|
+
* `prior` in place, except that an explicitly undefined argument with
|
|
1582
|
+
* effects binds `prior` and then runs those effects, as JavaScript does. */
|
|
1583
|
+
function withBufEncoding(lowerer, enc, loc, prior, build, passRaw = false) {
|
|
1584
|
+
if ("literal" in enc) {
|
|
1585
|
+
const encoding = { kind: "strLit", value: enc.literal, type: STRING, loc };
|
|
1586
|
+
if (!enc.effects || isSafeToDiscard(enc.effects))
|
|
1587
|
+
return build(prior, encoding);
|
|
1588
|
+
// An explicitly undefined argument that still has effects runs where
|
|
1589
|
+
// JavaScript evaluates it — after the receiver and the preceding
|
|
1590
|
+
// arguments, before the call — so bind those first.
|
|
1591
|
+
const stmts = [];
|
|
1592
|
+
const args = prior.map((expr) => {
|
|
1593
|
+
const local = lowerer.declareHiddenLocal("%bufferArgument", expr.type);
|
|
1594
|
+
stmts.push({ kind: "varDecl", localId: local.id, init: expr, loc });
|
|
1595
|
+
return varRef(local.id, expr.type, loc);
|
|
1596
|
+
});
|
|
1597
|
+
stmts.push({ kind: "exprStmt", expr: enc.effects, loc });
|
|
1598
|
+
const result = build(args, encoding);
|
|
1599
|
+
return { kind: "seqExpr", stmts, result, type: result.type, loc };
|
|
1600
|
+
}
|
|
1601
|
+
const stmts = [];
|
|
1602
|
+
const args = prior.map((expr) => {
|
|
1603
|
+
const local = lowerer.declareHiddenLocal("%bufferArgument", expr.type);
|
|
1604
|
+
stmts.push({ kind: "varDecl", localId: local.id, init: expr, loc });
|
|
1605
|
+
return varRef(local.id, expr.type, loc);
|
|
1606
|
+
});
|
|
1607
|
+
let encoding = enc.raw;
|
|
1608
|
+
if (!passRaw) {
|
|
1609
|
+
const nameLocal = lowerer.declareHiddenLocal("%bufferEncoding", STRING);
|
|
1610
|
+
stmts.push({
|
|
1611
|
+
kind: "varDecl",
|
|
1612
|
+
localId: nameLocal.id,
|
|
1613
|
+
init: normalizeBufEncoding(enc, loc),
|
|
1614
|
+
loc,
|
|
1615
|
+
});
|
|
1616
|
+
encoding = varRef(nameLocal.id, STRING, loc);
|
|
1617
|
+
}
|
|
1618
|
+
const result = build(args, encoding);
|
|
1619
|
+
return { kind: "seqExpr", stmts, result, type: result.type, loc };
|
|
1620
|
+
}
|
|
1621
|
+
/** The search's unit: Buffer compares whole 2-byte units under utf16le and
|
|
1622
|
+
* searches byte by byte under every other encoding. */
|
|
1623
|
+
function bufEncodingAlign(enc, encoding, loc) {
|
|
1624
|
+
if ("literal" in enc)
|
|
1625
|
+
return numLit(enc.literal === "utf16le" ? 2 : 1, loc);
|
|
1626
|
+
return {
|
|
1627
|
+
kind: "ternary",
|
|
1628
|
+
cond: {
|
|
1629
|
+
kind: "strEq",
|
|
1630
|
+
negated: false,
|
|
1631
|
+
left: encoding,
|
|
1632
|
+
right: { kind: "strLit", value: "utf16le", type: STRING, loc },
|
|
1633
|
+
type: BOOL,
|
|
1634
|
+
loc,
|
|
1635
|
+
},
|
|
1636
|
+
then: numLit(2, loc),
|
|
1637
|
+
else_: numLit(1, loc),
|
|
1638
|
+
type: F64,
|
|
1639
|
+
loc,
|
|
1640
|
+
};
|
|
1641
|
+
}
|
|
1447
1642
|
const BUF_BIGINT_METHODS = {
|
|
1448
1643
|
readBigInt64BE: { sign: true, le: false },
|
|
1449
1644
|
readBigInt64LE: { sign: true, le: true },
|
|
@@ -1458,6 +1653,20 @@ const BUF_BIGINT_METHODS = {
|
|
|
1458
1653
|
writeBigUint64BE: { sign: false, le: false },
|
|
1459
1654
|
writeBigUint64LE: { sign: false, le: true },
|
|
1460
1655
|
};
|
|
1656
|
+
/** The Buffer methods whose arguments JavaScript may pass as other values
|
|
1657
|
+
* (Node converts them): the offset positions, the encoding position, and the
|
|
1658
|
+
* static type of the result. */
|
|
1659
|
+
const JS_COERCED_OFFSET_SLOTS = {
|
|
1660
|
+
copy: { slots: [1, 2, 3], result: F64 },
|
|
1661
|
+
toString: { slots: [1, 2], encoding: 0, result: STRING },
|
|
1662
|
+
slice: { slots: [0, 1], result: BYTES_U8 },
|
|
1663
|
+
subarray: { slots: [0, 1], result: BYTES_U8 },
|
|
1664
|
+
};
|
|
1665
|
+
/** Whether an argument is statically of `kind` or undefined. */
|
|
1666
|
+
function kindOrUndefinedArgument(lowerer, arg, kind) {
|
|
1667
|
+
const t = lowerer.mapTypeOf(lowerer.typeOf(arg));
|
|
1668
|
+
return t?.kind === kind || (t !== undefined && t !== null && isUnitType(t));
|
|
1669
|
+
}
|
|
1461
1670
|
/** Whether every argument of a numeric read/write is statically a number. */
|
|
1462
1671
|
function numericArguments(lowerer, call) {
|
|
1463
1672
|
return call.arguments.nodes.every((a) => lowerer.mapTypeOf(lowerer.typeOf(a))?.kind === "f64");
|
|
@@ -1509,7 +1718,15 @@ function lowerBufferInstanceMethod(lowerer, call, access, name, loc) {
|
|
|
1509
1718
|
const nArgs = args.length;
|
|
1510
1719
|
if (args.some(ts.isSpreadElement))
|
|
1511
1720
|
return null;
|
|
1512
|
-
|
|
1721
|
+
// A trailing argument Node reads as the encoding: a string, or a string
|
|
1722
|
+
// that a caller may leave undefined (`enc?: BufferEncoding`). Node treats
|
|
1723
|
+
// an undefined encoding as utf8 and an undefined position as the default,
|
|
1724
|
+
// so the two readings agree.
|
|
1725
|
+
const isEncodingArg = (i) => {
|
|
1726
|
+
const t = lowerer.typeOf(args[i]);
|
|
1727
|
+
const arms = t.flags & ts.TypeFlags.Union ? constituentTypes(t) : [t];
|
|
1728
|
+
return arms.every((arm) => (arm.flags & (ts.TypeFlags.StringLike | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0);
|
|
1729
|
+
};
|
|
1513
1730
|
const u8Arg = (i) => {
|
|
1514
1731
|
const v = lowerer.lowerExpr(args[i]);
|
|
1515
1732
|
if (!(v.type.kind === "bytes" && v.type.elem === "u8")) {
|
|
@@ -1584,58 +1801,109 @@ function lowerBufferInstanceMethod(lowerer, call, access, name, loc) {
|
|
|
1584
1801
|
lowerer.noLowering(`.${name} with ${nArgs} arguments`, call);
|
|
1585
1802
|
// The overloads: (v), (v, byteOffset), (v, encoding), (v, byteOffset,
|
|
1586
1803
|
// encoding) — a trailing string-typed arg is the encoding.
|
|
1587
|
-
let
|
|
1804
|
+
let encNode;
|
|
1588
1805
|
let offNode;
|
|
1589
1806
|
if (nArgs === 3) {
|
|
1590
1807
|
offNode = args[1];
|
|
1591
|
-
|
|
1808
|
+
encNode = args[2];
|
|
1592
1809
|
}
|
|
1593
1810
|
else if (nArgs === 2) {
|
|
1594
|
-
if (
|
|
1595
|
-
|
|
1811
|
+
if (isEncodingArg(1))
|
|
1812
|
+
encNode = args[1];
|
|
1596
1813
|
else
|
|
1597
1814
|
offNode = args[1];
|
|
1598
1815
|
}
|
|
1599
1816
|
const resultT = name === "includes" ? BOOL : F64;
|
|
1600
1817
|
const vT = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
|
|
1601
1818
|
const receiver = lowerer.lowerExprExpecting(access.expression, BYTES_U8);
|
|
1819
|
+
const off = offNode ? lowerer.lowerExprExpecting(offNode, F64) : undefined;
|
|
1602
1820
|
if (vT?.kind === "f64") {
|
|
1603
|
-
// A number needle wraps & 0xFF at runtime (Buffer semantics
|
|
1604
|
-
// encoding
|
|
1821
|
+
// A number needle wraps & 0xFF at runtime (Buffer semantics). Node
|
|
1822
|
+
// reads the encoding only for string and Buffer needles, but the
|
|
1823
|
+
// argument itself still evaluates.
|
|
1605
1824
|
const v = lowerer.lowerExprExpecting(args[0], F64);
|
|
1606
|
-
const numArgs = [v, ...(
|
|
1825
|
+
const numArgs = [v, ...(off ? [off] : [])];
|
|
1607
1826
|
const method = name === "indexOf"
|
|
1608
1827
|
? "indexOfNum"
|
|
1609
1828
|
: name === "lastIndexOf"
|
|
1610
1829
|
? "lastIndexOfNum"
|
|
1611
1830
|
: "includesNum";
|
|
1612
|
-
|
|
1831
|
+
const result = {
|
|
1832
|
+
kind: "bytesIntrinsic",
|
|
1833
|
+
method,
|
|
1834
|
+
receiver,
|
|
1835
|
+
args: numArgs,
|
|
1836
|
+
type: resultT,
|
|
1837
|
+
loc,
|
|
1838
|
+
};
|
|
1839
|
+
if (encNode === undefined)
|
|
1840
|
+
return result;
|
|
1841
|
+
// The encoding does not name anything for a number needle; only its
|
|
1842
|
+
// expression runs, after the other arguments.
|
|
1843
|
+
const extra = lowerer.lowerExpr(encNode);
|
|
1844
|
+
if (isSafeToDiscard(extra))
|
|
1845
|
+
return result;
|
|
1846
|
+
const stmts = [];
|
|
1847
|
+
const bound = [receiver, ...numArgs].map((expr) => {
|
|
1848
|
+
const local = lowerer.declareHiddenLocal("%bufferArgument", expr.type);
|
|
1849
|
+
stmts.push({ kind: "varDecl", localId: local.id, init: expr, loc });
|
|
1850
|
+
return varRef(local.id, expr.type, loc);
|
|
1851
|
+
});
|
|
1852
|
+
stmts.push({ kind: "exprStmt", expr: extra, loc });
|
|
1853
|
+
return {
|
|
1854
|
+
kind: "seqExpr",
|
|
1855
|
+
stmts,
|
|
1856
|
+
result: {
|
|
1857
|
+
kind: "bytesIntrinsic",
|
|
1858
|
+
method,
|
|
1859
|
+
receiver: bound[0],
|
|
1860
|
+
args: bound.slice(1),
|
|
1861
|
+
type: resultT,
|
|
1862
|
+
loc,
|
|
1863
|
+
},
|
|
1864
|
+
type: resultT,
|
|
1865
|
+
loc,
|
|
1866
|
+
};
|
|
1613
1867
|
}
|
|
1614
|
-
let needle;
|
|
1615
|
-
let align = 1;
|
|
1616
1868
|
if (vT?.kind === "string") {
|
|
1869
|
+
// Buffer compares the encoded needle. A run-time encoding is
|
|
1870
|
+
// normalized after every argument, so an unknown name throws Node's
|
|
1871
|
+
// ERR_UNKNOWN_ENCODING before the search.
|
|
1872
|
+
const enc = encNode
|
|
1873
|
+
? bufEncodingArgument(lowerer, `.${name}`, encNode, "strict", loc)
|
|
1874
|
+
: { literal: "utf8" };
|
|
1617
1875
|
const s = lowerer.lowerExprExpecting(args[0], STRING);
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1876
|
+
return withBufEncoding(lowerer, enc, loc, [receiver, s, ...(off ? [off] : [])], ([recv, sRef, offRef], encoding) => ({
|
|
1877
|
+
kind: "bytesIntrinsic",
|
|
1878
|
+
method: name,
|
|
1879
|
+
receiver: recv,
|
|
1880
|
+
args: [
|
|
1881
|
+
{ kind: "libCall", fn: "buffer.fromStr", args: [sRef, encoding], type: BYTES_U8, loc },
|
|
1882
|
+
bufEncodingAlign(enc, encoding, loc),
|
|
1883
|
+
...(offRef ? [offRef] : []),
|
|
1884
|
+
],
|
|
1885
|
+
type: resultT,
|
|
1886
|
+
loc,
|
|
1887
|
+
}));
|
|
1888
|
+
}
|
|
1889
|
+
if (vT?.kind === "bytes" && vT.elem === "u8") {
|
|
1890
|
+
// A Buffer needle searches byte by byte; only utf16le searches whole
|
|
1891
|
+
// 2-byte units. Node reads an unknown name as utf8 here, without
|
|
1892
|
+
// throwing.
|
|
1893
|
+
const enc = encNode
|
|
1894
|
+
? bufEncodingArgument(lowerer, `.${name}`, encNode, "utf8Fallback", loc)
|
|
1895
|
+
: { literal: "utf8" };
|
|
1896
|
+
const needle = lowerer.lowerExpr(args[0]);
|
|
1897
|
+
return withBufEncoding(lowerer, enc, loc, [receiver, needle, ...(off ? [off] : [])], ([recv, needleRef, offRef], encoding) => ({
|
|
1898
|
+
kind: "bytesIntrinsic",
|
|
1899
|
+
method: name,
|
|
1900
|
+
receiver: recv,
|
|
1901
|
+
args: [needleRef, bufEncodingAlign(enc, encoding, loc), ...(offRef ? [offRef] : [])],
|
|
1902
|
+
type: resultT,
|
|
1903
|
+
loc,
|
|
1904
|
+
}));
|
|
1631
1905
|
}
|
|
1632
|
-
|
|
1633
|
-
const searchArgs = [
|
|
1634
|
-
needle,
|
|
1635
|
-
alignLit,
|
|
1636
|
-
...(offNode ? [lowerer.lowerExprExpecting(offNode, F64)] : []),
|
|
1637
|
-
];
|
|
1638
|
-
return { kind: "bytesIntrinsic", method: name, receiver, args: searchArgs, type: resultT, loc };
|
|
1906
|
+
lowerer.noLowering(`.${name} of '${lowerer.checker.typeToString(lowerer.typeOf(args[0]))}' values`, args[0], "string, number, and Buffer/Uint8Array needles search (narrow unions first)");
|
|
1639
1907
|
}
|
|
1640
1908
|
if (name === "fill") {
|
|
1641
1909
|
if (nArgs < 1 || nArgs > 4)
|
|
@@ -1643,7 +1911,7 @@ function lowerBufferInstanceMethod(lowerer, call, access, name, loc) {
|
|
|
1643
1911
|
// A trailing string-typed arg past the value is the encoding.
|
|
1644
1912
|
let encNode;
|
|
1645
1913
|
let idxNodes = call.arguments.nodes.slice(1);
|
|
1646
|
-
if (idxNodes.length > 0 &&
|
|
1914
|
+
if (idxNodes.length > 0 && isEncodingArg(nArgs - 1)) {
|
|
1647
1915
|
encNode = idxNodes[idxNodes.length - 1];
|
|
1648
1916
|
idxNodes = idxNodes.slice(0, -1);
|
|
1649
1917
|
}
|
|
@@ -1656,17 +1924,20 @@ function lowerBufferInstanceMethod(lowerer, call, access, name, loc) {
|
|
|
1656
1924
|
const vT = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
|
|
1657
1925
|
const receiver = lowerer.lowerExprExpecting(access.expression, BYTES_U8);
|
|
1658
1926
|
if (vT?.kind === "string") {
|
|
1659
|
-
|
|
1927
|
+
// fill's normalization reads an empty encoding as utf8; an unknown
|
|
1928
|
+
// one throws before the range validates, as in Node.
|
|
1929
|
+
const enc = encNode
|
|
1930
|
+
? bufEncodingArgument(lowerer, ".fill", encNode, "emptyUtf8", loc)
|
|
1931
|
+
: { literal: "utf8" };
|
|
1660
1932
|
const s = lowerer.lowerExprExpecting(args[0], STRING);
|
|
1661
|
-
|
|
1662
|
-
return {
|
|
1933
|
+
return withBufEncoding(lowerer, enc, loc, [receiver, s, ...idx], ([recv, sRef, ...idxRefs], encoding) => ({
|
|
1663
1934
|
kind: "bytesIntrinsic",
|
|
1664
1935
|
method: "fillStr",
|
|
1665
|
-
receiver,
|
|
1666
|
-
args: [
|
|
1936
|
+
receiver: recv,
|
|
1937
|
+
args: [sRef, encoding, ...idxRefs],
|
|
1667
1938
|
type: BYTES_U8,
|
|
1668
1939
|
loc,
|
|
1669
|
-
};
|
|
1940
|
+
}));
|
|
1670
1941
|
}
|
|
1671
1942
|
if (encNode)
|
|
1672
1943
|
lowerer.noLowering(".fill with an encoding on a non-string value", encNode);
|
|
@@ -1694,6 +1965,28 @@ function lowerBufferInstanceMethod(lowerer, call, access, name, loc) {
|
|
|
1694
1965
|
if (name === "copy") {
|
|
1695
1966
|
if (nArgs < 1 || nArgs > 4)
|
|
1696
1967
|
lowerer.noLowering(`.copy with ${nArgs} arguments`, call);
|
|
1968
|
+
// Node's copyImpl accepts any ArrayBuffer view as the target and
|
|
1969
|
+
// measures every offset in bytes over it, so a target of another
|
|
1970
|
+
// element type runs as the checked-dynamic method, which re-views it
|
|
1971
|
+
// over its bytes before the copy.
|
|
1972
|
+
const targetIr = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
|
|
1973
|
+
if (targetIr?.kind === "bytes" && targetIr.elem !== "u8") {
|
|
1974
|
+
const receiver = lowerer.lowerExprExpecting(access.expression, BYTES_U8);
|
|
1975
|
+
return {
|
|
1976
|
+
kind: "dynCheck",
|
|
1977
|
+
value: {
|
|
1978
|
+
kind: "dynInvoke",
|
|
1979
|
+
recv: { kind: "dynFrom", value: receiver, type: DYN, loc, liveRef: true },
|
|
1980
|
+
method: name,
|
|
1981
|
+
calleeName: ts.getTextOfNode(access),
|
|
1982
|
+
args: call.arguments.nodes.map((a) => lowerer.lowerExprExpecting(a, DYN)),
|
|
1983
|
+
type: DYN,
|
|
1984
|
+
loc,
|
|
1985
|
+
},
|
|
1986
|
+
type: F64,
|
|
1987
|
+
loc,
|
|
1988
|
+
};
|
|
1989
|
+
}
|
|
1697
1990
|
const target = u8Arg(0);
|
|
1698
1991
|
const idx = call.arguments.nodes.slice(1).map((a) => lowerer.lowerExprExpecting(a, F64));
|
|
1699
1992
|
const receiver = lowerer.lowerExprExpecting(access.expression, BYTES_U8);
|
|
@@ -1719,33 +2012,41 @@ function lowerBufferInstanceMethod(lowerer, call, access, name, loc) {
|
|
|
1719
2012
|
// (str, offset, length), (str, offset, length, enc).
|
|
1720
2013
|
let encNode;
|
|
1721
2014
|
let idxNodes = call.arguments.nodes.slice(1);
|
|
1722
|
-
if (idxNodes.length > 0 &&
|
|
2015
|
+
if (idxNodes.length > 0 && isEncodingArg(nArgs - 1)) {
|
|
1723
2016
|
encNode = idxNodes[idxNodes.length - 1];
|
|
1724
2017
|
idxNodes = idxNodes.slice(0, -1);
|
|
1725
2018
|
}
|
|
1726
2019
|
if (idxNodes.length > 2)
|
|
1727
2020
|
lowerer.noLowering(`.write with ${nArgs} arguments`, call);
|
|
1728
|
-
|
|
2021
|
+
// write reads an empty encoding as utf8 and throws on any other name
|
|
2022
|
+
// Node does not know, after the offset and length validate.
|
|
2023
|
+
const enc = encNode
|
|
2024
|
+
? bufEncodingArgument(lowerer, "Buffer.write", encNode, "emptyUtf8", loc)
|
|
2025
|
+
: { literal: "utf8" };
|
|
1729
2026
|
const s = lowerer.lowerExprExpecting(args[0], STRING);
|
|
1730
|
-
const enc = { kind: "strLit", value: encName, type: STRING, loc };
|
|
1731
2027
|
const offset = idxNodes[0]
|
|
1732
2028
|
? lowerer.lowerExprExpecting(idxNodes[0], F64)
|
|
1733
2029
|
: { kind: "numLit", value: 0, type: F64, loc };
|
|
1734
|
-
const writeArgs = [
|
|
1735
|
-
s,
|
|
1736
|
-
enc,
|
|
1737
|
-
offset,
|
|
1738
|
-
...(idxNodes[1] ? [lowerer.lowerExprExpecting(idxNodes[1], F64)] : []),
|
|
1739
|
-
];
|
|
1740
2030
|
const receiver = lowerer.lowerExprExpecting(access.expression, BYTES_U8);
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
2031
|
+
const length = idxNodes[1] ? lowerer.lowerExprExpecting(idxNodes[1], F64) : undefined;
|
|
2032
|
+
// A run-time name stays raw: Node reports a bad offset or length before
|
|
2033
|
+
// it looks the name up, so the runtime entry normalizes it afterwards.
|
|
2034
|
+
return withBufEncoding(lowerer, enc, loc, [receiver, s, offset, ...(length ? [length] : [])], ([recv, sRef, offsetRef, lengthRef], encoding) => "literal" in enc
|
|
2035
|
+
? {
|
|
2036
|
+
kind: "bytesIntrinsic",
|
|
2037
|
+
method: "writeStr",
|
|
2038
|
+
receiver: recv,
|
|
2039
|
+
args: [sRef, encoding, offsetRef, ...(lengthRef ? [lengthRef] : [])],
|
|
2040
|
+
type: F64,
|
|
2041
|
+
loc,
|
|
2042
|
+
}
|
|
2043
|
+
: {
|
|
2044
|
+
kind: "libCall",
|
|
2045
|
+
fn: length ? "buffer.writeStrDynLen" : "buffer.writeStrDyn",
|
|
2046
|
+
args: [recv, sRef, encoding, offsetRef, ...(lengthRef ? [lengthRef] : [])],
|
|
2047
|
+
type: F64,
|
|
2048
|
+
loc,
|
|
2049
|
+
}, !("literal" in enc));
|
|
1749
2050
|
}
|
|
1750
2051
|
return null;
|
|
1751
2052
|
}
|
|
@@ -2228,14 +2529,54 @@ function lowerBufferStaticValue(lowerer, call, access) {
|
|
|
2228
2529
|
// the fresh buffer is the receiver of a whole-range fill.
|
|
2229
2530
|
const fillT = lowerer.mapTypeOf(lowerer.typeOf(args[1]));
|
|
2230
2531
|
if (fillT?.kind === "string") {
|
|
2231
|
-
const
|
|
2532
|
+
const enc = args[2]
|
|
2533
|
+
? bufEncodingArgument(lowerer, "Buffer.alloc", args[2], "emptyUtf8", loc)
|
|
2534
|
+
: { literal: "utf8" };
|
|
2232
2535
|
const s = lowerer.lowerExprExpecting(args[1], STRING);
|
|
2233
|
-
|
|
2536
|
+
if ("literal" in enc) {
|
|
2537
|
+
return withBufEncoding(lowerer, enc, loc, [size, s], ([sizeExpr, fillExpr], encoding) => ({
|
|
2538
|
+
kind: "bytesIntrinsic",
|
|
2539
|
+
method: "fillStr",
|
|
2540
|
+
receiver: { kind: "libCall", fn, args: [sizeExpr], type: BYTES_U8, loc },
|
|
2541
|
+
args: [fillExpr, encoding],
|
|
2542
|
+
type: BYTES_U8,
|
|
2543
|
+
loc,
|
|
2544
|
+
}));
|
|
2545
|
+
}
|
|
2546
|
+
// Node allocates before _fill resolves the name, and runs no fill at
|
|
2547
|
+
// all when the size is zero, so the normalization and its throw are
|
|
2548
|
+
// inside the size > 0 branch.
|
|
2549
|
+
const sizeLocal = lowerer.declareHiddenLocal("%allocSize", F64);
|
|
2550
|
+
const fillLocal = lowerer.declareHiddenLocal("%allocFill", STRING);
|
|
2551
|
+
const encLocal = lowerer.declareHiddenLocal("%bufferEncoding", STRING);
|
|
2552
|
+
const sizeRef = varRef(sizeLocal.id, F64, loc);
|
|
2553
|
+
const alloc = () => ({ kind: "libCall", fn, args: [sizeRef], type: BYTES_U8, loc });
|
|
2554
|
+
const result = {
|
|
2555
|
+
kind: "ternary",
|
|
2556
|
+
cond: { kind: "bin", op: ">", left: sizeRef, right: numLit(0, loc), type: BOOL, loc },
|
|
2557
|
+
then: {
|
|
2558
|
+
kind: "bytesIntrinsic",
|
|
2559
|
+
method: "fillStr",
|
|
2560
|
+
receiver: alloc(),
|
|
2561
|
+
args: [
|
|
2562
|
+
varRef(fillLocal.id, STRING, loc),
|
|
2563
|
+
normalizeBufEncoding({ raw: varRef(encLocal.id, STRING, loc), mode: enc.mode }, loc),
|
|
2564
|
+
],
|
|
2565
|
+
type: BYTES_U8,
|
|
2566
|
+
loc,
|
|
2567
|
+
},
|
|
2568
|
+
else_: alloc(),
|
|
2569
|
+
type: BYTES_U8,
|
|
2570
|
+
loc,
|
|
2571
|
+
};
|
|
2234
2572
|
return {
|
|
2235
|
-
kind: "
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2573
|
+
kind: "seqExpr",
|
|
2574
|
+
stmts: [
|
|
2575
|
+
{ kind: "varDecl", localId: sizeLocal.id, init: size, loc },
|
|
2576
|
+
{ kind: "varDecl", localId: fillLocal.id, init: s, loc },
|
|
2577
|
+
{ kind: "varDecl", localId: encLocal.id, init: enc.raw, loc },
|
|
2578
|
+
],
|
|
2579
|
+
result,
|
|
2239
2580
|
type: BYTES_U8,
|
|
2240
2581
|
loc,
|
|
2241
2582
|
};
|
|
@@ -2420,26 +2761,31 @@ function lowerBufferStaticValue(lowerer, call, access) {
|
|
|
2420
2761
|
if (args.length >= 1 && args.length <= 2 && !ts.isSpreadElement(args[0])) {
|
|
2421
2762
|
const srcIr = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
|
|
2422
2763
|
if (srcIr?.kind === "string") {
|
|
2423
|
-
|
|
2764
|
+
// Node reads an unknown or empty name as utf8 here, without throwing.
|
|
2765
|
+
const enc = args[1]
|
|
2766
|
+
? bufEncodingArgument(lowerer, "Buffer.byteLength", args[1], "utf8Fallback", loc)
|
|
2767
|
+
: { literal: "utf8" };
|
|
2424
2768
|
const s = lowerer.lowerExprExpecting(args[0], STRING);
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
const encoding = {
|
|
2431
|
-
kind: "strLit",
|
|
2432
|
-
value: args[1] ? bufEncoding(lowerer, "Buffer.byteLength", args[1]) : "utf8",
|
|
2433
|
-
type: STRING,
|
|
2769
|
+
return withBufEncoding(lowerer, enc, loc, [s], ([sRef], encoding) => ({
|
|
2770
|
+
kind: "libCall",
|
|
2771
|
+
fn: "buffer.byteLenStr",
|
|
2772
|
+
args: [sRef, encoding],
|
|
2773
|
+
type: F64,
|
|
2434
2774
|
loc,
|
|
2435
|
-
};
|
|
2436
|
-
|
|
2775
|
+
}));
|
|
2776
|
+
}
|
|
2777
|
+
if (srcIr === null || srcIr.kind === "dyn") {
|
|
2778
|
+
const enc = args[1]
|
|
2779
|
+
? bufEncodingArgument(lowerer, "Buffer.byteLength", args[1], "utf8Fallback", loc)
|
|
2780
|
+
: { literal: "utf8" };
|
|
2781
|
+
const source = lowerer.lowerExprExpecting(args[0], DYN);
|
|
2782
|
+
return withBufEncoding(lowerer, enc, loc, [source], ([srcRef], encoding) => ({
|
|
2437
2783
|
kind: "libCall",
|
|
2438
2784
|
fn: "buffer.byteLenDyn",
|
|
2439
|
-
args: [
|
|
2785
|
+
args: [srcRef, encoding],
|
|
2440
2786
|
type: F64,
|
|
2441
2787
|
loc,
|
|
2442
|
-
};
|
|
2788
|
+
}));
|
|
2443
2789
|
}
|
|
2444
2790
|
if (srcIr?.kind === "bytes" && args.length === 1) {
|
|
2445
2791
|
const receiver = lowerer.lowerExpr(args[0]);
|
|
@@ -2516,10 +2862,24 @@ export function lowerBufferPrototypeMember(lowerer, expr) {
|
|
|
2516
2862
|
: lowerer.lowerExprExpecting(expr.argumentExpression, DYN);
|
|
2517
2863
|
return { kind: "libCall", fn: "buffer.prototypeMember", args: [key], type: DYN, loc };
|
|
2518
2864
|
}
|
|
2865
|
+
/** `Buffer.prototype` read as a value in JavaScript (`const p =
|
|
2866
|
+
* Buffer.prototype; p[\`write${name}\`]`, Object.getOwnPropertyNames over it):
|
|
2867
|
+
* the object scr_buffer_prototype_object answers. Null for other
|
|
2868
|
+
* expressions, and for `Buffer.prototype.<name>` and
|
|
2869
|
+
* `Buffer.prototype[key]`, which lowerBufferPrototypeMember answers. */
|
|
2870
|
+
export function lowerBufferPrototypeObject(lowerer, expr) {
|
|
2871
|
+
if (expr.questionDotToken ||
|
|
2872
|
+
expr.name.text !== "prototype" ||
|
|
2873
|
+
!isJsSourceFile(expr.getSourceFile()) ||
|
|
2874
|
+
stdlibGlobalNameOf(lowerer, expr.expression) !== "Buffer")
|
|
2875
|
+
return null;
|
|
2876
|
+
return { kind: "libCall", fn: "buffer.prototypeObject", args: [], type: DYN, loc: locOf(expr) };
|
|
2877
|
+
}
|
|
2519
2878
|
const BUFFER_VALUE_FNS = new Set([
|
|
2520
2879
|
"buffer.constructor",
|
|
2521
2880
|
"buffer.staticValue",
|
|
2522
2881
|
"buffer.prototypeMember",
|
|
2882
|
+
"buffer.prototypeObject",
|
|
2523
2883
|
]);
|
|
2524
2884
|
/** A program that reads the Buffer function's value installs it in %main,
|
|
2525
2885
|
* so a Buffer's `.constructor` answers the same function. */
|