@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
|
@@ -70,11 +70,13 @@ export declare function lowerDynamicEmitterOn(lowerer: Lowerer, receiver: IrExpr
|
|
|
70
70
|
* routes here): the receiver is the current method's `this`, and emit
|
|
71
71
|
* NEVER dispatches through an override at-or-below the lexical class —
|
|
72
72
|
* JS's static super dispatch (the nearest override STRICTLY ABOVE the
|
|
73
|
-
* lexical class still answers, exactly like a prototype-chain walk).
|
|
73
|
+
* lexical class still answers, exactly like a prototype-chain walk).
|
|
74
|
+
* `argsOverride` replaces the call's arguments (`method.call(thisArg,
|
|
75
|
+
* ...args)` passes the ones after thisArg). */
|
|
74
76
|
export declare function lowerEmitterMethodCall(lowerer: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression, info: ClassInfo, superRecv?: {
|
|
75
77
|
thisRef: IrExpr;
|
|
76
78
|
cls: ClassInfo;
|
|
77
|
-
}): IrExpr | null;
|
|
79
|
+
}, argsOverride?: readonly ts.Expression[]): IrExpr | null;
|
|
78
80
|
export interface EmitOverrideRec {
|
|
79
81
|
decl: ts.MethodDeclaration;
|
|
80
82
|
eventSym: ts.Symbol;
|
|
@@ -105,6 +107,8 @@ export interface EmitSpecRequest {
|
|
|
105
107
|
* when it conforms. Checked at class collection; the recorded override
|
|
106
108
|
* then lowers per event with no further shape questions. */
|
|
107
109
|
export declare function emitOverrideShapeReason(lowerer: Lowerer, member: ts.MethodDeclaration): string | null;
|
|
110
|
+
/** The nearest class at-or-above `info` declaring an emit override. */
|
|
111
|
+
export declare function emitOverrideAtOrAbove(info: ClassInfo | null | undefined): ClassInfo | null;
|
|
108
112
|
/** One specialization body: the override method's statements lowered with
|
|
109
113
|
* `event` bound to the name and hidden tuple parameters standing in for
|
|
110
114
|
* the rest parameter (readable ONLY through the super-forward, which the
|
|
@@ -52,6 +52,8 @@ import * as ts from "../ts7/adapter.js";
|
|
|
52
52
|
import { dynFallbackType, newFnCtx } from "./lowerer.js";
|
|
53
53
|
import { isJsSourceFile, locOf } from "../program.js";
|
|
54
54
|
import { bodyReadsArguments } from "../arguments-usage.js";
|
|
55
|
+
import { nullishExprUnitOf, stripValueWrappers } from "./binding-analysis.js";
|
|
56
|
+
import { isPureReference } from "./effect-free.js";
|
|
55
57
|
import { functionUsesThis } from "./cjs-exports-object.js";
|
|
56
58
|
import { isThisParameter } from "./call-signatures.js";
|
|
57
59
|
import { arrayOf, BOOL, canBoxFuncIntoDyn, canConvertToDyn, canDynCheckTo, isDynTypedRefType, DYN, F64, isUnitType, STRING, typeEquals, typeKey, VOID, } from "../../ir/ir.js";
|
|
@@ -286,48 +288,48 @@ function emitterEvents(lowerer) {
|
|
|
286
288
|
if ((ts.isIdentifier(callee) || ts.isPropertyAccessExpression(callee)) &&
|
|
287
289
|
(ts.isIdentifier(callee) ? callee : callee.name).text === "getEventListeners" &&
|
|
288
290
|
node.arguments.nodes.length === 2) {
|
|
289
|
-
const
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
}
|
|
293
|
-
catch {
|
|
294
|
-
return null;
|
|
295
|
-
}
|
|
296
|
-
})();
|
|
297
|
-
if (nameT?.isStringLiteralType())
|
|
298
|
-
listenersRead.add(literalEventKey(nameT.value));
|
|
291
|
+
const key = scannedEventKey(lowerer, node.arguments.nodes[1]);
|
|
292
|
+
if (key !== null && key !== ERROR_MONITOR_EVENT)
|
|
293
|
+
listenersRead.add(key);
|
|
299
294
|
return;
|
|
300
295
|
}
|
|
301
296
|
if (!ts.isPropertyAccessExpression(callee))
|
|
302
297
|
return;
|
|
303
|
-
|
|
298
|
+
let member = callee.name.text;
|
|
299
|
+
let recvNode = callee.expression;
|
|
300
|
+
let callArgs = node.arguments.nodes;
|
|
301
|
+
// `R.<method>.call(thisArg, ...args)` runs the method on thisArg
|
|
302
|
+
// (lowerEmitterMethodValueCall in lower-calls.ts).
|
|
303
|
+
if (member === "call" &&
|
|
304
|
+
ts.isPropertyAccessExpression(callee.expression) &&
|
|
305
|
+
callArgs.length > 0) {
|
|
306
|
+
member = callee.expression.name.text;
|
|
307
|
+
recvNode = callArgs[0];
|
|
308
|
+
callArgs = callArgs.slice(1);
|
|
309
|
+
}
|
|
304
310
|
if (member === "listeners" || member === "rawListeners") {
|
|
305
|
-
const arg =
|
|
306
|
-
let nameT = null;
|
|
311
|
+
const arg = callArgs[0];
|
|
307
312
|
try {
|
|
308
|
-
if (!arg ||
|
|
309
|
-
!scannedEmitterInfo(lowerer, lowerer.mapTypeOf(lowerer.typeOf(callee.expression))))
|
|
313
|
+
if (!arg || !scannedEmitterInfo(lowerer, lowerer.mapTypeOf(lowerer.typeOf(recvNode))))
|
|
310
314
|
return;
|
|
311
|
-
nameT = lowerer.typeOf(arg);
|
|
312
315
|
}
|
|
313
316
|
catch {
|
|
314
317
|
return;
|
|
315
318
|
}
|
|
316
|
-
|
|
317
|
-
|
|
319
|
+
const key = scannedEventKey(lowerer, arg);
|
|
320
|
+
if (key !== null && key !== ERROR_MONITOR_EVENT)
|
|
321
|
+
listenersRead.add(key);
|
|
318
322
|
return;
|
|
319
323
|
}
|
|
320
324
|
const isEmit = member === "emit";
|
|
321
325
|
if (!isEmit && !REGISTER_MEMBERS.has(member))
|
|
322
326
|
return;
|
|
323
|
-
const arg0 =
|
|
327
|
+
const arg0 = callArgs[0];
|
|
324
328
|
if (!arg0)
|
|
325
329
|
return;
|
|
326
330
|
let recvT = null;
|
|
327
|
-
let nameT = null;
|
|
328
331
|
try {
|
|
329
|
-
recvT = lowerer.mapTypeOf(lowerer.typeOf(
|
|
330
|
-
nameT = lowerer.typeOf(arg0);
|
|
332
|
+
recvT = lowerer.mapTypeOf(lowerer.typeOf(recvNode));
|
|
331
333
|
}
|
|
332
334
|
catch {
|
|
333
335
|
return; // checker trouble is the lowering's business, not the scan's
|
|
@@ -335,11 +337,7 @@ function emitterEvents(lowerer) {
|
|
|
335
337
|
const info = scannedEmitterInfo(lowerer, recvT);
|
|
336
338
|
if (!info)
|
|
337
339
|
return;
|
|
338
|
-
const literal =
|
|
339
|
-
? ERROR_MONITOR_EVENT
|
|
340
|
-
: nameT.isStringLiteralType()
|
|
341
|
-
? literalEventKey(nameT.value)
|
|
342
|
-
: null;
|
|
340
|
+
const literal = scannedEventKey(lowerer, arg0);
|
|
343
341
|
if (literal === null) {
|
|
344
342
|
const pattern = computedEventPatternOf(lowerer, arg0);
|
|
345
343
|
if (pattern &&
|
|
@@ -354,7 +352,7 @@ function emitterEvents(lowerer) {
|
|
|
354
352
|
return;
|
|
355
353
|
}
|
|
356
354
|
const name = literal;
|
|
357
|
-
if (META_EVENTS.has(name) && !isEmit &&
|
|
355
|
+
if (META_EVENTS.has(name) && !isEmit && callArgs[1]) {
|
|
358
356
|
// A dyn-flavored meta listener receives each added or removed
|
|
359
357
|
// listener as a checked-dynamic function value. The scan cannot
|
|
360
358
|
// lower the listener as dynListenerFlavor does, so it counts every
|
|
@@ -363,7 +361,7 @@ function emitterEvents(lowerer) {
|
|
|
363
361
|
// JavaScript function without parameters, and the dyn-flavored
|
|
364
362
|
// forms. Counting one too many only routes more registrations
|
|
365
363
|
// through the adapter.
|
|
366
|
-
const cbNode =
|
|
364
|
+
const cbNode = callArgs[1];
|
|
367
365
|
let typed = false;
|
|
368
366
|
try {
|
|
369
367
|
const cbCt = lowerer.typeOf(cbNode);
|
|
@@ -384,7 +382,7 @@ function emitterEvents(lowerer) {
|
|
|
384
382
|
}
|
|
385
383
|
if (isEmit && name === "error") {
|
|
386
384
|
try {
|
|
387
|
-
const payload =
|
|
385
|
+
const payload = callArgs.slice(1);
|
|
388
386
|
if (payload.length !== 1 ||
|
|
389
387
|
!rootsAtError(lowerer, lowerer.mapTypeOf(lowerer.typeOf(payload[0])))) {
|
|
390
388
|
table.get("error").valueEmit = true;
|
|
@@ -405,12 +403,12 @@ function emitterEvents(lowerer) {
|
|
|
405
403
|
return;
|
|
406
404
|
try {
|
|
407
405
|
if (isEmit) {
|
|
408
|
-
mergeEmit(name,
|
|
406
|
+
mergeEmit(name, callArgs.slice(1).map((a) => lowerer.mapTypeOf(lowerer.typeOf(a))), isJsSourceFile(sf));
|
|
409
407
|
}
|
|
410
|
-
else if (
|
|
411
|
-
const cbCt = lowerer.typeOf(
|
|
412
|
-
const cbT = lowerer.mapTypeOf(cbCt) ?? dynFallbackType(lowerer,
|
|
413
|
-
const pack = readsArgumentsPack(lowerer,
|
|
408
|
+
else if (callArgs[1]) {
|
|
409
|
+
const cbCt = lowerer.typeOf(callArgs[1]);
|
|
410
|
+
const cbT = lowerer.mapTypeOf(cbCt) ?? dynFallbackType(lowerer, callArgs[1], cbCt);
|
|
411
|
+
const pack = readsArgumentsPack(lowerer, callArgs[1]);
|
|
414
412
|
// A TypeScript listener with no parameters is typed too: it
|
|
415
413
|
// registers without the adapter, so an untyped emit reaches it
|
|
416
414
|
// only through the event's fixed ABI. A JavaScript function
|
|
@@ -523,14 +521,108 @@ function isErrorMonitorRef(lowerer, arg) {
|
|
|
523
521
|
const property = lowerer.checker.getPropertyOfType(lowerer.typeOf(variable.initializer), key.text);
|
|
524
522
|
return property !== undefined && isMonitorType(lowerer.checker.getTypeOfSymbol(property));
|
|
525
523
|
}
|
|
524
|
+
/** A name expression whose evaluation has no effects: a string or number
|
|
525
|
+
* literal, a `null`, `true` or `false` keyword, a binding read, or a stored
|
|
526
|
+
* field or record entry read. A call or an accessor lowers as a run-time
|
|
527
|
+
* name so its effects still run. */
|
|
528
|
+
function staticNameExpr(lowerer, arg) {
|
|
529
|
+
const expression = stripValueWrappers(arg);
|
|
530
|
+
if (ts.isStringLiteral(expression) ||
|
|
531
|
+
ts.isNoSubstitutionTemplateLiteral(expression) ||
|
|
532
|
+
ts.isNumericLiteral(expression) ||
|
|
533
|
+
expression.kind === ts.SyntaxKind.NullKeyword ||
|
|
534
|
+
expression.kind === ts.SyntaxKind.TrueKeyword ||
|
|
535
|
+
expression.kind === ts.SyntaxKind.FalseKeyword) {
|
|
536
|
+
return true;
|
|
537
|
+
}
|
|
538
|
+
return isPureReference(lowerer, expression) || staticStdlibRead(lowerer, expression);
|
|
539
|
+
}
|
|
540
|
+
/** A read of a standard library field (`events.errorMonitor`,
|
|
541
|
+
* `EventEmitter.errorMonitor`): a plain member of the standard library's
|
|
542
|
+
* declaration, so it runs no program code. */
|
|
543
|
+
function staticStdlibRead(lowerer, node) {
|
|
544
|
+
if (!ts.isPropertyAccessExpression(node) || node.questionDotToken)
|
|
545
|
+
return false;
|
|
546
|
+
if (!isPureReference(lowerer, node.expression))
|
|
547
|
+
return false;
|
|
548
|
+
const symbol = lowerer.checker.getSymbolAtLocation(node.name);
|
|
549
|
+
return (symbol !== undefined &&
|
|
550
|
+
lowerer.isStdlibSymbol(symbol) &&
|
|
551
|
+
(symbol.flags &
|
|
552
|
+
(ts.SymbolFlags.GetAccessor | ts.SymbolFlags.SetAccessor | ts.SymbolFlags.Method)) ===
|
|
553
|
+
0);
|
|
554
|
+
}
|
|
526
555
|
/** A compile-time event key (literalEventKey): a string-literal TYPE
|
|
527
556
|
* (const bindings and literal unions of one member count — the
|
|
528
|
-
* staticHeaderKeyOf stance) or the errorMonitor symbol
|
|
557
|
+
* staticHeaderKeyOf stance) or the errorMonitor symbol, read without
|
|
558
|
+
* effects. A number-literal type read without effects and a `null`,
|
|
559
|
+
* `undefined`, `true` or `false` literal name the string Node's listener
|
|
560
|
+
* table keys them by, the property key `String(name)`: `on(123, fn)`
|
|
561
|
+
* registers under '123'. */
|
|
529
562
|
function literalEventName(lowerer, arg) {
|
|
530
|
-
|
|
563
|
+
const staticName = staticNameExpr(lowerer, arg);
|
|
564
|
+
if (staticName && isErrorMonitorRef(lowerer, arg))
|
|
531
565
|
return ERROR_MONITOR_EVENT;
|
|
532
|
-
|
|
533
|
-
|
|
566
|
+
if (staticName) {
|
|
567
|
+
const t = lowerer.typeOf(arg);
|
|
568
|
+
if (t.isStringLiteralType())
|
|
569
|
+
return literalEventKey(t.value);
|
|
570
|
+
if (t.isNumberLiteralType())
|
|
571
|
+
return literalEventKey(String(t.value));
|
|
572
|
+
}
|
|
573
|
+
const unit = nullishExprUnitOf(lowerer, arg);
|
|
574
|
+
if (unit !== null)
|
|
575
|
+
return unit;
|
|
576
|
+
let expression = arg;
|
|
577
|
+
while (ts.isParenthesizedExpression(expression))
|
|
578
|
+
expression = expression.expression;
|
|
579
|
+
if (expression.kind === ts.SyntaxKind.TrueKeyword)
|
|
580
|
+
return "true";
|
|
581
|
+
if (expression.kind === ts.SyntaxKind.FalseKeyword)
|
|
582
|
+
return "false";
|
|
583
|
+
return null;
|
|
584
|
+
}
|
|
585
|
+
/** An event-name argument as the string Node's listener table keys it by:
|
|
586
|
+
* a compile-time key, or a string, number or boolean value (or a union of
|
|
587
|
+
* those with null and undefined) converted as a property key
|
|
588
|
+
* (`String(name)`). An untyped value converts with the dynamic ToString,
|
|
589
|
+
* as the untyped emitter entries do. Other names are refused at the
|
|
590
|
+
* argument. */
|
|
591
|
+
function eventNameArg(lowerer, member, arg) {
|
|
592
|
+
const key = literalEventName(lowerer, arg);
|
|
593
|
+
if (key !== null)
|
|
594
|
+
return eventNameExpr(key, locOf(arg));
|
|
595
|
+
const value = lowerer.lowerExpr(arg);
|
|
596
|
+
if (value.type.kind === "string")
|
|
597
|
+
return value;
|
|
598
|
+
const converts = (t) => t.kind === "string" || t.kind === "f64" || t.kind === "bool" || isUnitType(t);
|
|
599
|
+
const union = value.type.kind === "union" ? lowerer.unions.get(value.type.unionId) : undefined;
|
|
600
|
+
if (value.type.kind === "f64" ||
|
|
601
|
+
value.type.kind === "bool" ||
|
|
602
|
+
value.type.kind === "dyn" ||
|
|
603
|
+
(union !== undefined && union.arms.every(converts))) {
|
|
604
|
+
return { kind: "toString", operand: value, type: STRING, loc: value.loc };
|
|
605
|
+
}
|
|
606
|
+
lowerer.noLowering(`${member} with a '${lowerer.fmt(value.type)}' event name`, arg, "event names lower as strings, numbers and booleans (symbol names have no lowering)");
|
|
607
|
+
}
|
|
608
|
+
/** Whether a name that is neither a compile-time key nor a computed name
|
|
609
|
+
* with a constant prefix or suffix reaches the emitter through the bridge
|
|
610
|
+
* typed code uses for untyped receivers (lowerDynamicEmitterOn and
|
|
611
|
+
* lowerDynamicEmitterEmit): the runtime matches the name against the
|
|
612
|
+
* events typed code fixes, and keeps Node's 'error' and meta-event behavior
|
|
613
|
+
* for any other name. Streams keep their fixed internal events. */
|
|
614
|
+
function bridgesUnrestrictedName(lowerer, info, arg) {
|
|
615
|
+
return computedEventPatternOf(lowerer, arg) === null && streamSidesOf(lowerer, info) === null;
|
|
616
|
+
}
|
|
617
|
+
/** literalEventName for the event table's scan, which leaves checker
|
|
618
|
+
* trouble to the lowering: null when the name's type cannot be read. */
|
|
619
|
+
function scannedEventKey(lowerer, arg) {
|
|
620
|
+
try {
|
|
621
|
+
return literalEventName(lowerer, arg);
|
|
622
|
+
}
|
|
623
|
+
catch {
|
|
624
|
+
return null;
|
|
625
|
+
}
|
|
534
626
|
}
|
|
535
627
|
/** The compile-time key for a literal-only operation, or a pointed fence. */
|
|
536
628
|
function eventNameOf(lowerer, member, arg) {
|
|
@@ -1290,11 +1382,13 @@ function lowerListenerArg(lowerer, member, name, node, tuple) {
|
|
|
1290
1382
|
* routes here): the receiver is the current method's `this`, and emit
|
|
1291
1383
|
* NEVER dispatches through an override at-or-below the lexical class —
|
|
1292
1384
|
* JS's static super dispatch (the nearest override STRICTLY ABOVE the
|
|
1293
|
-
* lexical class still answers, exactly like a prototype-chain walk).
|
|
1294
|
-
|
|
1385
|
+
* lexical class still answers, exactly like a prototype-chain walk).
|
|
1386
|
+
* `argsOverride` replaces the call's arguments (`method.call(thisArg,
|
|
1387
|
+
* ...args)` passes the ones after thisArg). */
|
|
1388
|
+
export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv, argsOverride) {
|
|
1295
1389
|
const member = access.name.text;
|
|
1296
1390
|
const loc = locOf(call);
|
|
1297
|
-
const args = call.arguments.nodes;
|
|
1391
|
+
const args = argsOverride ?? call.arguments.nodes;
|
|
1298
1392
|
const lowerReceiver = () => {
|
|
1299
1393
|
if (superRecv)
|
|
1300
1394
|
return superRecv.thisRef;
|
|
@@ -1423,11 +1517,18 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
|
|
|
1423
1517
|
if (literalEventName(lowerer, args[0]) === null) {
|
|
1424
1518
|
// An unrestricted name on a plain emitter takes the any-name path;
|
|
1425
1519
|
// streams keep the fence (their runtime events carry fixed ABIs).
|
|
1426
|
-
const anyName =
|
|
1520
|
+
const anyName = bridgesUnrestrictedName(lowerer, info, args[0]);
|
|
1427
1521
|
if (!anyName)
|
|
1428
1522
|
computedEventPattern(lowerer, info, member, args[0]);
|
|
1523
|
+
// The name may be a meta event, which the runtime fires internally.
|
|
1524
|
+
const ov = anyName && registering ? emitOverrideComparable(info) : null;
|
|
1525
|
+
if (ov) {
|
|
1526
|
+
lowerer.noLowering(`'${member}' with a runtime event name while '${ov.def.jsName || ov.def.name}' overrides emit`, call, "the runtime fires meta events internally, which cannot route through an emit override");
|
|
1527
|
+
}
|
|
1429
1528
|
const receiver = lowerReceiver();
|
|
1430
|
-
const name =
|
|
1529
|
+
const name = anyName
|
|
1530
|
+
? eventNameArg(lowerer, member, args[0])
|
|
1531
|
+
: lowerer.lowerExprExpecting(args[0], STRING);
|
|
1431
1532
|
return lowerFlexListenerCall(lowerer, member, name, receiver, args[1], registering, member === "once" || member === "prependOnceListener", member === "prependListener" || member === "prependOnceListener", loc, anyName ? "emitter.onAny" : "emitter.onFlex", anyName);
|
|
1432
1533
|
}
|
|
1433
1534
|
const name = eventNameOf(lowerer, member, args[0]);
|
|
@@ -1564,8 +1665,8 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
|
|
|
1564
1665
|
loc,
|
|
1565
1666
|
};
|
|
1566
1667
|
}
|
|
1567
|
-
if (
|
|
1568
|
-
const name = lowerer
|
|
1668
|
+
if (bridgesUnrestrictedName(lowerer, info, args[0])) {
|
|
1669
|
+
const name = eventNameArg(lowerer, member, args[0]);
|
|
1569
1670
|
return lowerFlexEmit(name, "computed-name", true);
|
|
1570
1671
|
}
|
|
1571
1672
|
computedEventPattern(lowerer, info, member, args[0]);
|
|
@@ -1651,14 +1752,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
|
|
|
1651
1752
|
}
|
|
1652
1753
|
const all = args.length === 0;
|
|
1653
1754
|
const receiver = lowerReceiver();
|
|
1654
|
-
const name = all
|
|
1655
|
-
? strLit("", loc)
|
|
1656
|
-
: isErrorMonitorRef(lowerer, args[0])
|
|
1657
|
-
? eventNameExpr(ERROR_MONITOR_EVENT, loc)
|
|
1658
|
-
: lowerer.lowerExprExpecting(args[0], STRING);
|
|
1659
|
-
if (name.type.kind !== "string") {
|
|
1660
|
-
lowerer.noLowering(`removeAllListeners with a '${lowerer.fmt(name.type)}' event name`, args[0] ?? call);
|
|
1661
|
-
}
|
|
1755
|
+
const name = all ? strLit("", loc) : eventNameArg(lowerer, member, args[0]);
|
|
1662
1756
|
return {
|
|
1663
1757
|
kind: "libCall",
|
|
1664
1758
|
fn: "emitter.removeAll",
|
|
@@ -1672,12 +1766,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
|
|
|
1672
1766
|
lowerer.noLowering(`listenerCount with ${args.length} arguments`, call);
|
|
1673
1767
|
}
|
|
1674
1768
|
const receiver = lowerReceiver();
|
|
1675
|
-
const name =
|
|
1676
|
-
? eventNameExpr(ERROR_MONITOR_EVENT, loc)
|
|
1677
|
-
: lowerer.lowerExprExpecting(args[0], STRING);
|
|
1678
|
-
if (name.type.kind !== "string") {
|
|
1679
|
-
lowerer.noLowering(`listenerCount with a '${lowerer.fmt(name.type)}' event name`, args[0]);
|
|
1680
|
-
}
|
|
1769
|
+
const name = eventNameArg(lowerer, member, args[0]);
|
|
1681
1770
|
if (args.length === 2) {
|
|
1682
1771
|
// The fn filter matches by identity — the listener's own type is
|
|
1683
1772
|
// its word; no tuple check is needed to count.
|
|
@@ -1711,6 +1800,18 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
|
|
|
1711
1800
|
if (args.length !== 1) {
|
|
1712
1801
|
lowerer.noLowering(`${member} with ${args.length} arguments`, call, "the supported form is (eventName)");
|
|
1713
1802
|
}
|
|
1803
|
+
if (literalEventName(lowerer, args[0]) === null &&
|
|
1804
|
+
bridgesUnrestrictedName(lowerer, info, args[0])) {
|
|
1805
|
+
// A runtime name: the untyped array, as through an untyped receiver.
|
|
1806
|
+
const receiver = lowerReceiver();
|
|
1807
|
+
return {
|
|
1808
|
+
kind: "libCall",
|
|
1809
|
+
fn: "emitter.listenersDyn",
|
|
1810
|
+
args: [receiver, eventNameArg(lowerer, member, args[0])],
|
|
1811
|
+
type: DYN,
|
|
1812
|
+
loc,
|
|
1813
|
+
};
|
|
1814
|
+
}
|
|
1714
1815
|
const name = eventNameOf(lowerer, member, args[0]);
|
|
1715
1816
|
const sig = table.get(name);
|
|
1716
1817
|
if (listenerArrayIsDyn(lowerer, name, sig)) {
|
|
@@ -1935,7 +2036,7 @@ function isWriteTarget(id) {
|
|
|
1935
2036
|
}
|
|
1936
2037
|
}
|
|
1937
2038
|
/** The nearest class at-or-above `info` declaring an emit override. */
|
|
1938
|
-
function emitOverrideAtOrAbove(info) {
|
|
2039
|
+
export function emitOverrideAtOrAbove(info) {
|
|
1939
2040
|
for (let c = info ?? null; c; c = c.base) {
|
|
1940
2041
|
if (c.emitOverride)
|
|
1941
2042
|
return c;
|
|
@@ -2426,15 +2527,43 @@ export function lowerEventsOnce(lowerer, call, loc) {
|
|
|
2426
2527
|
loc,
|
|
2427
2528
|
};
|
|
2428
2529
|
}
|
|
2429
|
-
/** The
|
|
2430
|
-
*
|
|
2431
|
-
|
|
2530
|
+
/** The receiver of an events-module helper: an emitter, answered by its
|
|
2531
|
+
* own methods, or an EventTarget (a plain target, an AbortSignal, or a
|
|
2532
|
+
* compiled subclass), which crosses as a checked-dynamic value and is
|
|
2533
|
+
* answered from its listener state. */
|
|
2534
|
+
function helperReceiver(lowerer, member, node) {
|
|
2432
2535
|
const value = lowerer.lowerExpr(node);
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
|
|
2536
|
+
// A target's lowered value is a checked-dynamic handle, so the class
|
|
2537
|
+
// comes from the static type the checker gives the expression.
|
|
2538
|
+
const staticType = value.type.kind === "object" ? null : lowerer.mapTypeOf(lowerer.typeOf(node));
|
|
2539
|
+
const type = value.type.kind === "object" ? value.type : staticType;
|
|
2540
|
+
const info = type?.kind === "object" ? lowerer.classes.get(type.className) : undefined;
|
|
2541
|
+
if (emitterRooted(lowerer, info)) {
|
|
2542
|
+
if (streamSidesOf(lowerer, info) === null)
|
|
2543
|
+
return { kind: "emitter", value };
|
|
2544
|
+
lowerer.noLowering(`events.${member} over a stream`, node, "a stream's own listenerCount/getMaxListeners/setMaxListeners/listeners answer its emitter; stream arguments are not supported yet");
|
|
2545
|
+
}
|
|
2546
|
+
// Everything else is resolved at runtime: an EventTarget (a plain target,
|
|
2547
|
+
// an AbortSignal, a compiled subclass, or a value whose static type is
|
|
2548
|
+
// checked-dynamic) answers from its own state, and any other value throws
|
|
2549
|
+
// Node's ERR_INVALID_ARG_TYPE.
|
|
2550
|
+
const dyn = lowerer.coerceToExpected(value, DYN);
|
|
2551
|
+
if (dyn.type.kind === "dyn")
|
|
2552
|
+
return { kind: "target", value: dyn };
|
|
2553
|
+
lowerer.noLowering(`events.${member} over this value`, node, "pass an EventEmitter instance, an EventTarget, or a value of a checked-dynamic type");
|
|
2554
|
+
}
|
|
2555
|
+
/** The event name of a helper over a target: the string itself, or a
|
|
2556
|
+
* checked-dynamic value (a value that is not a string matches no event
|
|
2557
|
+
* type, which the runtime answers as an empty result). */
|
|
2558
|
+
function helperTypeName(lowerer, node) {
|
|
2559
|
+
const value = lowerer.lowerExpr(node);
|
|
2560
|
+
if (value.type.kind === "string")
|
|
2561
|
+
return { expr: value, dyn: false };
|
|
2562
|
+
const converted = lowerer.coerceToExpected(value, DYN);
|
|
2563
|
+
if (converted.type.kind !== "dyn") {
|
|
2564
|
+
lowerer.noLowering(`an events helper with a '${lowerer.fmt(value.type)}' event name`, node, "pass a string, or a value whose type is checked-dynamic");
|
|
2436
2565
|
}
|
|
2437
|
-
return
|
|
2566
|
+
return { expr: converted, dyn: true };
|
|
2438
2567
|
}
|
|
2439
2568
|
/** setMaxListeners(n) with no targets: the process-wide default, through
|
|
2440
2569
|
* Node's validateNumber(n, 'setMaxListeners', 0) ladder. */
|
|
@@ -2474,7 +2603,18 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
|
|
|
2474
2603
|
if (member === "listenerCount") {
|
|
2475
2604
|
if (args.length !== 2)
|
|
2476
2605
|
lowerer.noLowering(`events.listenerCount with ${args.length} arguments`, call);
|
|
2477
|
-
const
|
|
2606
|
+
const helper = helperReceiver(lowerer, member, args[0]);
|
|
2607
|
+
if (helper.kind === "target") {
|
|
2608
|
+
const type = helperTypeName(lowerer, args[1]);
|
|
2609
|
+
return {
|
|
2610
|
+
kind: "libCall",
|
|
2611
|
+
fn: type.dyn ? "event.targetListenerCountDyn" : "event.targetListenerCount",
|
|
2612
|
+
args: [helper.value, type.expr],
|
|
2613
|
+
type: F64,
|
|
2614
|
+
loc,
|
|
2615
|
+
};
|
|
2616
|
+
}
|
|
2617
|
+
const receiver = helper.value;
|
|
2478
2618
|
const name = isErrorMonitorRef(lowerer, args[1])
|
|
2479
2619
|
? eventNameExpr(ERROR_MONITOR_EVENT, loc)
|
|
2480
2620
|
: lowerer.lowerExprExpecting(args[1], STRING);
|
|
@@ -2486,8 +2626,14 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
|
|
|
2486
2626
|
if (member === "getMaxListeners") {
|
|
2487
2627
|
if (args.length !== 1)
|
|
2488
2628
|
lowerer.noLowering(`events.getMaxListeners with ${args.length} arguments`, call);
|
|
2489
|
-
const
|
|
2490
|
-
return {
|
|
2629
|
+
const helper = helperReceiver(lowerer, member, args[0]);
|
|
2630
|
+
return {
|
|
2631
|
+
kind: "libCall",
|
|
2632
|
+
fn: helper.kind === "target" ? "event.targetGetMax" : "emitter.getMax",
|
|
2633
|
+
args: [helper.value],
|
|
2634
|
+
type: F64,
|
|
2635
|
+
loc,
|
|
2636
|
+
};
|
|
2491
2637
|
}
|
|
2492
2638
|
if (member === "setMaxListeners") {
|
|
2493
2639
|
// An omitted n is the current default, assigned again.
|
|
@@ -2510,21 +2656,29 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
|
|
|
2510
2656
|
const limit = lowerer.declareHiddenLocal("%maxListeners", F64);
|
|
2511
2657
|
const stmts = [{ kind: "varDecl", localId: limit.id, init: n, loc }];
|
|
2512
2658
|
const targets = args.slice(1).map((node) => {
|
|
2513
|
-
const
|
|
2514
|
-
const slot = lowerer.declareHiddenLocal("%maxListenersTarget", value.type);
|
|
2515
|
-
stmts.push({ kind: "varDecl", localId: slot.id, init: value, loc });
|
|
2516
|
-
return varRef(slot.id, value.type, loc);
|
|
2659
|
+
const helper = helperReceiver(lowerer, member, node);
|
|
2660
|
+
const slot = lowerer.declareHiddenLocal("%maxListenersTarget", helper.value.type);
|
|
2661
|
+
stmts.push({ kind: "varDecl", localId: slot.id, init: helper.value, loc });
|
|
2662
|
+
return { kind: helper.kind, value: varRef(slot.id, helper.value.type, loc) };
|
|
2517
2663
|
});
|
|
2518
2664
|
for (const target of targets) {
|
|
2519
2665
|
stmts.push({
|
|
2520
2666
|
kind: "exprStmt",
|
|
2521
|
-
expr:
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2667
|
+
expr: target.kind === "target"
|
|
2668
|
+
? {
|
|
2669
|
+
kind: "libCall",
|
|
2670
|
+
fn: "event.targetSetMax",
|
|
2671
|
+
args: [target.value, varRef(limit.id, F64, loc)],
|
|
2672
|
+
type: VOID,
|
|
2673
|
+
loc,
|
|
2674
|
+
}
|
|
2675
|
+
: {
|
|
2676
|
+
kind: "libCall",
|
|
2677
|
+
fn: "emitter.setMax",
|
|
2678
|
+
args: [target.value, varRef(limit.id, F64, loc)],
|
|
2679
|
+
type: target.value.type,
|
|
2680
|
+
loc,
|
|
2681
|
+
},
|
|
2528
2682
|
loc,
|
|
2529
2683
|
});
|
|
2530
2684
|
}
|
|
@@ -2535,9 +2689,25 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
|
|
|
2535
2689
|
if (member === "getEventListeners") {
|
|
2536
2690
|
if (args.length !== 2)
|
|
2537
2691
|
lowerer.noLowering(`events.getEventListeners with ${args.length} arguments`, call);
|
|
2692
|
+
const helper = helperReceiver(lowerer, member, args[0]);
|
|
2693
|
+
if (helper.kind === "target") {
|
|
2694
|
+
// The target's listeners of the type, in registration order.
|
|
2695
|
+
const type = helperTypeName(lowerer, args[1]);
|
|
2696
|
+
const listeners = {
|
|
2697
|
+
kind: "libCall",
|
|
2698
|
+
fn: type.dyn ? "event.targetListenersDyn" : "event.targetListeners",
|
|
2699
|
+
args: [helper.value, type.expr],
|
|
2700
|
+
type: DYN,
|
|
2701
|
+
loc,
|
|
2702
|
+
};
|
|
2703
|
+
// Node returns the listeners as registered, so a listener object with
|
|
2704
|
+
// handleEvent comes back as itself; typed reads of the array convert
|
|
2705
|
+
// each element where it is used.
|
|
2706
|
+
return { kind: "dynCheck", value: listeners, type: arrayOf(DYN), loc };
|
|
2707
|
+
}
|
|
2538
2708
|
// emitter.listeners(name): the event's listener array, typed by the
|
|
2539
2709
|
// event's unified tuple (the instance method's rules).
|
|
2540
|
-
const receiver =
|
|
2710
|
+
const receiver = helper.value;
|
|
2541
2711
|
const name = eventNameOf(lowerer, "events.getEventListeners", args[1]);
|
|
2542
2712
|
const table = emitterEvents(lowerer);
|
|
2543
2713
|
const sig = table.get(name);
|