@scriptc/compiler 0.4.1 → 0.4.2
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/scriptc-node-fallback.d.ts +582 -78
- package/dist/backend/cycle-analysis.d.ts +2 -1
- package/dist/backend/cycle-analysis.js +4 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +2 -1
- package/dist/backend/cycle-mutability.js +2 -2
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +4 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +2 -1
- package/dist/backend/immutability.js +2 -2
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +4 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +7 -3
- package/dist/backend/llvm/alloc.js +7 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/array-search.js +2 -1
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
- package/dist/backend/llvm/bytes-loop-versions.js +115 -19
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +72 -1
- package/dist/backend/llvm/classes.js +331 -45
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +223 -16
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +1 -3
- package/dist/backend/llvm/common.js +1 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.js +8 -4
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +4 -4
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +4 -1
- package/dist/backend/llvm/counted-loops.js +62 -23
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
- package/dist/backend/llvm/dense-array-loops.js +46 -10
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +50 -14
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +25 -1
- package/dist/backend/llvm/dyn.js +331 -8
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +22 -6
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +17 -11
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -23
- package/dist/backend/llvm/emit-statements.js +325 -25
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +141 -15
- package/dist/backend/llvm/emitter.js +537 -64
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -0
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +5 -2
- package/dist/backend/llvm/expr-bytes.js +110 -40
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +34 -22
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +21 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +2 -3
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +54 -6
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +26 -8
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +38 -6
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +10 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +61 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.d.ts +4 -0
- package/dist/backend/llvm/lib-http2.js +20 -17
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +65 -14
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +53 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +65 -28
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +23 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +66 -45
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +14 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +8 -1
- package/dist/backend/llvm/publish.js +64 -25
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +3 -0
- package/dist/backend/llvm/publish.test.js.map +1 -1
- package/dist/backend/llvm/receivers.js +1 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +2 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.js +161 -14
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +18 -0
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +9 -7
- package/dist/backend/llvm/shapes.js +12 -10
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +2 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +3 -0
- package/dist/backend/llvm/string-reads.js +84 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +6 -5
- package/dist/backend/llvm/wasm-modules.js +32 -9
- package/dist/backend/llvm/wasm-modules.js.map +1 -1
- package/dist/backend/mangle.d.ts +3 -0
- package/dist/backend/mangle.js +5 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +22 -4
- package/dist/backend/native/executable.js +24 -8
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -0
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +11 -6
- package/dist/backend/native-codegen.js +36 -9
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +0 -23
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +14 -4
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/optimization.d.ts +2 -2
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +1 -1
- package/dist/backend/runtime-pack-core.js +1 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +4 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +0 -21
- package/dist/backend/runtime-pack.js +0 -29
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +9 -69
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +31 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +3 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +26 -6
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +5 -1
- package/dist/cli/usage.js +7 -2
- package/dist/cli/usage.js.map +1 -1
- package/dist/contracts/check.js +1 -1
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.d.ts +7 -2
- package/dist/coverage/report.js +18 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +1 -0
- package/dist/coverage/verdict-cache.js +4 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-semantic.js +4 -0
- package/dist/coverage/verdict-semantic.js.map +1 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.d.ts +40 -0
- package/dist/diagnostics/dynamic-tier.js +57 -0
- package/dist/diagnostics/dynamic-tier.js.map +1 -0
- package/dist/diagnostics/envelope.d.ts +2 -1
- package/dist/diagnostics/envelope.js +5 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +23 -1
- package/dist/executable/executable-cache.js +59 -7
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +45 -3
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +3 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +1 -0
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/dispose-hook.d.ts +2 -0
- package/dist/frontend/dispose-hook.js +14 -0
- package/dist/frontend/dispose-hook.js.map +1 -0
- package/dist/frontend/jsx-entities.d.ts +4 -0
- package/dist/frontend/jsx-entities.js +259 -0
- package/dist/frontend/jsx-entities.js.map +1 -0
- package/dist/frontend/jsx-source.d.ts +71 -0
- package/dist/frontend/jsx-source.js +781 -0
- package/dist/frontend/jsx-source.js.map +1 -0
- package/dist/frontend/jsx-source.test.d.ts +1 -0
- package/dist/frontend/jsx-source.test.js +200 -0
- package/dist/frontend/jsx-source.test.js.map +1 -0
- package/dist/frontend/literal-values.test.js +8 -9
- package/dist/frontend/literal-values.test.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +3 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +2 -2
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
- package/dist/frontend/lowering/builtins/arguments.js +30 -15
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +10 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
- package/dist/frontend/lowering/builtins/crypto.js +59 -3
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
- package/dist/frontend/lowering/builtins/date-classes.js +477 -0
- package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
- package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
- package/dist/frontend/lowering/builtins/dates.js +55 -26
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
- package/dist/frontend/lowering/builtins/dh.js +151 -0
- package/dist/frontend/lowering/builtins/dh.js.map +1 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
- package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
- package/dist/frontend/lowering/builtins/ecdh.js +7 -7
- package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
- package/dist/frontend/lowering/builtins/errors.js +110 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +6 -4
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
- package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
- package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
- package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +2 -1
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
- package/dist/frontend/lowering/builtins/key-object.js +20 -7
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +11 -4
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +9 -5
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.js +4 -3
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.js +3 -2
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +3 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +3 -2
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
- package/dist/frontend/lowering/builtins/readline.js +23 -6
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/strings.js +13 -5
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +1 -1
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +4 -3
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.js +2 -1
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +2 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +13 -6
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
- package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-assertions.js +3 -2
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +2 -1
- package/dist/frontend/lowering/class-construction.js +8 -13
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.js +1 -1
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +568 -151
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +3 -0
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +1 -1
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +7 -0
- package/dist/frontend/lowering/class-protocols.js +64 -4
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
- package/dist/frontend/lowering/class-prototypes.js +36 -3
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.js +25 -5
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +2 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +8 -7
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.js +8 -7
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -1
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +14 -13
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +2 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +25 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +6 -5
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
- package/dist/frontend/lowering/containers/bytes.js +129 -28
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +8 -7
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
- package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +36 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +2 -1
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.js +25 -4
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
- package/dist/frontend/lowering/dispatch-sites.js +204 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
- package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
- package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
- package/dist/frontend/lowering/dyn-streams.js +1 -1
- package/dist/frontend/lowering/dyn-streams.js.map +1 -1
- package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
- package/dist/frontend/lowering/dynamic-tier.js +327 -0
- package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -0
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +15 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +45 -3
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +17 -1
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +46 -7
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +35 -5
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
- package/dist/frontend/lowering/expressions/object-literals.js +27 -6
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +5 -5
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
- package/dist/frontend/lowering/expressions/property-access.js +99 -7
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +63 -5
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +63 -9
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +42 -1
- package/dist/frontend/lowering/generic-functions.js +448 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +2 -1
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +9 -8
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
- package/dist/frontend/lowering/json-require.js +2 -1
- package/dist/frontend/lowering/json-require.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
- package/dist/frontend/lowering/key-order-witness.js +21 -4
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +38 -2
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lifetime-regions.js +2 -1
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +6 -5
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +3 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +4 -0
- package/dist/frontend/lowering/lower-calls.js +339 -91
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +18 -0
- package/dist/frontend/lowering/lower-classes.js +280 -25
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -2
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
- package/dist/frontend/lowering/lower-event-emitter.js +267 -20
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
- package/dist/frontend/lowering/lower-exprs.js +116 -11
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +304 -72
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +10 -6
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +2 -1
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.js +2 -1
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +15 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +2 -2
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
- package/dist/frontend/lowering/lower-namespaces.js +4 -3
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +10 -0
- package/dist/frontend/lowering/lower-server.js +237 -59
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +12 -10
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +168 -20
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +575 -165
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +4 -3
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +125 -28
- package/dist/frontend/lowering/lowerer.js +557 -63
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +21 -9
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.js +5 -0
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +1 -1
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +2 -1
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +9 -0
- package/dist/frontend/lowering/private-brands.js +66 -15
- package/dist/frontend/lowering/private-brands.js.map +1 -1
- package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
- package/dist/frontend/lowering/require-initialization.js +2 -1
- package/dist/frontend/lowering/require-initialization.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
- package/dist/frontend/lowering/runtime-optional-records.js +18 -5
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
- package/dist/frontend/lowering/site-dependencies.js +84 -0
- package/dist/frontend/lowering/site-dependencies.js.map +1 -0
- package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
- package/dist/frontend/lowering/site-dependencies.test.js +53 -0
- package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
- package/dist/frontend/lowering/stable-names.d.ts +11 -0
- package/dist/frontend/lowering/stable-names.js +35 -0
- package/dist/frontend/lowering/stable-names.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +2 -2
- package/dist/frontend/lowering/static-typeof.js +42 -3
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.js +2 -1
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/structural-positions.d.ts +32 -0
- package/dist/frontend/lowering/structural-positions.js +108 -0
- package/dist/frontend/lowering/structural-positions.js.map +1 -0
- package/dist/frontend/lowering/surfaces.js +42 -26
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.js +37 -3
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
- package/dist/frontend/npm-static-tsc-helpers.js +106 -0
- package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
- package/dist/frontend/npm-static-type-exports-host.js +214 -0
- package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
- package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.d.ts +52 -0
- package/dist/frontend/npm-static-type-exports.js +261 -0
- package/dist/frontend/npm-static-type-exports.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports.test.js +103 -0
- package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
- package/dist/frontend/npm-static-umd.d.ts +6 -0
- package/dist/frontend/npm-static-umd.js +203 -0
- package/dist/frontend/npm-static-umd.js.map +1 -0
- package/dist/frontend/npm-static-umd.test.d.ts +1 -0
- package/dist/frontend/npm-static-umd.test.js +105 -0
- package/dist/frontend/npm-static-umd.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +8 -0
- package/dist/frontend/npm-static.js +47 -2
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/program.d.ts +13 -0
- package/dist/frontend/program.js +103 -6
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +1 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/services.d.ts +6 -0
- package/dist/frontend/services.js +18 -0
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +21 -7
- package/dist/frontend/ts7/ast-node.js +131 -29
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +60 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +27 -2
- package/dist/frontend/ts7/ast-wire.js +124 -21
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast.d.ts +23 -2
- package/dist/frontend/ts7/ast.js +143 -2
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +13 -1
- package/dist/frontend/ts7/checker.js +75 -1
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +9 -6
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/enums.d.ts +3 -3
- package/dist/frontend/ts7/enums.generated.d.ts +10 -0
- package/dist/frontend/ts7/enums.generated.js +21 -0
- package/dist/frontend/ts7/enums.generated.js.map +1 -1
- package/dist/frontend/ts7/enums.js +19 -0
- package/dist/frontend/ts7/enums.js.map +1 -1
- package/dist/frontend/ts7/program-host.js +5 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
- package/dist/frontend/ts7/semantic-checker.js +25 -20
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +13 -0
- package/dist/frontend/ts7/semantic-json.js +146 -0
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.test.js +57 -1
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +15 -0
- package/dist/frontend/ts7/semantic-model.js +67 -19
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +3 -2
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/session.js +1 -1
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +1 -1
- package/dist/frontend/tsc-codes.js +7 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +38 -6
- package/dist/frontend/type-mapper.js +265 -32
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +1 -1
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend-process-args.d.ts +4 -0
- package/dist/frontend-process-args.js +52 -0
- package/dist/frontend-process-args.js.map +1 -0
- package/dist/frontend-process-args.test.d.ts +1 -0
- package/dist/frontend-process-args.test.js +47 -0
- package/dist/frontend-process-args.test.js.map +1 -0
- package/dist/frontend-process.d.ts +1 -0
- package/dist/frontend-process.js +23 -0
- package/dist/frontend-process.js.map +1 -0
- package/dist/heap-collection.d.ts +16 -0
- package/dist/heap-collection.js +42 -0
- package/dist/heap-collection.js.map +1 -0
- package/dist/heap-collection.test.d.ts +1 -0
- package/dist/heap-collection.test.js +59 -0
- package/dist/heap-collection.test.js.map +1 -0
- package/dist/heap-pressure.d.ts +2 -0
- package/dist/heap-pressure.js +12 -0
- package/dist/heap-pressure.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +402 -86
- package/dist/index.js.map +1 -1
- package/dist/ir/array-length-stability.js +7 -0
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +25 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +28 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +5 -1
- package/dist/ir/builtin-signatures.js +141 -12
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +2 -2
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.test.js +2 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +13 -5
- package/dist/ir/int32-slots.js +112 -115
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +3 -1
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +9 -4
- package/dist/ir/integer-loop-facts.js +93 -18
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +49 -0
- package/dist/ir/integer-loops.js +193 -39
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +201 -1
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +64 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +17 -2
- package/dist/ir/ir.js +3 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +31 -7
- package/dist/ir/runtime-features.js +138 -11
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.d.ts +2 -0
- package/dist/ir/traverse.js +14 -2
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +56 -16
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +10 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/prepare.js +2 -0
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cli.js +5 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/prepare.js +5 -1
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +4 -1
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/dist/text-parts.d.ts +7 -0
- package/dist/text-parts.js +44 -0
- package/dist/text-parts.js.map +1 -1
- package/dist/text-parts.test.d.ts +1 -0
- package/dist/text-parts.test.js +46 -0
- package/dist/text-parts.test.js.map +1 -0
- package/dist/timing.d.ts +9 -2
- package/dist/timing.js +7 -4
- package/dist/timing.js.map +1 -1
- package/dist/wasm/translate.d.ts +4 -0
- package/dist/wasm/translate.js +2 -2
- package/dist/wasm/translate.js.map +1 -1
- package/package.json +21 -21
- package/shims/undici/core/client.ts +4 -4
- package/surface-manifest.json +19 -49
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { keyedHelperName } from "./stable-names.js";
|
|
1
2
|
import { isForwardedTupleSpread, lowerForwardingApply } from "./typed-arguments.js";
|
|
2
3
|
import { guardNullProto, nullProtoRecordShape } from "./null-prototype.js";
|
|
3
4
|
import { lowerDynStreamMemberCall } from "./dyn-streams.js";
|
|
@@ -51,7 +52,7 @@ import { createRequireSpecOf } from "./builtins/module-bindings.js";
|
|
|
51
52
|
import { lowerChildStreamMethodCall, lowerChildWriterMethodCall, } from "./builtins/child-process-methods.js";
|
|
52
53
|
import { lowerCreateRequireCall, lowerImportMetaResolveCall, lowerRequireResolveCall, } from "./builtins/module-resolution.js";
|
|
53
54
|
import { isWebCryptoReceiver, lowerCipherMethodCall, lowerCryptoGetRandomValues, lowerCryptoHashMethodCall, lowerPromisifiedCryptoCall, } from "./builtins/crypto.js";
|
|
54
|
-
import { lowerErrorIsErrorCall } from "./builtins/errors.js";
|
|
55
|
+
import { lowerErrorCaptureStackTraceCall, lowerErrorIsErrorCall } from "./builtins/errors.js";
|
|
55
56
|
import { lowerPromisifiedDnsCall } from "./lower-dgram.js";
|
|
56
57
|
import { lowerDisposableStackUseCall } from "./builtins/disposable-stack.js";
|
|
57
58
|
import { lowerDirentMethodCall, lowerFileHandleMethodCall, lowerDirMethodCall, lowerWatcherMethodCall, } from "./builtins/filesystem.js";
|
|
@@ -59,7 +60,7 @@ import { fencePerfEntryKeyWalk, isPerfEntryType, lowerHistogramMethodCall, lower
|
|
|
59
60
|
import { lowerProcStreamMethodCall, lowerProcessBuiltinModuleNamespace, } from "./builtins/process.js";
|
|
60
61
|
import { recordMayKeepSource, throughRecordSource } from "./record-sources.js";
|
|
61
62
|
import { lowerReflectCall } from "./builtins/reflection.js";
|
|
62
|
-
import { lowerAbsenceProbe, v8CalleeText,
|
|
63
|
+
import { lowerAbsenceProbe, v8CalleeText, lowerPromiseAllTupleCall, lowerPromiseRejectCall, lowerToNumberArgument, stringWrapperToString, symbolFieldInfo, templateRawTextOf, primitiveCtorClosure, } from "./lower-exprs.js";
|
|
63
64
|
import { isSafeToDiscard } from "./expressions/evaluation-safety.js";
|
|
64
65
|
import { tryLowerExpression } from "./expressions/try-lower-expression.js";
|
|
65
66
|
import { lowerChildMethodValue, lowerChildPropertyCall } from "./handle-properties.js";
|
|
@@ -71,6 +72,7 @@ import { EMITTER_API_MEMBERS, exactClassOfReceiver, exactInstanceClassOf, findGe
|
|
|
71
72
|
import { classCallbackCall, isClassCallback } from "./class-callbacks.js";
|
|
72
73
|
import { emitterRooted, lowerEmitterMethodCall } from "./lower-event-emitter.js";
|
|
73
74
|
import { eventTargetApiMethod, lowerEventTargetMethodCall } from "./lower-event-target.js";
|
|
75
|
+
import { dateRootOf, isDatePrototypeMethod, lowerInheritedDateMethodCall, } from "./builtins/date-classes.js";
|
|
74
76
|
import { lowerConsoleInstanceCall, lowerConsoleMethodCall, lowerConsoleOutput, } from "./lower-console.js";
|
|
75
77
|
import { STREAM_API_MEMBERS, STREAM_OPERATORS, lowerStreamMethodCall, lowerStreamStaticCall, streamSidesOf, } from "./lower-stream.js";
|
|
76
78
|
import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, ambientUndefinedFnSymbolOf, contextualUndefReadType, fenceEarlyAliasUse, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "./lower-namespaces.js";
|
|
@@ -739,10 +741,9 @@ export function lowerCall(lowerer, expr) {
|
|
|
739
741
|
// excludes shadowed names. parseInt's omitted radix completes
|
|
740
742
|
// to 0 — the spec's "undefined" (base 10 with the 0x hex escape);
|
|
741
743
|
// parseFloat lowers the STRING form only (Node would ToString other
|
|
742
|
-
// values — no static story); isNaN/isFinite's
|
|
743
|
-
//
|
|
744
|
-
//
|
|
745
|
-
// Number.isFinite exactly (ms's `isFinite(val)` guard).
|
|
744
|
+
// values — no static story); isNaN/isFinite apply the global's
|
|
745
|
+
// ToNumber to any argument, then test like Number.isNaN /
|
|
746
|
+
// Number.isFinite.
|
|
746
747
|
if ((expr.expression.text === "parseInt" ||
|
|
747
748
|
expr.expression.text === "isNaN" ||
|
|
748
749
|
expr.expression.text === "parseFloat" ||
|
|
@@ -841,15 +842,11 @@ export function lowerCall(lowerer, expr) {
|
|
|
841
842
|
}
|
|
842
843
|
if (islFn && expr.arguments.nodes.length === islFn.args.length) {
|
|
843
844
|
// The static forms above already took the exactly-typed argument
|
|
844
|
-
// (a string for parseFloat
|
|
845
|
-
//
|
|
846
|
-
//
|
|
847
|
-
// unsupported.
|
|
845
|
+
// (a string for parseFloat): name the argument type that refused
|
|
846
|
+
// the call, so the message states the condition rather than
|
|
847
|
+
// reading as if the global itself were unsupported.
|
|
848
848
|
const argText = loweredArgumentText(lowerer, expr.arguments.nodes[0]);
|
|
849
|
-
|
|
850
|
-
lowerer.refuseUnsupportedApi(`'${expr.expression.text}' with a '${argText}' argument`, expr, exact === "string"
|
|
851
|
-
? "only a string argument compiles statically: convert the argument explicitly first (for example String(x), or narrow the union)"
|
|
852
|
-
: "only a number argument compiles statically: narrow the argument to a number first");
|
|
849
|
+
lowerer.refuseUnsupportedApi(`'${expr.expression.text}' with a '${argText}' argument`, expr, "only a string argument compiles statically: convert the argument explicitly first (for example String(x), or narrow the union)");
|
|
853
850
|
}
|
|
854
851
|
}
|
|
855
852
|
// A TYPE-GUARD call on a catch binding (`isErrnoException(err)` —
|
|
@@ -1237,9 +1234,10 @@ export function lowerCall(lowerer, expr) {
|
|
|
1237
1234
|
lowerer.fenceStaticReadableStreamMember(expr.expression, "call") ??
|
|
1238
1235
|
lowerDisposableStackUseCall(lowerer, expr, expr.expression) ??
|
|
1239
1236
|
lowerer.lowerStdlibMethodCall(expr, expr.expression) ??
|
|
1240
|
-
// crypto.getRandomValues on the WebCrypto global
|
|
1241
|
-
// fallback builds, so before the dyn receiver path) or
|
|
1242
|
-
|
|
1237
|
+
// crypto.getRandomValues / randomUUID on the WebCrypto global
|
|
1238
|
+
// (untyped in fallback builds, so before the dyn receiver path) or
|
|
1239
|
+
// webcrypto.
|
|
1240
|
+
lowerWebCryptoMethodCall(lowerer, expr, expr.expression) ??
|
|
1243
1241
|
// Dyn receivers (JSON.parse-derived `unknown`/`any` values) —
|
|
1244
1242
|
lowerDynReceiverMethodCall(lowerer, expr, expr.expression) ??
|
|
1245
1243
|
// Narrowing filters (inferred predicates, filter(Boolean)) claim
|
|
@@ -1248,6 +1246,7 @@ export function lowerCall(lowerer, expr) {
|
|
|
1248
1246
|
lowerer.lowerFilterNarrowCall(expr, expr.expression) ??
|
|
1249
1247
|
lowerArrayIsArrayCall(lowerer, expr, expr.expression) ??
|
|
1250
1248
|
lowerErrorIsErrorCall(lowerer, expr, expr.expression) ??
|
|
1249
|
+
lowerErrorCaptureStackTraceCall(lowerer, expr, expr.expression) ??
|
|
1251
1250
|
lowerBigIntMethodCall(lowerer, expr, expr.expression) ??
|
|
1252
1251
|
lowerSymbolStaticCall(lowerer, expr, expr.expression) ??
|
|
1253
1252
|
lowerSymbolMethodCall(lowerer, expr, expr.expression) ??
|
|
@@ -1703,7 +1702,7 @@ function lowerOptionalNumberDefault(lowerer, value, dflt, loc) {
|
|
|
1703
1702
|
const key = `number.optionalDefault:${widened.unionId}:${dflt}`;
|
|
1704
1703
|
let helper = lowerer.valueHelpers.get(key);
|
|
1705
1704
|
if (!helper) {
|
|
1706
|
-
helper =
|
|
1705
|
+
helper = keyedHelperName(lowerer, "%number.optionalDefault", key);
|
|
1707
1706
|
lowerer.valueHelpers.set(key, helper);
|
|
1708
1707
|
const input = varRef("value.0", widened, loc);
|
|
1709
1708
|
lowerer.liftedFns.push({
|
|
@@ -1804,7 +1803,7 @@ function primitiveConversionHandler(lowerer, node, inner) {
|
|
|
1804
1803
|
const key = `then.${name}:${typeKey(inner)}`;
|
|
1805
1804
|
let fnName = lowerer.arrHofHelpers.get(key);
|
|
1806
1805
|
if (fnName === undefined) {
|
|
1807
|
-
fnName = `%then.${name}
|
|
1806
|
+
fnName = keyedHelperName(lowerer, `%then.${name}`, key);
|
|
1808
1807
|
lowerer.arrHofHelpers.set(key, fnName);
|
|
1809
1808
|
const value = varRef("v.0", inner, loc);
|
|
1810
1809
|
let body;
|
|
@@ -1958,7 +1957,7 @@ function lowerBigIntConstructorValue(lowerer, arg, loc) {
|
|
|
1958
1957
|
const key = `bigint.scalar:${unionId}`;
|
|
1959
1958
|
let helper = lowerer.valueHelpers.get(key);
|
|
1960
1959
|
if (!helper) {
|
|
1961
|
-
helper =
|
|
1960
|
+
helper = keyedHelperName(lowerer, "%bigint.scalar", key);
|
|
1962
1961
|
lowerer.valueHelpers.set(key, helper);
|
|
1963
1962
|
const value = varRef("value.0", arg.type, loc);
|
|
1964
1963
|
const body = [];
|
|
@@ -2647,6 +2646,12 @@ function lowerStringPrototypeCall(lowerer, call, access) {
|
|
|
2647
2646
|
const receiver = lowerer.ensureString(receiverValue, receiverNode);
|
|
2648
2647
|
return lowerStringMethodCallWithOptionalArgs(lowerer, call, methodAccess, () => receiver, call.arguments.nodes.slice(1));
|
|
2649
2648
|
}
|
|
2649
|
+
/** ToNumber of a union of strings, numbers, booleans, null and undefined, as
|
|
2650
|
+
* `Number(value)` converts it; null for other types. Unary `+` takes it too:
|
|
2651
|
+
* the two conversions differ only for BigInt, which such unions don't hold. */
|
|
2652
|
+
export function lowerPrimitiveUnionNumber(lowerer, arg, node, loc) {
|
|
2653
|
+
return (lowerOptionalStringNumber(lowerer, arg, loc) ?? lowerScalarUnionNumber(lowerer, arg, node, loc));
|
|
2654
|
+
}
|
|
2650
2655
|
function lowerScalarUnionNumber(lowerer, arg, node, loc) {
|
|
2651
2656
|
if (arg.type.kind !== "union" ||
|
|
2652
2657
|
!lowerer.unions
|
|
@@ -2656,7 +2661,7 @@ function lowerScalarUnionNumber(lowerer, arg, node, loc) {
|
|
|
2656
2661
|
const key = `number.scalar:${arg.type.unionId}`;
|
|
2657
2662
|
let helper = lowerer.valueHelpers.get(key);
|
|
2658
2663
|
if (!helper) {
|
|
2659
|
-
helper =
|
|
2664
|
+
helper = keyedHelperName(lowerer, "%number.scalar", key);
|
|
2660
2665
|
lowerer.valueHelpers.set(key, helper);
|
|
2661
2666
|
const value = varRef("value.0", arg.type, loc);
|
|
2662
2667
|
const nan = {
|
|
@@ -2697,7 +2702,7 @@ function lowerOptionalStringNumber(lowerer, arg, loc, fn = "num.fromString", lab
|
|
|
2697
2702
|
const key = `${label}.optionalString:${arg.type.unionId}`;
|
|
2698
2703
|
let helper = lowerer.valueHelpers.get(key);
|
|
2699
2704
|
if (!helper) {
|
|
2700
|
-
helper = `%${label}.optionalString
|
|
2705
|
+
helper = keyedHelperName(lowerer, `%${label}.optionalString`, key);
|
|
2701
2706
|
lowerer.valueHelpers.set(key, helper);
|
|
2702
2707
|
const value = varRef("value.0", arg.type, loc);
|
|
2703
2708
|
lowerer.liftedFns.push({
|
|
@@ -3108,6 +3113,16 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
|
|
|
3108
3113
|
// IS Node's semantics for every possible dyn value. Shared names would
|
|
3109
3114
|
// need a receiver-kind dispatch — they keep the fence.
|
|
3110
3115
|
if (DYN_STRING_ONLY_METHODS.has(access.name.text) && !ownCallable) {
|
|
3116
|
+
// An object-typed receiver the member is missing from (a JavaScript
|
|
3117
|
+
// module object whose members are assigned in a function body,
|
|
3118
|
+
// `common.repeat(" ", n)`) holds a string or an object with that
|
|
3119
|
+
// member: dispatch on the receiver's runtime kind.
|
|
3120
|
+
if (!checkerUntyped &&
|
|
3121
|
+
(lowerer.typeOf(access).flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0 &&
|
|
3122
|
+
!call.questionDotToken &&
|
|
3123
|
+
!access.questionDotToken &&
|
|
3124
|
+
!call.arguments.nodes.some(ts.isSpreadElement))
|
|
3125
|
+
return lowerStringOrMemberCall(lowerer, call, access, recv);
|
|
3111
3126
|
const checked = () => dynStringReceiver(lowerer, recv, access);
|
|
3112
3127
|
return (lowerRegexMethodCall(lowerer, call, access, checked) ??
|
|
3113
3128
|
lowerStringMethodCall(lowerer, call, access, checked));
|
|
@@ -3294,6 +3309,79 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
|
|
|
3294
3309
|
loc,
|
|
3295
3310
|
};
|
|
3296
3311
|
}
|
|
3312
|
+
/** `value.name(...args)` on a dyn receiver that may be a string or an
|
|
3313
|
+
* object: a string runs the String.prototype lowering, any other value
|
|
3314
|
+
* calls its member. The member is read before the arguments are
|
|
3315
|
+
* evaluated, and the arguments are evaluated once for either branch. */
|
|
3316
|
+
function lowerStringOrMemberCall(lowerer, call, access, recv) {
|
|
3317
|
+
const loc = locOf(call);
|
|
3318
|
+
const receiverLocal = lowerer.declareHiddenLocal("%dynCallReceiver", DYN);
|
|
3319
|
+
const receiver = varRef(receiverLocal.id, DYN, loc);
|
|
3320
|
+
const isString = { kind: "dynTest", test: "string", value: receiver, type: BOOL, loc };
|
|
3321
|
+
const calleeLocal = lowerer.declareHiddenLocal("%dynCallCallee", DYN);
|
|
3322
|
+
const callee = varRef(calleeLocal.id, DYN, loc);
|
|
3323
|
+
const stmts = [
|
|
3324
|
+
{ kind: "varDecl", localId: receiverLocal.id, init: recv, loc },
|
|
3325
|
+
{
|
|
3326
|
+
kind: "varDecl",
|
|
3327
|
+
localId: calleeLocal.id,
|
|
3328
|
+
init: {
|
|
3329
|
+
kind: "ternary",
|
|
3330
|
+
cond: isString,
|
|
3331
|
+
then: dynUndefinedExpr(loc),
|
|
3332
|
+
else_: {
|
|
3333
|
+
kind: "dynKeyGet",
|
|
3334
|
+
key: { kind: "strLit", value: access.name.text, type: STRING, loc: locOf(access) },
|
|
3335
|
+
value: receiver,
|
|
3336
|
+
type: DYN,
|
|
3337
|
+
loc: locOf(access),
|
|
3338
|
+
},
|
|
3339
|
+
type: DYN,
|
|
3340
|
+
loc,
|
|
3341
|
+
},
|
|
3342
|
+
loc,
|
|
3343
|
+
},
|
|
3344
|
+
];
|
|
3345
|
+
const args = call.arguments.nodes.map((node) => {
|
|
3346
|
+
const value = lowerer.lowerExpr(node);
|
|
3347
|
+
const local = lowerer.declareHiddenLocal("%dynCallArg", value.type);
|
|
3348
|
+
stmts.push({ kind: "varDecl", localId: local.id, init: value, loc: value.loc });
|
|
3349
|
+
return { node, value: varRef(local.id, value.type, value.loc) };
|
|
3350
|
+
});
|
|
3351
|
+
// String.prototype methods ignore arguments past the ones they read.
|
|
3352
|
+
const arity = DYN_STRING_ONLY_ARITY[access.name.text] ?? call.arguments.nodes.length;
|
|
3353
|
+
const stringReceiver = () => ({ kind: "dynCheck", value: receiver, type: STRING, loc });
|
|
3354
|
+
const lowerString = () => (call.arguments.nodes.length <= arity
|
|
3355
|
+
? lowerRegexMethodCall(lowerer, call, access, stringReceiver)
|
|
3356
|
+
: null) ??
|
|
3357
|
+
lowerStringMethodCall(lowerer, call, access, stringReceiver, call.arguments.nodes.slice(0, arity));
|
|
3358
|
+
const stringCall = lowerer.withExpressionOverrides(args, lowerString);
|
|
3359
|
+
const memberCall = {
|
|
3360
|
+
kind: "dynCall",
|
|
3361
|
+
callee,
|
|
3362
|
+
receiver,
|
|
3363
|
+
calleeName: ts.getTextOfNode(access),
|
|
3364
|
+
args: args.map((arg) => lowerer.coerceToExpected(arg.value, DYN)),
|
|
3365
|
+
type: DYN,
|
|
3366
|
+
loc,
|
|
3367
|
+
};
|
|
3368
|
+
return {
|
|
3369
|
+
kind: "seqExpr",
|
|
3370
|
+
stmts,
|
|
3371
|
+
result: {
|
|
3372
|
+
kind: "ternary",
|
|
3373
|
+
cond: isString,
|
|
3374
|
+
then: stringCall
|
|
3375
|
+
? lowerer.coerceToExpected(stringCall, DYN)
|
|
3376
|
+
: nodeThrowExpr(0, "SC1090", `method calls like '${ts.getTextOfNode(access)}' on a string are not supported yet [SC1090 at ${ts.getSourceFileOfNode(call).fileName}:${ts.getLineAndCharacterOfPosition(ts.getSourceFileOfNode(call), ts.tokenStartOfNode(call)).line + 1}]`, DYN, loc),
|
|
3377
|
+
else_: memberCall,
|
|
3378
|
+
type: DYN,
|
|
3379
|
+
loc,
|
|
3380
|
+
},
|
|
3381
|
+
type: DYN,
|
|
3382
|
+
loc,
|
|
3383
|
+
};
|
|
3384
|
+
}
|
|
3297
3385
|
/** Prototype method names of the checked-dynamic tree-representable kinds (String, Array,
|
|
3298
3386
|
* Object, Function, Number prototypes): a dyn receiver call on one of
|
|
3299
3387
|
* these could be a REAL method on a real value, which a stored-member
|
|
@@ -3455,6 +3543,12 @@ const DYN_DISPATCH_METHODS = new Set([
|
|
|
3455
3543
|
"prependOnceListener",
|
|
3456
3544
|
"listeners",
|
|
3457
3545
|
"listenerCount",
|
|
3546
|
+
// The rest of EventEmitter.prototype, which compiled emitters answer
|
|
3547
|
+
// through the class dispatch (class-dynamic-dispatch.ts).
|
|
3548
|
+
"rawListeners",
|
|
3549
|
+
"eventNames",
|
|
3550
|
+
"setMaxListeners",
|
|
3551
|
+
"getMaxListeners",
|
|
3458
3552
|
"write",
|
|
3459
3553
|
"end",
|
|
3460
3554
|
"destroy",
|
|
@@ -3664,7 +3758,19 @@ export function lowerDynDispatchMethodCall(lowerer, call, access, recv, arrayRec
|
|
|
3664
3758
|
}
|
|
3665
3759
|
}
|
|
3666
3760
|
}
|
|
3761
|
+
// `String`, `Number` or `Boolean` as the callback of an array method
|
|
3762
|
+
// (`values.map(String)` over an unknown array): the method calls it with
|
|
3763
|
+
// each element, whatever its type, and cannot observe which function
|
|
3764
|
+
// value it received, so it gets the constructor's form that converts any
|
|
3765
|
+
// argument rather than the string-input form typed code stores.
|
|
3766
|
+
const arrayCallbackReceiver = ARRAY_CALLBACK_METHODS.has(method) &&
|
|
3767
|
+
lowerer.checker.isArrayType(lowerer.typeOf(access.expression));
|
|
3667
3768
|
const args = call.arguments.nodes.map((arg, i) => {
|
|
3769
|
+
const primitive = i === 0 && arrayCallbackReceiver && ts.isIdentifier(arg)
|
|
3770
|
+
? stdlibGlobalNameOf(lowerer, arg)
|
|
3771
|
+
: null;
|
|
3772
|
+
if (primitive === "String" || primitive === "Number" || primitive === "Boolean")
|
|
3773
|
+
return lowerer.coerceInto(arg, primitiveCtorClosure(lowerer, primitive, locOf(arg), true), DYN);
|
|
3668
3774
|
if (i === 0 && predicate)
|
|
3669
3775
|
return lowerer.coerceInto(arg, predicate, DYN);
|
|
3670
3776
|
const undefinedArg = lowerStaticallyUndefinedArgument(lowerer, arg);
|
|
@@ -3682,6 +3788,20 @@ export function lowerDynDispatchMethodCall(lowerer, call, access, recv, arrayRec
|
|
|
3682
3788
|
loc: locOf(call),
|
|
3683
3789
|
};
|
|
3684
3790
|
}
|
|
3791
|
+
/** Array.prototype methods whose first argument is a callback they call
|
|
3792
|
+
* with the elements. */
|
|
3793
|
+
const ARRAY_CALLBACK_METHODS = new Set([
|
|
3794
|
+
"map",
|
|
3795
|
+
"filter",
|
|
3796
|
+
"forEach",
|
|
3797
|
+
"some",
|
|
3798
|
+
"every",
|
|
3799
|
+
"find",
|
|
3800
|
+
"findIndex",
|
|
3801
|
+
"findLast",
|
|
3802
|
+
"findLastIndex",
|
|
3803
|
+
"flatMap",
|
|
3804
|
+
]);
|
|
3685
3805
|
/** Every String.prototype method name a typed or dyn string lowering
|
|
3686
3806
|
* answers. */
|
|
3687
3807
|
function isStringMethodName(name) {
|
|
@@ -3692,6 +3812,28 @@ function isStringMethodName(name) {
|
|
|
3692
3812
|
name === "normalize" ||
|
|
3693
3813
|
name === "lastIndexOf");
|
|
3694
3814
|
}
|
|
3815
|
+
/** How many arguments each DYN_STRING_ONLY_METHODS method reads. */
|
|
3816
|
+
const DYN_STRING_ONLY_ARITY = {
|
|
3817
|
+
charCodeAt: 1,
|
|
3818
|
+
charAt: 1,
|
|
3819
|
+
startsWith: 2,
|
|
3820
|
+
endsWith: 2,
|
|
3821
|
+
substring: 2,
|
|
3822
|
+
repeat: 1,
|
|
3823
|
+
trim: 0,
|
|
3824
|
+
trimStart: 0,
|
|
3825
|
+
trimEnd: 0,
|
|
3826
|
+
split: 2,
|
|
3827
|
+
padStart: 2,
|
|
3828
|
+
padEnd: 2,
|
|
3829
|
+
toLowerCase: 0,
|
|
3830
|
+
toUpperCase: 0,
|
|
3831
|
+
replace: 2,
|
|
3832
|
+
replaceAll: 2,
|
|
3833
|
+
match: 1,
|
|
3834
|
+
matchAll: 1,
|
|
3835
|
+
search: 1,
|
|
3836
|
+
};
|
|
3695
3837
|
/** STR_METHODS ∪ the regex-form names, MINUS everything Array (or any
|
|
3696
3838
|
* other dyn kind's prototype) also declares. */
|
|
3697
3839
|
const DYN_STRING_ONLY_METHODS = new Set([
|
|
@@ -4013,7 +4155,7 @@ function lowerDefaultToStringCall(lowerer, call, access) {
|
|
|
4013
4155
|
const key = `objToStr:${typeKey(recv.type)}${missing ? `:${missing}` : ""}`;
|
|
4014
4156
|
let helper = lowerer.valueHelpers.get(key);
|
|
4015
4157
|
if (!helper) {
|
|
4016
|
-
helper =
|
|
4158
|
+
helper = keyedHelperName(lowerer, "%obj.tostr", key);
|
|
4017
4159
|
lowerer.valueHelpers.set(key, helper);
|
|
4018
4160
|
const o = varRef("o.0", recv.type, loc);
|
|
4019
4161
|
lowerer.liftedFns.push({
|
|
@@ -4625,7 +4767,7 @@ function loweredTemplateStrings(lowerer, expr, cooked, loc, raw) {
|
|
|
4625
4767
|
const site = lowerer.globalsList.length;
|
|
4626
4768
|
const globalId = `%g.templateStrings.${site}`;
|
|
4627
4769
|
const readyId = `%g.templateStringsReady.${site}`;
|
|
4628
|
-
getter =
|
|
4770
|
+
getter = keyedHelperName(lowerer, "%templateStrings.get", key);
|
|
4629
4771
|
lowerer.valueHelpers.set(key, getter);
|
|
4630
4772
|
lowerer.globalsList.push({ id: globalId, name: "%templateStrings", type, mutable: true }, { id: readyId, name: "%templateStringsReady", type: BOOL, mutable: true });
|
|
4631
4773
|
lowerer.liftedFns.push({
|
|
@@ -4794,7 +4936,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
|
|
|
4794
4936
|
// IS the spec's identity/thrower/no-op substitution for all three
|
|
4795
4937
|
// members. An argument expression, when present, is undefined/null
|
|
4796
4938
|
// by construction — nothing to evaluate.
|
|
4797
|
-
const fnName =
|
|
4939
|
+
const fnName = lowerer.closureName(loc, `_${member}pass`);
|
|
4798
4940
|
const funcType = { kind: "func", params: [promT], ret: promT };
|
|
4799
4941
|
const fnCtx = newFnCtx(true, null, funcType, inner);
|
|
4800
4942
|
fnCtx.isAsync = true;
|
|
@@ -4876,7 +5018,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
|
|
|
4876
5018
|
// Evaluate both callback expressions before the wrapper runs, in source order.
|
|
4877
5019
|
const fulfilled = fulfilledAbsent ? null : boxHandler(fulfilledNode, true);
|
|
4878
5020
|
const rejected = rejectedAbsent ? null : boxHandler(rejectedNode, false);
|
|
4879
|
-
const fnName =
|
|
5021
|
+
const fnName = lowerer.closureName(loc, "_then2");
|
|
4880
5022
|
const paramTypes = [
|
|
4881
5023
|
promT,
|
|
4882
5024
|
...(fulfilled ? [fulfilled.value.type] : []),
|
|
@@ -5095,7 +5237,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
|
|
|
5095
5237
|
lowerer.unsupported("SC1090", call.arguments.nodes[0], `then handlers receiving '${lowerer.fmt(v.type)}' values through an untyped handler (the settled value cannot cross the checked-dynamic tree boundary)`);
|
|
5096
5238
|
};
|
|
5097
5239
|
const resultT = { kind: "promise", inner: DYN };
|
|
5098
|
-
const fnName =
|
|
5240
|
+
const fnName = lowerer.closureName(loc, "_then");
|
|
5099
5241
|
const funcType = {
|
|
5100
5242
|
kind: "func",
|
|
5101
5243
|
params: [promT, DYN],
|
|
@@ -5178,7 +5320,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
|
|
|
5178
5320
|
lowerer.noLowering("then with this handler's result type", call, "the combined result must be a representable promise");
|
|
5179
5321
|
}
|
|
5180
5322
|
const R = resultT.inner;
|
|
5181
|
-
const fnName =
|
|
5323
|
+
const fnName = lowerer.closureName(loc, "_then");
|
|
5182
5324
|
const funcType = {
|
|
5183
5325
|
kind: "func",
|
|
5184
5326
|
params: [promT, cb.type],
|
|
@@ -5282,7 +5424,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
|
|
|
5282
5424
|
if (cb.type.kind !== "func" || cb.type.params.length !== 0 || cb.type.ret.kind !== "void") {
|
|
5283
5425
|
lowerer.unsupported("SC1090", call.arguments.nodes[0], "finally callbacks with parameters or a return value (use () => { ... })");
|
|
5284
5426
|
}
|
|
5285
|
-
const fnName =
|
|
5427
|
+
const fnName = lowerer.closureName(loc, "_finally");
|
|
5286
5428
|
const funcType = {
|
|
5287
5429
|
kind: "func",
|
|
5288
5430
|
params: [promT, cb.type],
|
|
@@ -5378,7 +5520,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
|
|
|
5378
5520
|
}
|
|
5379
5521
|
if (cb.type.kind === "dyn") {
|
|
5380
5522
|
const resultT = { kind: "promise", inner: DYN };
|
|
5381
|
-
const fnName =
|
|
5523
|
+
const fnName = lowerer.closureName(loc, "_catchdyn");
|
|
5382
5524
|
const funcType = {
|
|
5383
5525
|
kind: "func",
|
|
5384
5526
|
params: [promT, DYN],
|
|
@@ -5495,7 +5637,7 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
|
|
|
5495
5637
|
"own type, or annotate the handler `(): undefined =>` for the T | undefined result");
|
|
5496
5638
|
}
|
|
5497
5639
|
const R = resultT.inner;
|
|
5498
|
-
const fnName =
|
|
5640
|
+
const fnName = lowerer.closureName(loc, "_catch");
|
|
5499
5641
|
const funcType = { kind: "func", params: [promT], ret: resultT };
|
|
5500
5642
|
const fnCtx = newFnCtx(true, null, funcType, R);
|
|
5501
5643
|
fnCtx.isAsync = true;
|
|
@@ -5713,7 +5855,7 @@ function filterNarrowHelper(lowerer, test, elem, outElem, tag, loc) {
|
|
|
5713
5855
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
5714
5856
|
if (existing)
|
|
5715
5857
|
return existing;
|
|
5716
|
-
const name =
|
|
5858
|
+
const name = keyedHelperName(lowerer, "%arr.filterNarrow", key);
|
|
5717
5859
|
lowerer.arrHofHelpers.set(key, name);
|
|
5718
5860
|
const arrT = arrayOf(elem);
|
|
5719
5861
|
const outT = arrayOf(outElem);
|
|
@@ -5935,7 +6077,7 @@ export function recordKeysArrayCall(lowerer, receiver, argIr, shape, loc) {
|
|
|
5935
6077
|
const key = `obj.keys:${argIr.shapeId}:${typeKey(resultT)}`;
|
|
5936
6078
|
let helper = lowerer.arrHofHelpers.get(key);
|
|
5937
6079
|
if (!helper) {
|
|
5938
|
-
helper =
|
|
6080
|
+
helper = keyedHelperName(lowerer, "%obj.keys", key);
|
|
5939
6081
|
const ref = { kind: "varRef", localId: "r.0", type: argIr, loc };
|
|
5940
6082
|
const outRef = { kind: "varRef", localId: "out.0", type: resultT, loc };
|
|
5941
6083
|
lowerer.arrHofHelpers.set(key, helper);
|
|
@@ -6003,7 +6145,7 @@ function recordHasOwnHelper(lowerer, shapeId, loc) {
|
|
|
6003
6145
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
6004
6146
|
if (existing)
|
|
6005
6147
|
return existing;
|
|
6006
|
-
const helper =
|
|
6148
|
+
const helper = keyedHelperName(lowerer, "%obj.hasOwn", key);
|
|
6007
6149
|
lowerer.arrHofHelpers.set(key, helper);
|
|
6008
6150
|
const shape = lowerer.shapes.get(shapeId);
|
|
6009
6151
|
const recT = { kind: "record", shapeId };
|
|
@@ -6081,7 +6223,7 @@ function classAssignHelper(lowerer, className, srcShapeId, loc) {
|
|
|
6081
6223
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
6082
6224
|
if (existing)
|
|
6083
6225
|
return existing;
|
|
6084
|
-
const helper =
|
|
6226
|
+
const helper = keyedHelperName(lowerer, "%obj.assignClass", key);
|
|
6085
6227
|
lowerer.arrHofHelpers.set(key, helper);
|
|
6086
6228
|
const sShape = lowerer.shapes.get(srcShapeId);
|
|
6087
6229
|
const oT = { kind: "object", className };
|
|
@@ -6142,7 +6284,7 @@ function recordAssignHelper(lowerer, targetShapeId, srcShapeId, loc) {
|
|
|
6142
6284
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
6143
6285
|
if (existing)
|
|
6144
6286
|
return existing;
|
|
6145
|
-
const helper =
|
|
6287
|
+
const helper = keyedHelperName(lowerer, "%obj.assign", key);
|
|
6146
6288
|
lowerer.arrHofHelpers.set(key, helper);
|
|
6147
6289
|
const sShape = lowerer.shapes.get(srcShapeId);
|
|
6148
6290
|
const tShape = lowerer.shapes.get(targetShapeId);
|
|
@@ -6323,6 +6465,33 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
6323
6465
|
if (!lowerer.isStdlibGlobal(access.expression, "Object"))
|
|
6324
6466
|
return null;
|
|
6325
6467
|
const member = access.name.text;
|
|
6468
|
+
// `Object.getOwnPropertyDescriptor(Error, "stackTraceLimit")` (Effect's
|
|
6469
|
+
// isStackTraceLimitWritable): Error's own writable, enumerable,
|
|
6470
|
+
// configurable data property holding the current limit. The interned
|
|
6471
|
+
// Error value models no other statics (builtinGlobalValueAt).
|
|
6472
|
+
const [first, second] = call.arguments.nodes;
|
|
6473
|
+
if (member === "getOwnPropertyDescriptor" &&
|
|
6474
|
+
call.arguments.nodes.length === 2 &&
|
|
6475
|
+
lowerer.isStdlibGlobal(first, "Error") &&
|
|
6476
|
+
ts.isStringLiteralLike(second) &&
|
|
6477
|
+
second.text === "stackTraceLimit") {
|
|
6478
|
+
const loc = locOf(call);
|
|
6479
|
+
const dyn = (value) => ({ kind: "dynFrom", value, type: DYN, loc });
|
|
6480
|
+
const yes = dyn({ kind: "boolLit", value: true, type: BOOL, loc });
|
|
6481
|
+
const limit = { kind: "libCall", fn: "error.stackLimitGet", args: [], type: F64, loc };
|
|
6482
|
+
return {
|
|
6483
|
+
kind: "dynObjLit",
|
|
6484
|
+
fields: [
|
|
6485
|
+
{ key: { kind: "strLit", value: "value", type: STRING, loc }, value: dyn(limit) },
|
|
6486
|
+
...["writable", "enumerable", "configurable"].map((key) => ({
|
|
6487
|
+
key: { kind: "strLit", value: key, type: STRING, loc },
|
|
6488
|
+
value: yes,
|
|
6489
|
+
})),
|
|
6490
|
+
],
|
|
6491
|
+
type: DYN,
|
|
6492
|
+
loc,
|
|
6493
|
+
};
|
|
6494
|
+
}
|
|
6326
6495
|
if ((member === "getOwnPropertyNames" ||
|
|
6327
6496
|
member === "getOwnPropertySymbols" ||
|
|
6328
6497
|
member === "getOwnPropertyDescriptors") &&
|
|
@@ -6677,6 +6846,11 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
6677
6846
|
const target = lowerer.lowerExpr(call.arguments.nodes[0]);
|
|
6678
6847
|
const rawSource = lowerer.lowerExpr(call.arguments.nodes[1]);
|
|
6679
6848
|
fenceSymbolFieldCopy(lowerer, call.arguments.nodes[1], rawSource.type);
|
|
6849
|
+
let targetNode = call.arguments.nodes[0];
|
|
6850
|
+
while (ts.isParenthesizedExpression(targetNode))
|
|
6851
|
+
targetNode = targetNode.expression;
|
|
6852
|
+
if (ts.isObjectLiteralExpression(targetNode))
|
|
6853
|
+
fenceClassCopyIntoFreshObject(lowerer, call, call.arguments.nodes[1], rawSource);
|
|
6680
6854
|
const source = lowerer.coerceToExpected(rawSource, DYN);
|
|
6681
6855
|
if (target.type.kind === "dyn" && source.type.kind === "dyn") {
|
|
6682
6856
|
return { kind: "libCall", fn: "dyn.assign", args: [target, source], type: DYN, loc };
|
|
@@ -6815,19 +6989,8 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
6815
6989
|
const srcNode = spread ? argNode.expression : argNode;
|
|
6816
6990
|
const rawSource = lowerer.lowerExpr(srcNode);
|
|
6817
6991
|
fenceSymbolFieldCopy(lowerer, srcNode, rawSource.type, spread);
|
|
6818
|
-
|
|
6819
|
-
|
|
6820
|
-
// object holding the instance's own fields, never an
|
|
6821
|
-
// instance, so a result the checker types as the class has
|
|
6822
|
-
// no representation (the checked cast would throw).
|
|
6823
|
-
if (rawSource.type.kind === "object" &&
|
|
6824
|
-
freshLiteralTarget &&
|
|
6825
|
-
!ts.isExpressionStatement(call.parent)) {
|
|
6826
|
-
const resultT = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
6827
|
-
if (resultT !== null && resultT.kind === "object") {
|
|
6828
|
-
lowerer.unsupported("SC1090", srcNode, `Object.assign copying a '${lowerer.fmt(rawSource.type)}' instance into a fresh object typed as the class (the copy is a plain object holding the instance's own fields, not an instance — build the object literal from the fields you need)`);
|
|
6829
|
-
}
|
|
6830
|
-
}
|
|
6992
|
+
if (freshLiteralTarget)
|
|
6993
|
+
fenceClassCopyIntoFreshObject(lowerer, call, srcNode, rawSource);
|
|
6831
6994
|
const src = lowerer.coerceToExpected(rawSource, DYN);
|
|
6832
6995
|
if (src.type.kind !== "dyn") {
|
|
6833
6996
|
ok = false;
|
|
@@ -7049,6 +7212,9 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7049
7212
|
loc,
|
|
7050
7213
|
};
|
|
7051
7214
|
}
|
|
7215
|
+
const fnIntegrity = functionIntegrity(lowerer, member, value, call.arguments.nodes[0], locOf(call));
|
|
7216
|
+
if (fnIntegrity)
|
|
7217
|
+
return fnIntegrity;
|
|
7052
7218
|
if (member === "preventExtensions" || member === "seal") {
|
|
7053
7219
|
const integrity = lowerClassIntegrity(lowerer, call, member, value);
|
|
7054
7220
|
if (integrity)
|
|
@@ -7126,6 +7292,9 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7126
7292
|
arm.kind === "string" ||
|
|
7127
7293
|
arm.kind === "symbol"))
|
|
7128
7294
|
return value;
|
|
7295
|
+
const fnIntegrity = functionIntegrity(lowerer, "freeze", value, argNode, locOf(call));
|
|
7296
|
+
if (fnIntegrity)
|
|
7297
|
+
return fnIntegrity;
|
|
7129
7298
|
const integrity = lowerClassIntegrity(lowerer, call, "freeze", value);
|
|
7130
7299
|
if (integrity)
|
|
7131
7300
|
return integrity;
|
|
@@ -7445,7 +7614,7 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7445
7614
|
const key = `obj.${member}:${argIr.shapeId}:${typeKey(resultT)}`;
|
|
7446
7615
|
let helper = lowerer.arrHofHelpers.get(key);
|
|
7447
7616
|
if (!helper) {
|
|
7448
|
-
helper = `%obj.${member}
|
|
7617
|
+
helper = keyedHelperName(lowerer, `%obj.${member}`, key);
|
|
7449
7618
|
const recT = argIr;
|
|
7450
7619
|
const ref = { kind: "varRef", localId: "r.0", type: recT, loc };
|
|
7451
7620
|
const outRef = { kind: "varRef", localId: "out.0", type: resultT, loc };
|
|
@@ -8008,7 +8177,7 @@ function lowerInlineArrowBind(lowerer, call, access) {
|
|
|
8008
8177
|
const length = firstDefault < 0 ? arrow.parameters.nodes.length : firstDefault;
|
|
8009
8178
|
const key = `arrow.bind:${typeKey(type)}:${length}`;
|
|
8010
8179
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
8011
|
-
const name = existing ??
|
|
8180
|
+
const name = existing ?? keyedHelperName(lowerer, "%arrow.bind", key);
|
|
8012
8181
|
if (!existing) {
|
|
8013
8182
|
lowerer.arrHofHelpers.set(key, name);
|
|
8014
8183
|
lowerer.freshClosureAdapters.add(name);
|
|
@@ -8462,6 +8631,10 @@ export function lowerObjectMethodCall(lowerer, call, access) {
|
|
|
8462
8631
|
if (info && !found && eventTargetApiMethod(info, access.name.text)) {
|
|
8463
8632
|
return lowerEventTargetMethodCall(lowerer, call, access, info, lowerReceiver());
|
|
8464
8633
|
}
|
|
8634
|
+
// The Date methods a class declared `extends Date` does not declare.
|
|
8635
|
+
if (info && !found && dateRootOf(info) && isDatePrototypeMethod(access.name.text)) {
|
|
8636
|
+
return lowerInheritedDateMethodCall(lowerer, call, access.name.text, info, lowerReceiver());
|
|
8637
|
+
}
|
|
8465
8638
|
// GENERIC methods (own type parameters) never enter the methods table:
|
|
8466
8639
|
// they monomorphize per call site and dispatch statically
|
|
8467
8640
|
// (lowerClassGenericMethodCall has the exactness rules).
|
|
@@ -8820,7 +8993,7 @@ function lowerUnionObjectDynFieldCall(lowerer, call, access, receiverT) {
|
|
|
8820
8993
|
const receiverRef = varRef(receiverLocal.id, receiverT, loc);
|
|
8821
8994
|
let helper = lowerer.unionCallHelpers.get(key);
|
|
8822
8995
|
if (!helper) {
|
|
8823
|
-
helper =
|
|
8996
|
+
helper = keyedHelperName(lowerer, "%union.call", key);
|
|
8824
8997
|
lowerer.unionCallHelpers.set(key, helper);
|
|
8825
8998
|
const receiverRef = varRef("this.0", receiverT, loc);
|
|
8826
8999
|
const branch = (plan) => {
|
|
@@ -8900,7 +9073,7 @@ function unionObjectMethodHelper(lowerer, sourceCall, receiverT, method, plans,
|
|
|
8900
9073
|
const existing = lowerer.unionCallHelpers.get(key);
|
|
8901
9074
|
if (existing)
|
|
8902
9075
|
return existing;
|
|
8903
|
-
const name =
|
|
9076
|
+
const name = keyedHelperName(lowerer, "%union.call", key);
|
|
8904
9077
|
lowerer.unionCallHelpers.set(key, name);
|
|
8905
9078
|
// A probe that catches a refusal while the body lowers must not leave
|
|
8906
9079
|
// the name registered for a helper that was never emitted.
|
|
@@ -9005,15 +9178,17 @@ function loweredArgumentText(lowerer, arg) {
|
|
|
9005
9178
|
* fences; null when the argument shape has no static form (the caller
|
|
9006
9179
|
* reports the SC2012 refusal). */
|
|
9007
9180
|
export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
|
|
9008
|
-
if (name === "parseInt" || name === "isNaN") {
|
|
9181
|
+
if (name === "parseInt" || name === "isNaN" || name === "isFinite") {
|
|
9009
9182
|
const maxArgs = name === "parseInt" ? 2 : 1;
|
|
9010
9183
|
if (args.length < 1 || args.length > maxArgs) {
|
|
9011
9184
|
lowerer.noLowering(`${name} with ${args.length} argument${args.length === 1 ? "" : "s"}`, call);
|
|
9012
9185
|
}
|
|
9013
|
-
if (name === "isNaN") {
|
|
9014
|
-
// The global's ToNumber turns a missing value into NaN
|
|
9186
|
+
if (name === "isNaN" || name === "isFinite") {
|
|
9187
|
+
// The global's ToNumber turns a missing value into NaN, converts
|
|
9188
|
+
// strings, booleans and null, and calls valueOf/toString on objects.
|
|
9015
9189
|
const x = lowerToNumberArgument(lowerer, args[0]);
|
|
9016
|
-
|
|
9190
|
+
const fn = name === "isNaN" ? "num.isNaN" : "number.isFinite";
|
|
9191
|
+
return { kind: "libCall", fn, args: [x], type: BOOL, loc };
|
|
9017
9192
|
}
|
|
9018
9193
|
const radix = args[1]
|
|
9019
9194
|
? lowerer.lowerExprExpecting(args[1], F64)
|
|
@@ -9050,7 +9225,7 @@ export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
|
|
|
9050
9225
|
const key = `parseInt.optional:${unionT.unionId}`;
|
|
9051
9226
|
let helper = lowerer.valueHelpers.get(key);
|
|
9052
9227
|
if (!helper) {
|
|
9053
|
-
helper =
|
|
9228
|
+
helper = keyedHelperName(lowerer, "%parseInt.optional", key);
|
|
9054
9229
|
lowerer.valueHelpers.set(key, helper);
|
|
9055
9230
|
const value = { kind: "varRef", localId: "value.0", type: unionT, loc };
|
|
9056
9231
|
const radixRef = { kind: "varRef", localId: "radix.0", type: F64, loc };
|
|
@@ -9139,27 +9314,32 @@ export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
|
|
|
9139
9314
|
: lowerer.lowerExprExpecting(args[0], STRING);
|
|
9140
9315
|
return { kind: "libCall", fn: "num.parseInt", args: [s, radix], type: F64, loc };
|
|
9141
9316
|
}
|
|
9142
|
-
//
|
|
9143
|
-
//
|
|
9144
|
-
//
|
|
9145
|
-
|
|
9146
|
-
|
|
9147
|
-
|
|
9148
|
-
|
|
9149
|
-
|
|
9150
|
-
|
|
9151
|
-
|
|
9152
|
-
|
|
9153
|
-
|
|
9154
|
-
|
|
9155
|
-
|
|
9156
|
-
|
|
9317
|
+
// parseFloat takes one argument; Node ignores the rest after evaluating
|
|
9318
|
+
// them (`parseFloat(text, 10)`). Literal and identifier extras have
|
|
9319
|
+
// nothing to evaluate.
|
|
9320
|
+
if (name === "parseFloat" &&
|
|
9321
|
+
args.length > 1 &&
|
|
9322
|
+
args
|
|
9323
|
+
.slice(1)
|
|
9324
|
+
.every((arg) => ts.isNumericLiteral(arg) || ts.isStringLiteral(arg) || ts.isIdentifier(arg)))
|
|
9325
|
+
return lowerStaticNumberGlobal(lowerer, name, call, args.slice(0, 1), loc);
|
|
9326
|
+
// STATIC parseFloat over string arguments — parseInt's sibling
|
|
9327
|
+
// (num.parseFloat is ECMA 19.2.4's decimal-literal prefix parse in
|
|
9328
|
+
// scr_string.c). Other argument types retain their native coercion
|
|
9329
|
+
// checks or the SC2012 refusal. The probe never emits — lowering is IR
|
|
9330
|
+
// construction.
|
|
9331
|
+
if (name === "parseFloat" && args.length === 1) {
|
|
9332
|
+
const optional = optionalCallValue(lowerer, args[0]);
|
|
9333
|
+
if (optional) {
|
|
9334
|
+
const parsed = lowerOptionalStringNumber(lowerer, optional, loc, "num.parseFloat", "parseFloat");
|
|
9335
|
+
if (parsed)
|
|
9336
|
+
return parsed;
|
|
9157
9337
|
}
|
|
9158
9338
|
const probed = tryLowerExpression(lowerer, args[0]);
|
|
9159
|
-
if (
|
|
9339
|
+
if (probed?.type.kind === "string") {
|
|
9160
9340
|
return { kind: "libCall", fn: "num.parseFloat", args: [probed], type: F64, loc };
|
|
9161
9341
|
}
|
|
9162
|
-
if (
|
|
9342
|
+
if (probed?.type.kind === "dyn") {
|
|
9163
9343
|
return {
|
|
9164
9344
|
kind: "libCall",
|
|
9165
9345
|
fn: "num.parseFloat",
|
|
@@ -9168,29 +9348,38 @@ export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
|
|
|
9168
9348
|
loc,
|
|
9169
9349
|
};
|
|
9170
9350
|
}
|
|
9171
|
-
if (name === "isFinite" && probed?.type.kind === "f64") {
|
|
9172
|
-
return { kind: "libCall", fn: "number.isFinite", args: [probed], type: BOOL, loc };
|
|
9173
|
-
}
|
|
9174
|
-
// A number the checker trusts but storage may hold missing (an
|
|
9175
|
-
// out-of-range read): the global's ToNumber makes undefined NaN.
|
|
9176
|
-
if (name === "isFinite" &&
|
|
9177
|
-
probed?.type.kind === "union" &&
|
|
9178
|
-
lowerer.armTag(probed.type.unionId, UNDEFINED_T) >= 0 &&
|
|
9179
|
-
lowerer.stripUndefinedArm(probed.type).kind === "f64") {
|
|
9180
|
-
const x = lowerOptionalNumber(lowerer, probed, loc, args[0]);
|
|
9181
|
-
return { kind: "libCall", fn: "number.isFinite", args: [x], type: BOOL, loc };
|
|
9182
|
-
}
|
|
9183
9351
|
}
|
|
9184
9352
|
return null;
|
|
9185
9353
|
}
|
|
9186
|
-
/** `crypto.getRandomValues(view)` on the
|
|
9187
|
-
|
|
9188
|
-
|
|
9354
|
+
/** `crypto.getRandomValues(view)` and `crypto.randomUUID()` on the
|
|
9355
|
+
* WebCrypto global or webcrypto. Other argument counts (JavaScript only)
|
|
9356
|
+
* invoke the dynamic object's method, which ignores extra arguments and
|
|
9357
|
+
* throws Node's missing-argument TypeError. */
|
|
9358
|
+
function lowerWebCryptoMethodCall(lowerer, call, access) {
|
|
9359
|
+
const member = access.name.text;
|
|
9360
|
+
if ((member !== "getRandomValues" && member !== "randomUUID") ||
|
|
9189
9361
|
call.questionDotToken ||
|
|
9190
9362
|
access.questionDotToken ||
|
|
9191
9363
|
!isWebCryptoReceiver(lowerer, access.expression))
|
|
9192
9364
|
return null;
|
|
9193
|
-
|
|
9365
|
+
const args = call.arguments.nodes;
|
|
9366
|
+
if (member === "getRandomValues" && args.length === 1) {
|
|
9367
|
+
return lowerCryptoGetRandomValues(lowerer, call);
|
|
9368
|
+
}
|
|
9369
|
+
if (member === "randomUUID" && args.length === 0) {
|
|
9370
|
+
return { kind: "libCall", fn: "crypto.randomUUID", args: [], type: STRING, loc: locOf(call) };
|
|
9371
|
+
}
|
|
9372
|
+
if (args.some(ts.isSpreadElement))
|
|
9373
|
+
return null;
|
|
9374
|
+
return {
|
|
9375
|
+
kind: "dynInvoke",
|
|
9376
|
+
recv: lowerer.lowerExprExpecting(access.expression, DYN),
|
|
9377
|
+
method: member,
|
|
9378
|
+
calleeName: v8CalleeText(access),
|
|
9379
|
+
args: args.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
|
|
9380
|
+
type: DYN,
|
|
9381
|
+
loc: locOf(call),
|
|
9382
|
+
};
|
|
9194
9383
|
}
|
|
9195
9384
|
/** A then handler's promise-armed result (`.then(() => cached ?? load())`
|
|
9196
9385
|
* typed `T | Promise<T>`, or a `Promise<void> | void` callback's result):
|
|
@@ -9293,4 +9482,63 @@ function lowerObjectAssignOntoError(lowerer, call) {
|
|
|
9293
9482
|
loc,
|
|
9294
9483
|
};
|
|
9295
9484
|
}
|
|
9485
|
+
/** `Object.freeze(fn)` and the other integrity operations on a function
|
|
9486
|
+
* value: the function's checked-dynamic face holds its own properties (the
|
|
9487
|
+
* ones a program assigns, `name`, `length`, `prototype`) and their
|
|
9488
|
+
* integrity state, which the runtime keeps on its property table. The
|
|
9489
|
+
* mutators answer the function itself; the queries answer from the table.
|
|
9490
|
+
* Null for other values. */
|
|
9491
|
+
function functionIntegrity(lowerer, member, value, node, loc) {
|
|
9492
|
+
if (value.type.kind !== "func" || !lowerer.dynConvertible(value.type))
|
|
9493
|
+
return null;
|
|
9494
|
+
const operations = {
|
|
9495
|
+
freeze: "dyn.freeze",
|
|
9496
|
+
seal: "dyn.seal",
|
|
9497
|
+
preventExtensions: "dyn.preventExtensions",
|
|
9498
|
+
isSealed: "dyn.isSealed",
|
|
9499
|
+
isExtensible: "dyn.isExtensible",
|
|
9500
|
+
};
|
|
9501
|
+
if (!(member in operations))
|
|
9502
|
+
return null;
|
|
9503
|
+
const fn = operations[member];
|
|
9504
|
+
// The first operation on a function creates its property table, whose
|
|
9505
|
+
// `name` comes from the box: give the box the function's JS name, as a
|
|
9506
|
+
// closure flowing into any checked-dynamic slot gets.
|
|
9507
|
+
const name = jsFuncNameOf(node, lowerer);
|
|
9508
|
+
const boxed = (e) => {
|
|
9509
|
+
const box = lowerer.coerceToExpected(e, DYN);
|
|
9510
|
+
return box.kind === "dynFrom" && name !== null ? { ...box, fnName: name } : box;
|
|
9511
|
+
};
|
|
9512
|
+
if (fn === "dyn.isSealed" || fn === "dyn.isExtensible") {
|
|
9513
|
+
return { kind: "libCall", fn, args: [boxed(value)], type: BOOL, loc };
|
|
9514
|
+
}
|
|
9515
|
+
const held = lowerer.declareHiddenLocal("%integrityFn", value.type);
|
|
9516
|
+
const ref = () => ({ kind: "varRef", localId: held.id, type: value.type, loc });
|
|
9517
|
+
return {
|
|
9518
|
+
kind: "seqExpr",
|
|
9519
|
+
stmts: [
|
|
9520
|
+
{ kind: "varDecl", localId: held.id, init: value, loc },
|
|
9521
|
+
{
|
|
9522
|
+
kind: "exprStmt",
|
|
9523
|
+
expr: { kind: "libCall", fn, args: [boxed(ref())], type: DYN, loc },
|
|
9524
|
+
loc,
|
|
9525
|
+
},
|
|
9526
|
+
],
|
|
9527
|
+
result: ref(),
|
|
9528
|
+
type: value.type,
|
|
9529
|
+
loc,
|
|
9530
|
+
};
|
|
9531
|
+
}
|
|
9532
|
+
/** A class instance copied into a fresh object (`Object.assign({},
|
|
9533
|
+
* instance)`): the result is a plain object holding the instance's own
|
|
9534
|
+
* fields, never an instance, so a result the checker types as the class has
|
|
9535
|
+
* no representation (the checked cast would throw). */
|
|
9536
|
+
function fenceClassCopyIntoFreshObject(lowerer, call, srcNode, rawSource) {
|
|
9537
|
+
if (rawSource.type.kind !== "object" || ts.isExpressionStatement(call.parent))
|
|
9538
|
+
return;
|
|
9539
|
+
const resultT = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
9540
|
+
if (resultT === null || resultT.kind !== "object")
|
|
9541
|
+
return;
|
|
9542
|
+
lowerer.unsupported("SC1090", srcNode, `Object.assign copying a '${lowerer.fmt(rawSource.type)}' instance into a fresh object typed as the class (the copy is a plain object holding the instance's own fields, not an instance — build the object literal from the fields you need)`);
|
|
9543
|
+
}
|
|
9296
9544
|
//# sourceMappingURL=lower-calls.js.map
|