@scriptc/compiler 0.4.7 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/node-fallback/child_process.d.ts +71 -22
- package/ambient/node-fallback/crypto.d.ts +15 -7
- package/ambient/node-fallback/events.d.ts +23 -5
- package/ambient/node-fallback/fs.d.ts +3 -2
- package/ambient/node-fallback/http.d.ts +23 -17
- package/ambient/node-fallback/https.d.ts +5 -2
- package/ambient/node-fallback/net.d.ts +6 -0
- package/ambient/node-fallback/os.d.ts +11 -1
- package/ambient/node-fallback/path-posix.d.ts +6 -0
- package/ambient/node-fallback/path-win32.d.ts +5 -0
- package/ambient/node-fallback/path.d.ts +2 -0
- package/ambient/node-fallback/zlib.d.ts +31 -2
- package/ambient/scriptc-node-fallback.d.ts +37 -7
- package/ambient/scriptc.d.ts +7 -2
- package/dist/backend/executable-features.js +11 -3
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.d.ts +6 -0
- package/dist/backend/library-pack.js +17 -6
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/library-pack.test.d.ts +1 -0
- package/dist/backend/library-pack.test.js +28 -0
- package/dist/backend/library-pack.test.js.map +1 -0
- package/dist/backend/linker.d.ts +9 -2
- package/dist/backend/linker.js +190 -32
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +8 -4
- package/dist/backend/lld.js +19 -13
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +3 -1
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -2
- package/dist/backend/llvm/alloc.js +172 -36
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +69 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/arenas.d.ts +17 -4
- package/dist/backend/llvm/arenas.js +105 -10
- package/dist/backend/llvm/arenas.js.map +1 -1
- package/dist/backend/llvm/arenas.test.js +229 -0
- package/dist/backend/llvm/arenas.test.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.js +10 -1
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-headers.js +6 -0
- package/dist/backend/llvm/bytes-headers.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.js +10 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -9
- package/dist/backend/llvm/classes.js +142 -37
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +42 -0
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
- package/dist/backend/llvm/cpu-dispatch.js +31 -7
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +12 -3
- package/dist/backend/llvm/dyn.js +31 -7
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +67 -4
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +90 -39
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.d.ts +1 -0
- package/dist/backend/llvm/emit-module.test.js +52 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -0
- package/dist/backend/llvm/emit-statements.js +99 -15
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +113 -8
- package/dist/backend/llvm/emitter.js +438 -67
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +31 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +16 -1
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +18 -2
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +31 -10
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +31 -3
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +124 -56
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +17 -0
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/js-groups.d.ts +21 -0
- package/dist/backend/llvm/js-groups.js +277 -0
- package/dist/backend/llvm/js-groups.js.map +1 -0
- package/dist/backend/llvm/js-ic.d.ts +19 -1
- package/dist/backend/llvm/js-ic.js +96 -23
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +132 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +33 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +44 -3
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +69 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +32 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-state.js +7 -2
- package/dist/backend/llvm/loop-state.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
- package/dist/backend/llvm/map-entry-fusion.js +3 -3
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +6 -6
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +7 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +4 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/receivers.js +3 -0
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
- package/dist/backend/llvm/record-entry-fusion.js +217 -0
- package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +5 -2
- package/dist/backend/llvm/record-results.js +13 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-views.js +12 -6
- package/dist/backend/llvm/record-views.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +1 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +3 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-ir.js +1 -0
- package/dist/backend/llvm/region-ir.js.map +1 -1
- package/dist/backend/llvm/region-sites.d.ts +18 -0
- package/dist/backend/llvm/region-sites.js +79 -1
- package/dist/backend/llvm/region-sites.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +53 -6
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +33 -3
- package/dist/backend/llvm/shapes.js +183 -13
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +1 -2
- package/dist/backend/llvm/stack-objects.js +8 -5
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +12 -0
- package/dist/backend/llvm/walkers.js +46 -2
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +12 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +13 -0
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +48 -8
- package/dist/backend/native/executable.js +55 -13
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/helper-identity-record.d.ts +11 -0
- package/dist/backend/native/helper-identity-record.js +76 -0
- package/dist/backend/native/helper-identity-record.js.map +1 -0
- package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
- package/dist/backend/native/helper-identity-record.test.js +101 -0
- package/dist/backend/native/helper-identity-record.test.js.map +1 -0
- package/dist/backend/native/library.js +9 -1
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.js +4 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +13 -10
- package/dist/backend/native-codegen-core.js +26 -13
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.js +27 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +110 -14
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +37 -8
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/runtime-pack-core.d.ts +17 -2
- package/dist/backend/runtime-pack-core.js +18 -3
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +211 -2
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/tree-classes.d.ts +42 -0
- package/dist/backend/tree-classes.js +723 -0
- package/dist/backend/tree-classes.js.map +1 -0
- package/dist/backend/tree-classes.test.d.ts +1 -0
- package/dist/backend/tree-classes.test.js +338 -0
- package/dist/backend/tree-classes.test.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +5 -1
- package/dist/backend/vendor-archives.js +51 -7
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +25 -4
- package/dist/backend/vendor-inputs.js +68 -4
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +35 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -1
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.js +2 -2
- package/dist/coverage/report.js +47 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -1
- package/dist/diagnostics/codes.d.ts +8 -0
- package/dist/diagnostics/codes.js +8 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +27 -9
- package/dist/diagnostics/diagnostic.js +60 -19
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +18 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +21 -2
- package/dist/executable/executable-cache.js +21 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +123 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +199 -248
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +200 -18
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +4 -0
- package/dist/frontend/builtin-modules.js +10 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/early-errors.d.ts +12 -2
- package/dist/frontend/early-errors.js +535 -4
- package/dist/frontend/early-errors.js.map +1 -1
- package/dist/frontend/early-errors.test.js +165 -0
- package/dist/frontend/early-errors.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.test.js +65 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
- package/dist/frontend/jsx-opinion-sites.test.js +86 -0
- package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
- package/dist/frontend/lib-exports.d.ts +23 -4
- package/dist/frontend/lib-exports.js +98 -26
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.js +21 -3
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/buffers.d.ts +8 -0
- package/dist/frontend/lowering/buffers.js +43 -0
- package/dist/frontend/lowering/buffers.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.js +4 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
- package/dist/frontend/lowering/builtin-namespaces.js +24 -3
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
- package/dist/frontend/lowering/builtin-statics.js +407 -0
- package/dist/frontend/lowering/builtin-statics.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +12 -0
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
- package/dist/frontend/lowering/builtins/atomics.js +87 -1
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +2 -2
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
- package/dist/frontend/lowering/builtins/child-process.js +560 -27
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
- package/dist/frontend/lowering/builtins/compression.js +41 -21
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +7 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +28 -2
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +4 -0
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +3 -1
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
- package/dist/frontend/lowering/builtins/numbers.js +10 -2
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +6 -3
- package/dist/frontend/lowering/builtins/operating-system.js +96 -16
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +2 -2
- package/dist/frontend/lowering/builtins/process.js +103 -8
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +169 -8
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.js +6 -2
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
- package/dist/frontend/lowering/builtins/readline.js +180 -36
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +35 -12
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +2 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.d.ts +10 -0
- package/dist/frontend/lowering/call-arguments.js +37 -2
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +10 -0
- package/dist/frontend/lowering/call-signatures.js +103 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +14 -2
- package/dist/frontend/lowering/class-construction.js +99 -5
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +9 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1283 -1030
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +20 -15
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +20 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +21 -4
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +9 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +8 -0
- package/dist/frontend/lowering/coercions/state.js +17 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +20 -5
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +10 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
- package/dist/frontend/lowering/coercions/unions.js +54 -10
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
- package/dist/frontend/lowering/constructor-returns.js +284 -58
- package/dist/frontend/lowering/constructor-returns.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +156 -62
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +21 -3
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.js +139 -3
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
- package/dist/frontend/lowering/containers/array-iteration.js +24 -7
- package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +14 -11
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
- package/dist/frontend/lowering/containers/bytes.js +446 -86
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +5 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +21 -12
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +52 -17
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +5 -5
- package/dist/frontend/lowering/dispatch-sites.js +3 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +40 -0
- package/dist/frontend/lowering/divergences.js +239 -20
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/effect-free.d.ts +12 -0
- package/dist/frontend/lowering/effect-free.js +44 -0
- package/dist/frontend/lowering/effect-free.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/array-literals.js +62 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +115 -5
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +151 -7
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +31 -2
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
- package/dist/frontend/lowering/expressions/narrowing.js +175 -22
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +173 -11
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +5 -1
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +8 -0
- package/dist/frontend/lowering/expressions/property-access.js +379 -109
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +237 -7
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +8 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
- package/dist/frontend/lowering/expressions/union-fields.js +103 -13
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +74 -55
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +37 -10
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.js +5 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
- package/dist/frontend/lowering/generator-delegation.js +301 -118
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +27 -1
- package/dist/frontend/lowering/generic-functions.js +432 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-function-values.d.ts +25 -0
- package/dist/frontend/lowering/global-function-values.js +193 -0
- package/dist/frontend/lowering/global-function-values.js.map +1 -0
- package/dist/frontend/lowering/global-values.d.ts +6 -4
- package/dist/frontend/lowering/global-values.js +24 -10
- package/dist/frontend/lowering/global-values.js.map +1 -1
- package/dist/frontend/lowering/host-global-values.d.ts +31 -0
- package/dist/frontend/lowering/host-global-values.js +121 -0
- package/dist/frontend/lowering/host-global-values.js.map +1 -0
- package/dist/frontend/lowering/host-globals.d.ts +74 -0
- package/dist/frontend/lowering/host-globals.js +344 -0
- package/dist/frontend/lowering/host-globals.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +46 -17
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
- package/dist/frontend/lowering/iterator-prototype.js +160 -0
- package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.js +43 -22
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +11 -3
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +30 -15
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
- package/dist/frontend/lowering/lower-async-iteration.js +15 -0
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +11 -1
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +25 -0
- package/dist/frontend/lowering/lower-calls.js +929 -227
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.js +59 -16
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +20 -0
- package/dist/frontend/lowering/lower-classes.js +468 -44
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -2
- package/dist/frontend/lowering/lower-event-emitter.js +253 -83
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +1 -1
- package/dist/frontend/lowering/lower-exprs.js +71 -20
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +25 -6
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +57 -10
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
- package/dist/frontend/lowering/lower-global-value.js +14 -5
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
- package/dist/frontend/lowering/lower-inspect.js +638 -64
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +48 -2
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +18 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.js +16 -6
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +303 -87
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +45 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +14 -11
- package/dist/frontend/lowering/lower-stmts.js +270 -52
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +110 -27
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +6 -3
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +227 -21
- package/dist/frontend/lowering/lowerer.js +651 -92
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +18 -0
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
- package/dist/frontend/lowering/lowering-facts.js +323 -0
- package/dist/frontend/lowering/lowering-facts.js.map +1 -0
- package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
- package/dist/frontend/lowering/lowering-facts.test.js +100 -0
- package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
- package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
- package/dist/frontend/lowering/nan-coded-reads.js +112 -9
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
- package/dist/frontend/lowering/optional-arguments.js +26 -2
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.d.ts +0 -3
- package/dist/frontend/lowering/partial-assertions.js +9 -15
- package/dist/frontend/lowering/partial-assertions.js.map +1 -1
- package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
- package/dist/frontend/lowering/primitive-throws.js +241 -0
- package/dist/frontend/lowering/primitive-throws.js.map +1 -0
- package/dist/frontend/lowering/primitive-wrappers.js +1 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
- package/dist/frontend/lowering/record-inherited.d.ts +17 -1
- package/dist/frontend/lowering/record-inherited.js +16 -2
- package/dist/frontend/lowering/record-inherited.js.map +1 -1
- package/dist/frontend/lowering/record-links.d.ts +73 -0
- package/dist/frontend/lowering/record-links.js +797 -0
- package/dist/frontend/lowering/record-links.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
- package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
- package/dist/frontend/lowering/runtime-optional-report.js +300 -0
- package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +3 -1
- package/dist/frontend/lowering/static-typeof.js +6 -1
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +1 -5
- package/dist/frontend/lowering/strict-mode.js +4 -30
- package/dist/frontend/lowering/strict-mode.js.map +1 -1
- package/dist/frontend/lowering/structural-instances.d.ts +7 -0
- package/dist/frontend/lowering/structural-instances.js +23 -0
- package/dist/frontend/lowering/structural-instances.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +15 -1
- package/dist/frontend/lowering/surfaces.js +78 -10
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-retag.d.ts +13 -1
- package/dist/frontend/lowering/union-retag.js +55 -1
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +51 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +8 -0
- package/dist/frontend/lowering/unit-journal.js +14 -0
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +36 -1
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/zlib-constants.js +3 -2
- package/dist/frontend/lowering/zlib-constants.js.map +1 -1
- package/dist/frontend/npm-static.js +78 -9
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +95 -2
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +5 -4
- package/dist/frontend/pipeline.js +94 -31
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +68 -11
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program.d.ts +62 -2
- package/dist/frontend/program.js +695 -422
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +37 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/services-node.d.ts +7 -0
- package/dist/frontend/services-node.js +32 -1
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services-node.test.js +51 -0
- package/dist/frontend/services-node.test.js.map +1 -1
- package/dist/frontend/shape-inference/overlay.js +68 -2
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- package/dist/frontend/tier-analysis.d.ts +9 -0
- package/dist/frontend/tier-analysis.js +1 -0
- package/dist/frontend/tier-analysis.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +57 -3
- package/dist/frontend/tsc-codes.js +935 -150
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/tsc-codes.test.js +221 -12
- package/dist/frontend/tsc-codes.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +91 -9
- package/dist/frontend/type-mapper.js +622 -181
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +80 -15
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +60 -0
- package/dist/index.test.js.map +1 -0
- package/dist/ir/builtin-effects.js +43 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +242 -16
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +3 -2
- package/dist/ir/callback-specialization.js +35 -25
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.d.ts +8 -4
- package/dist/ir/capture-values.js +9 -6
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +6 -2
- package/dist/ir/char-unit-locals.js +11 -2
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/class-key-index.d.ts +18 -0
- package/dist/ir/class-key-index.js +29 -0
- package/dist/ir/class-key-index.js.map +1 -0
- package/dist/ir/class-key-index.test.d.ts +1 -0
- package/dist/ir/class-key-index.test.js +25 -0
- package/dist/ir/class-key-index.test.js.map +1 -0
- package/dist/ir/codec.generated.d.ts +1 -1
- package/dist/ir/codec.generated.js +724 -648
- package/dist/ir/codec.generated.js.map +1 -1
- package/dist/ir/constant-globals.d.ts +5 -2
- package/dist/ir/constant-globals.js +25 -27
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +4 -2
- package/dist/ir/expression-inlining.js +8 -2
- package/dist/ir/expression-inlining.js.map +1 -1
- package/dist/ir/field-values.d.ts +5 -2
- package/dist/ir/field-values.js +32 -21
- package/dist/ir/field-values.js.map +1 -1
- package/dist/ir/fields.generated.d.ts +11 -2
- package/dist/ir/fields.generated.js +8 -0
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/final-fields.js +1 -1
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +5 -4
- package/dist/ir/function-references.js +7 -4
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +7 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.d.ts +4 -2
- package/dist/ir/init-only-globals.js +17 -18
- package/dist/ir/init-only-globals.js.map +1 -1
- package/dist/ir/inline-array-views.js +1 -0
- package/dist/ir/inline-array-views.js.map +1 -1
- package/dist/ir/int32-slots.js +7 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/ir.d.ts +59 -4
- package/dist/ir/ir.js +7 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-groups.d.ts +51 -0
- package/dist/ir/js-groups.js +394 -0
- package/dist/ir/js-groups.js.map +1 -0
- package/dist/ir/js-groups.test.d.ts +1 -0
- package/dist/ir/js-groups.test.js +555 -0
- package/dist/ir/js-groups.test.js.map +1 -0
- package/dist/ir/js-ic.js +30 -5
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +27 -1
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +23 -6
- package/dist/ir/node-index.js +126 -49
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +4 -2
- package/dist/ir/numeric-call-specialization.js +40 -26
- package/dist/ir/numeric-call-specialization.js.map +1 -1
- package/dist/ir/paired-while-loops.d.ts +4 -2
- package/dist/ir/paired-while-loops.js +8 -2
- package/dist/ir/paired-while-loops.js.map +1 -1
- package/dist/ir/parameter-versions.d.ts +13 -4
- package/dist/ir/parameter-versions.js +63 -42
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/property-bags.d.ts +4 -2
- package/dist/ir/property-bags.js +22 -17
- package/dist/ir/property-bags.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +4 -2
- package/dist/ir/row-pairs.js +12 -11
- package/dist/ir/row-pairs.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +87 -12
- package/dist/ir/runtime-features.js +263 -160
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +109 -139
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/runtime-jam-loops.d.ts +35 -0
- package/dist/ir/runtime-jam-loops.js +604 -0
- package/dist/ir/runtime-jam-loops.js.map +1 -0
- package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
- package/dist/ir/runtime-jam-loops.test.js +565 -0
- package/dist/ir/runtime-jam-loops.test.js.map +1 -0
- package/dist/ir/saturating-loop-jams.d.ts +4 -2
- package/dist/ir/saturating-loop-jams.js +11 -10
- package/dist/ir/saturating-loop-jams.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +5 -2
- package/dist/ir/scalar-records.js +12 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/self-captures.d.ts +4 -2
- package/dist/ir/self-captures.js +32 -27
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/serialize.d.ts +6 -1
- package/dist/ir/serialize.js +87 -23
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +26 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/typed-argument-clones.d.ts +30 -0
- package/dist/ir/typed-argument-clones.js +789 -0
- package/dist/ir/typed-argument-clones.js.map +1 -0
- package/dist/ir/union-arm-loops.d.ts +3 -0
- package/dist/ir/union-arm-loops.js +373 -0
- package/dist/ir/union-arm-loops.js.map +1 -0
- package/dist/ir/union-arm-loops.test.d.ts +1 -0
- package/dist/ir/union-arm-loops.test.js +230 -0
- package/dist/ir/union-arm-loops.test.js.map +1 -0
- package/dist/ir/validate.js +88 -18
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/compiler-self-identity.d.ts +8 -2
- package/dist/library/compiler-self-identity.js +92 -18
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.js +150 -3
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/int-infer.d.ts +5 -0
- package/dist/library/int-infer.js +15 -3
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/ir-policy.js +1 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +4 -0
- package/dist/library/library-cache.js +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +26 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/prepare.js +99 -31
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cache.d.ts +7 -0
- package/dist/native/cache.js +47 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +13 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +1 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +18 -3
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache-open.test.js +31 -5
- package/dist/native/executable-cache-open.test.js.map +1 -1
- package/dist/native/executable-cache.d.ts +6 -1
- package/dist/native/executable-cache.js +7 -1
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +3 -0
- package/dist/native/prepare.js +43 -26
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +25 -3
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.js +10 -1
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +7 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +12 -0
- package/dist/node-islands/boundary.js +38 -6
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.d.ts +1 -0
- package/dist/node-islands/boundary.test.js +76 -0
- package/dist/node-islands/boundary.test.js.map +1 -0
- package/dist/node-islands/detect.d.ts +9 -0
- package/dist/node-islands/detect.js +110 -0
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +24 -0
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/graph-islands.d.ts +40 -0
- package/dist/node-islands/graph-islands.js +128 -0
- package/dist/node-islands/graph-islands.js.map +1 -0
- package/dist/node-islands/growth.d.ts +57 -0
- package/dist/node-islands/growth.js +205 -0
- package/dist/node-islands/growth.js.map +1 -0
- package/dist/node-islands/report.d.ts +12 -0
- package/dist/node-islands/report.js +28 -0
- package/dist/node-islands/report.js.map +1 -1
- package/dist/node-islands/report.test.js +2 -0
- package/dist/node-islands/report.test.js.map +1 -1
- package/dist/node-islands/rules.js +5 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +11 -2
- package/dist/node-islands/scan.js +61 -9
- package/dist/node-islands/scan.js.map +1 -1
- package/dist/wasm/translate.js +11 -5
- package/dist/wasm/translate.js.map +1 -1
- package/dist/wasm/translate.test.js +35 -0
- package/dist/wasm/translate.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +184 -117
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* instanceof and in, including private-name and runtime-key in. */
|
|
2
|
+
import { lowerIteratorInstanceOf } from "../iterator-prototype.js";
|
|
2
3
|
import { programCreatesWrappers, WRAPPER_KIND_NUMBER } from "../primitive-wrappers.js";
|
|
3
4
|
import { lowerArrayClassInstanceOf } from "../builtins/array-classes.js";
|
|
4
5
|
import { dateRootOf } from "../builtins/date-classes.js";
|
|
@@ -23,9 +24,11 @@ import { lowerMimeInstanceof } from "../builtins/mime.js";
|
|
|
23
24
|
import { typedArrayHasMember } from "../builtins/typed-array-members.js";
|
|
24
25
|
import { fenceEarlyNsMemberRef, nsMemberIdentOf } from "../lower-namespaces.js";
|
|
25
26
|
import { maybePromiseInstanceOf } from "../maybe-promise.js";
|
|
27
|
+
import { lowerGlobalObjectValue } from "../lower-global-value.js";
|
|
26
28
|
import { isSafeToDiscard, isSafeToRepeat } from "./evaluation-safety.js";
|
|
29
|
+
import { inOperatorTypeError, isBuiltinIdentityToken, isPrimitiveValueType, throwAfterEach, } from "../primitive-throws.js";
|
|
27
30
|
import { partialFieldPresence } from "../partial-assertions.js";
|
|
28
|
-
import { storedClassValueType } from "../lower-classes.js";
|
|
31
|
+
import { classDeclaresHasInstanceHook, storedClassValueType, } from "../lower-classes.js";
|
|
29
32
|
import { classInstanceOf } from "../class-dynamic-dispatch.js";
|
|
30
33
|
import { InternalCompilerError } from "../../../errors.js";
|
|
31
34
|
import { tryLowerExpression } from "./try-lower-expression.js";
|
|
@@ -34,12 +37,17 @@ import { isJsSourceFile, locOf } from "../../program.js";
|
|
|
34
37
|
import { checkedClassInstanceOf } from "../class-construction.js";
|
|
35
38
|
import { unsupportedDiag } from "../../../diagnostics/diagnostic.js";
|
|
36
39
|
import { globalSymbolKey } from "./global-symbols.js";
|
|
40
|
+
import { hostAbsentInstall, isGlobalObjectRead, NODE_GLOBALS_WITHOUT_NATIVE, } from "../host-globals.js";
|
|
41
|
+
import { hasGlobalFunctionValue } from "../global-function-values.js";
|
|
37
42
|
import { builtinGlobalHasKey } from "../builtins/global-namespace-keys.js";
|
|
38
43
|
import { foldedStringKeyOf } from "./object-literals.js";
|
|
39
|
-
import { NARROW_FIRST, sideEffectFreeOptionValue } from "../surfaces.js";
|
|
44
|
+
import { NARROW_FIRST, sideEffectFreeOptionValue, stdlibGlobalNameOf } from "../surfaces.js";
|
|
40
45
|
import { isExecExceptionType, refuseExecExceptionCode } from "../builtins/errors.js";
|
|
41
46
|
import { hasRuntimeStatics } from "../class-runtime-statics.js";
|
|
42
47
|
import { nullProtoRecordShape, recordNullProtoTest } from "../null-prototype.js";
|
|
48
|
+
import { recordMayKeepSource } from "../record-sources.js";
|
|
49
|
+
import { recordHasOwnHelper } from "../lower-calls.js";
|
|
50
|
+
import { hostGlobalConstructorOfPrototype, hostGlobalNameOfRead } from "../host-globals.js";
|
|
43
51
|
/** The class value an `instanceof` right-hand side holds. A JavaScript
|
|
44
52
|
* object's property holding a program class (`holder.type`) reads as a
|
|
45
53
|
* checked-dynamic value that the checker types as the class: it converts
|
|
@@ -72,6 +80,19 @@ const NO_CLASS_INSTANCE_KINDS = new Set([
|
|
|
72
80
|
"nullT",
|
|
73
81
|
]);
|
|
74
82
|
const PRIMITIVE_WRAPPERS = ["Boolean", "Number", "String", "BigInt", "Symbol"];
|
|
83
|
+
/** The known answer of an `instanceof` test on a listed Node global's value,
|
|
84
|
+
* after the left operand's evaluation (kept for its effects, as Node runs
|
|
85
|
+
* it before the test). */
|
|
86
|
+
function hostGlobalInstanceOfAnswer(lowerer, expr, answer, loc) {
|
|
87
|
+
const value = lowerer.coerceInto(expr.left, lowerer.lowerExpr(expr.left), DYN);
|
|
88
|
+
return {
|
|
89
|
+
kind: "seqExpr",
|
|
90
|
+
stmts: [{ kind: "exprStmt", expr: value, loc }],
|
|
91
|
+
result: { kind: "boolLit", value: answer, type: BOOL, loc },
|
|
92
|
+
type: BOOL,
|
|
93
|
+
loc,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
75
96
|
/** `x instanceof C` for a program-declared class C. When x's static
|
|
76
97
|
* class and C are both in extends-hierarchies the test is dynamic — the
|
|
77
98
|
* O(1) preorder-interval check against the vtable (`instanceOf` node).
|
|
@@ -82,6 +103,25 @@ const PRIMITIVE_WRAPPERS = ["Boolean", "Number", "String", "BigInt", "Symbol"];
|
|
|
82
103
|
* Folding is limited to side-effect-free operands — dropping a computed
|
|
83
104
|
* operand would skip its effects, so those are rejected instead. */
|
|
84
105
|
export function lowerInstanceOf(lowerer, expr, loc) {
|
|
106
|
+
const iteratorTest = lowerIteratorInstanceOf(lowerer, expr, loc);
|
|
107
|
+
if (iteratorTest !== null)
|
|
108
|
+
return iteratorTest;
|
|
109
|
+
// A listed Node global's value is a constructor native code never created
|
|
110
|
+
// an instance from, so `x instanceof X` is false for every value — an
|
|
111
|
+
// ordinary function's [[Prototype]] included, which the generic walk
|
|
112
|
+
// cannot read and would throw its unsupported-getPrototypeOf error for.
|
|
113
|
+
// The value is itself a Function instance, as Node's class is; the
|
|
114
|
+
// runtime's generic walk stops at the object that terminates the value's
|
|
115
|
+
// prototype chain, so that one answer is folded here too. The operand
|
|
116
|
+
// still runs, as Node evaluates it before the test.
|
|
117
|
+
if (hostGlobalNameOfRead(lowerer, expr.right) !== null)
|
|
118
|
+
return hostGlobalInstanceOfAnswer(lowerer, expr, false, loc);
|
|
119
|
+
if (lowerer.isStdlibGlobal(expr.right, "Function")) {
|
|
120
|
+
const value = hostGlobalNameOfRead(lowerer, expr.left) ??
|
|
121
|
+
hostGlobalConstructorOfPrototype(lowerer, expr.left);
|
|
122
|
+
if (value !== null)
|
|
123
|
+
return hostGlobalInstanceOfAnswer(lowerer, expr, true, loc);
|
|
124
|
+
}
|
|
85
125
|
const arrayClassTest = lowerArrayClassInstanceOf(lowerer, expr, loc);
|
|
86
126
|
if (arrayClassTest !== null)
|
|
87
127
|
return arrayClassTest;
|
|
@@ -495,6 +535,12 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
495
535
|
: undefined;
|
|
496
536
|
if (caught && caughtTarget && !caughtTarget.localClass && !caughtTarget.def.runtime) {
|
|
497
537
|
const classValue = lowerer.lowerExpr(expr.right);
|
|
538
|
+
// A class that declares a static `Symbol.hasInstance` hook answers
|
|
539
|
+
// through the hook: the caught payload reaches it as a checked-dynamic
|
|
540
|
+
// value, exactly as a thrown value reaches Node's hook.
|
|
541
|
+
if (classDeclaresHasInstanceHook(caughtTarget)) {
|
|
542
|
+
return checkedClassInstanceOf(lowerer, { kind: "caughtToDyn", value: varRef(caught.id, CAUGHT, loc), type: DYN, loc }, lowerer.coerceToExpected(classValue, DYN), dynInstanceOfRefusal(lowerer, expr), loc);
|
|
543
|
+
}
|
|
498
544
|
if (caughtTarget.subclasses.length === 0) {
|
|
499
545
|
return {
|
|
500
546
|
kind: "seqExpr",
|
|
@@ -544,6 +590,14 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
544
590
|
lowerer.unsupported("SC1090", expr, "'instanceof' against a class value whose class has no lowering (the class declaration itself was rejected — see its own diagnostic)");
|
|
545
591
|
}
|
|
546
592
|
const left = lowerer.lowerExpr(expr.left);
|
|
593
|
+
// The class declares a static `Symbol.hasInstance` hook (its bases
|
|
594
|
+
// included, through the static prototype chain): Node asks the hook
|
|
595
|
+
// first and uses OrdinaryHasInstance only when it is absent, so the
|
|
596
|
+
// test runs the checked-dynamic class test against the class value.
|
|
597
|
+
if (!targetInfo.def.runtime && classDeclaresHasInstanceHook(targetInfo)) {
|
|
598
|
+
const classValue = classValueOperand(lowerer, expr.right, rhsClassval);
|
|
599
|
+
return checkedClassInstanceOf(lowerer, lowerer.coerceInto(expr.left, left, DYN), lowerer.coerceToExpected(classValue, DYN), dynInstanceOfRefusal(lowerer, expr), loc);
|
|
600
|
+
}
|
|
547
601
|
if (left.type.kind === "dyn") {
|
|
548
602
|
// An untyped binding the checker narrowed to EventEmitter or a
|
|
549
603
|
// stream class (`ReleaseEmitter = EventEmitter` in JavaScript):
|
|
@@ -559,6 +613,13 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
559
613
|
lowerer.unsupported("SC1090", expr, "'instanceof' through a runtime-provided class value on an untyped value (give the operand a class type first)");
|
|
560
614
|
}
|
|
561
615
|
const classValue = classValueOperand(lowerer, expr.right, rhsClassval);
|
|
616
|
+
// A checked-dynamic class value (`for (const C of [A, B])`: tsc's
|
|
617
|
+
// common supertype names the first class, but the slot holds either
|
|
618
|
+
// class at run time): the test dispatches on the class the value IS,
|
|
619
|
+
// like any other untyped right-hand side. Using the statically named
|
|
620
|
+
// class's prototype here answered false for every other class.
|
|
621
|
+
if (classValue.type.kind === "dyn")
|
|
622
|
+
return checkedClassInstanceOf(lowerer, left, classValue, dynInstanceOfRefusal(lowerer, expr), loc);
|
|
562
623
|
return classInstanceOf(lowerer, left, targetInfo, loc, classValue);
|
|
563
624
|
}
|
|
564
625
|
// A union of class instances against a runtime class value (`new K()`
|
|
@@ -615,7 +676,28 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
615
676
|
loc,
|
|
616
677
|
});
|
|
617
678
|
}
|
|
618
|
-
|
|
679
|
+
// The answer is static (a standalone operand's runtime class IS its
|
|
680
|
+
// static class), but the operands are computed: Node evaluates both,
|
|
681
|
+
// so evaluate them and return the known answer.
|
|
682
|
+
const classValue = classValueOperand(lowerer, expr.right, rhsClassval);
|
|
683
|
+
return {
|
|
684
|
+
kind: "seqExpr",
|
|
685
|
+
stmts: [
|
|
686
|
+
{ kind: "exprStmt", expr: left, loc },
|
|
687
|
+
{ kind: "exprStmt", expr: classValue, loc },
|
|
688
|
+
],
|
|
689
|
+
result: { kind: "boolLit", value, type: BOOL, loc },
|
|
690
|
+
type: BOOL,
|
|
691
|
+
loc,
|
|
692
|
+
};
|
|
693
|
+
}
|
|
694
|
+
// A builtin global function value read off the global (`parseInt`,
|
|
695
|
+
// `Symbol`, `WeakRef`, ...) is not a class value: the boxed value has
|
|
696
|
+
// no prototype to test against, so the test keeps the refusal the
|
|
697
|
+
// global's identity token answered.
|
|
698
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
699
|
+
hasGlobalFunctionValue(stdlibGlobalNameOf(lowerer, expr.right) ?? "")) {
|
|
700
|
+
lowerer.unsupported("SC1090", expr.right, "'instanceof' right-hand sides other than classes declared in the program");
|
|
619
701
|
}
|
|
620
702
|
// A checked-dynamic right-hand side (a constructor read from a table, a
|
|
621
703
|
// structural constructor type, a builtin constructor held as `any`):
|
|
@@ -665,6 +747,17 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
665
747
|
// narrowing then types the branches; reads bridge through caughtRead.
|
|
666
748
|
const caughtLocal = lowerer.caughtLocalOf(expr.left);
|
|
667
749
|
if (caughtLocal) {
|
|
750
|
+
// A class that declares a static `Symbol.hasInstance` hook answers
|
|
751
|
+
// through the hook whatever the operand's static type: the caught
|
|
752
|
+
// payload reaches it as a checked-dynamic value, exactly as a thrown
|
|
753
|
+
// value reaches Node's hook.
|
|
754
|
+
if (!target.def.runtime && classDeclaresHasInstanceHook(target)) {
|
|
755
|
+
const classValue = classValueOperand(lowerer, expr.right, {
|
|
756
|
+
kind: "classval",
|
|
757
|
+
className: target.def.name,
|
|
758
|
+
});
|
|
759
|
+
return checkedClassInstanceOf(lowerer, { kind: "caughtToDyn", value: varRef(caughtLocal.id, CAUGHT, loc), type: DYN, loc }, lowerer.coerceToExpected(classValue, DYN), dynInstanceOfRefusal(lowerer, expr), loc);
|
|
760
|
+
}
|
|
668
761
|
const caughtInstanceOf = (info) => caughtClassInstanceOf(lowerer, caughtLocal.id, info, loc);
|
|
669
762
|
let test = caughtInstanceOf(target);
|
|
670
763
|
// A thrown checked-dynamic object whose prototype chain reaches
|
|
@@ -698,6 +791,18 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
698
791
|
: test;
|
|
699
792
|
}
|
|
700
793
|
const left = lowerer.lowerExpr(expr.left);
|
|
794
|
+
// A program class that declares a static `Symbol.hasInstance` hook (its
|
|
795
|
+
// bases included, through the static prototype chain): Node asks the
|
|
796
|
+
// hook first and uses OrdinaryHasInstance only when it is absent, so the
|
|
797
|
+
// test runs the checked-dynamic class test against the class value,
|
|
798
|
+
// whatever the operand's static type is.
|
|
799
|
+
if (!target.def.runtime && classDeclaresHasInstanceHook(target)) {
|
|
800
|
+
const classValue = classValueOperand(lowerer, expr.right, {
|
|
801
|
+
kind: "classval",
|
|
802
|
+
className: target.def.name,
|
|
803
|
+
});
|
|
804
|
+
return checkedClassInstanceOf(lowerer, lowerer.coerceInto(expr.left, left, DYN), lowerer.coerceToExpected(classValue, DYN), dynInstanceOfRefusal(lowerer, expr), loc);
|
|
805
|
+
}
|
|
701
806
|
// `u instanceof Error` on an `unknown` value: the checked-dynamic tree's error encoding
|
|
702
807
|
// (the shape caughtToDyn builds for Error payloads — the reserved
|
|
703
808
|
// "%error" marker) answers the test, so a caught Error passed through
|
|
@@ -905,6 +1010,25 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
905
1010
|
loc,
|
|
906
1011
|
});
|
|
907
1012
|
}
|
|
1013
|
+
// A program class target: the answer is static (the operand's runtime
|
|
1014
|
+
// class IS its static class), but the operands are computed. Node
|
|
1015
|
+
// evaluates both, so evaluate them and return the known answer.
|
|
1016
|
+
if (target.decl !== null && !target.def.runtime) {
|
|
1017
|
+
const classValue = classValueOperand(lowerer, expr.right, {
|
|
1018
|
+
kind: "classval",
|
|
1019
|
+
className: target.def.name,
|
|
1020
|
+
});
|
|
1021
|
+
return {
|
|
1022
|
+
kind: "seqExpr",
|
|
1023
|
+
stmts: [
|
|
1024
|
+
{ kind: "exprStmt", expr: left, loc },
|
|
1025
|
+
{ kind: "exprStmt", expr: classValue, loc },
|
|
1026
|
+
],
|
|
1027
|
+
result: { kind: "boolLit", value, type: BOOL, loc },
|
|
1028
|
+
type: BOOL,
|
|
1029
|
+
loc,
|
|
1030
|
+
};
|
|
1031
|
+
}
|
|
908
1032
|
lowerer.unsupported("SC1090", expr, "statically-decided 'instanceof' on computed operands (bind the value to a variable first)");
|
|
909
1033
|
}
|
|
910
1034
|
/** `x instanceof K` for a union-typed operand whose arms are class
|
|
@@ -1346,6 +1470,84 @@ export function lowerInExpression(lowerer, expr, loc) {
|
|
|
1346
1470
|
if (ts.isPrivateIdentifier(expr.left)) {
|
|
1347
1471
|
return lowerPrivateIn(lowerer, expr, expr.left, loc);
|
|
1348
1472
|
}
|
|
1473
|
+
// `… in <global object>`: presence on the runtime's global object. Node HAS
|
|
1474
|
+
// the globals the native runtime does not implement, so the answer must not
|
|
1475
|
+
// be a silent false — arming the compiler's derived set makes the runtime
|
|
1476
|
+
// throw for them (host-globals.ts) and answer the global object's own
|
|
1477
|
+
// presence otherwise. A symbol key keeps its checked-dynamic path below;
|
|
1478
|
+
// this answer is keyed by a string.
|
|
1479
|
+
const inGlobalKey = foldedStringKeyOf(lowerer, expr.left);
|
|
1480
|
+
if (isGlobalObjectRead(lowerer, expr.right) &&
|
|
1481
|
+
lowerer.mapTypeOf(lowerer.typeOf(expr.left))?.kind !== "symbol" &&
|
|
1482
|
+
// A static key the runtime already answers correctly (a name Node does
|
|
1483
|
+
// not define) keeps its existing lowering, byte for byte.
|
|
1484
|
+
(inGlobalKey === null || NODE_GLOBALS_WITHOUT_NATIVE.has(inGlobalKey))) {
|
|
1485
|
+
const installedHas = (key) => ({
|
|
1486
|
+
kind: "seqExpr",
|
|
1487
|
+
stmts: [{ kind: "exprStmt", expr: hostAbsentInstall(loc), loc }],
|
|
1488
|
+
result: { kind: "libCall", fn: "dyn.globalHas", args: [key], type: BOOL, loc },
|
|
1489
|
+
type: BOOL,
|
|
1490
|
+
loc,
|
|
1491
|
+
});
|
|
1492
|
+
if (inGlobalKey !== null)
|
|
1493
|
+
return installedHas({ kind: "strLit", value: inGlobalKey, type: STRING, loc });
|
|
1494
|
+
// JS evaluates the key before the receiver; the receiver is the global
|
|
1495
|
+
// object, whose evaluation has no effects, so lowering the key first is
|
|
1496
|
+
// the whole evaluation order.
|
|
1497
|
+
const lowered = lowerer.lowerExpr(expr.left);
|
|
1498
|
+
if (lowered.type.kind === "string")
|
|
1499
|
+
return installedHas(lowered);
|
|
1500
|
+
// A key the type cannot prove to be a string may hold a symbol at
|
|
1501
|
+
// runtime, and a symbol is an identity, not a name: it must reach the
|
|
1502
|
+
// global object's symbol store rather than the string conversion (which
|
|
1503
|
+
// throws for a symbol). The boxed key is stabilized first; the answer is
|
|
1504
|
+
// the same presence query the dynamic path gives.
|
|
1505
|
+
const keyLocal = lowerer.declareHiddenLocal("%inKey", DYN);
|
|
1506
|
+
const boxedKey = varRef(keyLocal.id, DYN, loc);
|
|
1507
|
+
return {
|
|
1508
|
+
kind: "seqExpr",
|
|
1509
|
+
stmts: [
|
|
1510
|
+
{ kind: "exprStmt", expr: hostAbsentInstall(loc), loc },
|
|
1511
|
+
{
|
|
1512
|
+
kind: "varDecl",
|
|
1513
|
+
localId: keyLocal.id,
|
|
1514
|
+
init: lowerer.coerceInto(expr.left, lowered, DYN),
|
|
1515
|
+
loc,
|
|
1516
|
+
},
|
|
1517
|
+
],
|
|
1518
|
+
result: {
|
|
1519
|
+
kind: "ternary",
|
|
1520
|
+
cond: {
|
|
1521
|
+
kind: "strEq",
|
|
1522
|
+
negated: false,
|
|
1523
|
+
left: { kind: "libCall", fn: "dyn.typeof", args: [boxedKey], type: STRING, loc },
|
|
1524
|
+
right: { kind: "strLit", value: "symbol", type: STRING, loc },
|
|
1525
|
+
type: BOOL,
|
|
1526
|
+
loc,
|
|
1527
|
+
},
|
|
1528
|
+
then: {
|
|
1529
|
+
kind: "libCall",
|
|
1530
|
+
fn: "dyn.hasKeyComputed",
|
|
1531
|
+
args: [lowerGlobalObjectValue(lowerer, expr.right, locOf(expr.right)), boxedKey],
|
|
1532
|
+
type: BOOL,
|
|
1533
|
+
loc,
|
|
1534
|
+
},
|
|
1535
|
+
else_: {
|
|
1536
|
+
kind: "libCall",
|
|
1537
|
+
fn: "dyn.globalHas",
|
|
1538
|
+
args: [
|
|
1539
|
+
{ kind: "libCall", fn: "dyn.toStringCoerce", args: [boxedKey], type: STRING, loc },
|
|
1540
|
+
],
|
|
1541
|
+
type: BOOL,
|
|
1542
|
+
loc,
|
|
1543
|
+
},
|
|
1544
|
+
type: BOOL,
|
|
1545
|
+
loc,
|
|
1546
|
+
},
|
|
1547
|
+
type: BOOL,
|
|
1548
|
+
loc,
|
|
1549
|
+
};
|
|
1550
|
+
}
|
|
1349
1551
|
// Compile-time-known STRING keys fold — literals, and the same
|
|
1350
1552
|
// const/enum-literal and template folding computed property keys get
|
|
1351
1553
|
// (foldedStringKeyOf); runtime-valued keys keep the fence.
|
|
@@ -1510,6 +1712,25 @@ export function lowerInExpression(lowerer, expr, loc) {
|
|
|
1510
1712
|
// below, so the assertion's checked extraction must not run first (it
|
|
1511
1713
|
// would trap on the very arm the probe exists to detect).
|
|
1512
1714
|
let recv = assertedInOperand(lowerer, expr.right) ?? lowerer.lowerExpr(expr.right);
|
|
1715
|
+
// A PRIMITIVE receiver: JavaScript's ToObject step throws Node's TypeError
|
|
1716
|
+
// for every primitive (`'x' in 5` included), and the throw precedes the
|
|
1717
|
+
// key's ToPropertyKey — the key is a compile-time literal on every path
|
|
1718
|
+
// that reaches here, so only the receiver's own evaluation remains. The
|
|
1719
|
+
// message spells the receiver's value, so a receiver the IR cannot
|
|
1720
|
+
// re-evaluate (`receiver()`) evaluates once into a hidden local.
|
|
1721
|
+
if (isPrimitiveValueType(recv.type) && !isBuiltinIdentityToken(lowerer, expr.right, recv)) {
|
|
1722
|
+
if (isUnitType(recv.type) || isSafeToRepeat(recv)) {
|
|
1723
|
+
return throwAfterEach([recv], inOperatorTypeError(lowerer, key, recv, BOOL, loc), loc);
|
|
1724
|
+
}
|
|
1725
|
+
const slot = lowerer.declareHiddenLocal("%inReceiver", recv.type);
|
|
1726
|
+
return {
|
|
1727
|
+
kind: "seqExpr",
|
|
1728
|
+
stmts: [{ kind: "varDecl", localId: slot.id, init: recv, loc }],
|
|
1729
|
+
result: inOperatorTypeError(lowerer, key, varRef(slot.id, recv.type, loc), BOOL, loc),
|
|
1730
|
+
type: BOOL,
|
|
1731
|
+
loc,
|
|
1732
|
+
};
|
|
1733
|
+
}
|
|
1513
1734
|
const classInfo = recv.type.kind === "classval" ? lowerer.classes.get(recv.type.className) : undefined;
|
|
1514
1735
|
if ((classInfo && (classInfo.callableBase || hasRuntimeStatics(classInfo))) ||
|
|
1515
1736
|
(isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
@@ -1877,10 +2098,19 @@ export function lowerInExpression(lowerer, expr, loc) {
|
|
|
1877
2098
|
loc,
|
|
1878
2099
|
};
|
|
1879
2100
|
}
|
|
1880
|
-
// A
|
|
1881
|
-
//
|
|
1882
|
-
//
|
|
1883
|
-
|
|
2101
|
+
// A key the type does not declare is an own key of a linked copy's
|
|
2102
|
+
// source or of a kept source (record-links.ts, and the hasOwn helper's
|
|
2103
|
+
// kept width spread answer); the helper call evaluates the receiver once.
|
|
2104
|
+
if (!inherited && recordMayKeepSource(lowerer, recv.type))
|
|
2105
|
+
return {
|
|
2106
|
+
kind: "call",
|
|
2107
|
+
callee: recordHasOwnHelper(lowerer, recv.type.shapeId, loc),
|
|
2108
|
+
args: [recv, { kind: "strLit", value: key, type: STRING, loc }],
|
|
2109
|
+
type: BOOL,
|
|
2110
|
+
loc,
|
|
2111
|
+
};
|
|
2112
|
+
// Otherwise the answer is static; the key-order pass still reads the
|
|
2113
|
+
// site as a presence test of the receiver's keys.
|
|
1884
2114
|
const answer = staticAnswerAfter(recv, inherited, loc);
|
|
1885
2115
|
return inherited ? answer : lowerer.keyOrder.sourceProbe(answer, recv, key);
|
|
1886
2116
|
}
|