@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
|
@@ -38,6 +38,7 @@ export function lowerArrayHofCall(lowerer, call, access, method, elem) {
|
|
|
38
38
|
lowerer.isStdlibSymbol(lowerer.resolveValueSymbol(argNode) ?? undefined);
|
|
39
39
|
const present = !booleanFilter && presentElements(lowerer, call, elem);
|
|
40
40
|
const valueT = callbackValueType(lowerer, elem, present);
|
|
41
|
+
const thisArg = hofThisArg(lowerer, call);
|
|
41
42
|
if (booleanFilter) {
|
|
42
43
|
if (valueT.kind === "union")
|
|
43
44
|
lowerer.requireTruthyUnion(valueT.unionId, argNode);
|
|
@@ -82,15 +83,19 @@ export function lowerArrayHofCall(lowerer, call, access, method, elem) {
|
|
|
82
83
|
const outElem = filtered !== null ? filtered.elem : callbackArrayElement(lowerer, call, fnRet);
|
|
83
84
|
// A filter that re-tags its elements keeps the single union-typed visit.
|
|
84
85
|
// A callback that never reads its element has no use for a typed one.
|
|
85
|
-
const fast = present ||
|
|
86
|
+
const fast = present ||
|
|
87
|
+
booleanFilter ||
|
|
88
|
+
unread ||
|
|
89
|
+
thisArg !== null ||
|
|
90
|
+
(method === "filter" && !typeEquals(outElem, elem))
|
|
86
91
|
? null
|
|
87
92
|
: lowerFastCallback(lowerer, argNode, [valueT], 0, elem, arrayOf(elem), callback);
|
|
88
|
-
const helper = arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread);
|
|
93
|
+
const helper = arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread, thisArg !== null);
|
|
89
94
|
const resultType = method === "map" || method === "filter" ? arrayOf(outElem) : VOID;
|
|
90
95
|
const result = {
|
|
91
96
|
kind: "call",
|
|
92
97
|
callee: helper,
|
|
93
|
-
args: [receiver, fnArg, ...(fast ? [fast] : [])],
|
|
98
|
+
args: [receiver, fnArg, ...(fast ? [fast] : []), ...(thisArg ? [thisArg] : [])],
|
|
94
99
|
type: resultType,
|
|
95
100
|
loc,
|
|
96
101
|
};
|
|
@@ -105,6 +110,20 @@ export function lowerArrayHofCall(lowerer, call, access, method, elem) {
|
|
|
105
110
|
loc,
|
|
106
111
|
};
|
|
107
112
|
}
|
|
113
|
+
/** The thisArg of a callback HOF call (`a.map(f, thisArg)`), lowered as the
|
|
114
|
+
* checked-dynamic value the helper hands the callback as its call-site
|
|
115
|
+
* receiver. Null when the call has no second argument, in which case the
|
|
116
|
+
* helper keeps the two-slot frame and the callback's `this` is the ambient
|
|
117
|
+
* one, exactly as before. */
|
|
118
|
+
function hofThisArg(lowerer, call) {
|
|
119
|
+
const node = call.arguments.nodes[1];
|
|
120
|
+
if (node === undefined)
|
|
121
|
+
return null;
|
|
122
|
+
if (call.arguments.nodes.length > 2) {
|
|
123
|
+
lowerer.noLowering(`.${ts.isPropertyAccessExpression(call.expression) ? call.expression.name.text : ""} with ${call.arguments.nodes.length} arguments`, call, "the supported form takes the callback and an optional thisArg");
|
|
124
|
+
}
|
|
125
|
+
return lowerer.lowerExprExpecting(node, DYN);
|
|
126
|
+
}
|
|
108
127
|
/** The element a filter keeps, and the checked conversion of the result
|
|
109
128
|
* to the checker's narrower element when the predicate does not prove it.
|
|
110
129
|
* An inferred inline type predicate proves one source arm, or a class
|
|
@@ -452,8 +471,8 @@ const FILTER_SNAPSHOT = { isForeign: "vf.0", value: "v.0", foreign: "vd.0" };
|
|
|
452
471
|
* combo. Named `%arr.<method>.<n>` ('%' keeps it out of the user
|
|
453
472
|
* namespace); rides `liftedFns` into the module like a lifted lambda (it
|
|
454
473
|
* is a plain function — no captures). */
|
|
455
|
-
function arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem = fnRet, site = "", fastT = null, present = false, unread = false) {
|
|
456
|
-
const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}:${typeKey(outElem)}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
|
|
474
|
+
function arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem = fnRet, site = "", fastT = null, present = false, unread = false, withThis = false) {
|
|
475
|
+
const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}:${typeKey(outElem)}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
|
|
457
476
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
458
477
|
if (existing)
|
|
459
478
|
return existing;
|
|
@@ -469,7 +488,7 @@ function arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem = fnRe
|
|
|
469
488
|
split: !!fastT,
|
|
470
489
|
unread,
|
|
471
490
|
});
|
|
472
|
-
const fn = buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem, fastT, present, unread);
|
|
491
|
+
const fn = buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem, fastT, present, unread, withThis);
|
|
473
492
|
lowerer.liftedFns.push(fastT ? withFastCallback(fn, fastT, elem) : fn);
|
|
474
493
|
return name;
|
|
475
494
|
}
|
|
@@ -706,13 +725,13 @@ function filterRetainedValue(lowerer, v, elem, outElem, loc) {
|
|
|
706
725
|
* `arity` is the callback's declared parameter count (1–3): the loop
|
|
707
726
|
* passes the index and the receiver itself after the element when the
|
|
708
727
|
* callback names them, exactly the arguments JS supplies. */
|
|
709
|
-
function buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem, fastT = null, present = false, unread = false) {
|
|
728
|
+
function buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem, fastT = null, present = false, unread = false, withThis = false) {
|
|
710
729
|
const arrT = arrayOf(elem);
|
|
711
730
|
const valueT = callbackValueType(lowerer, elem, present);
|
|
712
731
|
const fnT = funcOf([valueT, F64, arrT].slice(0, arity), fnRet);
|
|
713
|
-
const locals = arrayCallbackLocals(arrT, fnT);
|
|
714
|
-
const params = arrayCallbackParams(arrT, fnT);
|
|
715
|
-
const callF = (arg) => callArrayCallback(arrT, fnT, fnRet, arity, arg, loc);
|
|
732
|
+
const locals = arrayCallbackLocals(arrT, fnT, withThis);
|
|
733
|
+
const params = arrayCallbackParams(arrT, fnT, withThis);
|
|
734
|
+
const callF = (arg) => callArrayCallback(arrT, fnT, fnRet, arity, arg, loc, withThis);
|
|
716
735
|
const getElem = callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc);
|
|
717
736
|
// What the callback takes: the element, or a placeholder for one it
|
|
718
737
|
// ignores (callbackValueRead's `unread`).
|
|
@@ -981,6 +1000,7 @@ export function lowerArrayFindLikeCall(lowerer, call, access, method, elem, bind
|
|
|
981
1000
|
const argNode = call.arguments.nodes[0];
|
|
982
1001
|
if (!argNode)
|
|
983
1002
|
lowerer.unsupported("SC1090", call, "this call form"); // tsc-guarded
|
|
1003
|
+
const thisArg = hofThisArg(lowerer, call);
|
|
984
1004
|
// find's result must be reachable from the element itself; a predicate
|
|
985
1005
|
// that narrows to another layout keeps the optional element visit.
|
|
986
1006
|
const present = presentElements(lowerer, call, elem) &&
|
|
@@ -1004,17 +1024,17 @@ export function lowerArrayFindLikeCall(lowerer, call, access, method, elem, bind
|
|
|
1004
1024
|
method === "every" ||
|
|
1005
1025
|
method === "findIndex" ||
|
|
1006
1026
|
method === "findLastIndex") {
|
|
1007
|
-
const fast = present || unread
|
|
1027
|
+
const fast = present || unread || thisArg !== null
|
|
1008
1028
|
? null
|
|
1009
1029
|
: lowerFastCallback(lowerer, argNode, [arrayValueType(lowerer, elem)], 0, elem, arrT, { fnArg, arity }, bindUntyped);
|
|
1010
1030
|
const fastT = fast?.type ?? null;
|
|
1011
1031
|
const helper = method === "findIndex" || method === "findLastIndex"
|
|
1012
|
-
? findIndexHelper(lowerer, elem, fnRet, arity, last, loc, callbackSite(fast ?? fnArg), fastT, present, unread)
|
|
1013
|
-
: someEveryHelper(lowerer, method, elem, fnRet, arity, loc, callbackSite(fast ?? fnArg), fastT, present, unread);
|
|
1032
|
+
? findIndexHelper(lowerer, elem, fnRet, arity, last, loc, callbackSite(fast ?? fnArg), fastT, present, unread, thisArg !== null)
|
|
1033
|
+
: someEveryHelper(lowerer, method, elem, fnRet, arity, loc, callbackSite(fast ?? fnArg), fastT, present, unread, thisArg !== null);
|
|
1014
1034
|
return {
|
|
1015
1035
|
kind: "call",
|
|
1016
1036
|
callee: helper,
|
|
1017
|
-
args: [receiver, fnArg, ...(fast ? [fast] : [])],
|
|
1037
|
+
args: [receiver, fnArg, ...(fast ? [fast] : []), ...(thisArg ? [thisArg] : [])],
|
|
1018
1038
|
type: method === "findIndex" || method === "findLastIndex" ? F64 : BOOL,
|
|
1019
1039
|
loc,
|
|
1020
1040
|
};
|
|
@@ -1036,8 +1056,14 @@ export function lowerArrayFindLikeCall(lowerer, call, access, method, elem, bind
|
|
|
1036
1056
|
if (undefTag < 0)
|
|
1037
1057
|
lowerer.badType(call, lowerer.typeOf(call));
|
|
1038
1058
|
const retag = findResultRetag(lowerer, call, argNode, method, valueT, resultT, unchangedElement);
|
|
1039
|
-
const helper = findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, retag, callbackSite(fnArg), present, unread);
|
|
1040
|
-
return {
|
|
1059
|
+
const helper = findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, retag, callbackSite(fnArg), present, unread, thisArg !== null);
|
|
1060
|
+
return {
|
|
1061
|
+
kind: "call",
|
|
1062
|
+
callee: helper,
|
|
1063
|
+
args: [receiver, fnArg, ...(thisArg ? [thisArg] : [])],
|
|
1064
|
+
type: resultT,
|
|
1065
|
+
loc,
|
|
1066
|
+
};
|
|
1041
1067
|
}
|
|
1042
1068
|
/** The retag helper that converts a found element into find's result union,
|
|
1043
1069
|
* or null when the element converts directly. Only an inline callback with
|
|
@@ -1091,9 +1117,9 @@ export function predicateToBoolean(e) {
|
|
|
1091
1117
|
* for (i = 0; i < n; i++) { v = a[i]; if (f(v)) return <v as result arm>; }
|
|
1092
1118
|
* return <undefined arm>;
|
|
1093
1119
|
*/
|
|
1094
|
-
function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, retag, site = "", present = false, unread = false) {
|
|
1120
|
+
function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, retag, site = "", present = false, unread = false, withThis = false) {
|
|
1095
1121
|
const method = last ? "findLast" : "find";
|
|
1096
|
-
const key = `${method}:${typeKey(elem)}:${typeKey(resultT)}:${typeKey(fnRet)}:${arity}${site}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
|
|
1122
|
+
const key = `${method}:${typeKey(elem)}:${typeKey(resultT)}:${typeKey(fnRet)}:${arity}${site}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
|
|
1097
1123
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
1098
1124
|
if (existing)
|
|
1099
1125
|
return existing;
|
|
@@ -1130,7 +1156,7 @@ function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, r
|
|
|
1130
1156
|
...arraySlotSnapshot(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, FILTER_SNAPSHOT, loc),
|
|
1131
1157
|
{
|
|
1132
1158
|
kind: "if",
|
|
1133
|
-
cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, placeholder ?? v, loc)),
|
|
1159
|
+
cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, placeholder ?? v, loc, withThis)),
|
|
1134
1160
|
then: [
|
|
1135
1161
|
{
|
|
1136
1162
|
kind: "return",
|
|
@@ -1146,7 +1172,7 @@ function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, r
|
|
|
1146
1172
|
read,
|
|
1147
1173
|
{
|
|
1148
1174
|
kind: "if",
|
|
1149
|
-
cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, v, loc)),
|
|
1175
|
+
cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, v, loc, withThis)),
|
|
1150
1176
|
then: [{ kind: "return", value: found, loc }],
|
|
1151
1177
|
else_: null,
|
|
1152
1178
|
loc,
|
|
@@ -1163,10 +1189,10 @@ function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, r
|
|
|
1163
1189
|
];
|
|
1164
1190
|
lowerer.liftedFns.push({
|
|
1165
1191
|
name,
|
|
1166
|
-
params: arrayCallbackParams(arrT, fnT),
|
|
1192
|
+
params: arrayCallbackParams(arrT, fnT, withThis),
|
|
1167
1193
|
returnType: resultT,
|
|
1168
1194
|
locals: [
|
|
1169
|
-
...arrayCallbackLocals(arrT, fnT),
|
|
1195
|
+
...arrayCallbackLocals(arrT, fnT, withThis),
|
|
1170
1196
|
{ id: "v.0", name: "v", type: valueT, mutable: false },
|
|
1171
1197
|
...(ignored
|
|
1172
1198
|
? slotSnapshotLocals(lowerer, elem, FILTER_SNAPSHOT).filter((l) => l.id !== "v.0")
|
|
@@ -1194,9 +1220,9 @@ function findFoundValue(lowerer, v, resultT, retag, loc) {
|
|
|
1194
1220
|
*
|
|
1195
1221
|
* n = a.length; for (...) if (f(a[i], i, a)) return i; return -1;
|
|
1196
1222
|
*/
|
|
1197
|
-
function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fastT = null, present = false, unread = false) {
|
|
1223
|
+
function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fastT = null, present = false, unread = false, withThis = false) {
|
|
1198
1224
|
const method = last ? "findLastIndex" : "findIndex";
|
|
1199
|
-
const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
|
|
1225
|
+
const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
|
|
1200
1226
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
1201
1227
|
if (existing)
|
|
1202
1228
|
return existing;
|
|
@@ -1218,7 +1244,7 @@ function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fast
|
|
|
1218
1244
|
const visit = [
|
|
1219
1245
|
{
|
|
1220
1246
|
kind: "if",
|
|
1221
|
-
cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc)),
|
|
1247
|
+
cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc, withThis)),
|
|
1222
1248
|
then: [{ kind: "return", value: varRef("i.0", F64, loc), loc }],
|
|
1223
1249
|
else_: null,
|
|
1224
1250
|
loc,
|
|
@@ -1234,9 +1260,9 @@ function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fast
|
|
|
1234
1260
|
];
|
|
1235
1261
|
lowerer.liftedFns.push(withFastCallback({
|
|
1236
1262
|
name,
|
|
1237
|
-
params: arrayCallbackParams(arrT, fnT),
|
|
1263
|
+
params: arrayCallbackParams(arrT, fnT, withThis),
|
|
1238
1264
|
returnType: F64,
|
|
1239
|
-
locals: [...arrayCallbackLocals(arrT, fnT)],
|
|
1265
|
+
locals: [...arrayCallbackLocals(arrT, fnT, withThis)],
|
|
1240
1266
|
body,
|
|
1241
1267
|
loc,
|
|
1242
1268
|
}, fastT, elem));
|
|
@@ -1247,8 +1273,8 @@ function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fast
|
|
|
1247
1273
|
* some: n = a.length; for (...) if (f(a[i])) return true; return false;
|
|
1248
1274
|
* every: n = a.length; for (...) if (!f(a[i])) return false; return true;
|
|
1249
1275
|
*/
|
|
1250
|
-
function someEveryHelper(lowerer, method, elem, fnRet, arity, loc, site = "", fastT = null, present = false, unread = false) {
|
|
1251
|
-
const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
|
|
1276
|
+
function someEveryHelper(lowerer, method, elem, fnRet, arity, loc, site = "", fastT = null, present = false, unread = false, withThis = false) {
|
|
1277
|
+
const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
|
|
1252
1278
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
1253
1279
|
if (existing)
|
|
1254
1280
|
return existing;
|
|
@@ -1266,7 +1292,7 @@ function someEveryHelper(lowerer, method, elem, fnRet, arity, loc, site = "", fa
|
|
|
1266
1292
|
});
|
|
1267
1293
|
const arrT = arrayOf(elem);
|
|
1268
1294
|
const fnT = funcOf([callbackValueType(lowerer, elem, present), F64, arrT].slice(0, arity), fnRet);
|
|
1269
|
-
const callF = predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc));
|
|
1295
|
+
const callF = predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc, withThis));
|
|
1270
1296
|
const body = [
|
|
1271
1297
|
arrayLengthDeclaration(arrT, loc),
|
|
1272
1298
|
countedFor(loc, varRef("n.0", F64, loc), () => [
|
|
@@ -1292,9 +1318,9 @@ function someEveryHelper(lowerer, method, elem, fnRet, arity, loc, site = "", fa
|
|
|
1292
1318
|
];
|
|
1293
1319
|
lowerer.liftedFns.push(withFastCallback({
|
|
1294
1320
|
name,
|
|
1295
|
-
params: arrayCallbackParams(arrT, fnT),
|
|
1321
|
+
params: arrayCallbackParams(arrT, fnT, withThis),
|
|
1296
1322
|
returnType: BOOL,
|
|
1297
|
-
locals: [...arrayCallbackLocals(arrT, fnT)],
|
|
1323
|
+
locals: [...arrayCallbackLocals(arrT, fnT, withThis)],
|
|
1298
1324
|
body,
|
|
1299
1325
|
loc,
|
|
1300
1326
|
}, fastT, elem));
|
|
@@ -1313,6 +1339,7 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
|
|
|
1313
1339
|
const argNode = call.arguments.nodes[0];
|
|
1314
1340
|
if (!argNode)
|
|
1315
1341
|
lowerer.unsupported("SC1090", call, "this call form"); // tsc-guarded
|
|
1342
|
+
const thisArg = hofThisArg(lowerer, call);
|
|
1316
1343
|
const present = presentElements(lowerer, call, elem);
|
|
1317
1344
|
const lowered = lowerArrayCallback(lowerer, argNode, [callbackValueType(lowerer, elem, present)], arrT);
|
|
1318
1345
|
const { fnArg, arity } = lowered;
|
|
@@ -1327,7 +1354,7 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
|
|
|
1327
1354
|
recv: { kind: "dynFrom", value: receiver, liveRef: true, type: DYN, loc },
|
|
1328
1355
|
method: "flatMap",
|
|
1329
1356
|
calleeName: ts.getTextOfNode(access),
|
|
1330
|
-
args: [{ kind: "dynFrom", value: fnArg, type: DYN, loc }],
|
|
1357
|
+
args: [{ kind: "dynFrom", value: fnArg, type: DYN, loc }, ...(thisArg ? [thisArg] : [])],
|
|
1331
1358
|
type: DYN,
|
|
1332
1359
|
loc,
|
|
1333
1360
|
};
|
|
@@ -1338,11 +1365,11 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
|
|
|
1338
1365
|
? flatMapUnionPlan(lowerer, call, argNode, fnRet)
|
|
1339
1366
|
: null;
|
|
1340
1367
|
if (plan) {
|
|
1341
|
-
const helper = flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present);
|
|
1368
|
+
const helper = flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present, thisArg !== null);
|
|
1342
1369
|
return {
|
|
1343
1370
|
kind: "call",
|
|
1344
1371
|
callee: helper,
|
|
1345
|
-
args: [receiver, fnArg],
|
|
1372
|
+
args: [receiver, fnArg, ...(thisArg ? [thisArg] : [])],
|
|
1346
1373
|
type: arrayOf(plan.outElem),
|
|
1347
1374
|
loc,
|
|
1348
1375
|
};
|
|
@@ -1358,32 +1385,32 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
|
|
|
1358
1385
|
lowerer.badType(call, lowerer.typeOf(call));
|
|
1359
1386
|
requireProducedArrayElement(lowerer, call, "'.flatMap()'", fnRet);
|
|
1360
1387
|
const outElem = callbackArrayElement(lowerer, call, fnRet);
|
|
1361
|
-
const fast = present || unread
|
|
1388
|
+
const fast = present || unread || thisArg !== null
|
|
1362
1389
|
? null
|
|
1363
1390
|
: lowerFastCallback(lowerer, argNode, [arrayValueType(lowerer, elem)], 0, elem, arrT, {
|
|
1364
1391
|
fnArg,
|
|
1365
1392
|
arity,
|
|
1366
1393
|
});
|
|
1367
|
-
const helper = arrayHofHelper(lowerer, "flatMap", elem, fnRet, arity, loc, outElem, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread);
|
|
1394
|
+
const helper = arrayHofHelper(lowerer, "flatMap", elem, fnRet, arity, loc, outElem, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread, thisArg !== null);
|
|
1368
1395
|
return {
|
|
1369
1396
|
kind: "call",
|
|
1370
1397
|
callee: helper,
|
|
1371
|
-
args: [receiver, fnArg, ...(fast ? [fast] : [])],
|
|
1398
|
+
args: [receiver, fnArg, ...(fast ? [fast] : []), ...(thisArg ? [thisArg] : [])],
|
|
1372
1399
|
type: arrayOf(outElem),
|
|
1373
1400
|
loc,
|
|
1374
1401
|
};
|
|
1375
1402
|
}
|
|
1376
|
-
const fast = present || unread
|
|
1403
|
+
const fast = present || unread || thisArg !== null
|
|
1377
1404
|
? null
|
|
1378
1405
|
: lowerFastCallback(lowerer, argNode, [arrayValueType(lowerer, elem)], 0, elem, arrT, {
|
|
1379
1406
|
fnArg,
|
|
1380
1407
|
arity,
|
|
1381
1408
|
});
|
|
1382
|
-
const helper = flatMapHelper(lowerer, elem, fnRet, arity, loc, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread);
|
|
1409
|
+
const helper = flatMapHelper(lowerer, elem, fnRet, arity, loc, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread, thisArg !== null);
|
|
1383
1410
|
return {
|
|
1384
1411
|
kind: "call",
|
|
1385
1412
|
callee: helper,
|
|
1386
|
-
args: [receiver, fnArg, ...(fast ? [fast] : [])],
|
|
1413
|
+
args: [receiver, fnArg, ...(fast ? [fast] : []), ...(thisArg ? [thisArg] : [])],
|
|
1387
1414
|
type: fnRet,
|
|
1388
1415
|
loc,
|
|
1389
1416
|
};
|
|
@@ -1453,10 +1480,10 @@ function flatMapUnionPlan(lowerer, call, argNode, fnRet) {
|
|
|
1453
1480
|
/** The flatMap loop over a union-returning callback: each result tests
|
|
1454
1481
|
* its arm and appends its elements, nothing, or itself (Node's
|
|
1455
1482
|
* IsArray decision per value). */
|
|
1456
|
-
function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
|
|
1483
|
+
function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present, withThis = false) {
|
|
1457
1484
|
// The plan is part of the key: one union result type can carry an empty
|
|
1458
1485
|
// `never[]` arm in one callback and a populated array arm in another.
|
|
1459
|
-
const key = `flatMapUnion:${typeKey(elem)}:${typeKey(fnRet)}:${typeKey(plan.outElem)}:${plan.arms.join(",")}:${arity}${present ? ":present" : ""}`;
|
|
1486
|
+
const key = `flatMapUnion:${typeKey(elem)}:${typeKey(fnRet)}:${typeKey(plan.outElem)}:${plan.arms.join(",")}:${arity}${present ? ":present" : ""}${withThis ? ":this" : ""}`;
|
|
1460
1487
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
1461
1488
|
if (existing)
|
|
1462
1489
|
return existing;
|
|
@@ -1477,7 +1504,7 @@ function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
|
|
|
1477
1504
|
loc,
|
|
1478
1505
|
});
|
|
1479
1506
|
const locals = [
|
|
1480
|
-
...arrayCallbackLocals(arrT, fnT),
|
|
1507
|
+
...arrayCallbackLocals(arrT, fnT, withThis),
|
|
1481
1508
|
{ id: "out.0", name: "out", type: outT, mutable: false },
|
|
1482
1509
|
{ id: "r.0", name: "r", type: fnRet, mutable: false },
|
|
1483
1510
|
];
|
|
@@ -1622,7 +1649,7 @@ function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
|
|
|
1622
1649
|
{
|
|
1623
1650
|
kind: "varDecl",
|
|
1624
1651
|
localId: "r.0",
|
|
1625
|
-
init: callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc), loc),
|
|
1652
|
+
init: callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc), loc, withThis),
|
|
1626
1653
|
loc,
|
|
1627
1654
|
},
|
|
1628
1655
|
...dispatch,
|
|
@@ -1635,7 +1662,7 @@ function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
|
|
|
1635
1662
|
];
|
|
1636
1663
|
lowerer.liftedFns.push({
|
|
1637
1664
|
name,
|
|
1638
|
-
params: arrayCallbackParams(arrT, fnT),
|
|
1665
|
+
params: arrayCallbackParams(arrT, fnT, withThis),
|
|
1639
1666
|
returnType: outT,
|
|
1640
1667
|
locals,
|
|
1641
1668
|
body,
|
|
@@ -1652,8 +1679,8 @@ function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
|
|
|
1652
1679
|
* }
|
|
1653
1680
|
* return out;
|
|
1654
1681
|
*/
|
|
1655
|
-
function flatMapHelper(lowerer, elem, fnRet, arity, loc, site = "", fastT = null, present = false, unread = false) {
|
|
1656
|
-
const key = `flatMap:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
|
|
1682
|
+
function flatMapHelper(lowerer, elem, fnRet, arity, loc, site = "", fastT = null, present = false, unread = false, withThis = false) {
|
|
1683
|
+
const key = `flatMap:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
|
|
1657
1684
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
1658
1685
|
if (existing)
|
|
1659
1686
|
return existing;
|
|
@@ -1738,7 +1765,7 @@ function flatMapHelper(lowerer, elem, fnRet, arity, loc, site = "", fastT = null
|
|
|
1738
1765
|
{
|
|
1739
1766
|
kind: "varDecl",
|
|
1740
1767
|
localId: "r.0",
|
|
1741
|
-
init: callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc),
|
|
1768
|
+
init: callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc, withThis),
|
|
1742
1769
|
loc,
|
|
1743
1770
|
},
|
|
1744
1771
|
{
|
|
@@ -1764,10 +1791,10 @@ function flatMapHelper(lowerer, elem, fnRet, arity, loc, site = "", fastT = null
|
|
|
1764
1791
|
];
|
|
1765
1792
|
lowerer.liftedFns.push(withFastCallback({
|
|
1766
1793
|
name,
|
|
1767
|
-
params: arrayCallbackParams(arrT, fnT),
|
|
1794
|
+
params: arrayCallbackParams(arrT, fnT, withThis),
|
|
1768
1795
|
returnType: fnRet,
|
|
1769
1796
|
locals: [
|
|
1770
|
-
...arrayCallbackLocals(arrT, fnT),
|
|
1797
|
+
...arrayCallbackLocals(arrT, fnT, withThis),
|
|
1771
1798
|
{ id: "out.0", name: "out", type: fnRet, mutable: false },
|
|
1772
1799
|
{ id: "r.0", name: "r", type: fnRet, mutable: false },
|
|
1773
1800
|
{ id: "m.0", name: "m", type: F64, mutable: false },
|
|
@@ -1792,19 +1819,46 @@ export function lowerArrayReduceCall(lowerer, call, access, method, elem) {
|
|
|
1792
1819
|
if (!argNode)
|
|
1793
1820
|
lowerer.unsupported("SC1090", call, "this call form"); // tsc-guarded
|
|
1794
1821
|
const hasInit = call.arguments.nodes.length === 2;
|
|
1795
|
-
const
|
|
1796
|
-
|
|
1797
|
-
if (
|
|
1822
|
+
const overrideT = lowerer.runtimeOptionalReduceTypes.get(call) ?? null;
|
|
1823
|
+
const staticAccT = overrideT ?? (hasInit ? lowerer.irTypeOf(call) : arrayValueType(lowerer, elem));
|
|
1824
|
+
if (staticAccT.kind === "void" || staticAccT.kind === "func")
|
|
1798
1825
|
lowerer.badType(call, lowerer.typeOf(call));
|
|
1799
|
-
const lowered = lowerArrayCallback(lowerer, argNode, [
|
|
1826
|
+
const lowered = lowerArrayCallback(lowerer, argNode, [staticAccT, arrayValueType(lowerer, elem)], arrT, false, staticAccT);
|
|
1800
1827
|
const { fnArg, arity } = lowered;
|
|
1828
|
+
// A JavaScript function with NO declared parameters whose body reads
|
|
1829
|
+
// `arguments` has that hidden slot as its whole ABI, which the synthetic
|
|
1830
|
+
// loop cannot fill: `callValue` passes exactly the declared parameters
|
|
1831
|
+
// (none), so the callback would see an empty `arguments` where JavaScript
|
|
1832
|
+
// passes (accumulator, element, index, array). Name the parameters
|
|
1833
|
+
// instead; that is the same value with a checkable type. Read the
|
|
1834
|
+
// callback's OWN type: the slot adaptation above (a dyn function boundary)
|
|
1835
|
+
// erases the hidden slot from `fnArg.type`. A callback that names its
|
|
1836
|
+
// parameters keeps working — `arguments` is built from the call's
|
|
1837
|
+
// arguments there, not from a hidden slot.
|
|
1838
|
+
if (lowered.rawType.kind === "func" &&
|
|
1839
|
+
lowered.rawType.params.length === 0 &&
|
|
1840
|
+
lowered.rawType.rest === true &&
|
|
1841
|
+
lowered.rawType.restAbi === undefined)
|
|
1842
|
+
lowerer.unsupported("SC1090", argNode, "a reduce callback that reads 'arguments' (name the parameters the callback uses)");
|
|
1843
|
+
// The callback's own answer is what the accumulator receives. An inline
|
|
1844
|
+
// lambda is contextually typed by the call (its returns coerce inside its
|
|
1845
|
+
// own lowering), but a function DECLARATION keeps its declared return. When
|
|
1846
|
+
// the checker's accumulator type cannot hold that value — `xs.reduce(function
|
|
1847
|
+
// () { count++ }, 1)` answers undefined, a program the checker already
|
|
1848
|
+
// diagnosed — the accumulator is the checked-dynamic value JavaScript
|
|
1849
|
+
// produces instead of a miscast (the untyped-reduce shape; see
|
|
1850
|
+
// accumulatorAdmitsAnswer).
|
|
1851
|
+
const accT = overrideT !== null || accumulatorAdmitsAnswer(lowerer, staticAccT, fnArg.type.ret)
|
|
1852
|
+
? staticAccT
|
|
1853
|
+
: DYN;
|
|
1801
1854
|
// Only an array that can hold elements outside its element type needs to
|
|
1802
|
-
// leave an element its callback ignores unread.
|
|
1855
|
+
// leave an element its callback ignores unread. A dynamic accumulator is
|
|
1856
|
+
// the untyped shape; it keeps the single visit and the callback's own ABI.
|
|
1803
1857
|
const unread = lowered.unread && elementMayBeForeign(lowerer, elem);
|
|
1804
|
-
const fast = unread
|
|
1858
|
+
const fast = unread || accT.kind === "dyn"
|
|
1805
1859
|
? null
|
|
1806
1860
|
: lowerFastCallback(lowerer, argNode, [accT, arrayValueType(lowerer, elem)], 1, elem, arrT, { fnArg, arity }, false, accT);
|
|
1807
|
-
const helper = reduceHelper(lowerer, method, elem, accT, fnArg.type
|
|
1861
|
+
const helper = reduceHelper(lowerer, method, elem, accT, fnArg.type, hasInit, loc, callbackSite(fast ?? fnArg), fast?.type ?? null, unread);
|
|
1808
1862
|
const args = [receiver, fnArg];
|
|
1809
1863
|
if (hasInit)
|
|
1810
1864
|
args.push(lowerer.lowerExprExpecting(call.arguments.nodes[1], accT));
|
|
@@ -1814,6 +1868,33 @@ export function lowerArrayReduceCall(lowerer, call, access, method, elem) {
|
|
|
1814
1868
|
args.push(fast);
|
|
1815
1869
|
return { kind: "call", callee: helper, args, type: accT, loc };
|
|
1816
1870
|
}
|
|
1871
|
+
/** The accumulator's value as the callback's first parameter declares it.
|
|
1872
|
+
* Equal types pass the local straight through; a dynamic accumulator handed
|
|
1873
|
+
* to a typed parameter converts at the call (the callback is lowered first,
|
|
1874
|
+
* so its ABI is a fact and a value of another kind throws — "types don't
|
|
1875
|
+
* lie"). */
|
|
1876
|
+
function accumulatorArgument(lowerer, param, accT, loc) {
|
|
1877
|
+
const value = varRef("acc.0", accT, loc);
|
|
1878
|
+
return param === undefined || typeEquals(param, accT)
|
|
1879
|
+
? value
|
|
1880
|
+
: lowerer.coerceToExpected(value, param);
|
|
1881
|
+
}
|
|
1882
|
+
/** Whether the checker's accumulator type stores the callback's answer
|
|
1883
|
+
* itself. A scalar accumulator holds only its own scalar, and a void answer
|
|
1884
|
+
* (a callback with no return statement) is `undefined`; both leave the
|
|
1885
|
+
* checker's type unable to carry the value (a program the checker already
|
|
1886
|
+
* diagnosed), which the reduction accumulates dynamically instead of
|
|
1887
|
+
* miscasting. Every other pair keeps `coerceToExpected`'s static plan. */
|
|
1888
|
+
function accumulatorAdmitsAnswer(lowerer, accT, fnRet) {
|
|
1889
|
+
if (lowerer.coercibleValue(fnRet, accT))
|
|
1890
|
+
return true;
|
|
1891
|
+
if (fnRet.kind === "void" || isUnitType(fnRet))
|
|
1892
|
+
return false;
|
|
1893
|
+
return !(scalarKind(accT) && scalarKind(fnRet));
|
|
1894
|
+
}
|
|
1895
|
+
function scalarKind(t) {
|
|
1896
|
+
return t.kind === "f64" || t.kind === "string" || t.kind === "bool";
|
|
1897
|
+
}
|
|
1817
1898
|
/** The reduce/reduceRight loops, from existing IR nodes:
|
|
1818
1899
|
*
|
|
1819
1900
|
* with init: acc = z; n = a.length; for (...) acc = f(acc, a[i]); return acc;
|
|
@@ -1824,14 +1905,23 @@ export function lowerArrayReduceCall(lowerer, call, access, method, elem) {
|
|
|
1824
1905
|
* reduce walks 0→n-1, reduceRight n-1→0; the seed without an initial
|
|
1825
1906
|
* value is a[0] / a[n-1] and the loop starts one past it. The empty-array
|
|
1826
1907
|
* TypeError message is Node's exact message. */
|
|
1827
|
-
function reduceHelper(lowerer, method, elem, accT,
|
|
1908
|
+
function reduceHelper(lowerer, method, elem, accT, fnArg, hasInit, loc, site = "", fastT = null, unread = false) {
|
|
1909
|
+
// The callback's own ABI decides the helper's `f` slot: a dynamic
|
|
1910
|
+
// accumulator (accT) is coerced at the call and the store, so the closure
|
|
1911
|
+
// keeps the parameter types its lowering produced.
|
|
1912
|
+
const fnT = fnArg;
|
|
1913
|
+
const fnRet = fnT.ret;
|
|
1914
|
+
const arity = fnT.params.length;
|
|
1828
1915
|
const key = `${method}:${typeKey(elem)}:${typeKey(accT)}:${typeKey(fnRet)}:${arity}:${hasInit ? "init" : "seed"}${site}${fastT ? ":split" : ""}${unread ? ":unread" : ""}`;
|
|
1829
1916
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
1830
1917
|
if (existing)
|
|
1831
1918
|
return existing;
|
|
1832
1919
|
const name = keyedHelperName(lowerer, `%arr.${method}`, key);
|
|
1833
1920
|
lowerer.arrHofHelpers.set(key, name);
|
|
1834
|
-
|
|
1921
|
+
// A dynamic accumulator stays out of the pipeline registry: the fused
|
|
1922
|
+
// loops type their accumulator from the checker's view (arrHofInfo), which
|
|
1923
|
+
// this shape contradicts.
|
|
1924
|
+
if (method === "reduce" && accT.kind !== "dyn")
|
|
1835
1925
|
lowerer.arrHofInfo.set(name, {
|
|
1836
1926
|
method,
|
|
1837
1927
|
elem,
|
|
@@ -1844,7 +1934,6 @@ function reduceHelper(lowerer, method, elem, accT, fnRet, arity, hasInit, loc, s
|
|
|
1844
1934
|
unread,
|
|
1845
1935
|
});
|
|
1846
1936
|
const arrT = arrayOf(elem);
|
|
1847
|
-
const fnT = funcOf([accT, arrayValueType(lowerer, elem), F64, arrT].slice(0, arity), fnRet);
|
|
1848
1937
|
const n = varRef("n.0", F64, loc);
|
|
1849
1938
|
const i = varRef("i.0", F64, loc);
|
|
1850
1939
|
const right = method === "reduceRight";
|
|
@@ -1961,7 +2050,12 @@ function reduceHelper(lowerer, method, elem, accT, fnRet, arity, hasInit, loc, s
|
|
|
1961
2050
|
value: lowerer.coerceToExpected({
|
|
1962
2051
|
kind: "callValue",
|
|
1963
2052
|
callee: varRef("f.0", fnT, loc),
|
|
1964
|
-
args: [
|
|
2053
|
+
args: [
|
|
2054
|
+
accumulatorArgument(lowerer, fnT.params[0], accT, loc),
|
|
2055
|
+
visited(),
|
|
2056
|
+
i,
|
|
2057
|
+
varRef("a.0", arrT, loc),
|
|
2058
|
+
].slice(0, arity),
|
|
1965
2059
|
type: fnRet,
|
|
1966
2060
|
loc,
|
|
1967
2061
|
}, accT),
|