@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
|
@@ -136,6 +136,11 @@ export interface ClassInfo {
|
|
|
136
136
|
* lower-event-target.ts over any class rooted here. Subclass structs
|
|
137
137
|
* embed the runtime prefix. */
|
|
138
138
|
builtinEventTarget?: "target" | "event";
|
|
139
|
+
/** A class declared `extends Date` (builtins/date-classes.ts): its first
|
|
140
|
+
* field is the hidden `%time` value, super() sets it with the Date
|
|
141
|
+
* constructor's rules, and the Date methods it does not declare lower
|
|
142
|
+
* over that value. Subclasses inherit the field. */
|
|
143
|
+
extendsDate?: true;
|
|
139
144
|
/** The synthetic LifetimeRegion class (@scriptc/experimental,
|
|
140
145
|
* lifetime-regions.ts): its constructor is synthesized with the class,
|
|
141
146
|
* and its methods lower at their call sites. */
|
|
@@ -265,6 +270,9 @@ export interface ClassInfo {
|
|
|
265
270
|
path: InstantiationPath;
|
|
266
271
|
family: ClassInfo;
|
|
267
272
|
bindings: Map<ts.Symbol, IrType>;
|
|
273
|
+
/** The type arguments as checker types, for the resolutions that need
|
|
274
|
+
* literal identity (a conditional type over a literal argument). */
|
|
275
|
+
tsBindings: Map<ts.Symbol, ts.Type>;
|
|
268
276
|
typeArgsText: string;
|
|
269
277
|
ordinal: number;
|
|
270
278
|
};
|
|
@@ -354,6 +362,9 @@ export interface GenericClassInfo {
|
|
|
354
362
|
info: ClassInfo | null;
|
|
355
363
|
poisoned?: boolean;
|
|
356
364
|
}>;
|
|
365
|
+
/** The type parameters a conditional type in the class depends on
|
|
366
|
+
* (literalSensitiveTypeParams), computed on first instantiation. */
|
|
367
|
+
literalSensitive?: Set<ts.Symbol>;
|
|
357
368
|
}
|
|
358
369
|
/** The builtin Error hierarchy
|
|
359
370
|
* as eagerly-registered ClassInfos: mapType names them the moment a lib
|
|
@@ -438,6 +449,7 @@ export declare function collectClassShapeInner(lowerer: Lowerer, decl: ts.ClassL
|
|
|
438
449
|
family: ClassInfo;
|
|
439
450
|
name: string;
|
|
440
451
|
bindings: Map<ts.Symbol, IrType>;
|
|
452
|
+
tsBindings: Map<ts.Symbol, ts.Type>;
|
|
441
453
|
typeArgsText: string;
|
|
442
454
|
ordinal: number;
|
|
443
455
|
},
|
|
@@ -777,6 +789,12 @@ export declare function throwingSetterFn(lowerer: Lowerer, info: ClassInfo, prop
|
|
|
777
789
|
* order) — a base constructor's prologue, a derived constructor's
|
|
778
790
|
* super()-return continuation. */
|
|
779
791
|
export declare function fieldInitStmts(lowerer: Lowerer, info: ClassInfo, thisLocal: IrLocal): IrStmt[];
|
|
792
|
+
/** The comma chain of an `if` condition whose leading operands hold a
|
|
793
|
+
* super() call (`if (super(), r === 0) throw ...`, as minifiers join a
|
|
794
|
+
* super statement with the next test), or null. The if statement runs the
|
|
795
|
+
* chain's left operand as a statement first and tests its right operand,
|
|
796
|
+
* which is what the comma evaluates. */
|
|
797
|
+
export declare function superConditionLead(cond: ts.Expression): ts.BinaryExpression | null;
|
|
780
798
|
/** Super statements initialize the base and then the derived fields on
|
|
781
799
|
* whichever control-flow path executes. Repeated calls are explicitly
|
|
782
800
|
* refused until native layouts can allocate a second receiver. */
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
|
|
2
|
+
import { lowerDateStaticCall } from "./builtins/dates.js";
|
|
3
|
+
import { keyedHelperName } from "./stable-names.js";
|
|
1
4
|
import { lowerValueReturningConstructorNew } from "./js-dynamic-objects.js";
|
|
2
5
|
import { adaptPromiseExecutor } from "./promise-executor-adapter.js";
|
|
3
6
|
import { dynUndefinedExpr, nodeThrowExpr, varRef } from "../../ir/build.js";
|
|
@@ -29,7 +32,7 @@ import { bodyReadsArguments } from "../arguments-usage.js";
|
|
|
29
32
|
import { errorNameAfterField, errorViewFields } from "./error-name-order.js";
|
|
30
33
|
import { checkedJsDocumentedParameter, documentedParameter, generatorMeta, } from "./call-signatures.js";
|
|
31
34
|
import { omittedArgFor } from "./call-arguments.js";
|
|
32
|
-
import { isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
|
|
35
|
+
import { checkerTypeDescription, isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
|
|
33
36
|
import { canonicalBuiltinModule, cjsClassExprWholeExportOf, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, locOf, requireSpecOf, } from "../program.js";
|
|
34
37
|
import { PoisonError, dynFallbackType, jsFuncNameOf, newFnCtx, own } from "./lowerer.js";
|
|
35
38
|
import { isAssertClassNew } from "./assert-instances.js";
|
|
@@ -48,7 +51,7 @@ import { builtinEventTargetBaseOf, eventTargetApiMembers, eventTargetApiMethod,
|
|
|
48
51
|
import { emitOverrideShapeReason, emitSpecSuperForward, emitterRooted, lowerEmitterSuperCall, } from "./lower-event-emitter.js";
|
|
49
52
|
import { declSymbolOf } from "./lower-modules.js";
|
|
50
53
|
import { classSymbolKeyOf, classSymbolKeyOfSymbol, symbolFieldDisplayName, } from "./symbol-fields.js";
|
|
51
|
-
import { lowerHttpAgentNew, lowerHttpServerNew } from "./lower-server.js";
|
|
54
|
+
import { lowerHttpAgentNew, lowerHttpServerNew, lowerTlsSocketNew } from "./lower-server.js";
|
|
52
55
|
import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, ambientUndefinedFnSymbolOf, contextualUndefReadType, fenceEarlyAliasUse, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "./lower-namespaces.js";
|
|
53
56
|
import { mixinResultBindingClassOf } from "./lower-mixins.js";
|
|
54
57
|
import { hasLexicalPrivateReference, hasStaticThis, rejectStaticThis } from "./static-this.js";
|
|
@@ -493,8 +496,10 @@ export function registerBuiltinErrorClasses(lowerer) {
|
|
|
493
496
|
throwingSetters: [],
|
|
494
497
|
staticFields: [],
|
|
495
498
|
};
|
|
496
|
-
if (base)
|
|
499
|
+
if (base) {
|
|
497
500
|
base.subclasses.push(info);
|
|
501
|
+
lowerer.subclassLinks++;
|
|
502
|
+
}
|
|
498
503
|
lowerer.classes.set(irName, info);
|
|
499
504
|
}
|
|
500
505
|
}
|
|
@@ -575,8 +580,10 @@ export function registerBuiltinStreamClasses(lowerer) {
|
|
|
575
580
|
throwingSetters: [],
|
|
576
581
|
staticFields: [],
|
|
577
582
|
};
|
|
578
|
-
if (base)
|
|
583
|
+
if (base) {
|
|
579
584
|
base.subclasses.push(info);
|
|
585
|
+
lowerer.subclassLinks++;
|
|
586
|
+
}
|
|
580
587
|
lowerer.classes.set(irName, info);
|
|
581
588
|
}
|
|
582
589
|
}
|
|
@@ -1358,6 +1365,7 @@ mixin) {
|
|
|
1358
1365
|
: (computedBase?.classInfo ?? null);
|
|
1359
1366
|
let genericBase;
|
|
1360
1367
|
let callableBase;
|
|
1368
|
+
let extendsDate = false;
|
|
1361
1369
|
let factoryBaseExpression;
|
|
1362
1370
|
const adoptCallableBase = (expression) => {
|
|
1363
1371
|
if (familyMode || inst || mixin)
|
|
@@ -1538,6 +1546,12 @@ mixin) {
|
|
|
1538
1546
|
continue;
|
|
1539
1547
|
lowerer.unsupported("SC1090", clause, "extending computed expressions");
|
|
1540
1548
|
}
|
|
1549
|
+
if (!familyMode && !inst && !mixin && lowerer.isStdlibGlobal(t.expression, "Date")) {
|
|
1550
|
+
if (t.typeArguments?.nodes)
|
|
1551
|
+
lowerer.unsupported("SC1090", t, "extending generic classes");
|
|
1552
|
+
extendsDate = true;
|
|
1553
|
+
continue;
|
|
1554
|
+
}
|
|
1541
1555
|
const symbol = lowerer.resolveValueSymbol(t.expression);
|
|
1542
1556
|
// Extending a REBINDABLE decorated class (analysis already ran —
|
|
1543
1557
|
// this collection is a class expression or a generic
|
|
@@ -1738,7 +1752,8 @@ mixin) {
|
|
|
1738
1752
|
};
|
|
1739
1753
|
for (const member of decl.members.nodes) {
|
|
1740
1754
|
if ((functionLocalClass(decl) || checkedStatics) &&
|
|
1741
|
-
isJsSourceFile(ts.getSourceFileOfNode(decl))
|
|
1755
|
+
(isJsSourceFile(ts.getSourceFileOfNode(decl)) ||
|
|
1756
|
+
(functionLocalClass(decl) && ts.isMethodDeclaration(member))) &&
|
|
1742
1757
|
(ts.isClassStaticBlockDeclaration(member) ||
|
|
1743
1758
|
ts
|
|
1744
1759
|
.getModifiers(member)
|
|
@@ -3394,7 +3409,8 @@ mixin) {
|
|
|
3394
3409
|
// synthesized constructor forwards the same params to super).
|
|
3395
3410
|
const ctorParams = ctor && !mixinForwarding
|
|
3396
3411
|
? lowerer.paramShapes(ctor.parameters.nodes)
|
|
3397
|
-
: (base?.ctorParams ??
|
|
3412
|
+
: (base?.ctorParams ??
|
|
3413
|
+
(callableBase || extendsDate ? [{ type: DYN, mode: "dynRest" }] : []));
|
|
3398
3414
|
if (ctor &&
|
|
3399
3415
|
!mixinForwarding &&
|
|
3400
3416
|
isJsSourceFile(ts.getSourceFileOfNode(ctor)) &&
|
|
@@ -3421,6 +3437,7 @@ mixin) {
|
|
|
3421
3437
|
// Redeclared INHERITED fields contribute no slot (their
|
|
3422
3438
|
// initializers assign the prefix slot).
|
|
3423
3439
|
fields: [
|
|
3440
|
+
...(extendsDate ? [{ name: DATE_TIME_FIELD, type: DATE_T }] : []),
|
|
3424
3441
|
...(base?.def.fields ?? []),
|
|
3425
3442
|
...fieldOrder
|
|
3426
3443
|
.filter((f) => f.redeclared !== true)
|
|
@@ -3452,6 +3469,7 @@ mixin) {
|
|
|
3452
3469
|
base,
|
|
3453
3470
|
...(genericBase ? { genericBase } : {}),
|
|
3454
3471
|
...(callableBase ? { callableBase } : {}),
|
|
3472
|
+
...(extendsDate ? { extendsDate: true } : {}),
|
|
3455
3473
|
...(factoryBaseExpression ? { factoryBaseExpression } : {}),
|
|
3456
3474
|
subclasses: [],
|
|
3457
3475
|
throwingSetters,
|
|
@@ -3492,6 +3510,7 @@ mixin) {
|
|
|
3492
3510
|
path: inst.path,
|
|
3493
3511
|
family: inst.family,
|
|
3494
3512
|
bindings: inst.bindings,
|
|
3513
|
+
tsBindings: inst.tsBindings,
|
|
3495
3514
|
typeArgsText: inst.typeArgsText,
|
|
3496
3515
|
ordinal: inst.ordinal,
|
|
3497
3516
|
};
|
|
@@ -3522,8 +3541,10 @@ mixin) {
|
|
|
3522
3541
|
};
|
|
3523
3542
|
lowerer.genericClassByDecl.set(decl, info.generic);
|
|
3524
3543
|
}
|
|
3525
|
-
if (base)
|
|
3544
|
+
if (base) {
|
|
3526
3545
|
base.subclasses.push(info);
|
|
3546
|
+
lowerer.subclassLinks++;
|
|
3547
|
+
}
|
|
3527
3548
|
lowerer.classes.set(className, info);
|
|
3528
3549
|
if (computedBase && !functionLocalClass(decl)) {
|
|
3529
3550
|
info.def.baseValueGlobal = `%g.${className}.computedBase`;
|
|
@@ -3625,8 +3646,10 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3625
3646
|
.getTypeArguments(ref)
|
|
3626
3647
|
.slice(0, gci.typeParams.length);
|
|
3627
3648
|
const mapped = [];
|
|
3649
|
+
const tsArgs = [];
|
|
3628
3650
|
if (args.length === gci.typeParams.length) {
|
|
3629
3651
|
for (const a of args) {
|
|
3652
|
+
tsArgs.push(lowerer.typeParamTsResolver(a) ?? a);
|
|
3630
3653
|
const m = lowerer.mapTypeOf(a, mapArgument);
|
|
3631
3654
|
if (!m || m.kind === "void") {
|
|
3632
3655
|
// An UNBOUND type parameter argument (`Box<T>` outside any
|
|
@@ -3647,9 +3670,34 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3647
3670
|
if (!b)
|
|
3648
3671
|
return null;
|
|
3649
3672
|
mapped.push(b);
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
|
|
3673
|
+
const bound = lowerer.typeParamTsBindings?.get(tp);
|
|
3674
|
+
if (bound)
|
|
3675
|
+
tsArgs.push(bound);
|
|
3676
|
+
}
|
|
3677
|
+
}
|
|
3678
|
+
// A type parameter that a conditional type in the class depends on
|
|
3679
|
+
// (`K extends "required" ? T : T | undefined`) is bound to its checker
|
|
3680
|
+
// type for the members, and that type keys the instance: mapType alone
|
|
3681
|
+
// widens a literal, so Field<string, "required"> and Field<string,
|
|
3682
|
+
// "optional"> would otherwise share one layout. The other parameters get
|
|
3683
|
+
// no checker binding, so nothing in the members depends on a literal
|
|
3684
|
+
// the key does not carry.
|
|
3685
|
+
gci.literalSensitive ??= literalSensitiveTypeParams(lowerer, gci);
|
|
3686
|
+
const sensitive = (i) => tsArgs.length === gci.typeParams.length && gci.literalSensitive.has(gci.typeParams[i]);
|
|
3687
|
+
const checkerKey = gci.typeParams
|
|
3688
|
+
.map((_, i) => (sensitive(i) ? `#${tsArgs[i].id}` : "*"))
|
|
3689
|
+
.join(",");
|
|
3690
|
+
const key = mapped.map(typeKey).join(",") + (gci.literalSensitive.size > 0 ? `@${checkerKey}` : "");
|
|
3691
|
+
const literalText = (i) => {
|
|
3692
|
+
const arg = sensitive(i) ? tsArgs[i] : undefined;
|
|
3693
|
+
if (arg?.isStringLiteralType())
|
|
3694
|
+
return JSON.stringify(arg.value);
|
|
3695
|
+
if (arg?.isNumberLiteralType())
|
|
3696
|
+
return String(arg.value);
|
|
3697
|
+
if (arg && arg.flags & ts.TypeFlags.BooleanLiteral)
|
|
3698
|
+
return lowerer.checker.typeToString(arg);
|
|
3699
|
+
return null;
|
|
3700
|
+
};
|
|
3653
3701
|
const existing = gci.instances.get(key);
|
|
3654
3702
|
if (existing) {
|
|
3655
3703
|
if (existing.info)
|
|
@@ -3663,18 +3711,40 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3663
3711
|
lowerer.unsupported("SC1090", decl, `unbounded generic class instantiation ('${gci.baseName}' exceeded ${MAX_INSTANTIATION_RECURSION} recursive specializations on one demand path)`);
|
|
3664
3712
|
}
|
|
3665
3713
|
const ordinal = gci.instances.size;
|
|
3666
|
-
|
|
3714
|
+
// The name does not take the checker type ids of the key: a literal
|
|
3715
|
+
// argument is named by its text, another checker type by its
|
|
3716
|
+
// description. Two keys that still describe alike number the later one.
|
|
3717
|
+
const nameKey = mapped.map(typeKey).join(",") +
|
|
3718
|
+
(gci.literalSensitive.size > 0
|
|
3719
|
+
? `@${gci.typeParams
|
|
3720
|
+
.map((_, i) => sensitive(i)
|
|
3721
|
+
? (literalText(i) ?? checkerTypeDescription(tsArgs[i], lowerer.typeCtx))
|
|
3722
|
+
: "*")
|
|
3723
|
+
.join(",")}`
|
|
3724
|
+
: "");
|
|
3725
|
+
const prefix = `${gci.family.def.name}%`;
|
|
3726
|
+
const taken = new Set([...gci.instances.values()].map((instance) => instance.name));
|
|
3727
|
+
let name = keyedHelperName(lowerer, prefix, nameKey, "");
|
|
3728
|
+
for (let n = 1; taken.has(name); n++)
|
|
3729
|
+
name = keyedHelperName(lowerer, prefix, `${nameKey}#${n}`, "");
|
|
3667
3730
|
const entry = { name, info: null };
|
|
3668
3731
|
gci.instances.set(key, entry);
|
|
3669
3732
|
const bindings = new Map();
|
|
3670
3733
|
gci.typeParams.forEach((tp, i) => bindings.set(tp, mapped[i]));
|
|
3671
|
-
const
|
|
3734
|
+
const tsBindings = new Map();
|
|
3735
|
+
gci.typeParams.forEach((tp, i) => {
|
|
3736
|
+
if (sensitive(i))
|
|
3737
|
+
tsBindings.set(tp, tsArgs[i]);
|
|
3738
|
+
});
|
|
3739
|
+
const rendered = mapped.map((m, i) => literalText(i) ?? lowerer.fmt(m)).join(", ");
|
|
3672
3740
|
const typeArgsText = `<${rendered.length > 80 ? rendered.slice(0, 77) + "..." : rendered}>`;
|
|
3673
3741
|
const prevBindings = lowerer.typeParamBindings;
|
|
3742
|
+
const prevTsBindings = lowerer.typeParamTsBindings;
|
|
3674
3743
|
const prevContext = lowerer.instantiationContext;
|
|
3675
3744
|
const previousPath = lowerer.genericInstantiationPath;
|
|
3676
3745
|
lowerer.genericInstantiationPath = path;
|
|
3677
3746
|
lowerer.typeParamBindings = bindings;
|
|
3747
|
+
lowerer.typeParamTsBindings = tsBindings;
|
|
3678
3748
|
lowerer.instantiationContext = `instantiating class '${gci.baseName}' with ${typeArgsText}`;
|
|
3679
3749
|
try {
|
|
3680
3750
|
lowerer.collectClassShapeInner(decl, undefined, {
|
|
@@ -3682,6 +3752,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3682
3752
|
family: gci.family,
|
|
3683
3753
|
name,
|
|
3684
3754
|
bindings,
|
|
3755
|
+
tsBindings,
|
|
3685
3756
|
typeArgsText,
|
|
3686
3757
|
ordinal,
|
|
3687
3758
|
});
|
|
@@ -3696,6 +3767,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3696
3767
|
}
|
|
3697
3768
|
finally {
|
|
3698
3769
|
lowerer.typeParamBindings = prevBindings;
|
|
3770
|
+
lowerer.typeParamTsBindings = prevTsBindings;
|
|
3699
3771
|
lowerer.instantiationContext = prevContext;
|
|
3700
3772
|
lowerer.genericInstantiationPath = previousPath;
|
|
3701
3773
|
}
|
|
@@ -3710,6 +3782,65 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3710
3782
|
lowerer.onLateClassCollected?.(info);
|
|
3711
3783
|
return { kind: "object", className: name };
|
|
3712
3784
|
}
|
|
3785
|
+
/** The class's type parameters that a conditional type inside it depends
|
|
3786
|
+
* on: the parameters named within a type node that is a conditional type
|
|
3787
|
+
* or reaches one through the type aliases and interfaces it refers to
|
|
3788
|
+
* (`get(): Value<T, K>` with `type Value<T, K> = K extends "required" ? T
|
|
3789
|
+
* : T | undefined`, also when the alias wraps the conditional in a union
|
|
3790
|
+
* or another alias). Their arguments pick the conditional's branch. */
|
|
3791
|
+
function literalSensitiveTypeParams(lowerer, gci) {
|
|
3792
|
+
const params = new Set(gci.typeParams);
|
|
3793
|
+
const found = new Set();
|
|
3794
|
+
const reaches = new Map();
|
|
3795
|
+
const declarationsReach = (symbol) => {
|
|
3796
|
+
const target = symbol.flags & ts.SymbolFlags.Alias ? lowerer.checker.getAliasedSymbol(symbol) : symbol;
|
|
3797
|
+
const known = reaches.get(target);
|
|
3798
|
+
if (known !== undefined)
|
|
3799
|
+
return known;
|
|
3800
|
+
reaches.set(target, false); // a recursive alias reaches through its other parts
|
|
3801
|
+
const result = target.declarations.some((d) => ts.isTypeAliasDeclaration(d)
|
|
3802
|
+
? reachesConditional(d.type)
|
|
3803
|
+
: ts.isInterfaceDeclaration(d)
|
|
3804
|
+
? d.members.nodes.some(reachesConditional)
|
|
3805
|
+
: false);
|
|
3806
|
+
reaches.set(target, result);
|
|
3807
|
+
return result;
|
|
3808
|
+
};
|
|
3809
|
+
const reachesConditional = (node) => {
|
|
3810
|
+
if (ts.isConditionalTypeNode(node))
|
|
3811
|
+
return true;
|
|
3812
|
+
if (ts.isTypeReferenceNode(node)) {
|
|
3813
|
+
const name = ts.isIdentifier(node.typeName) ? node.typeName : node.typeName.right;
|
|
3814
|
+
const symbol = lowerer.checker.getSymbolAtLocation(name);
|
|
3815
|
+
if (symbol && !params.has(symbol) && declarationsReach(symbol))
|
|
3816
|
+
return true;
|
|
3817
|
+
}
|
|
3818
|
+
let found = false;
|
|
3819
|
+
ts.forEachChild(node, (child) => {
|
|
3820
|
+
if (!found && reachesConditional(child))
|
|
3821
|
+
found = true;
|
|
3822
|
+
});
|
|
3823
|
+
return found;
|
|
3824
|
+
};
|
|
3825
|
+
const collect = (node) => {
|
|
3826
|
+
if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName)) {
|
|
3827
|
+
const symbol = lowerer.checker.getSymbolAtLocation(node.typeName);
|
|
3828
|
+
if (symbol && params.has(symbol))
|
|
3829
|
+
found.add(symbol);
|
|
3830
|
+
}
|
|
3831
|
+
ts.forEachChild(node, collect);
|
|
3832
|
+
};
|
|
3833
|
+
const visit = (node) => {
|
|
3834
|
+
if (ts.isTypeNode(node) && reachesConditional(node)) {
|
|
3835
|
+
collect(node);
|
|
3836
|
+
return;
|
|
3837
|
+
}
|
|
3838
|
+
ts.forEachChild(node, visit);
|
|
3839
|
+
};
|
|
3840
|
+
for (const member of gci.decl.members.nodes)
|
|
3841
|
+
visit(member);
|
|
3842
|
+
return found;
|
|
3843
|
+
}
|
|
3713
3844
|
/** Runs a member-lowering thunk under an INSTANTIATION's type-parameter
|
|
3714
3845
|
* bindings (the generic-fn typeParamResolver mechanism) — the checker
|
|
3715
3846
|
* keeps reporting the unsubstituted `T`s inside the shared body AST.
|
|
@@ -3745,11 +3876,13 @@ function withInstanceBindings(lowerer, info, fn) {
|
|
|
3745
3876
|
}
|
|
3746
3877
|
}
|
|
3747
3878
|
const prevBindings = lowerer.typeParamBindings;
|
|
3879
|
+
const prevTsBindings = lowerer.typeParamTsBindings;
|
|
3748
3880
|
const prevContext = lowerer.instantiationContext;
|
|
3749
3881
|
const prevSuppress = lowerer.suppressStats;
|
|
3750
3882
|
const previousPath = lowerer.genericInstantiationPath;
|
|
3751
3883
|
lowerer.genericInstantiationPath = gi.path;
|
|
3752
3884
|
lowerer.typeParamBindings = gi.bindings;
|
|
3885
|
+
lowerer.typeParamTsBindings = gi.tsBindings;
|
|
3753
3886
|
lowerer.instantiationContext = `instantiating class '${gi.family.generic?.baseName ?? info.def.jsName ?? ""}' with ${gi.typeArgsText}`;
|
|
3754
3887
|
lowerer.suppressStats = prevSuppress || gi.ordinal > 0;
|
|
3755
3888
|
try {
|
|
@@ -3757,6 +3890,7 @@ function withInstanceBindings(lowerer, info, fn) {
|
|
|
3757
3890
|
}
|
|
3758
3891
|
finally {
|
|
3759
3892
|
lowerer.typeParamBindings = prevBindings;
|
|
3893
|
+
lowerer.typeParamTsBindings = prevTsBindings;
|
|
3760
3894
|
lowerer.instantiationContext = prevContext;
|
|
3761
3895
|
lowerer.suppressStats = prevSuppress;
|
|
3762
3896
|
lowerer.genericInstantiationPath = previousPath;
|
|
@@ -4484,6 +4618,13 @@ export function lowerStaticFieldRead(lowerer, expr) {
|
|
|
4484
4618
|
return null;
|
|
4485
4619
|
const loc = locOf(expr);
|
|
4486
4620
|
const found = findStaticOn(lowerer, info, expr.name.text);
|
|
4621
|
+
// A Date static read as a value through a class declared `extends Date`:
|
|
4622
|
+
// the statics lower only as calls.
|
|
4623
|
+
if (!found &&
|
|
4624
|
+
dateRootOf(info) &&
|
|
4625
|
+
["now", "parse", "UTC"].includes(expr.name.text) &&
|
|
4626
|
+
!(ts.isCallExpression(expr.parent) && expr.parent.expression === expr))
|
|
4627
|
+
lowerer.noLowering(`Date.${expr.name.text} read through a class that extends Date`, expr);
|
|
4487
4628
|
if (hasRuntimeStatics(info) && !found?.field)
|
|
4488
4629
|
return {
|
|
4489
4630
|
kind: "dynKeyGet",
|
|
@@ -4687,9 +4828,10 @@ export function lowerClassExpressionInfo(lowerer, expr) {
|
|
|
4687
4828
|
expr.members.nodes.some((member) => decoratorNodesOf(member).length ||
|
|
4688
4829
|
(!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
4689
4830
|
(ts.isClassStaticBlockDeclaration(member) ||
|
|
4690
|
-
ts
|
|
4691
|
-
|
|
4692
|
-
|
|
4831
|
+
(!ts.isMethodDeclaration(member) &&
|
|
4832
|
+
ts
|
|
4833
|
+
.getModifiers(member)
|
|
4834
|
+
?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword)))) ||
|
|
4693
4835
|
(ts.isMethodDeclaration(member) && member.typeParameters?.nodes.length)))) {
|
|
4694
4836
|
lowerer.unsupported("SC1090", expr, "function-local classes with statics, decorators, or generic members");
|
|
4695
4837
|
}
|
|
@@ -4932,9 +5074,49 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4932
5074
|
loc,
|
|
4933
5075
|
});
|
|
4934
5076
|
}
|
|
4935
|
-
|
|
4936
|
-
|
|
4937
|
-
|
|
5077
|
+
if (!info.localClass)
|
|
5078
|
+
return value;
|
|
5079
|
+
const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value);
|
|
5080
|
+
// The base resolves statically here, but Node still evaluates the
|
|
5081
|
+
// heritage expression each time the class definition runs, first.
|
|
5082
|
+
const heritage = heritageWithEffects(expr);
|
|
5083
|
+
if (heritage === undefined)
|
|
5084
|
+
return classValue;
|
|
5085
|
+
return {
|
|
5086
|
+
kind: "seqExpr",
|
|
5087
|
+
stmts: [lowerer.lowerExprStatement(heritage)],
|
|
5088
|
+
result: classValue,
|
|
5089
|
+
type: classValue.type,
|
|
5090
|
+
loc: classValue.loc,
|
|
5091
|
+
};
|
|
5092
|
+
}
|
|
5093
|
+
/** The `extends` expression of `decl` when evaluating it can have effects
|
|
5094
|
+
* (a call, construction, assignment, update, delete, await or yield
|
|
5095
|
+
* outside nested functions). */
|
|
5096
|
+
function heritageWithEffects(decl) {
|
|
5097
|
+
const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0]?.expression;
|
|
5098
|
+
if (heritage === undefined)
|
|
5099
|
+
return undefined;
|
|
5100
|
+
const effects = (node) => {
|
|
5101
|
+
if (ts.isFunctionLike(node) || ts.isClassDeclaration(node) || ts.isClassExpression(node))
|
|
5102
|
+
return false;
|
|
5103
|
+
if (ts.isCallExpression(node) ||
|
|
5104
|
+
ts.isNewExpression(node) ||
|
|
5105
|
+
ts.isTaggedTemplateExpression(node) ||
|
|
5106
|
+
ts.isDeleteExpression(node) ||
|
|
5107
|
+
ts.isAwaitExpression(node) ||
|
|
5108
|
+
ts.isYieldExpression(node) ||
|
|
5109
|
+
(ts.isPrefixUnaryExpression(node) &&
|
|
5110
|
+
(node.operator === ts.SyntaxKind.PlusPlusToken ||
|
|
5111
|
+
node.operator === ts.SyntaxKind.MinusMinusToken)) ||
|
|
5112
|
+
ts.isPostfixUnaryExpression(node) ||
|
|
5113
|
+
(ts.isBinaryExpression(node) &&
|
|
5114
|
+
node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
|
|
5115
|
+
node.operatorToken.kind <= ts.SyntaxKind.LastAssignment))
|
|
5116
|
+
return true;
|
|
5117
|
+
return ts.forEachChild(node, (child) => effects(child) || undefined) ?? false;
|
|
5118
|
+
};
|
|
5119
|
+
return effects(heritage) ? heritage : undefined;
|
|
4938
5120
|
}
|
|
4939
5121
|
/** The EXACT class a receiver expression is statically known to BE (not
|
|
4940
5122
|
* merely be typed by): the class name itself, or a `const` binding
|
|
@@ -5195,6 +5377,13 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
|
|
|
5195
5377
|
const runtimeStatic = directRuntimeStaticCall(lowerer, call, access, info, throughValue);
|
|
5196
5378
|
if (runtimeStatic)
|
|
5197
5379
|
return runtimeStatic;
|
|
5380
|
+
// Date's statics through a class declared `extends Date`
|
|
5381
|
+
// (`Moment.UTC(...)`), which inherits them.
|
|
5382
|
+
if (dateRootOf(info) && !findStaticOn(lowerer, info, access.name.text)) {
|
|
5383
|
+
const date = lowerDateStaticCall(lowerer, call, access.name.text);
|
|
5384
|
+
if (date)
|
|
5385
|
+
return date;
|
|
5386
|
+
}
|
|
5198
5387
|
if ((hasRuntimeStatics(info) && !findStaticOn(lowerer, info, access.name.text)?.field) ||
|
|
5199
5388
|
(info.callableBase &&
|
|
5200
5389
|
!findStaticOn(lowerer, info, access.name.text) &&
|
|
@@ -6288,7 +6477,7 @@ function lowerClassCtorInner(lowerer, info) {
|
|
|
6288
6477
|
lowerer.ctx.argumentsLocal = local;
|
|
6289
6478
|
}
|
|
6290
6479
|
body.push(...declared.prologue);
|
|
6291
|
-
if (!ctorBase && !info.callableBase) {
|
|
6480
|
+
if (!ctorBase && !info.callableBase && !info.extendsDate) {
|
|
6292
6481
|
// Node's base-class order: field initializers run at the start
|
|
6293
6482
|
// of construction, the parameter-property assignments open the
|
|
6294
6483
|
// constructor body (probed — a field initializer reading a
|
|
@@ -6303,7 +6492,7 @@ function lowerClassCtorInner(lowerer, info) {
|
|
|
6303
6492
|
}
|
|
6304
6493
|
}
|
|
6305
6494
|
else {
|
|
6306
|
-
if (ctorBase || info.callableBase) {
|
|
6495
|
+
if (ctorBase || info.callableBase || info.extendsDate) {
|
|
6307
6496
|
// Synthetic forwarding params (the inherited ABI signature).
|
|
6308
6497
|
// Nothing references them by symbol — only the super call below,
|
|
6309
6498
|
// which forwards the already-completed values UNCHANGED (defaults
|
|
@@ -6486,7 +6675,7 @@ export function classIteratorDrainCall(lowerer, src, loc, elemT) {
|
|
|
6486
6675
|
const key = `${cit.className}:${typeKey(outElem)}`;
|
|
6487
6676
|
let name = lowerer.iterDrainHelpers.get(key);
|
|
6488
6677
|
if (!name) {
|
|
6489
|
-
name =
|
|
6678
|
+
name = keyedHelperName(lowerer, "%iter.drain", key);
|
|
6490
6679
|
lowerer.iterDrainHelpers.set(key, name);
|
|
6491
6680
|
const recvT = { kind: "object", className: cit.className };
|
|
6492
6681
|
const recvRef = { kind: "varRef", localId: "r.0", type: recvT, loc };
|
|
@@ -6594,7 +6783,7 @@ export function classIteratorRestDrainCall(lowerer, cit, itVal, loc) {
|
|
|
6594
6783
|
const key = `it:${cit.iterT.className}`;
|
|
6595
6784
|
let name = lowerer.iterDrainHelpers.get(key);
|
|
6596
6785
|
if (!name) {
|
|
6597
|
-
name =
|
|
6786
|
+
name = keyedHelperName(lowerer, "%iter.drain", key);
|
|
6598
6787
|
lowerer.iterDrainHelpers.set(key, name);
|
|
6599
6788
|
const itRef = { kind: "varRef", localId: "it.0", type: cit.iterT, loc };
|
|
6600
6789
|
const outRef = { kind: "varRef", localId: "out.0", type: outT, loc };
|
|
@@ -7089,12 +7278,39 @@ function superCallInStatementPosition(call) {
|
|
|
7089
7278
|
const parent = node.parent;
|
|
7090
7279
|
if (ts.isExpressionStatement(parent))
|
|
7091
7280
|
return true;
|
|
7281
|
+
if (ts.isIfStatement(parent)) {
|
|
7282
|
+
const lead = superConditionLead(parent.expression);
|
|
7283
|
+
return lead !== null && call.pos >= lead.left.pos && call.end <= lead.left.end;
|
|
7284
|
+
}
|
|
7092
7285
|
const comma = ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.CommaToken;
|
|
7093
7286
|
if (!comma && !ts.isParenthesizedExpression(parent))
|
|
7094
7287
|
return false;
|
|
7095
7288
|
node = parent;
|
|
7096
7289
|
}
|
|
7097
7290
|
}
|
|
7291
|
+
/** The comma chain of an `if` condition whose leading operands hold a
|
|
7292
|
+
* super() call (`if (super(), r === 0) throw ...`, as minifiers join a
|
|
7293
|
+
* super statement with the next test), or null. The if statement runs the
|
|
7294
|
+
* chain's left operand as a statement first and tests its right operand,
|
|
7295
|
+
* which is what the comma evaluates. */
|
|
7296
|
+
export function superConditionLead(cond) {
|
|
7297
|
+
let expr = cond;
|
|
7298
|
+
while (ts.isParenthesizedExpression(expr))
|
|
7299
|
+
expr = expr.expression;
|
|
7300
|
+
if (!ts.isBinaryExpression(expr) || expr.operatorToken.kind !== ts.SyntaxKind.CommaToken)
|
|
7301
|
+
return null;
|
|
7302
|
+
const holdsSuperCall = (operand) => {
|
|
7303
|
+
let e = operand;
|
|
7304
|
+
while (ts.isParenthesizedExpression(e))
|
|
7305
|
+
e = e.expression;
|
|
7306
|
+
if (ts.isCallExpression(e))
|
|
7307
|
+
return e.expression.kind === ts.SyntaxKind.SuperKeyword;
|
|
7308
|
+
return (ts.isBinaryExpression(e) &&
|
|
7309
|
+
e.operatorToken.kind === ts.SyntaxKind.CommaToken &&
|
|
7310
|
+
(holdsSuperCall(e.left) || holdsSuperCall(e.right)));
|
|
7311
|
+
};
|
|
7312
|
+
return holdsSuperCall(expr.left) ? expr : null;
|
|
7313
|
+
}
|
|
7098
7314
|
/** Super statements initialize the base and then the derived fields on
|
|
7099
7315
|
* whichever control-flow path executes. Repeated calls are explicitly
|
|
7100
7316
|
* refused until native layouts can allocate a second receiver. */
|
|
@@ -7126,9 +7342,11 @@ export function lowerDerivedCtorBody(lowerer, info, thisLocal, forward) {
|
|
|
7126
7342
|
loc,
|
|
7127
7343
|
},
|
|
7128
7344
|
];
|
|
7129
|
-
if (info.callableBase) {
|
|
7345
|
+
if (info.callableBase || info.extendsDate) {
|
|
7130
7346
|
if (superCall.arguments.nodes.some(ts.isSpreadElement))
|
|
7131
|
-
lowerer.unsupported("SC1090", superCall,
|
|
7347
|
+
lowerer.unsupported("SC1090", superCall, info.extendsDate
|
|
7348
|
+
? "spreading super arguments into the Date constructor"
|
|
7349
|
+
: "spreading explicit super arguments into an ordinary constructor");
|
|
7132
7350
|
const pack = {
|
|
7133
7351
|
kind: "dynArrLit",
|
|
7134
7352
|
elems: superCall.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
|
|
@@ -7271,6 +7489,8 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
|
|
|
7271
7489
|
type: { kind: "object", className: info.def.name },
|
|
7272
7490
|
loc,
|
|
7273
7491
|
};
|
|
7492
|
+
if (info.extendsDate)
|
|
7493
|
+
return dateSuperCall(thisRef, info, args[0], loc);
|
|
7274
7494
|
if (info.callableBase)
|
|
7275
7495
|
return {
|
|
7276
7496
|
kind: "exprStmt",
|
|
@@ -7373,6 +7593,22 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
|
|
|
7373
7593
|
* super dispatch is static in JS too, never through the dynamic class. */
|
|
7374
7594
|
export function lowerSuperMethodCall(lowerer, call, access) {
|
|
7375
7595
|
const cls = lowerer.currentClass;
|
|
7596
|
+
// `super.toISOString()` in a class declared `extends Date`.
|
|
7597
|
+
if (cls?.extendsDate && !cls.base) {
|
|
7598
|
+
const thisL = lowerer.resolveThis();
|
|
7599
|
+
if (!thisL)
|
|
7600
|
+
lowerer.unsupported("SC1080", access);
|
|
7601
|
+
const thisRef = {
|
|
7602
|
+
kind: "varRef",
|
|
7603
|
+
localId: thisL.id,
|
|
7604
|
+
type: thisL.type,
|
|
7605
|
+
loc: locOf(call),
|
|
7606
|
+
};
|
|
7607
|
+
const date = lowerDateSuperMethodCall(lowerer, call, access.name.text, cls, thisRef);
|
|
7608
|
+
if (date)
|
|
7609
|
+
return date;
|
|
7610
|
+
lowerer.unsupported("SC1090", access, `'super.${access.name.text}' (Date.prototype does not declare it)`);
|
|
7611
|
+
}
|
|
7376
7612
|
if (!cls?.base) {
|
|
7377
7613
|
// tsc rejects super outside derived-class bodies first; defensive.
|
|
7378
7614
|
lowerer.unsupported("SC1090", access, "'super' outside a derived class");
|
|
@@ -7420,6 +7656,18 @@ export function lowerSuperMethodCall(lowerer, call, access) {
|
|
|
7420
7656
|
// `super.dispatchEvent(e)`, `super.preventDefault()`: the inherited
|
|
7421
7657
|
// runtime members over this method's own `this` (subclasses cannot
|
|
7422
7658
|
// override them, so the static answer is the runtime's).
|
|
7659
|
+
if (dateRootOf(cls.base) && isDatePrototypeMethod(access.name.text)) {
|
|
7660
|
+
const thisL = lowerer.resolveThis();
|
|
7661
|
+
if (!thisL)
|
|
7662
|
+
lowerer.unsupported("SC1080", access);
|
|
7663
|
+
const thisRef = {
|
|
7664
|
+
kind: "varRef",
|
|
7665
|
+
localId: thisL.id,
|
|
7666
|
+
type: thisL.type,
|
|
7667
|
+
loc: locOf(call),
|
|
7668
|
+
};
|
|
7669
|
+
return lowerDateSuperMethodCall(lowerer, call, access.name.text, cls.base, thisRef);
|
|
7670
|
+
}
|
|
7423
7671
|
if (eventTargetApiMethod(cls.base, access.name.text)) {
|
|
7424
7672
|
const thisL = lowerer.resolveThis();
|
|
7425
7673
|
if (!thisL)
|
|
@@ -8057,6 +8305,13 @@ export function lowerNew(lowerer, expr) {
|
|
|
8057
8305
|
if (httpServer)
|
|
8058
8306
|
return httpServer;
|
|
8059
8307
|
}
|
|
8308
|
+
// `new tls.TLSSocket(socket, options)` — the server-mode wrap of an open
|
|
8309
|
+
// socket (lower-server).
|
|
8310
|
+
{
|
|
8311
|
+
const tlsSocket = lowerTlsSocketNew(lowerer, expr);
|
|
8312
|
+
if (tlsSocket)
|
|
8313
|
+
return tlsSocket;
|
|
8314
|
+
}
|
|
8060
8315
|
// `new http.Agent(opts?)` / `new https.Agent(opts?)` — the Agent
|
|
8061
8316
|
// handle (lower-server): getName/destroy/counters through the dyn
|
|
8062
8317
|
// handle ops, requests thread it via the agent option.
|
|
@@ -8782,7 +9037,7 @@ export function lowerNew(lowerer, expr) {
|
|
|
8782
9037
|
const key = `x509.record:${isBytes ? "bytes" : "str"}`;
|
|
8783
9038
|
let helper = lowerer.valueHelpers.get(key);
|
|
8784
9039
|
if (!helper) {
|
|
8785
|
-
helper =
|
|
9040
|
+
helper = keyedHelperName(lowerer, "%x509.record", key);
|
|
8786
9041
|
lowerer.valueHelpers.set(key, helper);
|
|
8787
9042
|
const dataT = data.type;
|
|
8788
9043
|
const dRef = { kind: "varRef", localId: "d.0", type: dataT, loc };
|