@scriptc/compiler 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +582 -78
- package/dist/backend/cycle-analysis.d.ts +2 -1
- package/dist/backend/cycle-analysis.js +4 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +2 -1
- package/dist/backend/cycle-mutability.js +2 -2
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +4 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +2 -1
- package/dist/backend/immutability.js +2 -2
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +4 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +7 -3
- package/dist/backend/llvm/alloc.js +7 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/array-search.js +2 -1
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
- package/dist/backend/llvm/bytes-loop-versions.js +115 -19
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +72 -1
- package/dist/backend/llvm/classes.js +331 -45
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +223 -16
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +1 -3
- package/dist/backend/llvm/common.js +1 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.js +8 -4
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +4 -4
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +4 -1
- package/dist/backend/llvm/counted-loops.js +62 -23
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
- package/dist/backend/llvm/dense-array-loops.js +46 -10
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +50 -14
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +25 -1
- package/dist/backend/llvm/dyn.js +331 -8
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +22 -6
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +17 -11
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -23
- package/dist/backend/llvm/emit-statements.js +325 -25
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +141 -15
- package/dist/backend/llvm/emitter.js +537 -64
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -0
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +5 -2
- package/dist/backend/llvm/expr-bytes.js +110 -40
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +34 -22
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +21 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +2 -3
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +54 -6
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +26 -8
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +38 -6
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +10 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +61 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.d.ts +4 -0
- package/dist/backend/llvm/lib-http2.js +20 -17
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +65 -14
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +53 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +65 -28
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +23 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +66 -45
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +14 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +8 -1
- package/dist/backend/llvm/publish.js +64 -25
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +3 -0
- package/dist/backend/llvm/publish.test.js.map +1 -1
- package/dist/backend/llvm/receivers.js +1 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +2 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.js +161 -14
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +18 -0
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +9 -7
- package/dist/backend/llvm/shapes.js +12 -10
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +2 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +3 -0
- package/dist/backend/llvm/string-reads.js +84 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +6 -5
- package/dist/backend/llvm/wasm-modules.js +32 -9
- package/dist/backend/llvm/wasm-modules.js.map +1 -1
- package/dist/backend/mangle.d.ts +3 -0
- package/dist/backend/mangle.js +5 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +22 -4
- package/dist/backend/native/executable.js +24 -8
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -0
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +11 -6
- package/dist/backend/native-codegen.js +36 -9
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +0 -23
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +14 -4
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/optimization.d.ts +2 -2
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +1 -1
- package/dist/backend/runtime-pack-core.js +1 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +4 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +0 -21
- package/dist/backend/runtime-pack.js +0 -29
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +9 -69
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +31 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +3 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +26 -6
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +5 -1
- package/dist/cli/usage.js +7 -2
- package/dist/cli/usage.js.map +1 -1
- package/dist/contracts/check.js +1 -1
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.d.ts +7 -2
- package/dist/coverage/report.js +18 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +1 -0
- package/dist/coverage/verdict-cache.js +4 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-semantic.js +4 -0
- package/dist/coverage/verdict-semantic.js.map +1 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.d.ts +40 -0
- package/dist/diagnostics/dynamic-tier.js +57 -0
- package/dist/diagnostics/dynamic-tier.js.map +1 -0
- package/dist/diagnostics/envelope.d.ts +2 -1
- package/dist/diagnostics/envelope.js +5 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +23 -1
- package/dist/executable/executable-cache.js +59 -7
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +45 -3
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +3 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +1 -0
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/dispose-hook.d.ts +2 -0
- package/dist/frontend/dispose-hook.js +14 -0
- package/dist/frontend/dispose-hook.js.map +1 -0
- package/dist/frontend/jsx-entities.d.ts +4 -0
- package/dist/frontend/jsx-entities.js +259 -0
- package/dist/frontend/jsx-entities.js.map +1 -0
- package/dist/frontend/jsx-source.d.ts +71 -0
- package/dist/frontend/jsx-source.js +781 -0
- package/dist/frontend/jsx-source.js.map +1 -0
- package/dist/frontend/jsx-source.test.d.ts +1 -0
- package/dist/frontend/jsx-source.test.js +200 -0
- package/dist/frontend/jsx-source.test.js.map +1 -0
- package/dist/frontend/literal-values.test.js +8 -9
- package/dist/frontend/literal-values.test.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +3 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +2 -2
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
- package/dist/frontend/lowering/builtins/arguments.js +30 -15
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +10 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
- package/dist/frontend/lowering/builtins/crypto.js +59 -3
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
- package/dist/frontend/lowering/builtins/date-classes.js +477 -0
- package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
- package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
- package/dist/frontend/lowering/builtins/dates.js +55 -26
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
- package/dist/frontend/lowering/builtins/dh.js +151 -0
- package/dist/frontend/lowering/builtins/dh.js.map +1 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
- package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
- package/dist/frontend/lowering/builtins/ecdh.js +7 -7
- package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
- package/dist/frontend/lowering/builtins/errors.js +110 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +6 -4
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
- package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
- package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
- package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +2 -1
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
- package/dist/frontend/lowering/builtins/key-object.js +20 -7
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +11 -4
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +9 -5
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.js +4 -3
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.js +3 -2
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +3 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +3 -2
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
- package/dist/frontend/lowering/builtins/readline.js +23 -6
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/strings.js +13 -5
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +1 -1
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +4 -3
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.js +2 -1
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +2 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +13 -6
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
- package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-assertions.js +3 -2
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +2 -1
- package/dist/frontend/lowering/class-construction.js +8 -13
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.js +1 -1
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +568 -151
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +3 -0
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +1 -1
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +7 -0
- package/dist/frontend/lowering/class-protocols.js +64 -4
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
- package/dist/frontend/lowering/class-prototypes.js +36 -3
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.js +25 -5
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +2 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +8 -7
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.js +8 -7
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -1
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +14 -13
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +2 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +25 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +6 -5
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
- package/dist/frontend/lowering/containers/bytes.js +129 -28
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +8 -7
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
- package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +36 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +2 -1
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.js +25 -4
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
- package/dist/frontend/lowering/dispatch-sites.js +204 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
- package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
- package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
- package/dist/frontend/lowering/dyn-streams.js +1 -1
- package/dist/frontend/lowering/dyn-streams.js.map +1 -1
- package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
- package/dist/frontend/lowering/dynamic-tier.js +327 -0
- package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -0
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +15 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +45 -3
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +17 -1
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +46 -7
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +35 -5
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
- package/dist/frontend/lowering/expressions/object-literals.js +27 -6
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +5 -5
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
- package/dist/frontend/lowering/expressions/property-access.js +99 -7
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +63 -5
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +63 -9
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +42 -1
- package/dist/frontend/lowering/generic-functions.js +448 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +2 -1
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +9 -8
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
- package/dist/frontend/lowering/json-require.js +2 -1
- package/dist/frontend/lowering/json-require.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
- package/dist/frontend/lowering/key-order-witness.js +21 -4
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +38 -2
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lifetime-regions.js +2 -1
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +6 -5
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +3 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +4 -0
- package/dist/frontend/lowering/lower-calls.js +339 -91
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +18 -0
- package/dist/frontend/lowering/lower-classes.js +280 -25
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -2
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
- package/dist/frontend/lowering/lower-event-emitter.js +267 -20
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
- package/dist/frontend/lowering/lower-exprs.js +116 -11
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +304 -72
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +10 -6
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +2 -1
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.js +2 -1
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +15 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +2 -2
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
- package/dist/frontend/lowering/lower-namespaces.js +4 -3
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +10 -0
- package/dist/frontend/lowering/lower-server.js +237 -59
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +12 -10
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +168 -20
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +575 -165
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +4 -3
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +125 -28
- package/dist/frontend/lowering/lowerer.js +557 -63
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +21 -9
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.js +5 -0
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +1 -1
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +2 -1
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +9 -0
- package/dist/frontend/lowering/private-brands.js +66 -15
- package/dist/frontend/lowering/private-brands.js.map +1 -1
- package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
- package/dist/frontend/lowering/require-initialization.js +2 -1
- package/dist/frontend/lowering/require-initialization.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
- package/dist/frontend/lowering/runtime-optional-records.js +18 -5
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
- package/dist/frontend/lowering/site-dependencies.js +84 -0
- package/dist/frontend/lowering/site-dependencies.js.map +1 -0
- package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
- package/dist/frontend/lowering/site-dependencies.test.js +53 -0
- package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
- package/dist/frontend/lowering/stable-names.d.ts +11 -0
- package/dist/frontend/lowering/stable-names.js +35 -0
- package/dist/frontend/lowering/stable-names.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +2 -2
- package/dist/frontend/lowering/static-typeof.js +42 -3
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.js +2 -1
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/structural-positions.d.ts +32 -0
- package/dist/frontend/lowering/structural-positions.js +108 -0
- package/dist/frontend/lowering/structural-positions.js.map +1 -0
- package/dist/frontend/lowering/surfaces.js +42 -26
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.js +37 -3
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
- package/dist/frontend/npm-static-tsc-helpers.js +106 -0
- package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
- package/dist/frontend/npm-static-type-exports-host.js +214 -0
- package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
- package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.d.ts +52 -0
- package/dist/frontend/npm-static-type-exports.js +261 -0
- package/dist/frontend/npm-static-type-exports.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports.test.js +103 -0
- package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
- package/dist/frontend/npm-static-umd.d.ts +6 -0
- package/dist/frontend/npm-static-umd.js +203 -0
- package/dist/frontend/npm-static-umd.js.map +1 -0
- package/dist/frontend/npm-static-umd.test.d.ts +1 -0
- package/dist/frontend/npm-static-umd.test.js +105 -0
- package/dist/frontend/npm-static-umd.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +8 -0
- package/dist/frontend/npm-static.js +47 -2
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/program.d.ts +13 -0
- package/dist/frontend/program.js +103 -6
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +1 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/services.d.ts +6 -0
- package/dist/frontend/services.js +18 -0
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +21 -7
- package/dist/frontend/ts7/ast-node.js +131 -29
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +60 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +27 -2
- package/dist/frontend/ts7/ast-wire.js +124 -21
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast.d.ts +23 -2
- package/dist/frontend/ts7/ast.js +143 -2
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +13 -1
- package/dist/frontend/ts7/checker.js +75 -1
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +9 -6
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/enums.d.ts +3 -3
- package/dist/frontend/ts7/enums.generated.d.ts +10 -0
- package/dist/frontend/ts7/enums.generated.js +21 -0
- package/dist/frontend/ts7/enums.generated.js.map +1 -1
- package/dist/frontend/ts7/enums.js +19 -0
- package/dist/frontend/ts7/enums.js.map +1 -1
- package/dist/frontend/ts7/program-host.js +5 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
- package/dist/frontend/ts7/semantic-checker.js +25 -20
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +13 -0
- package/dist/frontend/ts7/semantic-json.js +146 -0
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.test.js +57 -1
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +15 -0
- package/dist/frontend/ts7/semantic-model.js +67 -19
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +3 -2
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/session.js +1 -1
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +1 -1
- package/dist/frontend/tsc-codes.js +7 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +38 -6
- package/dist/frontend/type-mapper.js +265 -32
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +1 -1
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend-process-args.d.ts +4 -0
- package/dist/frontend-process-args.js +52 -0
- package/dist/frontend-process-args.js.map +1 -0
- package/dist/frontend-process-args.test.d.ts +1 -0
- package/dist/frontend-process-args.test.js +47 -0
- package/dist/frontend-process-args.test.js.map +1 -0
- package/dist/frontend-process.d.ts +1 -0
- package/dist/frontend-process.js +23 -0
- package/dist/frontend-process.js.map +1 -0
- package/dist/heap-collection.d.ts +16 -0
- package/dist/heap-collection.js +42 -0
- package/dist/heap-collection.js.map +1 -0
- package/dist/heap-collection.test.d.ts +1 -0
- package/dist/heap-collection.test.js +59 -0
- package/dist/heap-collection.test.js.map +1 -0
- package/dist/heap-pressure.d.ts +2 -0
- package/dist/heap-pressure.js +12 -0
- package/dist/heap-pressure.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +402 -86
- package/dist/index.js.map +1 -1
- package/dist/ir/array-length-stability.js +7 -0
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +25 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +28 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +5 -1
- package/dist/ir/builtin-signatures.js +141 -12
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +2 -2
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.test.js +2 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +13 -5
- package/dist/ir/int32-slots.js +112 -115
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +3 -1
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +9 -4
- package/dist/ir/integer-loop-facts.js +93 -18
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +49 -0
- package/dist/ir/integer-loops.js +193 -39
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +201 -1
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +64 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +17 -2
- package/dist/ir/ir.js +3 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +31 -7
- package/dist/ir/runtime-features.js +138 -11
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.d.ts +2 -0
- package/dist/ir/traverse.js +14 -2
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +56 -16
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +10 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/prepare.js +2 -0
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cli.js +5 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/prepare.js +5 -1
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +4 -1
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/dist/text-parts.d.ts +7 -0
- package/dist/text-parts.js +44 -0
- package/dist/text-parts.js.map +1 -1
- package/dist/text-parts.test.d.ts +1 -0
- package/dist/text-parts.test.js +46 -0
- package/dist/text-parts.test.js.map +1 -0
- package/dist/timing.d.ts +9 -2
- package/dist/timing.js +7 -4
- package/dist/timing.js.map +1 -1
- package/dist/wasm/translate.d.ts +4 -0
- package/dist/wasm/translate.js +2 -2
- package/dist/wasm/translate.js.map +1 -1
- package/package.json +21 -21
- package/shims/undici/core/client.ts +4 -4
- package/surface-manifest.json +19 -49
package/dist/index.js
CHANGED
|
@@ -10,21 +10,26 @@ 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 { frontendProcessExecArgv } from "./frontend-process-args.js";
|
|
14
|
+
import { spawn } from "node:child_process";
|
|
13
15
|
import { createHash } from "node:crypto";
|
|
14
|
-
import {
|
|
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";
|
|
15
19
|
import { basename, dirname, join, resolve } from "node:path";
|
|
20
|
+
import { fileURLToPath } from "node:url";
|
|
16
21
|
import { clearCcCaches, configuredTargetPlatform, } from "./backend/native-toolchain.js";
|
|
17
22
|
import { buildCacheRoot, prepareBuildCacheRoot, pruneBuildCache } from "./backend/build-cache.js";
|
|
18
23
|
import { CcCompileError, compileExternalC, compileExternalCLibrary, executableNativeEnvironmentFingerprint, mobileLibraryTarget, mobileTargetRefusal, resolveCc, } from "./backend/external-c.js";
|
|
19
|
-
import { emitLlvmModuleSource, LlvmUnsupportedError } from "./backend/llvm/emitter.js";
|
|
24
|
+
import { emitLlvmModuleSource, LlvmUnsupportedError, lowRegionTarget, } from "./backend/llvm/emitter.js";
|
|
20
25
|
import { inlineRcOption } from "./backend/llvm/shapes.js";
|
|
21
|
-
import { emitNativeArtifact, NativeCodegenError, writeLlvmSource, } from "./backend/native-codegen.js";
|
|
26
|
+
import { emitNativeArtifact, isLlvmFile, llvmInputBytes, NativeCodegenError, writeLlvmSource, } from "./backend/native-codegen.js";
|
|
22
27
|
import { nativePartitionPaths, nativeProgramPartitions } from "./backend/native-codegen-core.js";
|
|
23
28
|
import { privateSiblingPath } from "./backend/build-cache.js";
|
|
24
29
|
import { nativeCodegenTarget, nativeCodegenTargetRefusal } from "./backend/targets.js";
|
|
25
30
|
import { windowsSubsystemLinkerArgs } from "./backend/targets.js";
|
|
26
31
|
import { createNativeLinkInfo } from "./backend/native-link-info.js";
|
|
27
|
-
import { RuntimePackError
|
|
32
|
+
import { RuntimePackError } from "./backend/runtime-pack.js";
|
|
28
33
|
import { createNativeLinkPlan } from "./backend/link-plan.js";
|
|
29
34
|
import { nativeProfileKey, nativeProfileRefusal, } from "./backend/native-profile.js";
|
|
30
35
|
import { executableLinkerEnvironmentFingerprint, linkNativeExecutable, platformLinkerSupportsPersistentCache, resolvePlatformLinker, } from "./backend/linker.js";
|
|
@@ -37,25 +42,27 @@ import { canonicalModuleGraph, clearSidecarCaches, compilerReleaseVersion, libra
|
|
|
37
42
|
import {} from "./ir/ir.js";
|
|
38
43
|
import { moduleRuntimeFeatures } from "./ir/runtime-features.js";
|
|
39
44
|
import { serializeModuleParts } from "./ir/serialize.js";
|
|
40
|
-
import { writeTextParts } from "./text-parts.js";
|
|
45
|
+
import { readTextParts, writeTextParts } from "./text-parts.js";
|
|
41
46
|
import { validateModule } from "./ir/validate.js";
|
|
42
47
|
import { loadProgram } from "./frontend/program-node.js";
|
|
43
48
|
import { runFrontend } from "./frontend/pipeline.js";
|
|
44
|
-
import { provenanceSources } from "./frontend/provenance-registry.js";
|
|
49
|
+
import { provenanceSources, setProvenanceSources, } from "./frontend/provenance-registry.js";
|
|
45
50
|
import { clearResolveCaches } from "./frontend/resolve.js";
|
|
46
51
|
import { loadFfiProfile } from "./ffi/ffi-manifest.js";
|
|
47
52
|
import { executableLinkFeatures } from "./backend/executable-features.js";
|
|
48
53
|
import { youngNurseryRequested } from "./backend/young-nursery.js";
|
|
49
|
-
import { FrontendInputTracker, trackedReadFile } from "./frontend/input-tracker.js";
|
|
54
|
+
import { FrontendInputTracker, trackedReadFile, } from "./frontend/input-tracker.js";
|
|
50
55
|
import { libraryFrontendImplementationFingerprint, publishEarlyLibraryCache, readEarlyLibraryCache, readSemanticLibraryCache, } from "./library/library-cache.js";
|
|
51
|
-
import { publishEarlyExecutableCache, publishEarlyExecutableRoute, readEarlyExecutableCache, } from "./executable/executable-cache.js";
|
|
56
|
+
import { hasEarlyExecutableNativeBuild, publishEarlyExecutableCache, publishEarlyExecutableRoute, readEarlyExecutableCache, recordEarlyExecutableNativeBuild, } from "./executable/executable-cache.js";
|
|
52
57
|
import { compilerImplementationIdentity } from "./library/compiler-self-identity.js";
|
|
58
|
+
import { isPerformanceCode } from "./diagnostics/dynamic-tier.js";
|
|
53
59
|
export const VERSION = "0.0.1";
|
|
54
60
|
export { EXTERNAL_OBJECT_ABI_STABILITY, RUNTIME_ABI_MARKER, RUNTIME_ABI_VERSION, } from "./backend/runtime-abi.js";
|
|
55
61
|
export { InternalCompilerError } from "./errors.js";
|
|
56
62
|
export { compileExternalC as compileC, compileExternalC, runtimeSrcDir, } from "./backend/external-c.js";
|
|
57
63
|
export { warmNativeCaches } from "./backend/warm-cache.js";
|
|
58
64
|
export { mergeNativeProfiles as mergeProfiles } from "./backend/native-codegen.js";
|
|
65
|
+
export { collectGarbageUnderHeapPressure } from "./heap-collection.js";
|
|
59
66
|
export { ANDROID_MIN_API, IPHONEOS_MIN_VERSION, isAndroidTarget, isIosTarget, isMobileTarget, mobileLibraryTarget, mobileTargetRefusal, } from "./backend/external-c.js";
|
|
60
67
|
export { emitLlvmModule } from "./backend/llvm/emitter.js";
|
|
61
68
|
export { renderDiagnostics, renderDiagnostics as renderAll, renderDiagnostic, } from "./diagnostics/render.js";
|
|
@@ -146,8 +153,21 @@ export async function compile(entryPath, opts) {
|
|
|
146
153
|
clearCompileSessionCaches();
|
|
147
154
|
const frontendInputs = new FrontendInputTracker();
|
|
148
155
|
const warnings = { warnings: [], sourceTexts: null };
|
|
149
|
-
|
|
150
|
-
|
|
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 };
|
|
151
171
|
}
|
|
152
172
|
function withCompileWarnings(result, sink) {
|
|
153
173
|
if (!result.ok || sink.warnings.length === 0)
|
|
@@ -179,7 +199,10 @@ function executableNativeFeatures(mod, backend, optimization) {
|
|
|
179
199
|
...executableLinkFeatures(mod),
|
|
180
200
|
};
|
|
181
201
|
}
|
|
182
|
-
async function compileExecutableNative(features, llvmPath, outPath, sanitize, ffi, windowsSubsystem, strip, programSplit = null, programObjectDependencies = [], onArtifactReady, programPartitions = [], profileGenerate = false
|
|
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) {
|
|
183
206
|
const programIsObject = /\.(?:o|obj)$/.test(llvmPath);
|
|
184
207
|
const runtimePackTarget = programIsObject && !sanitize ? nativeCodegenTarget() : null;
|
|
185
208
|
if (runtimePackTarget !== null) {
|
|
@@ -216,7 +239,9 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
216
239
|
if (programIsObject)
|
|
217
240
|
throw new InternalCompilerError("program objects must link against a precompiled runtime pack");
|
|
218
241
|
await compileExternalC({
|
|
219
|
-
|
|
242
|
+
...(llvmVisiblePath === undefined || llvmVisiblePath === llvmPath
|
|
243
|
+
? { cPath: llvmPath }
|
|
244
|
+
: { cPath: llvmVisiblePath, cSourcePath: llvmPath }),
|
|
220
245
|
outPath,
|
|
221
246
|
cacheIdentity: "scriptc-generated-v1",
|
|
222
247
|
...optimizationField(features.optimization),
|
|
@@ -249,7 +274,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
249
274
|
...(features.handleProps ? { handleProps: true } : {}),
|
|
250
275
|
...(features.dynForAwait ? { dynForAwait: true } : {}),
|
|
251
276
|
...(features.eventsOnceSignal ? { eventsOnceSignal: true } : {}),
|
|
252
|
-
...(features.
|
|
277
|
+
...(features.dynBuffer ? { dynBuffer: true } : {}),
|
|
253
278
|
...(features.builtinValues ? { builtinValues: true } : {}),
|
|
254
279
|
events: features.events,
|
|
255
280
|
emitter: features.emitter,
|
|
@@ -277,6 +302,9 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
277
302
|
tlsCa: features.tlsCa,
|
|
278
303
|
cipher: features.cipher,
|
|
279
304
|
ecdh: features.ecdh,
|
|
305
|
+
dh: features.dh,
|
|
306
|
+
pki: features.pki,
|
|
307
|
+
ed25519: features.ed25519,
|
|
280
308
|
webcrypto: features.webcrypto,
|
|
281
309
|
perfLoop: features.perfLoop,
|
|
282
310
|
...(onArtifactReady === undefined ? {} : { onArtifactReady }),
|
|
@@ -289,7 +317,7 @@ async function compileExecutableNative(features, llvmPath, outPath, sanitize, ff
|
|
|
289
317
|
}),
|
|
290
318
|
});
|
|
291
319
|
}
|
|
292
|
-
async function emitNativeProgramObject(entryPath, opts, llvm,
|
|
320
|
+
async function emitNativeProgramObject(entryPath, opts, llvm, profile) {
|
|
293
321
|
const stem = basename(entryPath).replace(/\.(ts|mts|cts|js|mjs|cjs)$/, "");
|
|
294
322
|
const artifactPath = join(opts.outDir, `${stem}.helper.o`);
|
|
295
323
|
// compileExecutableNative recognizes object inputs by suffix. The random
|
|
@@ -298,25 +326,8 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features, profile)
|
|
|
298
326
|
const linkPath = `${privateSiblingPath(artifactPath, "native-program-object")}.o`;
|
|
299
327
|
// The validated program-object artifact is a single object by contract.
|
|
300
328
|
const target = nativeCodegenTarget();
|
|
301
|
-
const llvmBytes = (
|
|
329
|
+
const llvmBytes = llvmInputBytes(llvm);
|
|
302
330
|
const partitions = opts.nativeProgramObject === true || target === null ? 1 : nativeProgramPartitions(llvmBytes);
|
|
303
|
-
// Optimized programs import small runtime functions from the bitcode of
|
|
304
|
-
// the exact runtime units they link, so LLVM can inline across the
|
|
305
|
-
// boundary. Release units ship only the bodies that need none of their
|
|
306
|
-
// unit-local state, which keeps the import cheap; speed units promote
|
|
307
|
-
// that state and offer more. Every partition reads the bitcode again, so
|
|
308
|
-
// release imports only into programs small enough for one partition: in
|
|
309
|
-
// larger ones the build-time and size cost outgrows the gain.
|
|
310
|
-
const runtimeBitcode = opts.sanitize !== true &&
|
|
311
|
-
target !== null &&
|
|
312
|
-
(opts.optimization === "speed" ||
|
|
313
|
-
(opts.optimization !== "dev" && nativeProgramPartitions(llvmBytes) === 1))
|
|
314
|
-
? await loadRuntimeBitcode({
|
|
315
|
-
target,
|
|
316
|
-
features,
|
|
317
|
-
optimization: opts.optimization === "speed" ? "speed" : "release",
|
|
318
|
-
})
|
|
319
|
-
: null;
|
|
320
331
|
try {
|
|
321
332
|
const artifact = await emitNativeArtifact({
|
|
322
333
|
outputPath: linkPath,
|
|
@@ -326,16 +337,13 @@ async function emitNativeProgramObject(entryPath, opts, llvm, features, profile)
|
|
|
326
337
|
optimization: opts.optimization === "dev" ? "0" : "2",
|
|
327
338
|
...(opts.sanitize === undefined ? {} : { sanitize: opts.sanitize }),
|
|
328
339
|
partitions,
|
|
329
|
-
...(runtimeBitcode === null
|
|
330
|
-
? {}
|
|
331
|
-
: { importBitcode: { paths: runtimeBitcode.paths, digests: runtimeBitcode.digests } }),
|
|
332
340
|
...(profile === undefined ? {} : { profile }),
|
|
333
341
|
});
|
|
334
342
|
return {
|
|
335
343
|
linkPath,
|
|
336
344
|
partitionPaths: artifact.outputPaths.slice(1),
|
|
337
345
|
artifactPath,
|
|
338
|
-
dependencies:
|
|
346
|
+
dependencies: artifact.dependencies,
|
|
339
347
|
};
|
|
340
348
|
}
|
|
341
349
|
catch (error) {
|
|
@@ -404,6 +412,7 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
404
412
|
wasi: buildPlatform === "wasi",
|
|
405
413
|
runtimeAbiMarker: outputKind === "obj",
|
|
406
414
|
objectAudit: opts.sanitize === true,
|
|
415
|
+
lowRegion: lowRegionTarget(buildPlatform, opts.sanitize === true),
|
|
407
416
|
...(opts.sanitize === true ? { wasmBoundsChecks: true } : {}),
|
|
408
417
|
...inlineRcOption(opts.optimization, opts.sanitize === true),
|
|
409
418
|
});
|
|
@@ -462,6 +471,8 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
462
471
|
}
|
|
463
472
|
await mkdir(opts.outDir, { recursive: true });
|
|
464
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`;
|
|
465
476
|
const backend = "llvm";
|
|
466
477
|
const useRuntimePack = opts.nativeProgramObject === true || usesPrecompiledRuntimePack(opts, backend);
|
|
467
478
|
let llvmSource;
|
|
@@ -473,6 +484,7 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
473
484
|
wasi: buildPlatform === "wasi",
|
|
474
485
|
runtimeAbiMarker: useRuntimePack,
|
|
475
486
|
objectAudit: opts.sanitize === true,
|
|
487
|
+
lowRegion: lowRegionTarget(buildPlatform, opts.sanitize === true),
|
|
476
488
|
...(opts.sanitize === true ? { wasmBoundsChecks: true } : {}),
|
|
477
489
|
...inlineRcOption(opts.optimization, opts.sanitize === true),
|
|
478
490
|
...(opts.detachedExit === true ? { detachedExit: true } : {}),
|
|
@@ -484,12 +496,14 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
484
496
|
return { ok: false, diagnostics: [llvmRefusalDiag(err, entryPath)], sourceTexts };
|
|
485
497
|
}
|
|
486
498
|
timing("llvm-emit");
|
|
487
|
-
await writeLlvmSource(
|
|
499
|
+
await writeLlvmSource(llvmSourcePath, llvmSource);
|
|
488
500
|
timing("llvm-write");
|
|
489
501
|
let irPath;
|
|
502
|
+
let irSourcePath;
|
|
490
503
|
if (opts.emitIr) {
|
|
491
504
|
irPath = defaultSourcePaths.ir;
|
|
492
|
-
|
|
505
|
+
irSourcePath = privateSiblingPath(irPath, "ir");
|
|
506
|
+
await writeTextParts(irSourcePath, serializeModuleParts(mod));
|
|
493
507
|
}
|
|
494
508
|
const nativeFeatures = executableNativeFeatures(mod, backend, opts.optimization ?? "release");
|
|
495
509
|
timing("link-features");
|
|
@@ -501,10 +515,243 @@ async function prepareExecutableInput(entryPath, opts, ffi, buildPlatform, timin
|
|
|
501
515
|
? splitLlvmProgram(llvmSource)
|
|
502
516
|
: null;
|
|
503
517
|
timing("llvm-split");
|
|
504
|
-
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));
|
|
505
596
|
}
|
|
506
|
-
|
|
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) {
|
|
507
753
|
const timing = compilationTiming();
|
|
754
|
+
const timingStart = Date.now();
|
|
508
755
|
entryPath = resolve(entryPath);
|
|
509
756
|
const outputKind = opts.outputKind ?? "exe";
|
|
510
757
|
if ((opts.backend !== undefined && opts.backend !== "llvm") ||
|
|
@@ -707,16 +954,7 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
707
954
|
let earlyCacheOptions = null;
|
|
708
955
|
if (outputKind === "exe") {
|
|
709
956
|
const helperObjectRoute = opts.nativeProgramObject === true || usesPrecompiledRuntimePack(opts, "llvm");
|
|
710
|
-
|
|
711
|
-
// the same cache key. Start both before waiting so edits do not pay their
|
|
712
|
-
// filesystem and subprocess latency serially.
|
|
713
|
-
const [implementation, nativeEnvironment] = await Promise.all([
|
|
714
|
-
compilerImplementationIdentity(),
|
|
715
|
-
helperObjectRoute
|
|
716
|
-
? executableLinkerEnvironmentFingerprint(process.env, nativeCodegenTarget()?.defaultLinker)
|
|
717
|
-
: executableNativeEnvironmentFingerprint(),
|
|
718
|
-
]);
|
|
719
|
-
earlyCacheOptions = {
|
|
957
|
+
const routeOptions = {
|
|
720
958
|
entryPath,
|
|
721
959
|
outDir: opts.outDir,
|
|
722
960
|
outPath: opts.outPath,
|
|
@@ -744,8 +982,25 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
744
982
|
? resolvePlatformLinker(process.env, nativeCodegenTarget()?.defaultLinker)
|
|
745
983
|
: (process.env["SCRIPTC_CC"] ?? "clang"),
|
|
746
984
|
],
|
|
747
|
-
nativeEnvironment,
|
|
748
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,
|
|
749
1004
|
implementation: implementation.digest,
|
|
750
1005
|
implementationDependencies: implementation.dependencies,
|
|
751
1006
|
};
|
|
@@ -758,6 +1013,12 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
758
1013
|
if (earlyCacheOptions === null) {
|
|
759
1014
|
throw new InternalCompilerError("executable cache hit without executable cache options");
|
|
760
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
|
+
}
|
|
761
1022
|
const executableCacheOptions = earlyCacheOptions;
|
|
762
1023
|
// Route/proof metadata is independently evictable. A full-compiler
|
|
763
1024
|
// fallback that still finds the validated payload repairs that lightweight
|
|
@@ -780,39 +1041,64 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
780
1041
|
...(earlyHit.irPath === undefined ? {} : { irPath: earlyHit.irPath }),
|
|
781
1042
|
};
|
|
782
1043
|
}
|
|
783
|
-
|
|
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;
|
|
784
1057
|
let nativeProgramObject = null;
|
|
785
1058
|
const useRuntimePack = opts.nativeProgramObject === true ||
|
|
786
1059
|
usesPrecompiledRuntimePack(opts, earlyHit.native.backend);
|
|
787
|
-
|
|
788
|
-
if (
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
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
|
+
}
|
|
794
1081
|
}
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
diagnostics: [nativeCodegenDiag(err.diagnosticCode, err.message, entryPath)],
|
|
801
|
-
sourceTexts: new Map(),
|
|
802
|
-
};
|
|
1082
|
+
else {
|
|
1083
|
+
const staged = await stageDriverBuildSources(hitSources);
|
|
1084
|
+
stagedDir = staged.dir;
|
|
1085
|
+
nativeSources = staged.sources;
|
|
1086
|
+
nativeInputPath = nativeSources.llvmSourcePath;
|
|
803
1087
|
}
|
|
804
|
-
}
|
|
805
|
-
try {
|
|
806
1088
|
await compileExecutableNative(earlyHit.native, nativeInputPath, opts.outPath, opts.sanitize ?? false, ffi, opts.windowsSubsystem, opts.strip, null, nativeProgramObject?.dependencies, opts.nativeProgramObject === true
|
|
807
1089
|
? undefined
|
|
808
1090
|
: async ({ dependencies }) => {
|
|
809
1091
|
await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
|
|
810
1092
|
...earlyHit,
|
|
1093
|
+
llvmPath: nativeSources.llvmSourcePath,
|
|
1094
|
+
...(nativeSources.irSourcePath === undefined
|
|
1095
|
+
? {}
|
|
1096
|
+
: { irPath: nativeSources.irSourcePath }),
|
|
811
1097
|
executableRestored: true,
|
|
812
1098
|
nativeDependencies: dependencies,
|
|
813
1099
|
frontend: earlyHit.frontend,
|
|
814
1100
|
});
|
|
815
|
-
}, nativeProgramObject?.partitionPaths, profile?.generate !== undefined);
|
|
1101
|
+
}, nativeProgramObject?.partitionPaths, profile?.generate !== undefined, hitSources.llvmPath);
|
|
816
1102
|
if (nativeProgramObject !== null && opts.nativeProgramObject === true) {
|
|
817
1103
|
await rename(nativeProgramObject.linkPath, nativeProgramObject.artifactPath);
|
|
818
1104
|
}
|
|
@@ -840,6 +1126,10 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
840
1126
|
if (nativeProgramObject !== null) {
|
|
841
1127
|
await removeNativeProgramObject(nativeProgramObject.linkPath, nativeProgramObject.partitionPaths);
|
|
842
1128
|
}
|
|
1129
|
+
if (stagedDir === null)
|
|
1130
|
+
await installBuildSources(hitSources);
|
|
1131
|
+
else
|
|
1132
|
+
await rm(stagedDir, { recursive: true, force: true });
|
|
843
1133
|
}
|
|
844
1134
|
await pruneBuildCache(cacheRoot);
|
|
845
1135
|
return {
|
|
@@ -857,10 +1147,22 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
857
1147
|
};
|
|
858
1148
|
}
|
|
859
1149
|
timing("executable-cache-miss");
|
|
860
|
-
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);
|
|
861
1153
|
if ("ok" in prepared)
|
|
862
1154
|
return prepared;
|
|
863
|
-
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;
|
|
864
1166
|
const backend = "llvm";
|
|
865
1167
|
await mkdir(dirname(opts.outPath), { recursive: true });
|
|
866
1168
|
if (earlyCacheOptions === null) {
|
|
@@ -876,8 +1178,9 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
876
1178
|
throw new InternalCompilerError("native program-object validation requires the LLVM backend");
|
|
877
1179
|
}
|
|
878
1180
|
try {
|
|
879
|
-
nativeProgramObject = await emitNativeProgramObject(entryPath, opts, llvmSource,
|
|
1181
|
+
nativeProgramObject = await emitNativeProgramObject(entryPath, opts, llvmSource, profile);
|
|
880
1182
|
timing("native-object");
|
|
1183
|
+
await recordEarlyExecutableNativeBuild(cacheRoot, executableCacheOptions).catch(() => undefined);
|
|
881
1184
|
}
|
|
882
1185
|
catch (err) {
|
|
883
1186
|
if (!(err instanceof NativeCodegenError))
|
|
@@ -889,23 +1192,39 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
889
1192
|
};
|
|
890
1193
|
}
|
|
891
1194
|
}
|
|
892
|
-
|
|
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
|
|
893
1201
|
? undefined
|
|
894
1202
|
: async ({ dependencies }) => {
|
|
895
1203
|
await publishEarlyExecutableCache(cacheRoot, executableCacheOptions, {
|
|
896
|
-
llvmPath,
|
|
1204
|
+
llvmPath: llvmSourcePath,
|
|
897
1205
|
native: nativeFeatures,
|
|
898
1206
|
executableRestored: true,
|
|
899
1207
|
nativeDependencies: dependencies,
|
|
900
1208
|
frontend: frontendInputs.snapshot(),
|
|
901
|
-
...(
|
|
1209
|
+
...(irSourcePath === undefined ? {} : { irPath: irSourcePath }),
|
|
1210
|
+
...performanceWarnings(warningSink),
|
|
902
1211
|
});
|
|
903
1212
|
publishedExecutable = true;
|
|
904
|
-
}, nativeProgramObject?.partitionPaths, profile?.generate !== undefined);
|
|
1213
|
+
}, nativeProgramObject?.partitionPaths, profile?.generate !== undefined, llvmPath);
|
|
905
1214
|
timing("native-link");
|
|
906
1215
|
if (nativeProgramObject !== null && opts.nativeProgramObject === true) {
|
|
907
1216
|
await rename(nativeProgramObject.linkPath, nativeProgramObject.artifactPath);
|
|
908
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
|
+
}
|
|
909
1228
|
}
|
|
910
1229
|
catch (err) {
|
|
911
1230
|
if (err instanceof RuntimePackError) {
|
|
@@ -926,15 +1245,10 @@ async function compileTracked(entryPath, opts, frontendInputs, warningSink) {
|
|
|
926
1245
|
if (nativeProgramObject !== null) {
|
|
927
1246
|
await removeNativeProgramObject(nativeProgramObject.linkPath, nativeProgramObject.partitionPaths);
|
|
928
1247
|
}
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
native: nativeFeatures,
|
|
934
|
-
executableRestored: false,
|
|
935
|
-
frontend: frontendInputs.snapshot(),
|
|
936
|
-
...(irPath === undefined ? {} : { irPath }),
|
|
937
|
-
}).catch(() => undefined);
|
|
1248
|
+
if (stagedDir === null)
|
|
1249
|
+
await installBuildSources(buildSources);
|
|
1250
|
+
else
|
|
1251
|
+
await rm(stagedDir, { recursive: true, force: true });
|
|
938
1252
|
}
|
|
939
1253
|
await pruneBuildCache(cacheRoot);
|
|
940
1254
|
timing("complete");
|
|
@@ -974,6 +1288,7 @@ function libraryNativeFeatures(mod, backend) {
|
|
|
974
1288
|
copying: features.copying,
|
|
975
1289
|
textDecoderLegacy: features.legacyTextDecoder,
|
|
976
1290
|
dynInvoke: features.dynInvoke,
|
|
1291
|
+
...(features.dynBuffer ? { dynBuffer: true } : {}),
|
|
977
1292
|
...(features.dynTier ? { dynTier: true } : {}),
|
|
978
1293
|
...(mod.lib?.identity !== undefined ? { buildId: mod.lib.identity.buildId } : {}),
|
|
979
1294
|
};
|
|
@@ -1048,6 +1363,7 @@ async function compileLibraryNative(profile, llvmPath, archivePath, sanitize, fe
|
|
|
1048
1363
|
copying: features.copying,
|
|
1049
1364
|
textDecoderLegacy: features.textDecoderLegacy,
|
|
1050
1365
|
dynInvoke: features.dynInvoke,
|
|
1366
|
+
...(features.dynBuffer === true ? { dynBuffer: true } : {}),
|
|
1051
1367
|
...(features.dynTier === true ? { dynTier: true } : {}),
|
|
1052
1368
|
};
|
|
1053
1369
|
if (packTarget !== null)
|