@scriptc/compiler 0.4.2 → 0.4.4
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 +470 -66
- package/dist/backend/cycle-analysis.d.ts +4 -1
- package/dist/backend/cycle-analysis.js +6 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +55 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +7 -0
- package/dist/backend/cycle-mutability.js +19 -1
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +2 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +6 -3
- package/dist/backend/immutability.js +33 -29
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +1 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +16 -1
- package/dist/backend/llvm/alloc.js +54 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
- package/dist/backend/llvm/appended-array-literals.js +44 -36
- package/dist/backend/llvm/appended-array-literals.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +4 -3
- package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
- package/dist/backend/llvm/array-search.d.ts +4 -3
- package/dist/backend/llvm/array-search.js +21 -9
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/blocks.d.ts +1 -1
- package/dist/backend/llvm/blocks.js +2 -2
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/byte-windows.js +2 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +6 -1
- package/dist/backend/llvm/bytes-alias.js +8 -2
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +47 -5
- package/dist/backend/llvm/bytes-loop-versions.js +479 -32
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +263 -2
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +7 -5
- package/dist/backend/llvm/classes.js +44 -20
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +167 -7
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +9 -3
- package/dist/backend/llvm/common.js +9 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
- package/dist/backend/llvm/constant-callbacks.js +83 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +7 -0
- package/dist/backend/llvm/counted-loops.js +18 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/debug-info.js +2 -5
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +39 -8
- package/dist/backend/llvm/dense-array-access.js +222 -52
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +36 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +17 -1
- package/dist/backend/llvm/dense-array-loops.js +194 -5
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +90 -1
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +30 -0
- package/dist/backend/llvm/dyn.js +373 -70
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +13 -28
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +93 -0
- package/dist/backend/llvm/emit-journal.js +170 -0
- package/dist/backend/llvm/emit-journal.js.map +1 -0
- package/dist/backend/llvm/emit-module.js +211 -33
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -4
- package/dist/backend/llvm/emit-statements.js +268 -84
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter-state.d.ts +7 -0
- package/dist/backend/llvm/emitter-state.js +14 -0
- package/dist/backend/llvm/emitter-state.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +186 -37
- package/dist/backend/llvm/emitter.js +733 -90
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +65 -7
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +11 -13
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +48 -20
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +47 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +28 -14
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +14 -2
- package/dist/backend/llvm/expr-containers.js +143 -37
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +14 -0
- package/dist/backend/llvm/expr-dynamic.js +18 -11
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +119 -38
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +11 -6
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +12 -0
- package/dist/backend/llvm/expr-records.js +106 -0
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-bridges.js +210 -69
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +74 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
- package/dist/backend/llvm/int32-kind-loops.js +106 -0
- package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +25 -1
- package/dist/backend/llvm/integer-values.js +95 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +1 -1
- package/dist/backend/llvm/js-ic.js +1 -1
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/key-orders.d.ts +7 -0
- package/dist/backend/llvm/key-orders.js +33 -0
- package/dist/backend/llvm/key-orders.js.map +1 -0
- package/dist/backend/llvm/lib-connect.js +4 -0
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +11 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +213 -5
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +4 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +4 -0
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +16 -6
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +37 -1
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +94 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +35 -5
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +115 -19
- 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/loop-state.d.ts +33 -0
- package/dist/backend/llvm/loop-state.js +42 -0
- package/dist/backend/llvm/loop-state.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
- package/dist/backend/llvm/map-number-lookup.js +91 -31
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +55 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.js +4 -2
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +2 -1
- package/dist/backend/llvm/nullable-unions.js +15 -3
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +10 -0
- package/dist/backend/llvm/publish.js +15 -3
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/receivers.js +6 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +1 -9
- package/dist/backend/llvm/record-results.js +2 -11
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +3 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +7 -2
- package/dist/backend/llvm/reference-writes.js +89 -72
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/running-extrema.d.ts +11 -0
- package/dist/backend/llvm/running-extrema.js +115 -0
- package/dist/backend/llvm/running-extrema.js.map +1 -0
- package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
- package/dist/backend/llvm/running-extrema.test.js +89 -0
- package/dist/backend/llvm/running-extrema.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +71 -15
- package/dist/backend/llvm/shapes.js +224 -40
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +53 -7
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +6 -0
- package/dist/backend/llvm/speculative-integers.js +2 -2
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/stack-captures.js +1 -5
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +3 -2
- package/dist/backend/llvm/stack-objects.js +5 -2
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +12 -0
- package/dist/backend/llvm/string-reads.js +44 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/union-repr.d.ts +4 -3
- package/dist/backend/llvm/union-repr.js +6 -5
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/walk-borrows.d.ts +3 -0
- package/dist/backend/llvm/walk-borrows.js +46 -41
- package/dist/backend/llvm/walk-borrows.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +3 -0
- package/dist/backend/llvm/walkers.js +101 -65
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
- package/dist/backend/llvm/wrapping-sums.js +126 -0
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/may-throw.d.ts +8 -10
- package/dist/backend/may-throw.js +14 -10
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -0
- package/dist/backend/native/executable.js +7 -0
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +5 -3
- package/dist/backend/native-codegen-core.js +13 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.test.js +6 -4
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +4 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.d.ts +12 -1
- package/dist/backend/publication.js +37 -14
- package/dist/backend/publication.js.map +1 -1
- package/dist/backend/publication.test.js +30 -0
- package/dist/backend/publication.test.js.map +1 -1
- package/dist/backend/result-slots.d.ts +16 -0
- package/dist/backend/result-slots.js +23 -0
- package/dist/backend/result-slots.js.map +1 -0
- 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 -0
- package/dist/backend/runtime-pack-core.js +1 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +2 -1
- package/dist/backend/stack-observations.js +67 -42
- package/dist/backend/stack-observations.js.map +1 -1
- package/dist/backend/target-cpu.d.ts +26 -0
- package/dist/backend/target-cpu.js +98 -0
- package/dist/backend/target-cpu.js.map +1 -0
- package/dist/backend/target-cpu.test.d.ts +1 -0
- package/dist/backend/target-cpu.test.js +38 -0
- package/dist/backend/target-cpu.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +5 -3
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +20 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +10 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +1 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.js +4 -3
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.js +10 -2
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.js +12 -3
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js +1 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +3 -0
- package/dist/diagnostics/envelope.js +1 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +5 -0
- package/dist/executable/executable-cache.js +5 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +3 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +41 -0
- package/dist/frontend/decl-projection.js +949 -0
- package/dist/frontend/decl-projection.js.map +1 -0
- package/dist/frontend/decl-projection.test.d.ts +1 -0
- package/dist/frontend/decl-projection.test.js +30 -0
- package/dist/frontend/decl-projection.test.js.map +1 -0
- package/dist/frontend/dts-paths.d.ts +15 -0
- package/dist/frontend/dts-paths.js +25 -0
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +6 -0
- package/dist/frontend/input-tracker.js +51 -28
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +19 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +100 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
- package/dist/frontend/lowering/builtins/async-context.js +62 -3
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.js +13 -2
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +87 -10
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.js +4 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +3 -3
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
- package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
- package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +6 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +9 -1
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +7 -1
- package/dist/frontend/lowering/builtins/promises.js +236 -139
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
- package/dist/frontend/lowering/builtins/readline.js +35 -3
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +24 -1
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +6 -3
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +0 -1
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
- package/dist/frontend/lowering/cjs-inline-require.js +307 -4
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
- package/dist/frontend/lowering/class-callbacks.js +82 -12
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +4 -1
- package/dist/frontend/lowering/class-construction.js +17 -3
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +49 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js +880 -108
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +47 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +2 -1
- package/dist/frontend/lowering/class-iterables.js +9 -1
- package/dist/frontend/lowering/class-iterables.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +83 -24
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +25 -0
- package/dist/frontend/lowering/class-protocols.js +183 -1
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +31 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
- package/dist/frontend/lowering/class-runtime-statics.js +29 -4
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +91 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
- package/dist/frontend/lowering/completion-callbacks.js +146 -0
- package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
- package/dist/frontend/lowering/containers/array-callbacks.js +345 -24
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +10 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +5 -0
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +26 -3
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +19 -8
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
- package/dist/frontend/lowering/containers/bytes.js +455 -46
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +3 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +7 -2
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +55 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +43 -19
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/date-values.d.ts +11 -0
- package/dist/frontend/lowering/date-values.js +207 -0
- package/dist/frontend/lowering/date-values.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.js +15 -1
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.js +9 -1
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/error-methods.js +47 -2
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +53 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +100 -28
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +169 -13
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +64 -5
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +95 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/object-literals.js +138 -51
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +12 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +168 -10
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +212 -33
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +6 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js +4 -0
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +39 -3
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +28 -0
- package/dist/frontend/lowering/frozen-records.js +322 -0
- package/dist/frontend/lowering/frozen-records.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +64 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +7 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
- package/dist/frontend/lowering/indexed-unions.js +401 -0
- package/dist/frontend/lowering/indexed-unions.js.map +1 -0
- package/dist/frontend/lowering/iterable-values.d.ts +49 -0
- package/dist/frontend/lowering/iterable-values.js +297 -0
- package/dist/frontend/lowering/iterable-values.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.js +186 -1
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
- package/dist/frontend/lowering/js-class-fields.js +45 -10
- package/dist/frontend/lowering/js-class-fields.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +18 -3
- package/dist/frontend/lowering/key-order-witness.js +974 -48
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +530 -10
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +15 -3
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +4 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +7 -0
- package/dist/frontend/lowering/lower-calls.js +462 -44
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +11 -2
- package/dist/frontend/lowering/lower-classes.js +324 -69
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -1
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +215 -3
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +11 -0
- package/dist/frontend/lowering/lower-functions.js +83 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +42 -32
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +6 -3
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +53 -17
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +53 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +5 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +2 -2
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
- package/dist/frontend/lowering/lower-stdlib.js +30 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
- package/dist/frontend/lowering/lower-stmts.js +553 -81
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +20 -2
- package/dist/frontend/lowering/lower-stream.js +1483 -156
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +107 -8
- package/dist/frontend/lowering/lowerer.js +381 -36
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
- package/dist/frontend/lowering/module-namespace-elements.js +82 -5
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/new-target.d.ts +12 -0
- package/dist/frontend/lowering/new-target.js +280 -0
- package/dist/frontend/lowering/new-target.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
- package/dist/frontend/lowering/object-factory-new.js +20 -6
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/overload-choice.d.ts +33 -0
- package/dist/frontend/lowering/overload-choice.js +190 -0
- package/dist/frontend/lowering/overload-choice.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -0
- package/dist/frontend/lowering/surfaces.js +73 -8
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/undefined-index.d.ts +27 -0
- package/dist/frontend/lowering/undefined-index.js +82 -0
- package/dist/frontend/lowering/undefined-index.js.map +1 -0
- package/dist/frontend/lowering/var-hoisting.js +29 -13
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +18 -0
- package/dist/frontend/npm-static-bundled-chunks.js +9 -11
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static.js +4 -20
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +3 -0
- package/dist/frontend/package-shims.js +71 -8
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.js +19 -11
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/process-fork.d.ts +25 -0
- package/dist/frontend/process-fork.js +2 -0
- package/dist/frontend/process-fork.js.map +1 -0
- package/dist/frontend/program-analysis.d.ts +5 -1
- package/dist/frontend/program-analysis.js +5 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +21 -6
- package/dist/frontend/program.js +681 -83
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +43 -3
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/token-equivalence.d.ts +3 -0
- package/dist/frontend/token-equivalence.js +409 -0
- package/dist/frontend/token-equivalence.js.map +1 -0
- package/dist/frontend/token-equivalence.test.d.ts +1 -0
- package/dist/frontend/token-equivalence.test.js +67 -0
- package/dist/frontend/token-equivalence.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +22 -0
- package/dist/frontend/ts7/ast-node.js +1048 -103
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +24 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +4 -3
- package/dist/frontend/ts7/ast-wire.js +34 -24
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.test.js +23 -0
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +3 -4
- package/dist/frontend/ts7/checker-backend.js +2 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +5 -9
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +4 -0
- package/dist/frontend/ts7/checker.js +7 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
- package/dist/frontend/ts7/lib-diagnostics.js +307 -0
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +25 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +3 -0
- package/dist/frontend/ts7/semantic-model.js +5 -0
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +6 -1
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +1 -1
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +14 -1
- package/dist/frontend/ts7/session.js +22 -0
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +13 -1
- package/dist/frontend/type-mapper.js +229 -20
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +5 -3
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +4 -0
- package/dist/ir/array-length-stability.js +19 -6
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +24 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.d.ts +7 -0
- package/dist/ir/builtin-effects.js +60 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +6 -4
- package/dist/ir/builtin-signatures.js +222 -13
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +2 -1
- package/dist/ir/callback-specialization.js +23 -18
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +19 -0
- package/dist/ir/char-unit-locals.js +185 -0
- package/dist/ir/char-unit-locals.js.map +1 -0
- package/dist/ir/char-unit-locals.test.d.ts +1 -0
- package/dist/ir/char-unit-locals.test.js +94 -0
- package/dist/ir/char-unit-locals.test.js.map +1 -0
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +14 -16
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +2 -0
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +3 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/initializer-bindings.d.ts +2 -1
- package/dist/ir/initializer-bindings.js +27 -20
- package/dist/ir/initializer-bindings.js.map +1 -1
- package/dist/ir/int32-arrays.d.ts +108 -0
- package/dist/ir/int32-arrays.js +831 -0
- package/dist/ir/int32-arrays.js.map +1 -0
- package/dist/ir/int32-slots.d.ts +24 -2
- package/dist/ir/int32-slots.js +266 -57
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +33 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +3 -3
- package/dist/ir/integer-loops.js +28 -10
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +10 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +5 -0
- package/dist/ir/integer-ranges.js +125 -12
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +30 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +83 -10
- package/dist/ir/ir.js +77 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +23 -2
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +4 -0
- package/dist/ir/js-ic.js +17 -1
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +46 -0
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +57 -0
- package/dist/ir/node-index.js +215 -0
- package/dist/ir/node-index.js.map +1 -0
- package/dist/ir/paired-while-loops.d.ts +25 -0
- package/dist/ir/paired-while-loops.js +335 -0
- package/dist/ir/paired-while-loops.js.map +1 -0
- package/dist/ir/paired-while-loops.test.d.ts +1 -0
- package/dist/ir/paired-while-loops.test.js +163 -0
- package/dist/ir/paired-while-loops.test.js.map +1 -0
- package/dist/ir/parameter-versions.d.ts +25 -0
- package/dist/ir/parameter-versions.js +300 -0
- package/dist/ir/parameter-versions.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +34 -13
- package/dist/ir/runtime-features.js +177 -39
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/serialize.d.ts +12 -2
- package/dist/ir/serialize.js +16 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +17 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/traverse.js +18 -6
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +167 -40
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +3 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cache.d.ts +6 -1
- package/dist/native/cache.js +28 -5
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +16 -2
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +21 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +8 -6
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache.d.ts +1 -1
- package/dist/native/executable-cache.js +2 -2
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +4 -2
- package/dist/native/prepare.js +130 -32
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +96 -20
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.test.js +2 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/text-file.d.ts +13 -3
- package/dist/native/text-file.js +63 -9
- package/dist/native/text-file.js.map +1 -1
- package/dist/native/text-file.test.d.ts +1 -0
- package/dist/native/text-file.test.js +49 -0
- package/dist/native/text-file.test.js.map +1 -0
- package/dist/native/toolchain.js +4 -4
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +3 -3
- package/dist/native/toolchain.test.js.map +1 -1
- package/package.json +21 -21
- package/shims/chalk/v5.ts +688 -0
- package/shims/hono-node-server/v2.ts +645 -0
- package/shims/hot-shots/client.ts +1126 -0
- package/shims/hot-shots/v8-unix-dgram.ts +8 -0
- package/shims/hot-shots/v8.ts +8 -0
- package/surface-manifest.json +27 -7
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
export class EmitJournal {
|
|
2
|
+
entries = [];
|
|
3
|
+
/** The replayable definitions being built, innermost last. */
|
|
4
|
+
open = [];
|
|
5
|
+
/** The definitions still open (empty between functions). */
|
|
6
|
+
get unclosed() {
|
|
7
|
+
return this.open;
|
|
8
|
+
}
|
|
9
|
+
/** Keys already recorded per table. */
|
|
10
|
+
recorded = new Map();
|
|
11
|
+
/** A keyed helper, recorded when its number is taken, before anything its
|
|
12
|
+
* definition creates in turn: that keeps the serial numbering order.
|
|
13
|
+
* Replaying a helper that exists answers its name, so helpers created
|
|
14
|
+
* inside another helper's definition are recorded too. Opens the
|
|
15
|
+
* definition, which the creating entry point closes with `built`. */
|
|
16
|
+
allocated(name, op, args) {
|
|
17
|
+
this.entries.push({ kind: "op", name, op, args });
|
|
18
|
+
this.open.push(op);
|
|
19
|
+
}
|
|
20
|
+
/** Opens a definition whose helper is not replayed itself (its
|
|
21
|
+
* entry point records the request with `used`). */
|
|
22
|
+
opened(op) {
|
|
23
|
+
this.open.push(op);
|
|
24
|
+
}
|
|
25
|
+
/** A request, made outside any definition, of the helper `name` that an
|
|
26
|
+
* entry point answered; recorded once per name. Replay makes the same
|
|
27
|
+
* request. */
|
|
28
|
+
used(name, op, args) {
|
|
29
|
+
if (this.open.length !== 0)
|
|
30
|
+
return;
|
|
31
|
+
if (this.usedNames.has(name))
|
|
32
|
+
return;
|
|
33
|
+
this.usedNames.add(name);
|
|
34
|
+
this.entries.push({ kind: "op", name, op, args });
|
|
35
|
+
}
|
|
36
|
+
usedNames = new Set();
|
|
37
|
+
/** Closes the definition `allocated` or `opened` opened. */
|
|
38
|
+
built() {
|
|
39
|
+
if (this.open.pop() === undefined)
|
|
40
|
+
this.overclosed = true;
|
|
41
|
+
}
|
|
42
|
+
/** A `built` closed a definition no `allocated` opened. */
|
|
43
|
+
overclosed = false;
|
|
44
|
+
/** An unkeyed site (one per use). Sites taken while a definition is built
|
|
45
|
+
* are taken again when the merging emitter replays that definition. */
|
|
46
|
+
site(name, op, args = []) {
|
|
47
|
+
if (this.open.length === 0)
|
|
48
|
+
this.entries.push({ kind: "op", name, op, args });
|
|
49
|
+
}
|
|
50
|
+
/** A request of `key` in a module-level table. Only the first request
|
|
51
|
+
* made outside any definition is recorded: requests made while a
|
|
52
|
+
* definition is built happen again when it is replayed. */
|
|
53
|
+
entry(table, key, value) {
|
|
54
|
+
if (this.open.length !== 0)
|
|
55
|
+
return;
|
|
56
|
+
let keys = this.recorded.get(table);
|
|
57
|
+
if (keys === undefined)
|
|
58
|
+
this.recorded.set(table, (keys = new Set()));
|
|
59
|
+
if (keys.has(key))
|
|
60
|
+
return;
|
|
61
|
+
keys.add(key);
|
|
62
|
+
this.entries.push({ kind: "entry", table, key, value });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const replays = new Map();
|
|
66
|
+
/** Registers the entry point that creates (or finds) a numbered helper or
|
|
67
|
+
* site from its recorded arguments and answers its name. */
|
|
68
|
+
export function registerReplay(op, replay) {
|
|
69
|
+
replays.set(op, replay);
|
|
70
|
+
}
|
|
71
|
+
/** Replays a range's entries on the merging emitter, in record order, and
|
|
72
|
+
* records the renames from the range's names to its own in `names`. */
|
|
73
|
+
export function replayJournal(emitter, entries, names, tags) {
|
|
74
|
+
for (const entry of entries) {
|
|
75
|
+
if (entry.kind === "entry") {
|
|
76
|
+
emitter.applyJournalEntry(entry.table, entry.key, entry.value, names, tags);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const replay = replays.get(entry.op);
|
|
80
|
+
if (replay === undefined)
|
|
81
|
+
throw new Error(`llvm emitter bug: no replay for journal entry ${entry.op}`);
|
|
82
|
+
const own = stripSigil(replay(emitter, entry.args));
|
|
83
|
+
const local = stripSigil(entry.name);
|
|
84
|
+
if (own !== local)
|
|
85
|
+
names.set(local, own);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** The rename of a range's text: numbered names (`names`, without the
|
|
89
|
+
* sigil) and field alias tags (`tags`). One scan for each kind of name:
|
|
90
|
+
* a numbered name starts `sc_` after a character that cannot be part of a
|
|
91
|
+
* name, and ends at the last digit after its counter prefix. */
|
|
92
|
+
export function renameChunk(names, tags) {
|
|
93
|
+
const prefixes = new Set();
|
|
94
|
+
for (const name of names.keys())
|
|
95
|
+
prefixes.add(name.replace(/\d+$/, ""));
|
|
96
|
+
if (prefixes.size === 0 && tags.size === 0)
|
|
97
|
+
return (text) => text;
|
|
98
|
+
return (text) => {
|
|
99
|
+
let out = prefixes.size === 0 ? text : renameNames(text, names, prefixes);
|
|
100
|
+
if (tags.size > 0)
|
|
101
|
+
out = renameTags(out, tags);
|
|
102
|
+
return out;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function renameNames(text, names, prefixes) {
|
|
106
|
+
const parts = [];
|
|
107
|
+
let copied = 0;
|
|
108
|
+
for (let at = text.indexOf("sc_"); at >= 0; at = text.indexOf("sc_", at + 3)) {
|
|
109
|
+
if (at > 0 && isNameChar(text.charCodeAt(at - 1)))
|
|
110
|
+
continue;
|
|
111
|
+
// The counter prefix ends where the digits start; the number ends at
|
|
112
|
+
// the last digit.
|
|
113
|
+
let end = at + 3;
|
|
114
|
+
while (end < text.length && isNameChar(text.charCodeAt(end)) && !isDigit(text.charCodeAt(end)))
|
|
115
|
+
end++;
|
|
116
|
+
if (end === text.length || !isDigit(text.charCodeAt(end)))
|
|
117
|
+
continue;
|
|
118
|
+
if (!prefixes.has(text.slice(at, end)))
|
|
119
|
+
continue;
|
|
120
|
+
let last = end;
|
|
121
|
+
while (last < text.length && isDigit(text.charCodeAt(last)))
|
|
122
|
+
last++;
|
|
123
|
+
const own = names.get(text.slice(at, last));
|
|
124
|
+
if (own === undefined)
|
|
125
|
+
continue;
|
|
126
|
+
parts.push(text.slice(copied, at), own);
|
|
127
|
+
copied = last;
|
|
128
|
+
}
|
|
129
|
+
if (copied === 0)
|
|
130
|
+
return text;
|
|
131
|
+
parts.push(text.slice(copied));
|
|
132
|
+
return parts.join("");
|
|
133
|
+
}
|
|
134
|
+
function renameTags(text, tags) {
|
|
135
|
+
const marker = "!tbaa !";
|
|
136
|
+
const parts = [];
|
|
137
|
+
let copied = 0;
|
|
138
|
+
for (let at = text.indexOf(marker); at >= 0; at = text.indexOf(marker, at + marker.length)) {
|
|
139
|
+
const start = at + marker.length;
|
|
140
|
+
let end = start;
|
|
141
|
+
while (end < text.length && isDigit(text.charCodeAt(end)))
|
|
142
|
+
end++;
|
|
143
|
+
const own = tags.get(Number(text.slice(start, end)));
|
|
144
|
+
if (own === undefined)
|
|
145
|
+
continue;
|
|
146
|
+
parts.push(text.slice(copied, start), String(own));
|
|
147
|
+
copied = end;
|
|
148
|
+
}
|
|
149
|
+
if (copied === 0)
|
|
150
|
+
return text;
|
|
151
|
+
parts.push(text.slice(copied));
|
|
152
|
+
return parts.join("");
|
|
153
|
+
}
|
|
154
|
+
/** `[-$._A-Za-z0-9]`: a character of an LLVM identifier. */
|
|
155
|
+
function isNameChar(code) {
|
|
156
|
+
return ((code >= 48 && code <= 57) ||
|
|
157
|
+
(code >= 65 && code <= 90) ||
|
|
158
|
+
(code >= 97 && code <= 122) ||
|
|
159
|
+
code === 95 ||
|
|
160
|
+
code === 36 ||
|
|
161
|
+
code === 45 ||
|
|
162
|
+
code === 46);
|
|
163
|
+
}
|
|
164
|
+
function isDigit(code) {
|
|
165
|
+
return code >= 48 && code <= 57;
|
|
166
|
+
}
|
|
167
|
+
function stripSigil(name) {
|
|
168
|
+
return name.startsWith("@") ? name.slice(1) : name;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=emit-journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-journal.js","sourceRoot":"","sources":["../../../src/backend/llvm/emit-journal.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,15 +2,19 @@
|
|
|
2
2
|
import { relieveHeapPressure } from "../../heap-pressure.js";
|
|
3
3
|
import { emitWasmModules } from "./wasm-modules.js";
|
|
4
4
|
import { ffiCallbackDummyLl, llStrBytes } from "./emitter.js";
|
|
5
|
+
import { EmitJournal } from "./emit-journal.js";
|
|
6
|
+
import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
5
9
|
import { JS_IC_WORDS } from "./js-ic.js";
|
|
6
10
|
import { mangleAsyncSpawn, mangleClassObj, mangleFnClosure, mangleFunction, mangleGlobal, mangleVtInstance, } from "../mangle.js";
|
|
7
11
|
import { RUNTIME_ERROR_CLASSES, RUNTIME_EVENT_CLASS, RUNTIME_EVENT_TARGET_CLASS, ffiCallbackType, isFfiContextParam, isRefCounted, typeKey, } from "../../ir/ir.js";
|
|
8
|
-
import { FN_ATTRS,
|
|
12
|
+
import { FN_ATTRS, limitInlineReleases, releaseSym, typedRefConstructor, vAdapters, } from "./shapes.js";
|
|
9
13
|
import { emitLlvmLayouts } from "./layouts.js";
|
|
10
14
|
import { emitArraySearchHelpers } from "./array-search.js";
|
|
11
15
|
import { emitClassMembershipHelper } from "./classes.js";
|
|
12
16
|
import { compileRegexMatcher } from "./regex-matchers.js";
|
|
13
|
-
import { MAP_ITER_DECL, MAP_ITER_NUM_DECL, SCR_MAP_NUM_DEAD, NUMBER_MAP_ENTRY_DECL, STRING_MAP_ENTRY_DECL, } from "./map-number-lookup.js";
|
|
17
|
+
import { MAP_ITER_DECL, MAP_SIZE_DECL, MAP_ITER_NUM_DECL, SCR_MAP_NUM_DEAD, NUMBER_MAP_ENTRY_DECL, STRING_MAP_ENTRY_C_DECL, STRING_MAP_ENTRY_DECL, } from "./map-number-lookup.js";
|
|
14
18
|
import { RUNTIME_ABI_MARKER } from "../runtime-abi.js";
|
|
15
19
|
import { threadSlotsBlockDefinitions } from "./thread-slots.js";
|
|
16
20
|
import { ABSENT_FIELD_PAYLOAD, exactIndexLines, f64Lit, ffiNativeParamLl, ffiNativeReturnLl, ffiNativeTypeLl, } from "./common.js";
|
|
@@ -22,16 +26,165 @@ import { literalEqualityDefinition } from "./string-literal-equality.js";
|
|
|
22
26
|
import { STRING_READ_HELPERS, stringScanDecl } from "./string-reads.js";
|
|
23
27
|
import { emitLibraryIdentityLines } from "../library-identity-markers.js";
|
|
24
28
|
import { InternalCompilerError } from "../../errors.js";
|
|
29
|
+
import { targetCpuAttribute } from "../target-cpu.js";
|
|
30
|
+
/** The function bodies emitted in `chunks` contiguous ranges, each by its
|
|
31
|
+
* own emitter (LlEmitter.chunkEmitter), then merged in function order: the
|
|
32
|
+
* text one emitter gives. */
|
|
33
|
+
function emitFunctionsInChunks(emitter, chunks) {
|
|
34
|
+
const functions = emitter.mod.functions;
|
|
35
|
+
const size = Math.ceil(functions.length / chunks);
|
|
36
|
+
const ranges = [];
|
|
37
|
+
for (let start = 0; start < functions.length; start += size) {
|
|
38
|
+
const chunk = emitter.chunkEmitter();
|
|
39
|
+
const texts = functions.slice(start, start + size).map((fn) => {
|
|
40
|
+
const text = chunk.emitFunction(fn);
|
|
41
|
+
if (chunk.journal.overclosed)
|
|
42
|
+
throw new Error(`llvm emitter bug: journal definition closed twice in ${fn.name}`);
|
|
43
|
+
if (chunk.journal.unclosed.length > 0)
|
|
44
|
+
throw new Error(`llvm emitter bug: unclosed journal definitions after ${fn.name}: ${chunk.journal.unclosed.join(", ")}`);
|
|
45
|
+
return text;
|
|
46
|
+
});
|
|
47
|
+
ranges.push({ chunk, texts });
|
|
48
|
+
}
|
|
49
|
+
const fnDefs = [];
|
|
50
|
+
for (const { chunk, texts } of ranges) {
|
|
51
|
+
// The plain-data result a worker process would write, round-tripped.
|
|
52
|
+
const result = JSON.parse(JSON.stringify(chunk.chunkResult()));
|
|
53
|
+
const rename = emitter.mergeChunk(result);
|
|
54
|
+
for (const text of texts) {
|
|
55
|
+
const def = rename(text);
|
|
56
|
+
emitter.fnDefText.set(functions[fnDefs.length].name, def);
|
|
57
|
+
fnDefs.push(def);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return fnDefs;
|
|
61
|
+
}
|
|
62
|
+
/** Modules with fewer functions emit in one process: forking and merging
|
|
63
|
+
* would cost more than the workers save (SCRIPTC_EMIT_WORKER_FUNCTIONS
|
|
64
|
+
* lowers it, for tests). */
|
|
65
|
+
function workerMinFunctions() {
|
|
66
|
+
const value = Number(process.env["SCRIPTC_EMIT_WORKER_FUNCTIONS"] ?? "2000");
|
|
67
|
+
return Number.isFinite(value) && value > 0 ? value : 2000;
|
|
68
|
+
}
|
|
69
|
+
/** The function bodies emitted on forked worker processes, `workers` at a
|
|
70
|
+
* time: the function list splits into contiguous ranges, each emitted in
|
|
71
|
+
* its own process, which inherits this emitter as it is at the fork and
|
|
72
|
+
* records a journal (emit-journal.ts). Ranges merge in function order, so
|
|
73
|
+
* the text is the serial text. A range whose worker fails is emitted here
|
|
74
|
+
* when its turn comes. Null without fork primitives (Node, Windows, inside
|
|
75
|
+
* a worker) or when the module is small. */
|
|
76
|
+
function emitFunctionsOnWorkers(emitter, workers) {
|
|
77
|
+
const fork = emitter.targetOptions.forkPrimitives;
|
|
78
|
+
const functions = emitter.mod.functions;
|
|
79
|
+
if (fork === undefined || workers < 2)
|
|
80
|
+
return null;
|
|
81
|
+
if (functions.length < workerMinFunctions())
|
|
82
|
+
return null;
|
|
83
|
+
// More ranges than workers: a range's merge overlaps the later ranges'
|
|
84
|
+
// emission, and a slow range holds back less.
|
|
85
|
+
const count = Math.min(functions.length, workers * 3);
|
|
86
|
+
const size = Math.ceil(functions.length / count);
|
|
87
|
+
const dir = mkdtempSync(join(tmpdir(), "scriptc-emit-"));
|
|
88
|
+
const pids = [];
|
|
89
|
+
const start = (range) => {
|
|
90
|
+
const pid = fork.fork();
|
|
91
|
+
if (pid === 0) {
|
|
92
|
+
let code = 1;
|
|
93
|
+
try {
|
|
94
|
+
emitter.journal = new EmitJournal();
|
|
95
|
+
const texts = [];
|
|
96
|
+
for (const fn of functions.slice(range * size, (range + 1) * size)) {
|
|
97
|
+
texts.push(emitter.emitFunction(fn));
|
|
98
|
+
relieveHeapPressure();
|
|
99
|
+
}
|
|
100
|
+
writeFileSync(join(dir, `${range}.json`), JSON.stringify(emitter.chunkResult()));
|
|
101
|
+
// Function text never holds NUL, so it separates the functions.
|
|
102
|
+
writeFileSync(join(dir, `${range}.ll`), texts.join("\0"));
|
|
103
|
+
code = 0;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// The parent emits the range itself.
|
|
107
|
+
}
|
|
108
|
+
fork.exit(code);
|
|
109
|
+
}
|
|
110
|
+
pids.push(pid);
|
|
111
|
+
};
|
|
112
|
+
const fnDefs = [];
|
|
113
|
+
try {
|
|
114
|
+
for (let range = 0; range < Math.min(workers, count); range++)
|
|
115
|
+
start(range);
|
|
116
|
+
for (let range = 0; range < count; range++) {
|
|
117
|
+
const pid = pids[range];
|
|
118
|
+
const status = pid > 0 ? fork.wait(pid) : -1;
|
|
119
|
+
// The next worker starts from this emitter as merged so far, which
|
|
120
|
+
// the journal allows: it records requests, not table contents.
|
|
121
|
+
const merged = status === 0 ? readRange(dir, range) : null;
|
|
122
|
+
const slice = functions.slice(range * size, (range + 1) * size);
|
|
123
|
+
if (merged !== null && merged.texts.length === slice.length) {
|
|
124
|
+
const rename = emitter.mergeChunk(merged.result);
|
|
125
|
+
slice.forEach((fn, index) => {
|
|
126
|
+
const def = rename(merged.texts[index]);
|
|
127
|
+
emitter.fnDefText.set(fn.name, def);
|
|
128
|
+
fnDefs.push(def);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
else
|
|
132
|
+
for (const fn of slice) {
|
|
133
|
+
const def = emitter.emitFunction(fn);
|
|
134
|
+
emitter.fnDefText.set(fn.name, def);
|
|
135
|
+
fnDefs.push(def);
|
|
136
|
+
relieveHeapPressure();
|
|
137
|
+
}
|
|
138
|
+
if (pids.length < count)
|
|
139
|
+
start(pids.length);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
rmSync(dir, { recursive: true, force: true });
|
|
144
|
+
}
|
|
145
|
+
return fnDefs;
|
|
146
|
+
}
|
|
147
|
+
/** A worker's range result, or null when its files are missing. */
|
|
148
|
+
function readRange(dir, range) {
|
|
149
|
+
try {
|
|
150
|
+
const result = JSON.parse(readFileSync(join(dir, `${range}.json`), "utf8"));
|
|
151
|
+
const texts = readFileSync(join(dir, `${range}.ll`), "utf8").split("\0");
|
|
152
|
+
return { result, texts };
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** The attribute groups of the emitted functions: #0 for every function,
|
|
159
|
+
* #1 for coroutine bodies and #2 for out-of-line record clones. Each carries
|
|
160
|
+
* the build's `--target-cpu` level. */
|
|
161
|
+
function functionAttributes(emitter, hasNoInlineRecordClone) {
|
|
162
|
+
const cpu = targetCpuAttribute(emitter.targetCpu);
|
|
163
|
+
return [
|
|
164
|
+
`attributes #0 = { sanitize_address${cpu} }`,
|
|
165
|
+
...(emitter.usesCoroutines
|
|
166
|
+
? [`attributes #1 = { sanitize_address presplitcoroutine${cpu} }`]
|
|
167
|
+
: []),
|
|
168
|
+
...(hasNoInlineRecordClone ? [`attributes #2 = { noinline sanitize_address${cpu} }`] : []),
|
|
169
|
+
];
|
|
170
|
+
}
|
|
25
171
|
export function emitModuleParts(emitter) {
|
|
26
172
|
// Function bodies first (the literal/unit/fn-value tables fill as they
|
|
27
173
|
// emit), then the file assembles around them — the runtime ABI’s order.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
174
|
+
// Debug metadata is numbered per emitter and not journaled, so a debug
|
|
175
|
+
// build emits every body here.
|
|
176
|
+
const ranges = emitter.debug === null;
|
|
177
|
+
const chunks = emitter.targetOptions.functionChunks ?? 1;
|
|
178
|
+
const fnDefs = (ranges && chunks > 1 ? emitFunctionsInChunks(emitter, chunks) : null) ??
|
|
179
|
+
(ranges ? emitFunctionsOnWorkers(emitter, emitter.targetOptions.functionWorkers ?? 1) : null) ??
|
|
180
|
+
[];
|
|
181
|
+
if (fnDefs.length === 0)
|
|
182
|
+
for (const fn of emitter.mod.functions) {
|
|
183
|
+
const def = emitter.emitFunction(fn);
|
|
184
|
+
fnDefs.push(def);
|
|
185
|
+
emitter.fnDefText.set(fn.name, def);
|
|
186
|
+
relieveHeapPressure();
|
|
187
|
+
}
|
|
35
188
|
emitter.selectStacklessAsync(fnDefs);
|
|
36
189
|
const errorViews = [];
|
|
37
190
|
for (const property of ["name", "message"])
|
|
@@ -389,15 +542,18 @@ export function emitModuleParts(emitter) {
|
|
|
389
542
|
// RC fast paths test the traced byte (shapes.ts).
|
|
390
543
|
...(emitter.rcHelpers === null ? [] : [`%ScrMapRc = type { ${emitter.sizeType}, i8, i8, i8 }`]),
|
|
391
544
|
// The complete ScrMap and its entries, read by the inline number-key
|
|
392
|
-
// lookup (sc_map_entry_f64)
|
|
393
|
-
// (sc_map_iter_entry, sc_map_iter_entry_num)
|
|
545
|
+
// lookup (sc_map_entry_f64), the inline iteration steps
|
|
546
|
+
// (sc_map_iter_entry, sc_map_iter_entry_num) and Map.size
|
|
547
|
+
// (sc_map_size): field 8 is the i32 entry count, field 9 the i32 live
|
|
394
548
|
// count, field 10 the i64 absent-key filter, entries is field 11,
|
|
395
549
|
// nbuckets and buckets fields 13 and 14, the direct index and its i32
|
|
396
550
|
// length fields 15 and 16.
|
|
397
551
|
...(emitter.decls.has(NUMBER_MAP_ENTRY_DECL) ||
|
|
398
552
|
emitter.decls.has(STRING_MAP_ENTRY_DECL) ||
|
|
553
|
+
emitter.decls.has(STRING_MAP_ENTRY_C_DECL) ||
|
|
399
554
|
emitter.decls.has(MAP_ITER_DECL) ||
|
|
400
|
-
emitter.decls.has(MAP_ITER_NUM_DECL)
|
|
555
|
+
emitter.decls.has(MAP_ITER_NUM_DECL) ||
|
|
556
|
+
emitter.decls.has(MAP_SIZE_DECL)
|
|
401
557
|
? [
|
|
402
558
|
`%ScrMapIx = type { ${emitter.sizeType}, i8, i8, i8, i8, i32, ptr, ptr, i32, i32, i64, ptr, i32, i32, ptr, ptr, i32, i32 }`,
|
|
403
559
|
]
|
|
@@ -412,6 +568,11 @@ export function emitModuleParts(emitter) {
|
|
|
412
568
|
emitter.decls.has(MAP_ITER_NUM_DECL)
|
|
413
569
|
? [`%ScrMapEntry = type { i64, i64, i64 }`, `%ScrMapNumEntry = type { i64, i64 }`]
|
|
414
570
|
: []),
|
|
571
|
+
// A compact-value map's { key, hash, val } entry (scr_map.h ScrMapCEntry):
|
|
572
|
+
// a 32-bit hash and the value as an address over 8.
|
|
573
|
+
...(emitter.decls.has(STRING_MAP_ENTRY_C_DECL)
|
|
574
|
+
? [`%ScrMapCEntry = type { i64, i32, i32 }`]
|
|
575
|
+
: []),
|
|
415
576
|
// The runtime error prefix { rc, vt, name, message, code, cause } and the
|
|
416
577
|
// class-object shape { rc, pre, post, ctor, name } — field reads on
|
|
417
578
|
// builtin errors and classval loads GEP through these.
|
|
@@ -475,7 +636,7 @@ export function emitModuleParts(emitter) {
|
|
|
475
636
|
const tl = emitter.mod.workers === true || emitter.mod.lib?.threadInstances === true
|
|
476
637
|
? "thread_local "
|
|
477
638
|
: "";
|
|
478
|
-
out.push(``, `@scr_error_vts = external ${tl}global [${RUNTIME_ERROR_CLASSES.size} x %ScrVt]`, `declare void @scr_init()`, ...(emitter.
|
|
639
|
+
out.push(``, `@scr_error_vts = external ${tl}global [${RUNTIME_ERROR_CLASSES.size} x %ScrVt]`, `declare void @scr_init()`, ...(emitter.compactRegion ? [`declare void @scr_plr_init()`] : []), `declare void @scr_lib_init(i32, ptr)`, ...(emitter.mod.workers ? [`declare void @scr_runtime_workers_v8()`] : []), ...(emitter.stackChecks?.size ? [`declare void @scr_stack_guard_init()`] : []), ...(emitter.runtimeAbiMarker && emitter.mod.lib === undefined
|
|
479
640
|
? [`declare void @${RUNTIME_ABI_MARKER}()`]
|
|
480
641
|
: []),
|
|
481
642
|
// Overrides the runtime's weak default (scr_lib.c).
|
|
@@ -593,19 +754,17 @@ export function emitModuleParts(emitter) {
|
|
|
593
754
|
out.push(...code.lines, ``);
|
|
594
755
|
for (const [, inst] of emitter.templateStringsInstances) {
|
|
595
756
|
// One immortal ScrArr per tagged-template site: a data global of
|
|
596
|
-
// interned cooked-string literals
|
|
597
|
-
//
|
|
598
|
-
//
|
|
599
|
-
//
|
|
600
|
-
//
|
|
601
|
-
//
|
|
602
|
-
// half, so the states start where the runtime looks for them.
|
|
757
|
+
// interned cooked-string literals, and the ScrArr header over it
|
|
758
|
+
// (rc == SIZE_MAX, len == cap == filled, SCR_ELEM_STR = 2, no REF entry
|
|
759
|
+
// points, no state bytes: every dense slot is present). Reads retain
|
|
760
|
+
// immortal strings — a no-op. Slots are 8 bytes on every target: on
|
|
761
|
+
// 32-bit targets each holds the pointer in its low half and zero in its
|
|
762
|
+
// high half.
|
|
603
763
|
const n = inst.slots.length;
|
|
604
|
-
const present = n === 0 ? "zeroinitializer" : `[ ${inst.slots.map(() => "i8 1").join(", ")} ]`;
|
|
605
764
|
const wide = emitter.sizeType === "i64";
|
|
606
765
|
const slot = wide ? "ptr" : "<{ ptr, i32 }>";
|
|
607
766
|
const slotValue = (s) => wide ? `ptr ${s}` : `<{ ptr, i32 }> <{ ptr ${s}, i32 0 }>`;
|
|
608
|
-
out.push(`@${inst.sym}_data = internal constant
|
|
767
|
+
out.push(`@${inst.sym}_data = internal constant [${n} x ${slot}] [ ${inst.slots.map(slotValue).join(", ")} ], align 8`, `@${inst.sym} = internal global %ScrArr { ${emitter.sizeType} -1, i32 ${n}, i32 ${n}, i8 2, i8 0, i16 0, i32 ${n}, ptr @${inst.sym}_data }`);
|
|
609
768
|
}
|
|
610
769
|
if (emitter.templateStringsInstances.size > 0)
|
|
611
770
|
out.push(``);
|
|
@@ -620,6 +779,10 @@ export function emitModuleParts(emitter) {
|
|
|
620
779
|
}
|
|
621
780
|
if (emitter.mapOpsConsts.size > 0)
|
|
622
781
|
out.push(``);
|
|
782
|
+
for (const sym of emitter.methodIdSlots.values())
|
|
783
|
+
out.push(`@${sym} = internal global i32 -1`);
|
|
784
|
+
if (emitter.methodIdSlots.size > 0)
|
|
785
|
+
out.push(``);
|
|
623
786
|
for (const line of ffiCallbacks.globals)
|
|
624
787
|
out.push(line);
|
|
625
788
|
if (ffiCallbacks.globals.length > 0)
|
|
@@ -717,11 +880,7 @@ export function emitModuleParts(emitter) {
|
|
|
717
880
|
for (const line of emitter.emitLibDefs(globals, globalReleaseLines, stamps))
|
|
718
881
|
out.push(line);
|
|
719
882
|
out.push(...emitter.inlineRcTail(flushedDecls));
|
|
720
|
-
out.push(
|
|
721
|
-
if (emitter.usesCoroutines)
|
|
722
|
-
out.push(`attributes #1 = { sanitize_address presplitcoroutine }`);
|
|
723
|
-
if (hasNoInlineRecordClone)
|
|
724
|
-
out.push(`attributes #2 = { noinline sanitize_address }`);
|
|
883
|
+
out.push(...functionAttributes(emitter, hasNoInlineRecordClone));
|
|
725
884
|
out.push(``);
|
|
726
885
|
out.push(...emitter.fieldAliasMetadata());
|
|
727
886
|
if (emitter.debug !== null)
|
|
@@ -731,7 +890,7 @@ export function emitModuleParts(emitter) {
|
|
|
731
890
|
out.push(`define i32 @${emitter.mod.workers ? "sc_context_entry" : emitter.wasi ? "__main_argc_argv" : "main"}(i32 %argc, ptr %argv) ${FN_ATTRS} {`, `entry:`, ...(emitter.runtimeAbiMarker ? [` call void @${RUNTIME_ABI_MARKER}()`] : []), ...(emitter.mod.workers ? [` call void @scr_runtime_workers_v8()`] : []), ` call void @scr_init()`,
|
|
732
891
|
// Compressed fields hold addresses in the program-lifetime region, which
|
|
733
892
|
// is reserved below 32 GiB before compiled code runs.
|
|
734
|
-
...(emitter.
|
|
893
|
+
...(emitter.compactRegion ? [` call void @scr_plr_init()`] : []),
|
|
735
894
|
// Each context (the main thread, every worker) installs its stack
|
|
736
895
|
// guard before running compiled code that checks it.
|
|
737
896
|
...(emitter.stackChecks?.size ? [` call void @scr_stack_guard_init()`] : []), ...stamps,
|
|
@@ -844,7 +1003,7 @@ export function emitModuleParts(emitter) {
|
|
|
844
1003
|
// sanitize_address is inert under the plain pipeline; the sanitized
|
|
845
1004
|
// lane's -fsanitize=address link activates instrumentation over the
|
|
846
1005
|
// emitted functions too (the runtime TUs get theirs from clang).
|
|
847
|
-
|
|
1006
|
+
...functionAttributes(emitter, hasNoInlineRecordClone), ``);
|
|
848
1007
|
if (emitter.mod.workers) {
|
|
849
1008
|
out.push(`declare void @scr_context_cleanup()`, `declare i32 @scr_worker_argc()`, `declare ptr @scr_worker_argv()`, `define i32 @sc_worker_entry(i32 %root) ${FN_ATTRS} {`, `entry:`, ` %argc = call i32 @scr_worker_argc()`, ` %argv = call ptr @scr_worker_argv()`, ` %result = call i32 @sc_context_entry(i32 %argc, ptr %argv)`, ` ret i32 %result`, `}`, `define i32 @main(i32 %argc, ptr %argv) ${FN_ATTRS} {`, `entry:`, ` %result = call i32 @sc_context_entry(i32 %argc, ptr %argv)`, ` call void @scr_context_cleanup()`, ` ret i32 %result`, `}`);
|
|
850
1009
|
}
|
|
@@ -933,6 +1092,9 @@ export function helperDefs(emitter) {
|
|
|
933
1092
|
defs.push(`define internal ptr @sc_map_iter_entry_num(ptr %m, double %i) ${FN_ATTRS} {`, `entry:`, ` %np = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 8`, ` %n = load i32, ptr %np`, ` %nf = uitofp i32 %n to double`, ` %lo = fcmp oge double %i, 0.0`, ` %hi = fcmp olt double %i, %nf`, ` %in = and i1 %lo, %hi`, ` br i1 %in, label %load, label %none`, `load:`, ` %ix = fptoui double %i to ${sz}`, ` %ep = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 11`, ` %entries = load ptr, ptr %ep`, ` %e = getelementptr inbounds %ScrMapNumEntry, ptr %entries, ${sz} %ix`, ` %key = load i64, ptr %e`, ` %live = icmp ne i64 %key, ${SCR_MAP_NUM_DEAD}`, ` br i1 %live, label %yes, label %none`, `yes:`, ` ret ptr %e`, `none:`, ` ret ptr null`, `}`, ``);
|
|
934
1093
|
defs.push(`define internal double @sc_map_iter_count(ptr %m) ${FN_ATTRS} {`, `entry:`, ` %np = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 8`, ` %n = load i32, ptr %np`, ` %nf = uitofp i32 %n to double`, ` ret double %nf`, `}`, ``);
|
|
935
1094
|
}
|
|
1095
|
+
// Map.size and Set.size read the live entry count (scr_map_size).
|
|
1096
|
+
if (emitter.decls.has(MAP_SIZE_DECL))
|
|
1097
|
+
defs.push(`define internal double @sc_map_size(ptr %m) ${FN_ATTRS} {`, `entry:`, ` %np = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 9`, ` %n = load i32, ptr %np`, ` %nf = uitofp i32 %n to double`, ` ret double %nf`, `}`, ``);
|
|
936
1098
|
// String-key Map/Set lookups test the map's absent-key filter inline
|
|
937
1099
|
// (scr_map.c scr_map_filter_bits): a key whose two filter bits are not
|
|
938
1100
|
// both set is absent, so most misses on small and medium maps return
|
|
@@ -941,8 +1103,13 @@ export function helperDefs(emitter) {
|
|
|
941
1103
|
// and the filter reads its bits 44..55, which are the capacity word's
|
|
942
1104
|
// own. A key without a cached hash, and every possible hit, take the
|
|
943
1105
|
// runtime lookup.
|
|
944
|
-
|
|
945
|
-
|
|
1106
|
+
// A compact-value map's lookup (sc_map_entry_str_c) tests the same filter
|
|
1107
|
+
// and calls scr_map_entry_str_c; its iteration step (sc_map_iter_entry_c)
|
|
1108
|
+
// reads 16-byte entries and their 32-bit hash.
|
|
1109
|
+
const stringMapEntry = (helper, runtime) => [
|
|
1110
|
+
`define internal ptr @${helper}(ptr %m, ptr %k) ${FN_ATTRS} {`,
|
|
1111
|
+
`entry:`,
|
|
1112
|
+
...(emitter.sizeType === "i64"
|
|
946
1113
|
? [
|
|
947
1114
|
` %fp = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 10`,
|
|
948
1115
|
` %filter = load i64, ptr %fp`,
|
|
@@ -964,7 +1131,18 @@ export function helperDefs(emitter) {
|
|
|
964
1131
|
`absent:`,
|
|
965
1132
|
` ret ptr null`,
|
|
966
1133
|
]
|
|
967
|
-
: [` br label %slow`]),
|
|
1134
|
+
: [` br label %slow`]),
|
|
1135
|
+
`slow:`,
|
|
1136
|
+
` %r = call ptr @${runtime}(ptr %m, ptr %k)`,
|
|
1137
|
+
` ret ptr %r`,
|
|
1138
|
+
`}`,
|
|
1139
|
+
``,
|
|
1140
|
+
];
|
|
1141
|
+
if (emitter.decls.has(STRING_MAP_ENTRY_DECL))
|
|
1142
|
+
defs.push(...stringMapEntry("sc_map_entry_str", "scr_map_entry_str"));
|
|
1143
|
+
if (emitter.decls.has(STRING_MAP_ENTRY_C_DECL)) {
|
|
1144
|
+
const sz = emitter.sizeType;
|
|
1145
|
+
defs.push(...stringMapEntry("sc_map_entry_str_c", "scr_map_entry_str_c"), `define internal ptr @sc_map_iter_entry_c(ptr %m, double %i) ${FN_ATTRS} {`, `entry:`, ` %np = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 8`, ` %n = load i32, ptr %np`, ` %nf = uitofp i32 %n to double`, ` %lo = fcmp oge double %i, 0.0`, ` %hi = fcmp olt double %i, %nf`, ` %in = and i1 %lo, %hi`, ` br i1 %in, label %load, label %none`, `load:`, ` %ix = fptoui double %i to ${sz}`, ` %ep = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 11`, ` %entries = load ptr, ptr %ep`, ` %e = getelementptr inbounds %ScrMapCEntry, ptr %entries, ${sz} %ix`, ` %hp = getelementptr inbounds %ScrMapCEntry, ptr %e, i32 0, i32 1`, ` %h = load i32, ptr %hp`, ` %live = icmp ne i32 %h, 0`, ` br i1 %live, label %yes, label %none`, `yes:`, ` ret ptr %e`, `none:`, ` ret ptr null`, `}`, ``);
|
|
968
1146
|
}
|
|
969
1147
|
// String comparisons enter through small internal wrappers that LLVM
|
|
970
1148
|
// inlines at each site: interned literals and shared values compare by
|
|
@@ -1543,7 +1721,7 @@ export function emitFfiCallbackDefs(emitter) {
|
|
|
1543
1721
|
}
|
|
1544
1722
|
export function emitParts(emitter) {
|
|
1545
1723
|
const parts = [
|
|
1546
|
-
...
|
|
1724
|
+
...limitInlineReleases(emitter.emitModuleParts(), emitter.shapeHost.rcMode),
|
|
1547
1725
|
...emitter.disposeObserverGates(),
|
|
1548
1726
|
];
|
|
1549
1727
|
if (!emitter.executableTls)
|