@scriptc/compiler 0.4.0 → 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 +617 -83
- 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 +10 -0
- 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 +7 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/link-plan-core.d.ts +2 -0
- package/dist/backend/link-plan-core.js +2 -0
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +1 -0
- package/dist/backend/link-plan.js +1 -0
- package/dist/backend/link-plan.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 +4 -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 +99 -2
- package/dist/backend/llvm/classes.js +436 -57
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +235 -16
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +21 -5
- package/dist/backend/llvm/common.js +50 -5
- 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-access.d.ts +3 -1
- package/dist/backend/llvm/dense-array-access.js +61 -38
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +4 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
- package/dist/backend/llvm/dense-array-loops.js +49 -13
- 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 +34 -1
- package/dist/backend/llvm/dyn.js +393 -14
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +27 -8
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +67 -39
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +3 -25
- package/dist/backend/llvm/emit-statements.js +414 -37
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +159 -22
- package/dist/backend/llvm/emitter.js +573 -89
- 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 +51 -26
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +27 -14
- 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 +95 -5
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +29 -11
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +55 -0
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +48 -20
- 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/integer-clones.js +3 -3
- package/dist/backend/llvm/integer-clones.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +18 -0
- package/dist/backend/llvm/js-ic.js +712 -0
- package/dist/backend/llvm/js-ic.js.map +1 -0
- package/dist/backend/llvm/jsval.js +139 -11
- package/dist/backend/llvm/jsval.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 +69 -17
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +75 -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 +91 -61
- 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/map-number-lookup.d.ts +20 -4
- package/dist/backend/llvm/map-number-lookup.js +43 -7
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/narrow-guards.js +64 -0
- package/dist/backend/llvm/narrow-guards.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +11 -1
- package/dist/backend/llvm/publish.js +80 -22
- 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/regions.js +2 -2
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/regions.test.js +7 -1
- package/dist/backend/llvm/regions.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +17 -9
- package/dist/backend/llvm/shapes.js +21 -17
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +20 -1
- package/dist/backend/llvm/speculative-integers.js +94 -6
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.test.js +55 -1
- package/dist/backend/llvm/speculative-integers.test.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 +4 -1
- package/dist/backend/llvm/string-reads.js +88 -4
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/thread-slots.test.js +5 -4
- package/dist/backend/llvm/thread-slots.test.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 +8 -0
- package/dist/backend/mangle.js +12 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +40 -2
- package/dist/backend/native/executable.js +40 -7
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +3 -1
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +17 -6
- package/dist/backend/native-codegen.js +55 -9
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +18 -14
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +30 -2
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-profile.d.ts +32 -0
- package/dist/backend/native-profile.js +39 -0
- package/dist/backend/native-profile.js.map +1 -0
- package/dist/backend/native-profile.test.d.ts +1 -0
- package/dist/backend/native-profile.test.js +58 -0
- package/dist/backend/native-profile.test.js.map +1 -0
- package/dist/backend/native-tools.d.ts +14 -0
- package/dist/backend/native-tools.js +13 -0
- package/dist/backend/native-tools.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 +4 -0
- package/dist/backend/runtime-pack-core.js +4 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +7 -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 +12 -69
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +38 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +6 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +89 -7
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +3 -0
- package/dist/cli/output-options.d.ts +2 -0
- package/dist/cli/output-options.js +9 -0
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/usage.d.ts +15 -1
- package/dist/cli/usage.js +30 -2
- package/dist/cli/usage.js.map +1 -1
- package/dist/compile-types.d.ts +9 -0
- package/dist/contracts/check.js +2 -3
- 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 +32 -0
- package/dist/executable/executable-cache.js +65 -7
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +50 -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/arguments-usage.d.ts +8 -0
- package/dist/frontend/arguments-usage.js +98 -0
- package/dist/frontend/arguments-usage.js.map +1 -1
- package/dist/frontend/arguments-usage.test.d.ts +1 -0
- package/dist/frontend/arguments-usage.test.js +32 -0
- package/dist/frontend/arguments-usage.test.js.map +1 -0
- package/dist/frontend/builtin-package-aliases.d.ts +24 -0
- package/dist/frontend/builtin-package-aliases.js +133 -0
- package/dist/frontend/builtin-package-aliases.js.map +1 -0
- package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
- package/dist/frontend/builtin-package-aliases.test.js +48 -0
- package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
- 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/dts-paths.d.ts +4 -0
- package/dist/frontend/dts-paths.js +9 -1
- package/dist/frontend/dts-paths.js.map +1 -1
- 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/builtin-class-dyn.d.ts +8 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js +50 -1
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -1
- package/dist/frontend/lowering/builtins/callable-aliases.js +3 -2
- package/dist/frontend/lowering/builtins/callable-aliases.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 +7 -2
- package/dist/frontend/lowering/builtins/crypto.js +63 -4
- 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 +21 -0
- package/dist/frontend/lowering/builtins/ecdh.js +208 -0
- package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
- 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 +54 -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.d.ts +9 -0
- package/dist/frontend/lowering/builtins/process.js +47 -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.d.ts +3 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js +23 -4
- 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/reflection.js +26 -0
- package/dist/frontend/lowering/builtins/reflection.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 +6 -2
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
- package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
- package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
- 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.d.ts +4 -0
- package/dist/frontend/lowering/call-signatures.js +137 -13
- 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/cjs-exports-object.js +34 -1
- package/dist/frontend/lowering/cjs-exports-object.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 +577 -152
- 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 +17 -0
- package/dist/frontend/lowering/class-protocols.js +117 -7
- 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 +42 -4
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +2 -2
- package/dist/frontend/lowering/class-to-primitive.js +31 -8
- 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/fresh-spread.d.ts +13 -0
- package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
- package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.js +105 -75
- 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 +15 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +36 -32
- 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 +32 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +11 -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 +10 -1
- package/dist/frontend/lowering/containers/bytes.js +601 -24
- 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 +80 -10
- 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 +85 -22
- 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.d.ts +26 -10
- package/dist/frontend/lowering/cycle-initialization.js +177 -39
- 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 +48 -13
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +124 -8
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +30 -7
- 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/keyed-field-targets.d.ts +14 -2
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +91 -10
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +52 -7
- 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 +75 -7
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +17 -8
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +5 -4
- package/dist/frontend/lowering/expressions/property-access.js +351 -16
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +112 -9
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +13 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +64 -10
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
- package/dist/frontend/lowering/generator-delegation.js +191 -1
- package/dist/frontend/lowering/generator-delegation.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 +46 -1
- package/dist/frontend/lowering/generic-functions.js +660 -73
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.d.ts +24 -0
- package/dist/frontend/lowering/handle-properties.js +281 -0
- package/dist/frontend/lowering/handle-properties.js.map +1 -0
- package/dist/frontend/lowering/intern-tables.js +2 -1
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
- package/dist/frontend/lowering/iterable-spelling.js +38 -0
- package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
- 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-array-sort.d.ts +33 -15
- package/dist/frontend/lowering/lower-array-sort.js +117 -21
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
- package/dist/frontend/lowering/lower-array-sort.test.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-builtin-values.js +1 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +4 -0
- package/dist/frontend/lowering/lower-calls.js +504 -97
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +22 -0
- package/dist/frontend/lowering/lower-classes.js +339 -32
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +65 -15
- 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 +148 -12
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +308 -72
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +10 -4
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +578 -16
- 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.d.ts +11 -3
- package/dist/frontend/lowering/lower-modules.js +227 -72
- 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 +24 -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 +263 -60
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +39 -18
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +7 -10
- package/dist/frontend/lowering/lower-stmts.js +584 -69
- 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 +21 -4
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +151 -30
- package/dist/frontend/lowering/lowerer.js +725 -84
- 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/rebindable-functions.d.ts +8 -0
- package/dist/frontend/lowering/rebindable-functions.js +54 -0
- package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
- 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 +26 -0
- package/dist/frontend/lowering/static-typeof.js +172 -0
- package/dist/frontend/lowering/static-typeof.js.map +1 -0
- package/dist/frontend/lowering/strict-equality.js +2 -1
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/string-index-bounds.js +3 -2
- package/dist/frontend/lowering/string-index-bounds.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 +72 -30
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/thenables.d.ts +16 -0
- package/dist/frontend/lowering/thenables.js +124 -0
- package/dist/frontend/lowering/thenables.js.map +1 -0
- package/dist/frontend/lowering/var-hoisting.js +37 -3
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
- package/dist/frontend/npm-static-builtin-aliases.js +65 -0
- package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
- package/dist/frontend/npm-static-bundled-chunks.d.ts +8 -1
- package/dist/frontend/npm-static-bundled-chunks.js +173 -2
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.test.js +112 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
- package/dist/frontend/npm-static-bundled-esm.js +224 -4
- package/dist/frontend/npm-static-bundled-esm.js.map +1 -1
- package/dist/frontend/npm-static-bundled-esm.test.js +129 -0
- package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -1
- package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
- package/dist/frontend/npm-static-enum-iife.js +280 -0
- package/dist/frontend/npm-static-enum-iife.js.map +1 -0
- package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
- package/dist/frontend/npm-static-enum-iife.test.js +116 -0
- package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
- 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 +16 -0
- package/dist/frontend/npm-static.js +93 -3
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.js +13 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +47 -0
- package/dist/frontend/package-shims.js +300 -0
- package/dist/frontend/package-shims.js.map +1 -0
- package/dist/frontend/pipeline.js +67 -1
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program.d.ts +21 -0
- package/dist/frontend/program.js +174 -14
- 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/resolve.js +13 -0
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/services.d.ts +12 -0
- package/dist/frontend/services.js +37 -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.d.ts +6 -5
- package/dist/frontend/ts7/program-host.js +12 -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 +18 -0
- package/dist/frontend/ts7/semantic-model.js +90 -16
- 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.d.ts +19 -4
- 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 +466 -47
- 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 +8 -0
- package/dist/index.js +453 -85
- package/dist/index.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +3 -2
- package/dist/ir/array-length-stability.js +22 -2
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +47 -1
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +41 -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 +187 -16
- 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 +14 -4
- package/dist/ir/integer-loop-facts.js +172 -32
- 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.d.ts +10 -1
- package/dist/ir/integer-ranges.js +122 -25
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +255 -1
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +17 -2
- package/dist/ir/ir.js +11 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-ic.d.ts +52 -0
- package/dist/ir/js-ic.js +199 -0
- package/dist/ir/js-ic.js.map +1 -0
- package/dist/ir/js-ic.test.d.ts +1 -0
- package/dist/ir/js-ic.test.js +148 -0
- package/dist/ir/js-ic.test.js.map +1 -0
- package/dist/ir/jsval.js +38 -4
- package/dist/ir/jsval.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +64 -5
- package/dist/ir/runtime-features.js +358 -101
- 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 +124 -70
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +77 -24
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +15 -2
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/ir-policy.js +11 -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 +22 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +33 -4
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache.js +3 -0
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.js +8 -1
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +10 -0
- 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 +22 -21
- package/shims/fs-extra/core/api.ts +1192 -0
- package/shims/fs-extra/index.ts +9 -0
- package/shims/undici/core/agent.ts +163 -0
- package/shims/undici/core/api.ts +93 -0
- package/shims/undici/core/client.ts +1304 -0
- package/shims/undici/core/connector.ts +157 -0
- package/shims/undici/core/diagnostics-types.ts +68 -0
- package/shims/undici/core/diagnostics.ts +16 -0
- package/shims/undici/core/dispatcher.ts +574 -0
- package/shims/undici/core/errors-v5.ts +22 -0
- package/shims/undici/core/errors-v7.ts +25 -0
- package/shims/undici/core/errors.ts +255 -0
- package/shims/undici/core/fetch.ts +635 -0
- package/shims/undici/core/pool.ts +280 -0
- package/shims/undici/core/readable.ts +268 -0
- package/shims/undici/core/request.ts +313 -0
- package/shims/undici/core/timers.ts +80 -0
- package/shims/undici/core/types.ts +167 -0
- package/shims/undici/core/util.ts +67 -0
- package/shims/undici/v5.ts +119 -0
- package/shims/undici/v7.ts +119 -0
- package/surface-manifest.json +20 -52
package/dist/index.js
CHANGED
|
@@ -10,21 +10,28 @@ import { commentOnlyReplay } from "./coverage/verdict-semantic.js";
|
|
|
10
10
|
import { llvmRefusalDiag, targetRefusalDiag } from "./backend/target-diagnostics.js";
|
|
11
11
|
import { compilePackedLibrary } from "./backend/library-pack.js";
|
|
12
12
|
import { InternalCompilerError } from "./errors.js";
|
|
13
|
-
import {
|
|
13
|
+
import { frontendProcessExecArgv } from "./frontend-process-args.js";
|
|
14
|
+
import { spawn } from "node:child_process";
|
|
15
|
+
import { createHash } from "node:crypto";
|
|
16
|
+
import { existsSync } from "node:fs";
|
|
17
|
+
import { copyFile, mkdir, mkdtemp, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
18
|
+
import { tmpdir } from "node:os";
|
|
14
19
|
import { basename, dirname, join, resolve } from "node:path";
|
|
20
|
+
import { fileURLToPath } from "node:url";
|
|
15
21
|
import { clearCcCaches, configuredTargetPlatform, } from "./backend/native-toolchain.js";
|
|
16
22
|
import { buildCacheRoot, prepareBuildCacheRoot, pruneBuildCache } from "./backend/build-cache.js";
|
|
17
23
|
import { CcCompileError, compileExternalC, compileExternalCLibrary, executableNativeEnvironmentFingerprint, mobileLibraryTarget, mobileTargetRefusal, resolveCc, } from "./backend/external-c.js";
|
|
18
|
-
import { emitLlvmModuleSource, LlvmUnsupportedError } from "./backend/llvm/emitter.js";
|
|
24
|
+
import { emitLlvmModuleSource, LlvmUnsupportedError, lowRegionTarget, } from "./backend/llvm/emitter.js";
|
|
19
25
|
import { inlineRcOption } from "./backend/llvm/shapes.js";
|
|
20
|
-
import { emitNativeArtifact, NativeCodegenError, writeLlvmSource, } from "./backend/native-codegen.js";
|
|
26
|
+
import { emitNativeArtifact, isLlvmFile, llvmInputBytes, NativeCodegenError, writeLlvmSource, } from "./backend/native-codegen.js";
|
|
21
27
|
import { nativePartitionPaths, nativeProgramPartitions } from "./backend/native-codegen-core.js";
|
|
22
28
|
import { privateSiblingPath } from "./backend/build-cache.js";
|
|
23
29
|
import { nativeCodegenTarget, nativeCodegenTargetRefusal } from "./backend/targets.js";
|
|
24
30
|
import { windowsSubsystemLinkerArgs } from "./backend/targets.js";
|
|
25
31
|
import { createNativeLinkInfo } from "./backend/native-link-info.js";
|
|
26
|
-
import { RuntimePackError
|
|
32
|
+
import { RuntimePackError } from "./backend/runtime-pack.js";
|
|
27
33
|
import { createNativeLinkPlan } from "./backend/link-plan.js";
|
|
34
|
+
import { nativeProfileKey, nativeProfileRefusal, } from "./backend/native-profile.js";
|
|
28
35
|
import { executableLinkerEnvironmentFingerprint, linkNativeExecutable, platformLinkerSupportsPersistentCache, resolvePlatformLinker, } from "./backend/linker.js";
|
|
29
36
|
import { splitLlvmLibraryProgram, splitLlvmProgram } from "./backend/llvm/split.js";
|
|
30
37
|
import { emitLibraryIdentityLines, replaceLibraryIdentity, stripLibraryIdentity, } from "./backend/library-identity-markers.js";
|
|
@@ -35,24 +42,27 @@ import { canonicalModuleGraph, clearSidecarCaches, compilerReleaseVersion, libra
|
|
|
35
42
|
import {} from "./ir/ir.js";
|
|
36
43
|
import { moduleRuntimeFeatures } from "./ir/runtime-features.js";
|
|
37
44
|
import { serializeModuleParts } from "./ir/serialize.js";
|
|
38
|
-
import { writeTextParts } from "./text-parts.js";
|
|
45
|
+
import { readTextParts, writeTextParts } from "./text-parts.js";
|
|
39
46
|
import { validateModule } from "./ir/validate.js";
|
|
40
47
|
import { loadProgram } from "./frontend/program-node.js";
|
|
41
48
|
import { runFrontend } from "./frontend/pipeline.js";
|
|
42
|
-
import { provenanceSources } from "./frontend/provenance-registry.js";
|
|
49
|
+
import { provenanceSources, setProvenanceSources, } from "./frontend/provenance-registry.js";
|
|
43
50
|
import { clearResolveCaches } from "./frontend/resolve.js";
|
|
44
51
|
import { loadFfiProfile } from "./ffi/ffi-manifest.js";
|
|
45
52
|
import { executableLinkFeatures } from "./backend/executable-features.js";
|
|
46
53
|
import { youngNurseryRequested } from "./backend/young-nursery.js";
|
|
47
|
-
import { FrontendInputTracker, trackedReadFile } from "./frontend/input-tracker.js";
|
|
54
|
+
import { FrontendInputTracker, trackedReadFile, } from "./frontend/input-tracker.js";
|
|
48
55
|
import { libraryFrontendImplementationFingerprint, publishEarlyLibraryCache, readEarlyLibraryCache, readSemanticLibraryCache, } from "./library/library-cache.js";
|
|
49
|
-
import { publishEarlyExecutableCache, publishEarlyExecutableRoute, readEarlyExecutableCache, } from "./executable/executable-cache.js";
|
|
56
|
+
import { hasEarlyExecutableNativeBuild, publishEarlyExecutableCache, publishEarlyExecutableRoute, readEarlyExecutableCache, recordEarlyExecutableNativeBuild, } from "./executable/executable-cache.js";
|
|
50
57
|
import { compilerImplementationIdentity } from "./library/compiler-self-identity.js";
|
|
58
|
+
import { isPerformanceCode } from "./diagnostics/dynamic-tier.js";
|
|
51
59
|
export const VERSION = "0.0.1";
|
|
52
60
|
export { EXTERNAL_OBJECT_ABI_STABILITY, RUNTIME_ABI_MARKER, RUNTIME_ABI_VERSION, } from "./backend/runtime-abi.js";
|
|
53
61
|
export { InternalCompilerError } from "./errors.js";
|
|
54
62
|
export { compileExternalC as compileC, compileExternalC, runtimeSrcDir, } from "./backend/external-c.js";
|
|
55
63
|
export { warmNativeCaches } from "./backend/warm-cache.js";
|
|
64
|
+
export { mergeNativeProfiles as mergeProfiles } from "./backend/native-codegen.js";
|
|
65
|
+
export { collectGarbageUnderHeapPressure } from "./heap-collection.js";
|
|
56
66
|
export { ANDROID_MIN_API, IPHONEOS_MIN_VERSION, isAndroidTarget, isIosTarget, isMobileTarget, mobileLibraryTarget, mobileTargetRefusal, } from "./backend/external-c.js";
|
|
57
67
|
export { emitLlvmModule } from "./backend/llvm/emitter.js";
|
|
58
68
|
export { renderDiagnostics, renderDiagnostics as renderAll, renderDiagnostic, } from "./diagnostics/render.js";
|
|
@@ -143,8 +153,21 @@ export async function compile(entryPath, opts) {
|
|
|
143
153
|
clearCompileSessionCaches();
|
|
144
154
|
const frontendInputs = new FrontendInputTracker();
|
|
145
155
|
const warnings = { warnings: [], sourceTexts: null };
|
|
146
|
-
|
|
147
|
-
|
|
156
|
+
// compileTracked starts it for a build with no earlier build of the same invocation.
|
|
157
|
+
const frontendProcess = preparesInChildProcess(opts) ? new FrontendProcess() : undefined;
|
|
158
|
+
try {
|
|
159
|
+
const result = await frontendInputs.run(() => compileTracked(entryPath, opts, frontendInputs, warnings, frontendProcess));
|
|
160
|
+
return withCompileWarnings(result, warnings);
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
frontendProcess?.release();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/** The build's performance warnings (SC61xx), stored with its cache entry
|
|
167
|
+
* so a cache hit repeats them. */
|
|
168
|
+
function performanceWarnings(sink) {
|
|
169
|
+
const performance = (sink?.warnings ?? []).filter((d) => isPerformanceCode(d.code));
|
|
170
|
+
return performance.length === 0 ? {} : { performance };
|
|
148
171
|
}
|
|
149
172
|
function withCompileWarnings(result, sink) {
|
|
150
173
|
if (!result.ok || sink.warnings.length === 0)
|
|
@@ -176,7 +199,10 @@ function executableNativeFeatures(mod, backend, optimization) {
|
|
|
176
199
|
...executableLinkFeatures(mod),
|
|
177
200
|
};
|
|
178
201
|
}
|
|
179
|
-
async function compileExecutableNative(features, llvmPath, outPath, sanitize, ffi, windowsSubsystem, strip, programSplit = null, programObjectDependencies = [], onArtifactReady, programPartitions = []
|
|
202
|
+
async function compileExecutableNative(features, llvmPath, outPath, sanitize, ffi, windowsSubsystem, strip, programSplit = null, programObjectDependencies = [], onArtifactReady, programPartitions = [], profileGenerate = false,
|
|
203
|
+
/** The kept LLVM text's shared name, when `llvmPath` is the build's private copy of it
|
|
204
|
+
* (BuildSources): the spelling clang sees and native cache keys name. */
|
|
205
|
+
llvmVisiblePath) {
|
|
180
206
|
const programIsObject = /\.(?:o|obj)$/.test(llvmPath);
|
|
181
207
|
const runtimePackTarget = programIsObject && !sanitize ? nativeCodegenTarget() : null;
|
|
182
208
|
if (runtimePackTarget !== null) {
|
|
@@ -190,6 +216,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
190
216
|
optimization: features.optimization ?? "release",
|
|
191
217
|
...(strip ? { strip: true } : {}),
|
|
192
218
|
...(windowsSubsystem === undefined ? {} : { windowsSubsystem }),
|
|
219
|
+
...(profileGenerate ? { profileGenerate: true } : {}),
|
|
193
220
|
programObjectDependencies,
|
|
194
221
|
});
|
|
195
222
|
const cacheableLinker = onArtifactReady !== undefined &&
|
|
@@ -212,7 +239,9 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
212
239
|
if (programIsObject)
|
|
213
240
|
throw new InternalCompilerError("program objects must link against a precompiled runtime pack");
|
|
214
241
|
await compileExternalC({
|
|
215
|
-
|
|
242
|
+
...(llvmVisiblePath === undefined || llvmVisiblePath === llvmPath
|
|
243
|
+
? { cPath: llvmPath }
|
|
244
|
+
: { cPath: llvmVisiblePath, cSourcePath: llvmPath }),
|
|
216
245
|
outPath,
|
|
217
246
|
cacheIdentity: "scriptc-generated-v1",
|
|
218
247
|
...optimizationField(features.optimization),
|
|
@@ -242,13 +271,18 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
242
271
|
dynAsync: features.dynAsync,
|
|
243
272
|
...(features.dynTier ? { dynTier: true } : {}),
|
|
244
273
|
...(features.streamDyn ? { streamDyn: true } : {}),
|
|
274
|
+
...(features.handleProps ? { handleProps: true } : {}),
|
|
275
|
+
...(features.dynForAwait ? { dynForAwait: true } : {}),
|
|
245
276
|
...(features.eventsOnceSignal ? { eventsOnceSignal: true } : {}),
|
|
277
|
+
...(features.dynBuffer ? { dynBuffer: true } : {}),
|
|
278
|
+
...(features.builtinValues ? { builtinValues: true } : {}),
|
|
246
279
|
events: features.events,
|
|
247
280
|
emitter: features.emitter,
|
|
248
281
|
symbol: features.symbol,
|
|
249
282
|
bigint: features.bigint,
|
|
250
283
|
searchParams: features.searchParams,
|
|
251
284
|
qs: features.qs,
|
|
285
|
+
utilPromisify: features.utilPromisify,
|
|
252
286
|
dynBuiltinClass: features.dynBuiltinClass,
|
|
253
287
|
dynBuiltinStream: features.dynBuiltinStream,
|
|
254
288
|
parseArgs: features.parseArgs,
|
|
@@ -258,6 +292,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
258
292
|
http2: features.http2,
|
|
259
293
|
dgram: features.dgram,
|
|
260
294
|
dnsPromises: features.dnsPromises,
|
|
295
|
+
dgramDyn: features.dgramDyn,
|
|
261
296
|
watch: features.watch,
|
|
262
297
|
foreignFfi: features.foreignFfi,
|
|
263
298
|
...(features.workers ? { workers: true } : {}),
|
|
@@ -266,6 +301,10 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
266
301
|
tls: features.tls,
|
|
267
302
|
tlsCa: features.tlsCa,
|
|
268
303
|
cipher: features.cipher,
|
|
304
|
+
ecdh: features.ecdh,
|
|
305
|
+
dh: features.dh,
|
|
306
|
+
pki: features.pki,
|
|
307
|
+
ed25519: features.ed25519,
|
|
269
308
|
webcrypto: features.webcrypto,
|
|
270
309
|
perfLoop: features.perfLoop,
|
|
271
310
|
...(onArtifactReady === undefined ? {} : { onArtifactReady }),
|
|
@@ -278,7 +317,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
278
317
|
}),
|
|
279
318
|
});
|
|
280
319
|
}
|
|
281
|
-
async function emitNativeProgramObject(entryPath, opts, llvm,
|
|
320
|
+
async function emitNativeProgramObject(entryPath, opts, llvm, profile) {
|
|
282
321
|
const stem = basename(entryPath).replace(/\.(ts|mts|cts|js|mjs|cjs)$/, "");
|
|
283
322
|
const artifactPath = join(opts.outDir, `${stem}.helper.o`);
|
|
284
323
|
// compileExecutableNative recognizes object inputs by suffix. The random
|
|
@@ -287,25 +326,8 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features) {
|
|
|
287
326
|
const linkPath = `${privateSiblingPath(artifactPath, "native-program-object")}.o`;
|
|
288
327
|
// The validated program-object artifact is a single object by contract.
|
|
289
328
|
const target = nativeCodegenTarget();
|
|
290
|
-
const llvmBytes = (
|
|
329
|
+
const llvmBytes = llvmInputBytes(llvm);
|
|
291
330
|
const partitions = opts.nativeProgramObject === true || target === null ? 1 : nativeProgramPartitions(llvmBytes);
|
|
292
|
-
// Optimized programs import small runtime functions from the bitcode of
|
|
293
|
-
// the exact runtime units they link, so LLVM can inline across the
|
|
294
|
-
// boundary. Release units ship only the bodies that need none of their
|
|
295
|
-
// unit-local state, which keeps the import cheap; speed units promote
|
|
296
|
-
// that state and offer more. Every partition reads the bitcode again, so
|
|
297
|
-
// release imports only into programs small enough for one partition: in
|
|
298
|
-
// larger ones the build-time and size cost outgrows the gain.
|
|
299
|
-
const runtimeBitcode = opts.sanitize !== true &&
|
|
300
|
-
target !== null &&
|
|
301
|
-
(opts.optimization === "speed" ||
|
|
302
|
-
(opts.optimization !== "dev" && nativeProgramPartitions(llvmBytes) === 1))
|
|
303
|
-
? await loadRuntimeBitcode({
|
|
304
|
-
target,
|
|
305
|
-
features,
|
|
306
|
-
optimization: opts.optimization === "speed" ? "speed" : "release",
|
|
307
|
-
})
|
|
308
|
-
: null;
|
|
309
331
|
try {
|
|
310
332
|
const artifact = await emitNativeArtifact({
|
|
311
333
|
outputPath: linkPath,
|
|
@@ -315,15 +337,13 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features) {
|
|
|
315
337
|
optimization: opts.optimization === "dev" ? "0" : "2",
|
|
316
338
|
...(opts.sanitize === undefined ? {} : { sanitize: opts.sanitize }),
|
|
317
339
|
partitions,
|
|
318
|
-
...(
|
|
319
|
-
? {}
|
|
320
|
-
: { importBitcode: { paths: runtimeBitcode.paths, digests: runtimeBitcode.digests } }),
|
|
340
|
+
...(profile === undefined ? {} : { profile }),
|
|
321
341
|
});
|
|
322
342
|
return {
|
|
323
343
|
linkPath,
|
|
324
344
|
partitionPaths: artifact.outputPaths.slice(1),
|
|
325
345
|
artifactPath,
|
|
326
|
-
dependencies:
|
|
346
|
+
dependencies: artifact.dependencies,
|
|
327
347
|
};
|
|
328
348
|
}
|
|
329
349
|
catch (error) {
|
|
@@ -334,6 +354,23 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features) {
|
|
|
334
354
|
async function removeNativeProgramObject(linkPath, partitionPaths) {
|
|
335
355
|
await Promise.all([linkPath, ...partitionPaths].map((path) => rm(path, { force: true }).catch(() => undefined)));
|
|
336
356
|
}
|
|
357
|
+
/** The request's profile. An indexed profile is read here so every cache keys
|
|
358
|
+
* its bytes. */
|
|
359
|
+
async function readNativeProfile(opts) {
|
|
360
|
+
if (opts.profileGenerate !== undefined)
|
|
361
|
+
return { generate: opts.profileGenerate };
|
|
362
|
+
if (opts.profileUse === undefined)
|
|
363
|
+
return undefined;
|
|
364
|
+
const path = resolve(opts.profileUse);
|
|
365
|
+
let bytes;
|
|
366
|
+
try {
|
|
367
|
+
bytes = await readFile(path);
|
|
368
|
+
}
|
|
369
|
+
catch (err) {
|
|
370
|
+
throw new Error(`cannot read --profile-use file ${path}: ${err instanceof Error ? err.message : String(err)}`);
|
|
371
|
+
}
|
|
372
|
+
return { use: { path, digest: createHash("sha256").update(bytes).digest("hex") } };
|
|
373
|
+
}
|
|
337
374
|
function usesPrecompiledRuntimePack(opts, backend) {
|
|
338
375
|
if (backend !== "llvm" || opts.sanitize === true)
|
|
339
376
|
return false;
|
|
@@ -375,6 +412,7 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
375
412
|
wasi: buildPlatform === "wasi",
|
|
376
413
|
runtimeAbiMarker: outputKind === "obj",
|
|
377
414
|
objectAudit: opts.sanitize === true,
|
|
415
|
+
lowRegion: lowRegionTarget(buildPlatform, opts.sanitize === true),
|
|
378
416
|
...(opts.sanitize === true ? { wasmBoundsChecks: true } : {}),
|
|
379
417
|
...inlineRcOption(opts.optimization, opts.sanitize === true),
|
|
380
418
|
});
|
|
@@ -433,6 +471,8 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
433
471
|
}
|
|
434
472
|
await mkdir(opts.outDir, { recursive: true });
|
|
435
473
|
const llvmPath = defaultSourcePaths.llvm;
|
|
474
|
+
// The extension keeps clang reading the copy as LLVM IR rather than as a linker input.
|
|
475
|
+
const llvmSourcePath = `${privateSiblingPath(llvmPath, "llvm")}.ll`;
|
|
436
476
|
const backend = "llvm";
|
|
437
477
|
const useRuntimePack = opts.nativeProgramObject === true || usesPrecompiledRuntimePack(opts, backend);
|
|
438
478
|
let llvmSource;
|
|
@@ -444,6 +484,7 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
444
484
|
wasi: buildPlatform === "wasi",
|
|
445
485
|
runtimeAbiMarker: useRuntimePack,
|
|
446
486
|
objectAudit: opts.sanitize === true,
|
|
487
|
+
lowRegion: lowRegionTarget(buildPlatform, opts.sanitize === true),
|
|
447
488
|
...(opts.sanitize === true ? { wasmBoundsChecks: true } : {}),
|
|
448
489
|
...inlineRcOption(opts.optimization, opts.sanitize === true),
|
|
449
490
|
...(opts.detachedExit === true ? { detachedExit: true } : {}),
|
|
@@ -455,12 +496,14 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
455
496
|
return { ok: false, diagnostics: [llvmRefusalDiag(err, entryPath)], sourceTexts };
|
|
456
497
|
}
|
|
457
498
|
timing("llvm-emit");
|
|
458
|
-
await writeLlvmSource(
|
|
499
|
+
await writeLlvmSource(llvmSourcePath, llvmSource);
|
|
459
500
|
timing("llvm-write");
|
|
460
501
|
let irPath;
|
|
502
|
+
let irSourcePath;
|
|
461
503
|
if (opts.emitIr) {
|
|
462
504
|
irPath = defaultSourcePaths.ir;
|
|
463
|
-
|
|
505
|
+
irSourcePath = privateSiblingPath(irPath, "ir");
|
|
506
|
+
await writeTextParts(irSourcePath, serializeModuleParts(mod));
|
|
464
507
|
}
|
|
465
508
|
const nativeFeatures = executableNativeFeatures(mod, backend, opts.optimization ?? "release");
|
|
466
509
|
timing("link-features");
|
|
@@ -472,10 +515,243 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
472
515
|
? splitLlvmProgram(llvmSource)
|
|
473
516
|
: null;
|
|
474
517
|
timing("llvm-split");
|
|
475
|
-
return {
|
|
518
|
+
return {
|
|
519
|
+
llvmSource,
|
|
520
|
+
llvmPath,
|
|
521
|
+
llvmSourcePath,
|
|
522
|
+
irPath,
|
|
523
|
+
irSourcePath,
|
|
524
|
+
nativeFeatures,
|
|
525
|
+
programSplit,
|
|
526
|
+
sourceTexts,
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
/** Moves a build's private copies to the shared names, or drops them when that fails. */
|
|
530
|
+
async function installBuildSources(sources) {
|
|
531
|
+
const install = async (source, destination, current) => {
|
|
532
|
+
if (source === undefined || destination === undefined || source === destination)
|
|
533
|
+
return;
|
|
534
|
+
if (current === true)
|
|
535
|
+
await rm(source, { force: true });
|
|
536
|
+
else
|
|
537
|
+
await rename(source, destination).catch(() => rm(source, { force: true }));
|
|
538
|
+
};
|
|
539
|
+
await Promise.all([
|
|
540
|
+
install(sources.llvmSourcePath, sources.llvmPath, sources.llvmPathCurrent),
|
|
541
|
+
install(sources.irSourcePath, sources.irPath, sources.irPathCurrent),
|
|
542
|
+
]);
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* A build that compiles the LLVM text with the C driver (no precompiled runtime pack) records the
|
|
546
|
+
* output directory in its native cache proofs, so that directory has to be in its final state before
|
|
547
|
+
* the native build starts. The build therefore installs the shared names first and compiles and
|
|
548
|
+
* caches copies in a private directory outside the output directory. Returns that directory and the
|
|
549
|
+
* copies.
|
|
550
|
+
*/
|
|
551
|
+
async function stageDriverBuildSources(sources) {
|
|
552
|
+
const dir = await mkdtemp(join(tmpdir(), "scriptc-program-"));
|
|
553
|
+
const llvmSourcePath = join(dir, basename(sources.llvmPath));
|
|
554
|
+
const irSourcePath = sources.irPath === undefined || sources.irSourcePath === undefined
|
|
555
|
+
? undefined
|
|
556
|
+
: join(dir, basename(sources.irPath));
|
|
557
|
+
try {
|
|
558
|
+
await Promise.all([
|
|
559
|
+
copyFile(sources.llvmSourcePath, llvmSourcePath),
|
|
560
|
+
irSourcePath === undefined || sources.irSourcePath === undefined
|
|
561
|
+
? undefined
|
|
562
|
+
: copyFile(sources.irSourcePath, irSourcePath),
|
|
563
|
+
]);
|
|
564
|
+
}
|
|
565
|
+
catch (err) {
|
|
566
|
+
await rm(dir, { recursive: true, force: true });
|
|
567
|
+
throw err;
|
|
568
|
+
}
|
|
569
|
+
await installBuildSources(sources);
|
|
570
|
+
return {
|
|
571
|
+
dir,
|
|
572
|
+
sources: { llvmPath: sources.llvmPath, llvmSourcePath, irPath: sources.irPath, irSourcePath },
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* The child process that prepares an executable build's input: frontend, lowering and LLVM emission
|
|
577
|
+
* (`runFrontendProcess`). Node's heap keeps the pages a build's frontend used for the life of the
|
|
578
|
+
* process, so running them in a process of their own leaves the native helper the memory they took.
|
|
579
|
+
*/
|
|
580
|
+
const frontendProcessEntry = fileURLToPath(new URL("./frontend-process.js", import.meta.url));
|
|
581
|
+
/**
|
|
582
|
+
* Whether `prepareExecutableInputInChild` may prepare this build: optimized executables, when the
|
|
583
|
+
* compiler runs from its built files. Development builds split the LLVM text in this process, and
|
|
584
|
+
* SCRIPTC_FRONTEND_PROCESS=0 keeps the frontend in-process.
|
|
585
|
+
*
|
|
586
|
+
* compileTracked starts the process only when no earlier build of the same invocation emitted its
|
|
587
|
+
* native program object (`hasEarlyExecutableNativeBuild`). A rebuild finds most native partitions
|
|
588
|
+
* in the helper's cache, so its memory peaks in the frontend, and the parent process would add to
|
|
589
|
+
* that peak.
|
|
590
|
+
*/
|
|
591
|
+
function preparesInChildProcess(opts) {
|
|
592
|
+
return (process.env["SCRIPTC_FRONTEND_PROCESS"] !== "0" &&
|
|
593
|
+
(opts.outputKind ?? "exe") === "exe" &&
|
|
594
|
+
(opts.optimization ?? "release") !== "dev" &&
|
|
595
|
+
existsSync(frontendProcessEntry));
|
|
476
596
|
}
|
|
477
|
-
|
|
597
|
+
/**
|
|
598
|
+
* The frontend process (frontend-process.ts) of one compile. `start` launches it; it then waits on
|
|
599
|
+
* its stdin for the paths of a request and its result (`run`), and exits once its stdin closes
|
|
600
|
+
* without them (`release`).
|
|
601
|
+
*/
|
|
602
|
+
class FrontendProcess {
|
|
603
|
+
child;
|
|
604
|
+
exited;
|
|
605
|
+
sent = false;
|
|
606
|
+
/** Whether `start` launched the process. */
|
|
607
|
+
get started() {
|
|
608
|
+
return this.child !== undefined;
|
|
609
|
+
}
|
|
610
|
+
start() {
|
|
611
|
+
if (this.child !== undefined)
|
|
612
|
+
return;
|
|
613
|
+
const execArgv = frontendProcessExecArgv(process.execArgv);
|
|
614
|
+
const child = spawn(process.execPath, [...execArgv, frontendProcessEntry], {
|
|
615
|
+
stdio: ["pipe", "inherit", "inherit"],
|
|
616
|
+
});
|
|
617
|
+
this.exited = new Promise((resolveExit) => {
|
|
618
|
+
child.on("error", () => resolveExit(null));
|
|
619
|
+
child.on("exit", (code) => resolveExit(code));
|
|
620
|
+
});
|
|
621
|
+
// A failed start surfaces as a failed run; the build then prepares its input in-process.
|
|
622
|
+
child.stdin.on("error", () => undefined);
|
|
623
|
+
this.child = child;
|
|
624
|
+
}
|
|
625
|
+
/** Sends the request at `requestPath`; resolves with the process's exit code. */
|
|
626
|
+
run(requestPath, resultPath) {
|
|
627
|
+
if (this.child === undefined || this.exited === undefined || this.sent)
|
|
628
|
+
return Promise.resolve(null);
|
|
629
|
+
this.sent = true;
|
|
630
|
+
this.child.stdin.end(`${requestPath}\n${resultPath}\n`);
|
|
631
|
+
return this.exited;
|
|
632
|
+
}
|
|
633
|
+
/** Lets the process exit if no request was sent. */
|
|
634
|
+
release() {
|
|
635
|
+
if (this.child === undefined || this.sent)
|
|
636
|
+
return;
|
|
637
|
+
this.sent = true;
|
|
638
|
+
this.child.stdin.end();
|
|
639
|
+
// The build is done with it: this process need not wait for it to exit.
|
|
640
|
+
this.child.unref();
|
|
641
|
+
this.child.stdin.unref?.();
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
/**
|
|
645
|
+
* `prepareExecutableInput` in the frontend process, with the LLVM text passed on as its file. The
|
|
646
|
+
* process's frontend inputs join `frontendInputs` and its warnings `warningSink`. If it fails, the
|
|
647
|
+
* input is prepared here, so the build reports the same errors.
|
|
648
|
+
*/
|
|
649
|
+
async function prepareExecutableInputInChild(frontendProcess, entryPath, opts, ffi, buildPlatform, timing, timingClock, frontendInputs, warningSink) {
|
|
650
|
+
await mkdir(opts.outDir, { recursive: true });
|
|
651
|
+
const requestPath = privateSiblingPath(join(opts.outDir, "frontend-request.json"), "frontend");
|
|
652
|
+
const resultPath = privateSiblingPath(join(opts.outDir, "frontend-result.json"), "frontend");
|
|
653
|
+
let result = { kind: "failed" };
|
|
654
|
+
try {
|
|
655
|
+
const request = {
|
|
656
|
+
entryPath,
|
|
657
|
+
opts,
|
|
658
|
+
buildPlatform,
|
|
659
|
+
timing: timingClock,
|
|
660
|
+
provenance: provenanceSources(),
|
|
661
|
+
};
|
|
662
|
+
await writeFile(requestPath, JSON.stringify(request), { mode: 0o600 });
|
|
663
|
+
const exitCode = await frontendProcess.run(requestPath, resultPath);
|
|
664
|
+
if (exitCode === 0)
|
|
665
|
+
result = JSON.parse(await readFile(resultPath, "utf8"));
|
|
666
|
+
}
|
|
667
|
+
catch {
|
|
668
|
+
result = { kind: "failed" };
|
|
669
|
+
}
|
|
670
|
+
finally {
|
|
671
|
+
await rm(requestPath, { force: true });
|
|
672
|
+
await rm(resultPath, { force: true });
|
|
673
|
+
}
|
|
674
|
+
if (result.kind === "failed")
|
|
675
|
+
return prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timing, warningSink);
|
|
676
|
+
timing("frontend-process");
|
|
677
|
+
for (const probe of result.frontend.probes)
|
|
678
|
+
frontendInputs.record(probe);
|
|
679
|
+
if (!result.frontend.stable)
|
|
680
|
+
frontendInputs.markUnstable();
|
|
681
|
+
const sourceTexts = new Map(result.sourceTexts);
|
|
682
|
+
if (warningSink !== undefined && result.warnings.length > 0) {
|
|
683
|
+
warningSink.warnings = result.warnings;
|
|
684
|
+
warningSink.sourceTexts = sourceTexts;
|
|
685
|
+
}
|
|
686
|
+
if (result.kind === "diagnostics")
|
|
687
|
+
return { ok: false, diagnostics: result.diagnostics, sourceTexts };
|
|
688
|
+
return {
|
|
689
|
+
llvmSource: { file: result.nativeInputPath, bytes: result.llvmBytes },
|
|
690
|
+
llvmPath: result.llvmPath,
|
|
691
|
+
llvmSourcePath: result.nativeInputPath,
|
|
692
|
+
irPath: result.irPath,
|
|
693
|
+
irSourcePath: result.irSourcePath,
|
|
694
|
+
nativeFeatures: result.nativeFeatures,
|
|
695
|
+
programSplit: null,
|
|
696
|
+
sourceTexts,
|
|
697
|
+
};
|
|
698
|
+
}
|
|
699
|
+
/**
|
|
700
|
+
* The frontend process (frontend-process.ts): prepares the executable input of the request at
|
|
701
|
+
* `requestPath` as `compileTracked` would in-process, and writes what it prepared, without the LLVM
|
|
702
|
+
* text, to `resultPath`.
|
|
703
|
+
*/
|
|
704
|
+
export async function runFrontendProcess(requestPath, resultPath) {
|
|
705
|
+
const request = JSON.parse(await readFile(requestPath, "utf8"));
|
|
706
|
+
clearCompileSessionCaches();
|
|
707
|
+
setProvenanceSources(request.provenance);
|
|
708
|
+
const frontendInputs = new FrontendInputTracker();
|
|
709
|
+
const warnings = { warnings: [], sourceTexts: null };
|
|
710
|
+
let result = { kind: "failed" };
|
|
711
|
+
try {
|
|
712
|
+
let ffi = null;
|
|
713
|
+
if (request.opts.ffiProfilePath !== undefined) {
|
|
714
|
+
const loaded = loadFfiProfile(resolve(request.opts.ffiProfilePath));
|
|
715
|
+
if (!loaded.ok)
|
|
716
|
+
throw new InternalCompilerError("the FFI profile could not be reloaded");
|
|
717
|
+
ffi = loaded.profile;
|
|
718
|
+
}
|
|
719
|
+
const prepared = await frontendInputs.run(() => prepareExecutableInput(request.entryPath, request.opts, ffi, request.buildPlatform, compilationTiming(request.timing), warnings));
|
|
720
|
+
const frontend = frontendInputs.snapshot();
|
|
721
|
+
if (!("ok" in prepared)) {
|
|
722
|
+
if (isLlvmFile(prepared.llvmSource))
|
|
723
|
+
throw new InternalCompilerError("in-process preparation returned LLVM text as a file");
|
|
724
|
+
result = {
|
|
725
|
+
kind: "prepared",
|
|
726
|
+
llvmPath: prepared.llvmPath,
|
|
727
|
+
nativeInputPath: prepared.llvmSourcePath,
|
|
728
|
+
llvmBytes: llvmInputBytes(prepared.llvmSource),
|
|
729
|
+
irPath: prepared.irPath,
|
|
730
|
+
irSourcePath: prepared.irSourcePath,
|
|
731
|
+
nativeFeatures: prepared.nativeFeatures,
|
|
732
|
+
sourceTexts: [...prepared.sourceTexts],
|
|
733
|
+
warnings: warnings.warnings,
|
|
734
|
+
frontend,
|
|
735
|
+
};
|
|
736
|
+
}
|
|
737
|
+
else if (!prepared.ok) {
|
|
738
|
+
result = {
|
|
739
|
+
kind: "diagnostics",
|
|
740
|
+
diagnostics: prepared.diagnostics,
|
|
741
|
+
sourceTexts: [...prepared.sourceTexts],
|
|
742
|
+
warnings: warnings.warnings,
|
|
743
|
+
frontend,
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
catch {
|
|
748
|
+
result = { kind: "failed" };
|
|
749
|
+
}
|
|
750
|
+
await writeFile(resultPath, JSON.stringify(result), { mode: 0o600 });
|
|
751
|
+
}
|
|
752
|
+
async function compileTracked(entryPath, opts, frontendInputs, warningSink, frontendProcess) {
|
|
478
753
|
const timing = compilationTiming();
|
|
754
|
+
const timingStart = Date.now();
|
|
479
755
|
entryPath = resolve(entryPath);
|
|
480
756
|
const outputKind = opts.outputKind ?? "exe";
|
|
481
757
|
if ((opts.backend !== undefined && opts.backend !== "llvm") ||
|
|
@@ -650,22 +926,35 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
650
926
|
sourceTexts: new Map(),
|
|
651
927
|
};
|
|
652
928
|
}
|
|
929
|
+
const profileRefusal = nativeProfileRefusal({
|
|
930
|
+
...opts,
|
|
931
|
+
outputKind,
|
|
932
|
+
optimization: opts.optimization ?? "release",
|
|
933
|
+
sanitize: opts.sanitize ?? false,
|
|
934
|
+
platform: buildPlatform,
|
|
935
|
+
});
|
|
936
|
+
let profile;
|
|
937
|
+
try {
|
|
938
|
+
if (profileRefusal !== null)
|
|
939
|
+
throw new Error(profileRefusal);
|
|
940
|
+
profile = await readNativeProfile(opts);
|
|
941
|
+
}
|
|
942
|
+
catch (err) {
|
|
943
|
+
return {
|
|
944
|
+
ok: false,
|
|
945
|
+
diagnostics: [
|
|
946
|
+
nativeCodegenDiag("SC3002", err instanceof Error ? err.message : String(err), entryPath),
|
|
947
|
+
],
|
|
948
|
+
sourceTexts: new Map(),
|
|
949
|
+
};
|
|
950
|
+
}
|
|
653
951
|
const cacheRoot = outputKind === "exe" && provenanceSources() === null
|
|
654
952
|
? await prepareBuildCacheRoot(buildCacheRoot())
|
|
655
953
|
: null;
|
|
656
954
|
let earlyCacheOptions = null;
|
|
657
955
|
if (outputKind === "exe") {
|
|
658
956
|
const helperObjectRoute = opts.nativeProgramObject === true || usesPrecompiledRuntimePack(opts, "llvm");
|
|
659
|
-
|
|
660
|
-
// the same cache key. Start both before waiting so edits do not pay their
|
|
661
|
-
// filesystem and subprocess latency serially.
|
|
662
|
-
const [implementation, nativeEnvironment] = await Promise.all([
|
|
663
|
-
compilerImplementationIdentity(),
|
|
664
|
-
helperObjectRoute
|
|
665
|
-
? executableLinkerEnvironmentFingerprint(process.env, nativeCodegenTarget()?.defaultLinker)
|
|
666
|
-
: executableNativeEnvironmentFingerprint(),
|
|
667
|
-
]);
|
|
668
|
-
earlyCacheOptions = {
|
|
957
|
+
const routeOptions = {
|
|
669
958
|
entryPath,
|
|
670
959
|
outDir: opts.outDir,
|
|
671
960
|
outPath: opts.outPath,
|
|
@@ -676,6 +965,7 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
676
965
|
...(opts.strip ? { strip: true } : {}),
|
|
677
966
|
...(opts.windowsSubsystem === "gui" ? { windowsSubsystem: "gui" } : {}),
|
|
678
967
|
...(opts.detachedExit === true ? { detachedExit: true } : {}),
|
|
968
|
+
...(profile === undefined ? {} : { profile: nativeProfileKey(profile) }),
|
|
679
969
|
...checkerField(),
|
|
680
970
|
...(youngNurseryRequested() ? { youngNursery: true } : {}),
|
|
681
971
|
npmStatic: opts.npmStatic ?? null,
|
|
@@ -692,8 +982,25 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
692
982
|
? resolvePlatformLinker(process.env, nativeCodegenTarget()?.defaultLinker)
|
|
693
983
|
: (process.env["SCRIPTC_CC"] ?? "clang"),
|
|
694
984
|
],
|
|
695
|
-
nativeEnvironment,
|
|
696
985
|
nodeVersion: process.version,
|
|
986
|
+
};
|
|
987
|
+
// The frontend process prepares the first build of an invocation (preparesInChildProcess).
|
|
988
|
+
// Started here, it loads the compiler while this process computes the rest of the cache key.
|
|
989
|
+
if (frontendProcess !== undefined &&
|
|
990
|
+
!(await hasEarlyExecutableNativeBuild(cacheRoot, routeOptions)))
|
|
991
|
+
frontendProcess.start();
|
|
992
|
+
// Package content and native driver discovery are independent inputs to
|
|
993
|
+
// the same cache key. Start both before waiting so edits do not pay their
|
|
994
|
+
// filesystem and subprocess latency serially.
|
|
995
|
+
const [implementation, nativeEnvironment] = await Promise.all([
|
|
996
|
+
compilerImplementationIdentity(),
|
|
997
|
+
helperObjectRoute
|
|
998
|
+
? executableLinkerEnvironmentFingerprint(process.env, nativeCodegenTarget()?.defaultLinker)
|
|
999
|
+
: executableNativeEnvironmentFingerprint(),
|
|
1000
|
+
]);
|
|
1001
|
+
earlyCacheOptions = {
|
|
1002
|
+
...routeOptions,
|
|
1003
|
+
nativeEnvironment,
|
|
697
1004
|
implementation: implementation.digest,
|
|
698
1005
|
implementationDependencies: implementation.dependencies,
|
|
699
1006
|
};
|
|
@@ -706,6 +1013,12 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
706
1013
|
if (earlyCacheOptions === null) {
|
|
707
1014
|
throw new InternalCompilerError("executable cache hit without executable cache options");
|
|
708
1015
|
}
|
|
1016
|
+
// A cached build repeats its performance warning (SC6101): the code it
|
|
1017
|
+
// names is just as untyped as when it was built.
|
|
1018
|
+
if (warningSink !== undefined && earlyHit.performance !== undefined) {
|
|
1019
|
+
warningSink.warnings = earlyHit.performance;
|
|
1020
|
+
warningSink.sourceTexts = new Map();
|
|
1021
|
+
}
|
|
709
1022
|
const executableCacheOptions = earlyCacheOptions;
|
|
710
1023
|
// Route/proof metadata is independently evictable. A full-compiler
|
|
711
1024
|
// fallback that still finds the validated payload repairs that lightweight
|
|
@@ -728,39 +1041,64 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
728
1041
|
...(earlyHit.irPath === undefined ? {} : { irPath: earlyHit.irPath }),
|
|
729
1042
|
};
|
|
730
1043
|
}
|
|
731
|
-
|
|
1044
|
+
// The build's private copies of the cached LLVM text and IR (BuildSources).
|
|
1045
|
+
const hitSources = {
|
|
1046
|
+
llvmPath: earlyHit.llvmPath,
|
|
1047
|
+
llvmSourcePath: earlyHit.llvmSourcePath ?? earlyHit.llvmPath,
|
|
1048
|
+
irPath: earlyHit.irPath,
|
|
1049
|
+
irSourcePath: earlyHit.irSourcePath,
|
|
1050
|
+
llvmPathCurrent: earlyHit.llvmPathCurrent,
|
|
1051
|
+
irPathCurrent: earlyHit.irPathCurrent,
|
|
1052
|
+
};
|
|
1053
|
+
// What the native build compiles and the cache publishes: hitSources, or their staged copies.
|
|
1054
|
+
let nativeSources = hitSources;
|
|
1055
|
+
let stagedDir = null;
|
|
1056
|
+
let nativeInputPath = hitSources.llvmSourcePath;
|
|
732
1057
|
let nativeProgramObject = null;
|
|
733
1058
|
const useRuntimePack = opts.nativeProgramObject === true ||
|
|
734
1059
|
usesPrecompiledRuntimePack(opts, earlyHit.native.backend);
|
|
735
|
-
|
|
736
|
-
if (
|
|
737
|
-
|
|
1060
|
+
try {
|
|
1061
|
+
if (useRuntimePack) {
|
|
1062
|
+
if (earlyHit.native.backend !== "llvm") {
|
|
1063
|
+
throw new InternalCompilerError("native program-object cache hit restored a non-LLVM translation unit");
|
|
1064
|
+
}
|
|
1065
|
+
try {
|
|
1066
|
+
nativeProgramObject = await emitNativeProgramObject(entryPath, opts,
|
|
1067
|
+
// A large program's LLVM exceeds the engine's string limit as one
|
|
1068
|
+
// string; the emitter takes it in parts, as on a cold build.
|
|
1069
|
+
await readTextParts(hitSources.llvmSourcePath), profile);
|
|
1070
|
+
nativeInputPath = nativeProgramObject.linkPath;
|
|
1071
|
+
}
|
|
1072
|
+
catch (err) {
|
|
1073
|
+
if (!(err instanceof NativeCodegenError))
|
|
1074
|
+
throw err;
|
|
1075
|
+
return {
|
|
1076
|
+
ok: false,
|
|
1077
|
+
diagnostics: [nativeCodegenDiag(err.diagnosticCode, err.message, entryPath)],
|
|
1078
|
+
sourceTexts: new Map(),
|
|
1079
|
+
};
|
|
1080
|
+
}
|
|
738
1081
|
}
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
1082
|
+
else {
|
|
1083
|
+
const staged = await stageDriverBuildSources(hitSources);
|
|
1084
|
+
stagedDir = staged.dir;
|
|
1085
|
+
nativeSources = staged.sources;
|
|
1086
|
+
nativeInputPath = nativeSources.llvmSourcePath;
|
|
742
1087
|
}
|
|
743
|
-
catch (err) {
|
|
744
|
-
if (!(err instanceof NativeCodegenError))
|
|
745
|
-
throw err;
|
|
746
|
-
return {
|
|
747
|
-
ok: false,
|
|
748
|
-
diagnostics: [nativeCodegenDiag(err.diagnosticCode, err.message, entryPath)],
|
|
749
|
-
sourceTexts: new Map(),
|
|
750
|
-
};
|
|
751
|
-
}
|
|
752
|
-
}
|
|
753
|
-
try {
|
|
754
1088
|
await compileExecutableNative(earlyHit.native, nativeInputPath, opts.outPath, opts.sanitize ?? false, ffi, opts.windowsSubsystem, opts.strip, null, nativeProgramObject?.dependencies, opts.nativeProgramObject === true
|
|
755
1089
|
? undefined
|
|
756
1090
|
: async ({ dependencies }) => {
|
|
757
1091
|
await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
|
|
758
1092
|
...earlyHit,
|
|
1093
|
+
llvmPath: nativeSources.llvmSourcePath,
|
|
1094
|
+
...(nativeSources.irSourcePath === undefined
|
|
1095
|
+
? {}
|
|
1096
|
+
: { irPath: nativeSources.irSourcePath }),
|
|
759
1097
|
executableRestored: true,
|
|
760
1098
|
nativeDependencies: dependencies,
|
|
761
1099
|
frontend: earlyHit.frontend,
|
|
762
1100
|
});
|
|
763
|
-
}, nativeProgramObject?.partitionPaths);
|
|
1101
|
+
}, nativeProgramObject?.partitionPaths, profile?.generate !== undefined, hitSources.llvmPath);
|
|
764
1102
|
if (nativeProgramObject !== null && opts.nativeProgramObject === true) {
|
|
765
1103
|
await rename(nativeProgramObject.linkPath, nativeProgramObject.artifactPath);
|
|
766
1104
|
}
|
|
@@ -788,6 +1126,10 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
788
1126
|
if (nativeProgramObject !== null) {
|
|
789
1127
|
await removeNativeProgramObject(nativeProgramObject.linkPath, nativeProgramObject.partitionPaths);
|
|
790
1128
|
}
|
|
1129
|
+
if (stagedDir === null)
|
|
1130
|
+
await installBuildSources(hitSources);
|
|
1131
|
+
else
|
|
1132
|
+
await rm(stagedDir, { recursive: true, force: true });
|
|
791
1133
|
}
|
|
792
1134
|
await pruneBuildCache(cacheRoot);
|
|
793
1135
|
return {
|
|
@@ -805,10 +1147,22 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
805
1147
|
};
|
|
806
1148
|
}
|
|
807
1149
|
timing("executable-cache-miss");
|
|
808
|
-
const prepared =
|
|
1150
|
+
const prepared = frontendProcess?.started === true
|
|
1151
|
+
? await prepareExecutableInputInChild(frontendProcess, entryPath, opts, ffi, buildPlatform, timing, { start: timingStart, previous: Date.now() }, frontendInputs, warningSink)
|
|
1152
|
+
: await prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timing, warningSink);
|
|
809
1153
|
if ("ok" in prepared)
|
|
810
1154
|
return prepared;
|
|
811
|
-
const
|
|
1155
|
+
const buildSources = {
|
|
1156
|
+
llvmPath: prepared.llvmPath,
|
|
1157
|
+
llvmSourcePath: prepared.llvmSourcePath,
|
|
1158
|
+
irPath: prepared.irPath,
|
|
1159
|
+
irSourcePath: prepared.irSourcePath,
|
|
1160
|
+
};
|
|
1161
|
+
const { llvmSource, llvmPath, irPath } = prepared;
|
|
1162
|
+
const { nativeFeatures, programSplit, sourceTexts } = prepared;
|
|
1163
|
+
// What the native build compiles and the cache publishes: buildSources, or their staged copies.
|
|
1164
|
+
let { llvmSourcePath, irSourcePath } = buildSources;
|
|
1165
|
+
let stagedDir = null;
|
|
812
1166
|
const backend = "llvm";
|
|
813
1167
|
await mkdir(dirname(opts.outPath), { recursive: true });
|
|
814
1168
|
if (earlyCacheOptions === null) {
|
|
@@ -824,8 +1178,9 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
824
1178
|
throw new InternalCompilerError("native program-object validation requires the LLVM backend");
|
|
825
1179
|
}
|
|
826
1180
|
try {
|
|
827
|
-
nativeProgramObject = await emitNativeProgramObject(entryPath, opts, llvmSource,
|
|
1181
|
+
nativeProgramObject = await emitNativeProgramObject(entryPath, opts, llvmSource, profile);
|
|
828
1182
|
timing("native-object");
|
|
1183
|
+
await recordEarlyExecutableNativeBuild(cacheRoot, executableCacheOptions).catch(() => undefined);
|
|
829
1184
|
}
|
|
830
1185
|
catch (err) {
|
|
831
1186
|
if (!(err instanceof NativeCodegenError))
|
|
@@ -837,23 +1192,39 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
837
1192
|
};
|
|
838
1193
|
}
|
|
839
1194
|
}
|
|
840
|
-
|
|
1195
|
+
else {
|
|
1196
|
+
const staged = await stageDriverBuildSources(buildSources);
|
|
1197
|
+
stagedDir = staged.dir;
|
|
1198
|
+
({ llvmSourcePath, irSourcePath } = staged.sources);
|
|
1199
|
+
}
|
|
1200
|
+
await compileExecutableNative(nativeFeatures, nativeProgramObject?.linkPath ?? llvmSourcePath, opts.outPath, opts.sanitize ?? false, ffi, opts.windowsSubsystem, opts.strip, programSplit, nativeProgramObject?.dependencies, opts.nativeProgramObject === true
|
|
841
1201
|
? undefined
|
|
842
1202
|
: async ({ dependencies }) => {
|
|
843
1203
|
await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
|
|
844
|
-
llvmPath,
|
|
1204
|
+
llvmPath: llvmSourcePath,
|
|
845
1205
|
native: nativeFeatures,
|
|
846
1206
|
executableRestored: true,
|
|
847
1207
|
nativeDependencies: dependencies,
|
|
848
1208
|
frontend: frontendInputs.snapshot(),
|
|
849
|
-
...(
|
|
1209
|
+
...(irSourcePath === undefined ? {} : { irPath: irSourcePath }),
|
|
1210
|
+
...performanceWarnings(warningSink),
|
|
850
1211
|
});
|
|
851
1212
|
publishedExecutable = true;
|
|
852
|
-
}, nativeProgramObject?.partitionPaths);
|
|
1213
|
+
}, nativeProgramObject?.partitionPaths, profile?.generate !== undefined, llvmPath);
|
|
853
1214
|
timing("native-link");
|
|
854
1215
|
if (nativeProgramObject !== null && opts.nativeProgramObject === true) {
|
|
855
1216
|
await rename(nativeProgramObject.linkPath, nativeProgramObject.artifactPath);
|
|
856
1217
|
}
|
|
1218
|
+
if (!publishedExecutable) {
|
|
1219
|
+
await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
|
|
1220
|
+
llvmPath: llvmSourcePath,
|
|
1221
|
+
native: nativeFeatures,
|
|
1222
|
+
executableRestored: false,
|
|
1223
|
+
frontend: frontendInputs.snapshot(),
|
|
1224
|
+
...(irSourcePath === undefined ? {} : { irPath: irSourcePath }),
|
|
1225
|
+
...performanceWarnings(warningSink),
|
|
1226
|
+
}).catch(() => undefined);
|
|
1227
|
+
}
|
|
857
1228
|
}
|
|
858
1229
|
catch (err) {
|
|
859
1230
|
if (err instanceof RuntimePackError) {
|
|
@@ -874,15 +1245,10 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
874
1245
|
if (nativeProgramObject !== null) {
|
|
875
1246
|
await removeNativeProgramObject(nativeProgramObject.linkPath, nativeProgramObject.partitionPaths);
|
|
876
1247
|
}
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
native: nativeFeatures,
|
|
882
|
-
executableRestored: false,
|
|
883
|
-
frontend: frontendInputs.snapshot(),
|
|
884
|
-
...(irPath === undefined ? {} : { irPath }),
|
|
885
|
-
}).catch(() => undefined);
|
|
1248
|
+
if (stagedDir === null)
|
|
1249
|
+
await installBuildSources(buildSources);
|
|
1250
|
+
else
|
|
1251
|
+
await rm(stagedDir, { recursive: true, force: true });
|
|
886
1252
|
}
|
|
887
1253
|
await pruneBuildCache(cacheRoot);
|
|
888
1254
|
timing("complete");
|
|
@@ -922,6 +1288,7 @@ function libraryNativeFeatures(mod, backend) {
|
|
|
922
1288
|
copying: features.copying,
|
|
923
1289
|
textDecoderLegacy: features.legacyTextDecoder,
|
|
924
1290
|
dynInvoke: features.dynInvoke,
|
|
1291
|
+
...(features.dynBuffer ? { dynBuffer: true } : {}),
|
|
925
1292
|
...(features.dynTier ? { dynTier: true } : {}),
|
|
926
1293
|
...(mod.lib?.identity !== undefined ? { buildId: mod.lib.identity.buildId } : {}),
|
|
927
1294
|
};
|
|
@@ -996,6 +1363,7 @@ async function compileLibraryNative(profile, llvmPath, archivePath, sanitize, fe
|
|
|
996
1363
|
copying: features.copying,
|
|
997
1364
|
textDecoderLegacy: features.textDecoderLegacy,
|
|
998
1365
|
dynInvoke: features.dynInvoke,
|
|
1366
|
+
...(features.dynBuffer === true ? { dynBuffer: true } : {}),
|
|
999
1367
|
...(features.dynTier === true ? { dynTier: true } : {}),
|
|
1000
1368
|
};
|
|
1001
1369
|
if (packTarget !== null)
|