@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,14 +1,20 @@
|
|
|
1
|
+
import { lowerIteratorMemberValue } from "../iterator-prototype.js";
|
|
1
2
|
import { widensReducedRecords } from "../function-returns.js";
|
|
3
|
+
import { nullishReadTypeError, throwAfterEach } from "../primitive-throws.js";
|
|
2
4
|
import { lowerStaticPrivateRead } from "../private-statics.js";
|
|
3
5
|
import { widthNarrowHelper } from "../coercions/unions.js";
|
|
4
6
|
/* Property reads (`a.b`): lowerExprInner's property-access branch, intrinsic and union properties, field reads and targets, and match-group reads. */
|
|
5
7
|
import { jsSpecialGlobalValue } from "../global-values.js";
|
|
8
|
+
import { HOST_GLOBAL_PROTOTYPE_MEMBERS, HOST_GLOBAL_VALUE_MEMBERS, hostGlobalCallTarget, hostGlobalNameOfMember, hostGlobalNameOfRead, hostGlobalPrototypeOf, } from "../host-globals.js";
|
|
9
|
+
import { hostGlobalValue } from "../host-global-values.js";
|
|
10
|
+
import { globalFunctionValue } from "../global-function-values.js";
|
|
6
11
|
import { arrayClassMemberOwner, arrayClassReceiver, lowerArrayClassConstructorRead, } from "../builtins/array-classes.js";
|
|
7
12
|
import { indexedUnionArms, lowerIndexedUnionMember } from "../indexed-unions.js";
|
|
8
13
|
import { keyedHelperName } from "../stable-names.js";
|
|
9
14
|
import { builtinNamespaceValue } from "../builtin-namespaces.js";
|
|
10
15
|
import { staticallySelected } from "../static-typeof.js";
|
|
11
16
|
import { lowerWebStreamClassRead } from "../builtins/web-streams-dyn.js";
|
|
17
|
+
import { wrapperConstructors } from "../primitive-wrappers.js";
|
|
12
18
|
import * as ts from "../../ts7/adapter.js";
|
|
13
19
|
import { lowerHistogramProperty } from "../builtins/performance.js";
|
|
14
20
|
import { staticFunctionNameRead } from "../static-function-names.js";
|
|
@@ -18,7 +24,7 @@ import { isThisParameter } from "../call-signatures.js";
|
|
|
18
24
|
import { argumentCountSlot, contextualCallCount, usedAsValue } from "../argument-counts.js";
|
|
19
25
|
import { checkedPrivateValue, localPrivateBrandClass, privateNameClass, } from "../private-brands.js";
|
|
20
26
|
import { PoisonError, builtinValueNameOf, jsFuncNameOf, neverTaintedJsType, own, } from "../lowerer.js";
|
|
21
|
-
import { ARRAY_METHODS, MAP_METHODS, NARROW_FIRST,
|
|
27
|
+
import { ARRAY_METHODS, MAP_METHODS, NARROW_FIRST, SET_METHODS, STDLIB_SURFACE, STRING_INDEX_METHODS, STR_METHODS, isChildSurfaceMember, stdlibGlobalNameOf, } from "../surfaces.js";
|
|
22
28
|
import { isGenericCallableMemberType, isLegacyUrlSymbol, isOsConstantsType, isParseArgsDynTypeName, } from "../../type-mapper.js";
|
|
23
29
|
import { BIGINT_T, BOOL, BYTES_U8, DYN, F64, NULL_T, SEARCH_PARAMS_T, STRING, SYMBOL_T, UNDEFINED_T, arrayOf, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isUnitType, typeEquals, typeKey, unionContainerArmsOk, BYTES_ELEMENT_SIZE, } from "../../../ir/ir.js";
|
|
24
30
|
import { lowerNavigatorMember, navigatorValue } from "../builtins/navigator.js";
|
|
@@ -41,10 +47,11 @@ import { hasOptionalChainGuard, isOptionalChainTail, isRequireMainFilename, } fr
|
|
|
41
47
|
import { isCjsModuleGlobal, lowerNodeModuleProperty, lowerRequireMainProperty, } from "../lower-node-module.js";
|
|
42
48
|
import { dynUndefinedExpr, nodeThrowExpr, numLit, strLit, varRef } from "../../../ir/build.js";
|
|
43
49
|
import { typedArrayLacksMember } from "../builtins/typed-array-members.js";
|
|
44
|
-
import { TEMPORAL_GLOBAL } from "../../builtin-modules.js";
|
|
50
|
+
import { COMMONJS_MODULE_BINDINGS, TEMPORAL_GLOBAL } from "../../builtin-modules.js";
|
|
45
51
|
import { tryLowerExpression } from "./try-lower-expression.js";
|
|
46
52
|
import { applyDeferredAssertion, assertedReceiverNode, deferredMemberReadTarget, deferredProbeReadAccess, } from "./asserted-receiver.js";
|
|
47
53
|
import { lowerRecordInheritedMember } from "../record-inherited.js";
|
|
54
|
+
import { MUTABLE_BUFFER_MEMBERS } from "../buffers.js";
|
|
48
55
|
import { DATE_METHOD_HINT } from "../builtins/dates.js";
|
|
49
56
|
import { cjsClassExprWholeExportOf, cjsExportAssignmentOf, cjsExportDiscardReason, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, isNodeEsmFile, locOf, } from "../../program.js";
|
|
50
57
|
import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, contextualUndefReadType, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "../lower-namespaces.js";
|
|
@@ -64,9 +71,9 @@ import { npmStaticPackageOfPath } from "../../npm-static.js";
|
|
|
64
71
|
import { importMetaField, isImportMeta } from "../import-meta.js";
|
|
65
72
|
import { createRequireCalleeFileOf } from "../builtins/module-bindings.js";
|
|
66
73
|
import { createRequireResolveFenceValue, createRequireResolveValue, } from "../builtins/module-resolution.js";
|
|
67
|
-
import { builtinPrototypeMethod,
|
|
68
|
-
import {
|
|
69
|
-
import { lowerBufferPrototypeMember } from "../containers/bytes.js";
|
|
74
|
+
import { builtinPrototypeMethod, lowerCheckedPredicateValue } from "../lower-builtin-values.js";
|
|
75
|
+
import { constructorStaticValue, objectFreezeValue } from "../builtin-statics.js";
|
|
76
|
+
import { lowerBufferPrototypeMember, lowerBufferPrototypeObject } from "../containers/bytes.js";
|
|
70
77
|
import { lowerNetAddressStaticRead } from "../builtins/net-address.js";
|
|
71
78
|
import { STATS_TYPE_TESTS } from "../builtins/filesystem.js";
|
|
72
79
|
import { arrayValueRead, arrayValueType } from "../array-values.js";
|
|
@@ -75,7 +82,7 @@ import { reflectMemberValue } from "../builtins/reflection.js";
|
|
|
75
82
|
import { objLitGenericFnInfoOf, objLitGenericFnNodeOf, requireObjLitGenericReceiver, } from "../generic-functions.js";
|
|
76
83
|
import { narrowStoredClassValue, structuralReadType } from "../class-unions.js";
|
|
77
84
|
import { InternalCompilerError } from "../../../errors.js";
|
|
78
|
-
import { lowerUnionFieldRead } from "./union-fields.js";
|
|
85
|
+
import { lowerUnionFieldRead, narrowedArmRead, narrowedUnionView } from "./union-fields.js";
|
|
79
86
|
import { errorPropertyRead } from "../error-methods.js";
|
|
80
87
|
import { isSafeToDiscard, isSafeToRepeat } from "./evaluation-safety.js";
|
|
81
88
|
import { partialAssertionFields, partialFieldRead } from "../partial-assertions.js";
|
|
@@ -159,6 +166,26 @@ function isStatFsDynProperty(lowerer, expr) {
|
|
|
159
166
|
return false;
|
|
160
167
|
}));
|
|
161
168
|
}
|
|
169
|
+
/** The Iterator.prototype helpers and the iterator members with no typed
|
|
170
|
+
* value lowering, read as values on a typed iterator in JavaScript.
|
|
171
|
+
* `next` and `return` answer the function Node's prototype chain holds
|
|
172
|
+
* (a generator's, or an iterator helper object's); `throw` is not here
|
|
173
|
+
* because an iterator helper object has none. */
|
|
174
|
+
const TYPED_ITERATOR_MEMBER_VALUES = new Set([
|
|
175
|
+
"next",
|
|
176
|
+
"map",
|
|
177
|
+
"filter",
|
|
178
|
+
"take",
|
|
179
|
+
"drop",
|
|
180
|
+
"flatMap",
|
|
181
|
+
"reduce",
|
|
182
|
+
"toArray",
|
|
183
|
+
"forEach",
|
|
184
|
+
"some",
|
|
185
|
+
"every",
|
|
186
|
+
"find",
|
|
187
|
+
"return",
|
|
188
|
+
]);
|
|
162
189
|
/** The dgram.Socket methods its checked-dynamic handle answers as
|
|
163
190
|
* function values (scr_dgram.c's scr_dgram_dyn_method_names). */
|
|
164
191
|
const DGRAM_METHOD_VALUES = new Set([
|
|
@@ -177,6 +204,22 @@ const DGRAM_METHOD_VALUES = new Set([
|
|
|
177
204
|
"ref",
|
|
178
205
|
"unref",
|
|
179
206
|
]);
|
|
207
|
+
/** A lib builtin iterator whose prototype chain holds no `return` in Node
|
|
208
|
+
* 24: the Array, String, Map and Set iterators. Generators and iterator
|
|
209
|
+
* helper objects do have one. */
|
|
210
|
+
function builtinIteratorWithoutReturn(lowerer, node) {
|
|
211
|
+
const symbol = lowerer.typeOf(node).getSymbol();
|
|
212
|
+
if (symbol === undefined)
|
|
213
|
+
return false;
|
|
214
|
+
const name = ts.symbolName(symbol);
|
|
215
|
+
if (name !== "ArrayIterator" &&
|
|
216
|
+
name !== "StringIterator" &&
|
|
217
|
+
name !== "MapIterator" &&
|
|
218
|
+
name !== "SetIterator")
|
|
219
|
+
return false;
|
|
220
|
+
return (symbol.declarations.length > 0 &&
|
|
221
|
+
symbol.declarations.every((d) => lowerer.isStdlibFile(ts.getSourceFileOfNode(d))));
|
|
222
|
+
}
|
|
180
223
|
function isCreateRequireResolveValue(lowerer, expr) {
|
|
181
224
|
let resolve = expr;
|
|
182
225
|
if (expr.name.text === "paths" &&
|
|
@@ -189,6 +232,11 @@ function isCreateRequireResolveValue(lowerer, expr) {
|
|
|
189
232
|
createRequireCalleeFileOf(lowerer, resolve.expression) !== null);
|
|
190
233
|
}
|
|
191
234
|
export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
235
|
+
// A JavaScript source reading a member that resizes, grows or detaches a
|
|
236
|
+
// buffer is the mutableBuffers fact (buffers.ts, t262-dc §2.4). The name
|
|
237
|
+
// decides: the receiver may be a checked-dynamic value.
|
|
238
|
+
if (MUTABLE_BUFFER_MEMBERS.has(expr.name.text) && isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
239
|
+
lowerer.buffersMutable = true;
|
|
192
240
|
const arrayClassConstructor = lowerArrayClassConstructorRead(lowerer, expr, loc);
|
|
193
241
|
if (arrayClassConstructor !== null)
|
|
194
242
|
return arrayClassConstructor;
|
|
@@ -233,7 +281,7 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
233
281
|
};
|
|
234
282
|
}
|
|
235
283
|
{
|
|
236
|
-
const member = lowerBufferPrototypeMember(lowerer, expr);
|
|
284
|
+
const member = lowerBufferPrototypeMember(lowerer, expr) ?? lowerBufferPrototypeObject(lowerer, expr);
|
|
237
285
|
if (member)
|
|
238
286
|
return member;
|
|
239
287
|
}
|
|
@@ -430,33 +478,8 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
430
478
|
loc,
|
|
431
479
|
};
|
|
432
480
|
}
|
|
433
|
-
if (lowerer.stdlibGlobalMember(expr, "Object") === "freeze")
|
|
434
|
-
|
|
435
|
-
lowerer.untypedIntegrity = true;
|
|
436
|
-
const name = "%builtin.Object.freeze";
|
|
437
|
-
if (!lowerer.liftedFns.some((fn) => fn.name === name))
|
|
438
|
-
lowerer.liftedFns.push({
|
|
439
|
-
name,
|
|
440
|
-
params: [{ localId: "value", name: "value", type: DYN }],
|
|
441
|
-
locals: [{ id: "value", name: "value", type: DYN, mutable: false }],
|
|
442
|
-
returnType: DYN,
|
|
443
|
-
body: [
|
|
444
|
-
{
|
|
445
|
-
kind: "return",
|
|
446
|
-
value: {
|
|
447
|
-
kind: "libCall",
|
|
448
|
-
fn: "dyn.freeze",
|
|
449
|
-
args: [varRef("value", DYN, loc)],
|
|
450
|
-
type: DYN,
|
|
451
|
-
loc,
|
|
452
|
-
},
|
|
453
|
-
loc,
|
|
454
|
-
},
|
|
455
|
-
],
|
|
456
|
-
loc,
|
|
457
|
-
});
|
|
458
|
-
return { kind: "closure", fnName: name, captures: [], type: funcOf([DYN], DYN), loc };
|
|
459
|
-
}
|
|
481
|
+
if (lowerer.stdlibGlobalMember(expr, "Object") === "freeze")
|
|
482
|
+
return objectFreezeValue(lowerer, loc);
|
|
460
483
|
// An Hmac has no copy() (Hash does): Node answers undefined, which
|
|
461
484
|
// `typeof mac.copy` feature checks read. TypeScript rejects the read.
|
|
462
485
|
if (expr.name.text === "copy" &&
|
|
@@ -487,6 +510,38 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
487
510
|
loc,
|
|
488
511
|
};
|
|
489
512
|
}
|
|
513
|
+
// A read of a Node 24 global the native runtime does not implement
|
|
514
|
+
// (globalThis.WebSocket, (globalThis as T).FormData, alias.X) is not a
|
|
515
|
+
// capability probe: the branch below would answer undefined, where Node
|
|
516
|
+
// has the constructor. Answer the constructor (host-global-values.ts);
|
|
517
|
+
// constructing or calling it is the use that refuses (SC2020,
|
|
518
|
+
// host-global).
|
|
519
|
+
{
|
|
520
|
+
const hostGlobal = hostGlobalNameOfMember(lowerer, expr);
|
|
521
|
+
if (hostGlobal !== null) {
|
|
522
|
+
if (hostGlobalCallTarget(expr))
|
|
523
|
+
lowerer.hostGlobalFence(hostGlobal, expr);
|
|
524
|
+
return hostGlobalValue(lowerer, hostGlobal, expr);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
// A member read off that value (`WebSocket.OPEN`, `FormData.prototype`):
|
|
528
|
+
// the value carries the function intrinsics only, and its prototype
|
|
529
|
+
// carries the constructor link (`FormData.prototype.constructor`). Node's
|
|
530
|
+
// class also has static members and instance methods, which native code
|
|
531
|
+
// does not provide, so reading one is a use of that surface and refuses
|
|
532
|
+
// (SC2020, host-global) instead of answering undefined.
|
|
533
|
+
{
|
|
534
|
+
const hostGlobal = hostGlobalNameOfRead(lowerer, expr.expression);
|
|
535
|
+
if (hostGlobal !== null) {
|
|
536
|
+
if (!HOST_GLOBAL_VALUE_MEMBERS.has(expr.name.text))
|
|
537
|
+
lowerer.hostGlobalFence(hostGlobal, expr);
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
const prototypeOf = hostGlobalPrototypeOf(lowerer, expr.expression);
|
|
541
|
+
if (prototypeOf !== null && !HOST_GLOBAL_PROTOTYPE_MEMBERS.has(expr.name.text))
|
|
542
|
+
lowerer.hostGlobalFence(prototypeOf, expr);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
490
545
|
// Missing host globals (Bun/Deno capability probes) have no binding
|
|
491
546
|
// in a native program. Declared globals retain their own lowering;
|
|
492
547
|
// arbitrary global-object mutation remains fenced. Preserve a dyn
|
|
@@ -874,8 +929,9 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
874
929
|
if (canonical !== null) {
|
|
875
930
|
if (canonical === "globalThis")
|
|
876
931
|
return lowerGlobalValue(lowerer, expr);
|
|
877
|
-
// Typed for the programs that name it, absent in Node 24
|
|
878
|
-
|
|
932
|
+
// Typed for the programs that name it, absent in Node 24, and the
|
|
933
|
+
// CommonJS module bindings, which the global object does not hold.
|
|
934
|
+
if (canonical === TEMPORAL_GLOBAL || COMMONJS_MODULE_BINDINGS.has(canonical))
|
|
879
935
|
return dynUndefinedExpr(loc);
|
|
880
936
|
const value = jsSpecialGlobalValue(lowerer, canonical, loc);
|
|
881
937
|
if (value)
|
|
@@ -1037,14 +1093,19 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
1037
1093
|
// by the property or function it reads. A builtin function value
|
|
1038
1094
|
// keeps its length when that is not its adapter's parameter count
|
|
1039
1095
|
// (`Math.max.length` is 2).
|
|
1040
|
-
const
|
|
1041
|
-
const
|
|
1096
|
+
const builtinName = builtinValueNameOf(expr.expression, lowerer);
|
|
1097
|
+
const fnName = builtinName ?? jsFuncNameOf(expr.expression, lowerer);
|
|
1098
|
+
const identity = lowerer.builtinFunctionIdentity(probed);
|
|
1099
|
+
const fnLength = identity.fnLength;
|
|
1042
1100
|
const boxed = {
|
|
1043
1101
|
kind: "dynFrom",
|
|
1044
1102
|
value: probed,
|
|
1045
1103
|
type: DYN,
|
|
1046
1104
|
...(fnName !== null ? { fnName } : {}),
|
|
1047
1105
|
...(fnLength !== undefined ? { fnLength } : {}),
|
|
1106
|
+
...(builtinName !== null && identity.fnNameMainThreadOnly
|
|
1107
|
+
? { fnNameMainThreadOnly: true }
|
|
1108
|
+
: {}),
|
|
1048
1109
|
loc,
|
|
1049
1110
|
};
|
|
1050
1111
|
const key = {
|
|
@@ -1129,7 +1190,13 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
1129
1190
|
isStatFsDynProperty(lowerer, expr) ||
|
|
1130
1191
|
segmentDataProperty ||
|
|
1131
1192
|
osConstants ||
|
|
1132
|
-
|
|
1193
|
+
// A record, not the Lowerer itself: the compiler lowers its own source,
|
|
1194
|
+
// and a class instance does not width-coerce to this shape.
|
|
1195
|
+
isLegacyUrlSymbol(lowerer.checker.getSymbolAtLocation(expr.name), {
|
|
1196
|
+
isStdlibFile: (sf) => lowerer.isStdlibFile(sf),
|
|
1197
|
+
symbolProvenance: lowerer.symbolProvenance,
|
|
1198
|
+
verifySymbolProvenance: lowerer.verifySymbolProvenance,
|
|
1199
|
+
})) {
|
|
1133
1200
|
const recv = lowerer.lowerExpr(expr.expression);
|
|
1134
1201
|
if (recv.type.kind === "dyn") {
|
|
1135
1202
|
const key = {
|
|
@@ -1443,6 +1510,22 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
1443
1510
|
typedArrayLacksMember(expr.name.text, recvLowered.type.elem === "u8")) {
|
|
1444
1511
|
return afterReceiver(recvLowered, dynUndefinedExpr(loc), loc);
|
|
1445
1512
|
}
|
|
1513
|
+
// Buffer.prototype's parent and offset getters, which @types/node does not
|
|
1514
|
+
// declare (so only JavaScript reads them): the box answers a Buffer's
|
|
1515
|
+
// ArrayBuffer and byteOffset, and undefined for a Uint8Array, by the
|
|
1516
|
+
// runtime flag that tells the two apart.
|
|
1517
|
+
if (recvLowered.type.kind === "bytes" &&
|
|
1518
|
+
recvLowered.type.elem === "u8" &&
|
|
1519
|
+
(expr.name.text === "parent" || expr.name.text === "offset") &&
|
|
1520
|
+
!declaredMemberOf(lowerer, expr.expression, expr.name.text)) {
|
|
1521
|
+
return {
|
|
1522
|
+
kind: "dynKeyGet",
|
|
1523
|
+
value: lowerer.coerceToExpected(recvLowered, DYN),
|
|
1524
|
+
key: { kind: "strLit", value: expr.name.text, type: STRING, loc },
|
|
1525
|
+
type: DYN,
|
|
1526
|
+
loc,
|
|
1527
|
+
};
|
|
1528
|
+
}
|
|
1446
1529
|
// A typed array under a checker `any` (a JS binding its own initializer's
|
|
1447
1530
|
// inference refers to: hono's etag digest `nextChunk`) reads through its
|
|
1448
1531
|
// box, as the method-call twin dispatches. The box shares the native
|
|
@@ -1457,6 +1540,25 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
1457
1540
|
loc,
|
|
1458
1541
|
}, expr);
|
|
1459
1542
|
}
|
|
1543
|
+
// A NULLISH receiver: JavaScript's RequireObjectCoercible throws Node's
|
|
1544
|
+
// TypeError at the read (only an optional chain, lowered elsewhere,
|
|
1545
|
+
// answers undefined). A primitive receiver that is not nullish never
|
|
1546
|
+
// reaches this fence — its members lower above.
|
|
1547
|
+
if (isUnitType(recvLowered.type)) {
|
|
1548
|
+
const unit = recvLowered.type.kind === "nullT" ? "null" : "undefined";
|
|
1549
|
+
const t = ambientUndefReadType(lowerer, expr) ?? contextualUndefReadType(lowerer, expr) ?? F64;
|
|
1550
|
+
return throwAfterEach([recvLowered], nullishReadTypeError(unit, expr.name.text, t, loc), loc);
|
|
1551
|
+
}
|
|
1552
|
+
// The site is about to be refused: a checker-narrowed receiver still
|
|
1553
|
+
// stores the wider union, whose other arms may be what refuse the member
|
|
1554
|
+
// (the OAuth arm's index signature beside `ApiKeyCredential.key`). Read
|
|
1555
|
+
// it off the arms the checker still allows, exactly where the refusal
|
|
1556
|
+
// would be.
|
|
1557
|
+
if (recvLowered.type.kind === "union") {
|
|
1558
|
+
const read = narrowedUnionValueRead(lowerer, expr, recvLowered);
|
|
1559
|
+
if (read)
|
|
1560
|
+
return read;
|
|
1561
|
+
}
|
|
1460
1562
|
lowerer.unsupported("SC1090", expr, `reading '${expr.name.text}' from a value of type '${lowerer.checker.typeToString(lowerer.typeOf(expr.expression))}'`);
|
|
1461
1563
|
}
|
|
1462
1564
|
/** `result` after evaluating `receiver` for its effects (none to keep when
|
|
@@ -1828,6 +1930,45 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
1828
1930
|
fenceDatePrototypeWrite(lowerer, expr);
|
|
1829
1931
|
if (lowerer.chainBlocked(expr))
|
|
1830
1932
|
return null;
|
|
1933
|
+
// Iterator.prototype, its members and Iterator's own members in
|
|
1934
|
+
// JavaScript: the live objects (scr_js_iterator.c).
|
|
1935
|
+
const iteratorMember = lowerIteratorMemberValue(lowerer, expr);
|
|
1936
|
+
if (iteratorMember)
|
|
1937
|
+
return iteratorMember;
|
|
1938
|
+
// A helper method read as a value on a typed iterator in JavaScript
|
|
1939
|
+
// (`g().map === Iterator.prototype.map`), or a member the typed iterator
|
|
1940
|
+
// has no lowering for (`[].values().return` is undefined): the value the
|
|
1941
|
+
// runtime answers through the boxed iterator, exactly Node's.
|
|
1942
|
+
if (!expr.questionDotToken &&
|
|
1943
|
+
TYPED_ITERATOR_MEMBER_VALUES.has(expr.name.text) &&
|
|
1944
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
1945
|
+
const recvT = lowerer.mapTypeOf(lowerer.typeOf(expr.expression));
|
|
1946
|
+
if (recvT?.kind === "generator" && recvT.async !== true) {
|
|
1947
|
+
// Node's builtin iterators (%ArrayIteratorPrototype%'s family) hold
|
|
1948
|
+
// no `return`; a generator's and an iterator helper object's do.
|
|
1949
|
+
if (expr.name.text === "return" && builtinIteratorWithoutReturn(lowerer, expr.expression))
|
|
1950
|
+
return {
|
|
1951
|
+
kind: "seqExpr",
|
|
1952
|
+
stmts: [
|
|
1953
|
+
{
|
|
1954
|
+
kind: "exprStmt",
|
|
1955
|
+
expr: lowerer.lowerExpr(expr.expression),
|
|
1956
|
+
loc: locOf(expr.expression),
|
|
1957
|
+
},
|
|
1958
|
+
],
|
|
1959
|
+
result: dynUndefinedExpr(locOf(expr)),
|
|
1960
|
+
type: DYN,
|
|
1961
|
+
loc: locOf(expr),
|
|
1962
|
+
};
|
|
1963
|
+
return {
|
|
1964
|
+
kind: "dynKeyGet",
|
|
1965
|
+
value: lowerer.coerceToExpected(lowerer.lowerExpr(expr.expression), DYN),
|
|
1966
|
+
key: { kind: "strLit", value: expr.name.text, type: STRING, loc: locOf(expr.name) },
|
|
1967
|
+
type: DYN,
|
|
1968
|
+
loc: locOf(expr),
|
|
1969
|
+
};
|
|
1970
|
+
}
|
|
1971
|
+
}
|
|
1831
1972
|
// Object.prototype.constructor: the Object constructor value.
|
|
1832
1973
|
if (expr.name.text === "constructor" &&
|
|
1833
1974
|
ts.isPropertyAccessExpression(expr.expression) &&
|
|
@@ -1903,19 +2044,9 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
1903
2044
|
}
|
|
1904
2045
|
if (lowerer.stdlibGlobalMember(expr, "Object") === "prototype")
|
|
1905
2046
|
return { kind: "libCall", fn: "dyn.objectPrototype", args: [], type: DYN, loc: locOf(expr) };
|
|
1906
|
-
// Error.prototype as a value (`F.prototype = Object.create(Error.prototype)`)
|
|
1907
|
-
// and Error.captureStackTrace read as a function (`if
|
|
1908
|
-
// (Error.captureStackTrace) ...`).
|
|
2047
|
+
// Error.prototype as a value (`F.prototype = Object.create(Error.prototype)`).
|
|
1909
2048
|
if (isErrorPrototypeValue(lowerer, expr))
|
|
1910
2049
|
return { kind: "libCall", fn: "dyn.errorPrototype", args: [], type: DYN, loc: locOf(expr) };
|
|
1911
|
-
if (lowerer.stdlibGlobalMember(expr, "Error") === "captureStackTrace")
|
|
1912
|
-
return {
|
|
1913
|
-
kind: "libCall",
|
|
1914
|
-
fn: "dyn.errorCaptureStackTraceFunction",
|
|
1915
|
-
args: [],
|
|
1916
|
-
type: DYN,
|
|
1917
|
-
loc: locOf(expr),
|
|
1918
|
-
};
|
|
1919
2050
|
// Function.prototype as a VALUE (a prototype-chain link:
|
|
1920
2051
|
// `Object.setPrototypeOf(F.prototype, Function.prototype)`): one
|
|
1921
2052
|
// anonymous function answering undefined, length 0 — a zero-capture
|
|
@@ -1944,16 +2075,19 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
1944
2075
|
loc,
|
|
1945
2076
|
};
|
|
1946
2077
|
}
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
2078
|
+
// Array.isArray, Object.keys, Date.now, Error.captureStackTrace (`if
|
|
2079
|
+
// (Error.captureStackTrace) ...`) and the other statics with function
|
|
2080
|
+
// values: the same values a read through the constructor's untyped value
|
|
2081
|
+
// answers (builtin-statics.ts).
|
|
2082
|
+
{
|
|
2083
|
+
const owner = stdlibGlobalNameOf(lowerer, expr.expression);
|
|
2084
|
+
const member = owner === null ? null : lowerer.stdlibGlobalMember(expr, owner);
|
|
2085
|
+
const value = owner === null || member === null
|
|
2086
|
+
? null
|
|
2087
|
+
: constructorStaticValue(lowerer, owner, member, locOf(expr));
|
|
2088
|
+
if (value !== null)
|
|
2089
|
+
return value;
|
|
2090
|
+
}
|
|
1957
2091
|
if (lowerer.stdlibGlobalMember(expr, "Buffer") === "poolSize")
|
|
1958
2092
|
return { kind: "libCall", fn: "buffer.poolSize", args: [], type: F64, loc: locOf(expr) };
|
|
1959
2093
|
{
|
|
@@ -2006,20 +2140,6 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
2006
2140
|
{ mode: "required", type: DYN },
|
|
2007
2141
|
],
|
|
2008
2142
|
}, "Buffer.compare", locOf(expr));
|
|
2009
|
-
if (lowerer.stdlibGlobalMember(expr, "Date") === "now")
|
|
2010
|
-
return lowerer.lowerNativeCallableValue({
|
|
2011
|
-
fn: "date.now",
|
|
2012
|
-
params: [],
|
|
2013
|
-
result: F64,
|
|
2014
|
-
valueParams: [],
|
|
2015
|
-
}, "Date.now", locOf(expr));
|
|
2016
|
-
if (stdlibGlobalNameOf(lowerer, expr.expression) === "Object") {
|
|
2017
|
-
if (expr.name.text === "assign")
|
|
2018
|
-
return lowerObjectAssignValue(lowerer, locOf(expr));
|
|
2019
|
-
const fn = own(OBJECT_CALLABLE_VALUES, expr.name.text);
|
|
2020
|
-
if (fn)
|
|
2021
|
-
return lowerer.lowerNativeCallableValue(fn, `Object.${expr.name.text}`, locOf(expr));
|
|
2022
|
-
}
|
|
2023
2143
|
// A never-tainted JS receiver type lowered checked-dynamic
|
|
2024
2144
|
// (neverTaintedJsType — `cmd.length` on `const cmd = ['pwd', []]`):
|
|
2025
2145
|
// stand down so the dyn keyed read below the chain answers, instead
|
|
@@ -2457,6 +2577,21 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
2457
2577
|
const receiver = expected?.kind === "bytes" ? strictReceiver(expected) : lowerer.lowerExpr(expr.expression);
|
|
2458
2578
|
return { kind: "bytesIntrinsic", method: "buffer", receiver, args: [], type: DYN, loc };
|
|
2459
2579
|
}
|
|
2580
|
+
// A method read as a value in JavaScript (`buf.indexOf ===
|
|
2581
|
+
// Buffer.prototype.indexOf`, `const write = buf.writeUInt8`): the box
|
|
2582
|
+
// answers the function Node's prototype holds, which runs on the
|
|
2583
|
+
// receiver it is called with.
|
|
2584
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
2585
|
+
const expected = lowerer.mapTypeOf(lowerer.typeOf(expr.expression));
|
|
2586
|
+
const receiver = expected?.kind === "bytes" ? strictReceiver(expected) : lowerer.lowerExpr(expr.expression);
|
|
2587
|
+
return {
|
|
2588
|
+
kind: "dynKeyGet",
|
|
2589
|
+
value: lowerer.coerceToExpected(receiver, DYN),
|
|
2590
|
+
key: { kind: "strLit", value: name, type: STRING, loc },
|
|
2591
|
+
type: DYN,
|
|
2592
|
+
loc,
|
|
2593
|
+
};
|
|
2594
|
+
}
|
|
2460
2595
|
if (name === "slice" || name === "subarray" || name === "set" || name === "toString") {
|
|
2461
2596
|
lowerer.unsupported("SC1090", expr, `typed-array methods as values (call '${name}' directly)`);
|
|
2462
2597
|
}
|
|
@@ -3455,10 +3590,16 @@ export function lowerUnionProperty(lowerer, expr) {
|
|
|
3455
3590
|
loc: locOf(expr),
|
|
3456
3591
|
};
|
|
3457
3592
|
}
|
|
3593
|
+
if (isUnitType(value.type)) {
|
|
3594
|
+
// A nullish receiver: Node's RequireObjectCoercible TypeError, after
|
|
3595
|
+
// the receiver's own evaluation.
|
|
3596
|
+
const unit = value.type.kind === "nullT" ? "null" : "undefined";
|
|
3597
|
+
return throwAfterEach([value], nullishReadTypeError(unit, expr.name.text, lowerer.mapTypeOf(lowerer.typeOf(expr)) ?? DYN, locOf(expr)), locOf(expr));
|
|
3598
|
+
}
|
|
3458
3599
|
if (value.type.kind !== "union") {
|
|
3459
3600
|
lowerer.unsupported("SC1090", expr, "shared property access without a represented union receiver");
|
|
3460
3601
|
}
|
|
3461
|
-
const read = lowerUnionValueRead(lowerer, expr, value);
|
|
3602
|
+
const read = lowerUnionValueRead(lowerer, expr, value) ?? narrowedUnionValueRead(lowerer, expr, value);
|
|
3462
3603
|
if (read)
|
|
3463
3604
|
return read;
|
|
3464
3605
|
lowerer.unsupported("SC1090", expr, `reading '${expr.name.text}' on a union-typed value (every arm must be an object/record ` +
|
|
@@ -3472,6 +3613,24 @@ export function lowerUnionProperty(lowerer, expr) {
|
|
|
3472
3613
|
* receiver still stores. Returns null when no arm can answer — the caller
|
|
3473
3614
|
* owns the diagnostic. */
|
|
3474
3615
|
export function lowerUnionValueRead(lowerer, expr, value, missingFieldAsUndefined = false) {
|
|
3616
|
+
return unionValueRead(lowerer, expr, value, missingFieldAsUndefined);
|
|
3617
|
+
}
|
|
3618
|
+
/** The stored-union read again over the arms the checker's narrowing still
|
|
3619
|
+
* allows: an arm it ruled out at this site refused the read (the OAuth
|
|
3620
|
+
* arm's index signature beside `ApiKeyCredential.key`, behind an
|
|
3621
|
+
* optional-chain discriminant guard). Only the REFUSAL points call this —
|
|
3622
|
+
* a site another lowering answers keeps it — so no compiling program
|
|
3623
|
+
* gains a second, narrowed lowering. Returns null when the site's type is
|
|
3624
|
+
* not a narrowing of the value's union. */
|
|
3625
|
+
export function narrowedUnionValueRead(lowerer, expr, value) {
|
|
3626
|
+
const narrowed = narrowedUnionView(lowerer, expr.expression, value, locOf(expr));
|
|
3627
|
+
if (!narrowed)
|
|
3628
|
+
return null;
|
|
3629
|
+
if (narrowed.arm)
|
|
3630
|
+
return narrowedArmRead(lowerer, expr, narrowed.value, narrowed.arm);
|
|
3631
|
+
return unionValueRead(lowerer, expr, narrowed.value, false);
|
|
3632
|
+
}
|
|
3633
|
+
function unionValueRead(lowerer, expr, value, missingFieldAsUndefined) {
|
|
3475
3634
|
if (value.type.kind !== "union")
|
|
3476
3635
|
return null;
|
|
3477
3636
|
const unionId = value.type.unionId;
|
|
@@ -4121,6 +4280,54 @@ function readOnlyAccess(access) {
|
|
|
4121
4280
|
(parent.operator !== ts.SyntaxKind.PlusPlusToken &&
|
|
4122
4281
|
parent.operator !== ts.SyntaxKind.MinusMinusToken));
|
|
4123
4282
|
}
|
|
4283
|
+
/** The operand a member WRITE addresses through a chain of type assertions:
|
|
4284
|
+
* `(p as View).x = v` names `p`. Node erases a type assertion, so a write
|
|
4285
|
+
* mutates the very object the operand names; the assertion only decides what
|
|
4286
|
+
* the checker accepts. Null when no `as`/`<T>` wraps the receiver (a write
|
|
4287
|
+
* there keeps the ordinary lowering). */
|
|
4288
|
+
function assertionOperand(access) {
|
|
4289
|
+
let node = access.expression;
|
|
4290
|
+
let asserted = false;
|
|
4291
|
+
for (;;) {
|
|
4292
|
+
if (ts.isParenthesizedExpression(node)) {
|
|
4293
|
+
node = node.expression;
|
|
4294
|
+
continue;
|
|
4295
|
+
}
|
|
4296
|
+
if (ts.isAsExpression(node) || ts.isTypeAssertion(node)) {
|
|
4297
|
+
node = node.expression;
|
|
4298
|
+
asserted = true;
|
|
4299
|
+
continue;
|
|
4300
|
+
}
|
|
4301
|
+
break;
|
|
4302
|
+
}
|
|
4303
|
+
return asserted ? node : null;
|
|
4304
|
+
}
|
|
4305
|
+
/** The unasserted value a member write addresses, when its OWN stored
|
|
4306
|
+
* layout holds the member at the asserted type — the erased write of Node.
|
|
4307
|
+
* The asserted view's conversion may instead build a fresh width record
|
|
4308
|
+
* (`%rec.width`), and a write into that temporary is dropped, so a view
|
|
4309
|
+
* that adds a member to a record has nothing to write and the caller
|
|
4310
|
+
* refuses. Only a RECORD operand converts like that: a dyn value's cast is
|
|
4311
|
+
* a checked, identity-preserving view (`dyn-literal-identity.ts`), and the
|
|
4312
|
+
* ordinary lowering already writes through it. The static type decides, so
|
|
4313
|
+
* the operand is lowered exactly once even when it has side effects. */
|
|
4314
|
+
function assertedWrite(lowerer, access, operand, fieldType, assertedType) {
|
|
4315
|
+
if (lowerer.mapTypeOf(lowerer.typeOf(operand))?.kind !== "record") {
|
|
4316
|
+
return { receiver: null, refuse: false };
|
|
4317
|
+
}
|
|
4318
|
+
const value = lowerer.lowerExpr(operand);
|
|
4319
|
+
if (value.type.kind === "record") {
|
|
4320
|
+
const field = lowerer.shapes
|
|
4321
|
+
.get(value.type.shapeId)
|
|
4322
|
+
?.fields.find((f) => f.name === access.name.text);
|
|
4323
|
+
return field && typeEquals(field.type, fieldType)
|
|
4324
|
+
? { receiver: value, refuse: false }
|
|
4325
|
+
: { receiver: null, refuse: true };
|
|
4326
|
+
}
|
|
4327
|
+
// The value stayed non-record (a generic body, an aliased layout): keep
|
|
4328
|
+
// the assertion's conversion over the value already lowered.
|
|
4329
|
+
return { receiver: lowerer.coerceInto(access.expression, value, assertedType), refuse: false };
|
|
4330
|
+
}
|
|
4124
4331
|
export function fieldTarget(lowerer, access) {
|
|
4125
4332
|
if (lowerer.cjsLocalModuleBindingOf(access.expression))
|
|
4126
4333
|
return null;
|
|
@@ -4212,38 +4419,76 @@ export function fieldTarget(lowerer, access) {
|
|
|
4212
4419
|
if (receiverIr?.kind === "union" && hasClassPayload(lowerer, receiverIr)) {
|
|
4213
4420
|
return representedClassFieldTarget(lowerer, access.expression, access.name.text, lowerer.lowerExpr(access.expression));
|
|
4214
4421
|
}
|
|
4215
|
-
// A
|
|
4216
|
-
//
|
|
4217
|
-
//
|
|
4218
|
-
//
|
|
4219
|
-
//
|
|
4220
|
-
//
|
|
4221
|
-
|
|
4222
|
-
|
|
4223
|
-
|
|
4224
|
-
|
|
4225
|
-
|
|
4226
|
-
|
|
4227
|
-
|
|
4422
|
+
// A member the checker ADMITS on a receiver that has no static layout: a
|
|
4423
|
+
// write through an assertion on a checked-dynamic value (a caught binding
|
|
4424
|
+
// — `(error as { headers?: Headers }).headers = undefined`). Node erases
|
|
4425
|
+
// the assertion, so the write lands on the runtime object as an own
|
|
4426
|
+
// property; the checked-dynamic keyed write sets exactly that, and the
|
|
4427
|
+
// class-typed value converts at the write like every other dyn→static edge.
|
|
4428
|
+
if (receiverIr?.kind === "dyn" && !readOnlyAccess(access)) {
|
|
4429
|
+
// The assertion itself may be unrepresentable (a class member on a
|
|
4430
|
+
// structural view); it is erased at runtime, so address the operand.
|
|
4431
|
+
const writeOperand = assertionOperand(access);
|
|
4432
|
+
const admitted = lowerer.mapTypeOf(lowerer.typeOf(access));
|
|
4433
|
+
if (writeOperand && admitted && admitted.kind !== "void")
|
|
4434
|
+
return {
|
|
4435
|
+
container: "dynamic",
|
|
4436
|
+
obj: lowerer.coerceToExpected(lowerer.lowerExpr(writeOperand), DYN),
|
|
4437
|
+
field: access.name.text,
|
|
4438
|
+
fieldType: admitted,
|
|
4439
|
+
};
|
|
4440
|
+
}
|
|
4441
|
+
// A member the checker ADMITS but the stored layout cannot hold. The
|
|
4442
|
+
// constraint of a type parameter declares it (a generic options bag read
|
|
4443
|
+
// through an `"sessionId" in options` guard, or `options?.apiKey` with the
|
|
4444
|
+
// guarded spelling), and so does a cast that intersects the member onto a
|
|
4445
|
+
// record (`options as Omit<T, "k"> & ProviderRequestOptions<M>`), while the
|
|
4446
|
+
// record the value was STORED as has no such slot: the call site omitted the
|
|
4447
|
+
// optional member, the instantiation is a union of option shapes, or the cast
|
|
4448
|
+
// added a member its source layout never declared. Node reads the property
|
|
4449
|
+
// off the object it actually has — undefined when the object lacks it, the
|
|
4450
|
+
// value when the value kept one — so the read is the checked-dynamic keyed
|
|
4451
|
+
// read of the stored value, entering the static code at the type the checker
|
|
4452
|
+
// gave the read (a failed conversion throws; it never diverges).
|
|
4453
|
+
//
|
|
4454
|
+
// Inside a `?.` chain this lowering runs on the re-dispatch, with the
|
|
4455
|
+
// receiver node bound to the chain's present (non-nullish) arm, so the
|
|
4456
|
+
// stored value is already the record and the chain supplies the guard.
|
|
4457
|
+
if ((!access.questionDotToken || lowerer.chainHandled.has(access)) && readOnlyAccess(access)) {
|
|
4228
4458
|
const storedIr = stored ?? narrowed;
|
|
4229
|
-
const
|
|
4230
|
-
const
|
|
4459
|
+
const present = storedIr?.kind === "union" ? lowerer.stripUndefinedArm(storedIr) : storedIr;
|
|
4460
|
+
const arms = present?.kind === "union"
|
|
4461
|
+
? (lowerer.unions.get(present.unionId)?.arms ?? [present])
|
|
4462
|
+
: present
|
|
4463
|
+
? [present]
|
|
4464
|
+
: [];
|
|
4465
|
+
// Every arm is a plain record layout with no slot for the member.
|
|
4466
|
+
const layoutMissing = arms.length > 0 &&
|
|
4467
|
+
arms.every((arm) => {
|
|
4468
|
+
if (arm.kind !== "record")
|
|
4469
|
+
return false;
|
|
4470
|
+
const shape = lowerer.shapes.get(arm.shapeId);
|
|
4471
|
+
return (shape !== undefined &&
|
|
4472
|
+
!shape.tuple &&
|
|
4473
|
+
!shape.indexValue &&
|
|
4474
|
+
!shape.fields.some((f) => f.name === access.name.text));
|
|
4475
|
+
});
|
|
4231
4476
|
const admitted = lowerer.mapTypeOf(lowerer.typeOf(access));
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
|
|
4236
|
-
|
|
4237
|
-
|
|
4477
|
+
const checkerHolds = typeParameterReceiver(lowerer.typeOf(access.expression)) ||
|
|
4478
|
+
narrowed === null ||
|
|
4479
|
+
(narrowed.kind === "record" &&
|
|
4480
|
+
(lowerer.shapes.get(narrowed.shapeId)?.fields.some((f) => f.name === access.name.text) ??
|
|
4481
|
+
false));
|
|
4482
|
+
if (layoutMissing && checkerHolds && admitted && admitted.kind !== "void") {
|
|
4238
4483
|
let obj = lowerer.lowerExpr(access.expression);
|
|
4239
4484
|
if (obj.type.kind === "union" && lowerer.armTag(obj.type.unionId, UNDEFINED_T) >= 0) {
|
|
4240
|
-
const
|
|
4485
|
+
const presentType = lowerer.stripUndefinedArm(obj.type);
|
|
4241
4486
|
obj =
|
|
4242
|
-
|
|
4243
|
-
? (lowerer.runtimeOptionalPropertyReceiver(access.expression, obj,
|
|
4487
|
+
presentType.kind === "record"
|
|
4488
|
+
? (lowerer.runtimeOptionalPropertyReceiver(access.expression, obj, presentType, access.name.text) ?? obj)
|
|
4244
4489
|
: lowerer.maybeNarrow(obj, access.expression);
|
|
4245
4490
|
}
|
|
4246
|
-
if (obj.type
|
|
4491
|
+
if (!lowerer.dynConvertible(obj.type))
|
|
4247
4492
|
return null;
|
|
4248
4493
|
return {
|
|
4249
4494
|
container: "dynamic",
|
|
@@ -4257,7 +4502,11 @@ export function fieldTarget(lowerer, access) {
|
|
|
4257
4502
|
const shape = lowerer.shapes.get(receiverIr.shapeId);
|
|
4258
4503
|
const fieldType = shape?.fields.find((f) => f.name === access.name.text)?.type;
|
|
4259
4504
|
if (fieldType) {
|
|
4260
|
-
|
|
4505
|
+
const writeOperand = readOnlyAccess(access) ? null : assertionOperand(access);
|
|
4506
|
+
const write = writeOperand === null
|
|
4507
|
+
? null
|
|
4508
|
+
: assertedWrite(lowerer, access, writeOperand, fieldType, receiverIr);
|
|
4509
|
+
let obj = write?.receiver ?? lowerer.lowerExpr(access.expression);
|
|
4261
4510
|
const nominal = representedClassFieldTarget(lowerer, access.expression, access.name.text, obj);
|
|
4262
4511
|
if (nominal)
|
|
4263
4512
|
return nominal;
|
|
@@ -4289,6 +4538,13 @@ export function fieldTarget(lowerer, access) {
|
|
|
4289
4538
|
}
|
|
4290
4539
|
if (obj.type.kind !== "record")
|
|
4291
4540
|
return null;
|
|
4541
|
+
// A write through a type assertion that the value's own layout cannot
|
|
4542
|
+
// host would land on the assertion's converted copy (`%rec.width.<id>`)
|
|
4543
|
+
// and be dropped. Node erases the assertion and mutates the object the
|
|
4544
|
+
// operand names, so refuse rather than diverge silently.
|
|
4545
|
+
if (write?.refuse === true) {
|
|
4546
|
+
lowerer.unsupported("SC1090", access, `writing '${access.name.text}' through a type assertion to a member the value's own layout does not hold (the write would land on a converted copy; declare the member on the value's type)`);
|
|
4547
|
+
}
|
|
4292
4548
|
const actualShape = lowerer.shapes.get(obj.type.shapeId);
|
|
4293
4549
|
const actualField = actualShape?.fields.find((f) => f.name === access.name.text);
|
|
4294
4550
|
return {
|
|
@@ -4748,7 +5004,8 @@ export function builtinGlobalValueAt(lowerer, expr, canonical, loc, js) {
|
|
|
4748
5004
|
return namespace;
|
|
4749
5005
|
if (readsBuiltinGlobalMembers(expr))
|
|
4750
5006
|
return null;
|
|
4751
|
-
const value = builtinGlobalValue(canonical, loc, js)
|
|
5007
|
+
const value = builtinGlobalValue(canonical, loc, js) ??
|
|
5008
|
+
(js ? globalFunctionValue(lowerer, canonical, loc) : null);
|
|
4752
5009
|
if (value === null)
|
|
4753
5010
|
return null;
|
|
4754
5011
|
let node = expr;
|
|
@@ -5130,13 +5387,26 @@ function jsPrimitivePrototypeValue(lowerer, expr) {
|
|
|
5130
5387
|
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
5131
5388
|
return null;
|
|
5132
5389
|
const loc = locOf(expr);
|
|
5133
|
-
const value = (kind) =>
|
|
5134
|
-
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
|
|
5138
|
-
|
|
5139
|
-
|
|
5390
|
+
const value = (kind) => kind === "Boolean"
|
|
5391
|
+
? // The wrapper unit's Boolean.prototype is the object Boolean
|
|
5392
|
+
// instances inherit from, so its valueOf/toString are the interned
|
|
5393
|
+
// members and accept a primitive boolean or a Boolean wrapper
|
|
5394
|
+
// receiver (the dyn.builtinPrototype builder takes only the kind's
|
|
5395
|
+
// primitives).
|
|
5396
|
+
{
|
|
5397
|
+
kind: "libCall",
|
|
5398
|
+
fn: "wrapper.booleanPrototype",
|
|
5399
|
+
args: [wrapperConstructors(lowerer, loc)[2]],
|
|
5400
|
+
type: DYN,
|
|
5401
|
+
loc,
|
|
5402
|
+
}
|
|
5403
|
+
: {
|
|
5404
|
+
kind: "libCall",
|
|
5405
|
+
fn: "dyn.builtinPrototype",
|
|
5406
|
+
args: [{ kind: "strLit", value: kind, type: STRING, loc }],
|
|
5407
|
+
type: DYN,
|
|
5408
|
+
loc,
|
|
5409
|
+
};
|
|
5140
5410
|
const receiver = expr.expression;
|
|
5141
5411
|
if (ts.isPropertyAccessExpression(receiver) && receiver.name.text === "prototype") {
|
|
5142
5412
|
const kind = primitivePrototypeKind(lowerer, receiver);
|